@@ -56,3 +56,58 @@ func TestFormatEventPayloadPreservesInvalidJSONWithoutHighlighting(t *testing.T)
5656 assert .NotContains (t , html , `<span style="color:` )
5757 assert .Equal (t , 1 , strings .Count (html , `<pre style=` ))
5858}
59+
60+ func TestFormatEventPayloadHandlesTopLevelPayloadShapes (t * testing.T ) {
61+ tests := []struct {
62+ name string
63+ payload string
64+ wantPlain string
65+ wantHTMLContains []string
66+ wantHTMLNotContains []string
67+ }{
68+ {
69+ name : "empty payload falls back to unhighlighted block" ,
70+ payload : "" ,
71+ wantPlain : "" ,
72+ wantHTMLContains : []string {`<pre style="` , `</pre>` },
73+ wantHTMLNotContains : []string {`<span style="color:` },
74+ },
75+ {
76+ name : "top-level number stays valid JSON" ,
77+ payload : "42" ,
78+ wantPlain : "42" ,
79+ wantHTMLContains : []string {`<span style="color:#953800;">42</span>` },
80+ wantHTMLNotContains : []string {`color:#0550AE` },
81+ },
82+ {
83+ name : "json array stays readable and escaped" ,
84+ payload : `[{"message":"<b>safe</b>"},true,null,3]` ,
85+ wantPlain : "[\n {\n \" message\" : \" <b>safe</b>\" \n },\n true,\n null,\n 3\n ]" ,
86+ wantHTMLContains : []string {
87+ "[\n {" ,
88+ `"message"` ,
89+ `<b>safe</b>` ,
90+ `<span style="color:#953800;">3</span>` ,
91+ },
92+ wantHTMLNotContains : []string {`<b>safe</b>` },
93+ },
94+ }
95+
96+ for _ , tt := range tests {
97+ t .Run (tt .name , func (t * testing.T ) {
98+ plain , rich := formatEventPayload (tt .payload )
99+ html := string (rich )
100+
101+ assert .Equal (t , tt .wantPlain , plain )
102+ assert .Equal (t , 1 , strings .Count (html , `<pre style=` ))
103+
104+ for _ , want := range tt .wantHTMLContains {
105+ assert .Contains (t , html , want )
106+ }
107+
108+ for _ , unwanted := range tt .wantHTMLNotContains {
109+ assert .NotContains (t , html , unwanted )
110+ }
111+ })
112+ }
113+ }
0 commit comments