test(utils): add unit tests for FormatArgsJSON

Add tests for FormatArgsJSON covering:
- Default compact JSON output
- Pretty print formatting
- HTML escape disabling (preserves &&, <, >)
- Combined pretty print and escape disable
- Default HTML escaping behavior
- Nil args handling
This commit is contained in:
David Siewert
2026-04-25 21:14:06 +06:00
parent bcc3d447a1
commit fc89fea319
+99 -1
View File
@@ -1,6 +1,9 @@
package utils
import "testing"
import (
"encoding/json"
"testing"
)
func TestFormatToolFeedbackMessage(t *testing.T) {
got := FormatToolFeedbackMessage(
@@ -56,3 +59,98 @@ func TestFitToolFeedbackMessage_TruncatesSingleLineMessage(t *testing.T) {
t.Fatalf("FitToolFeedbackMessage() = %q, want %q", got, want)
}
}
func TestFormatArgsJSON_Defaults(t *testing.T) {
args := map[string]any{"path": "README.md", "line": 42}
got := FormatArgsJSON(args, false, false)
var gotVal, wantVal any
if err := json.Unmarshal([]byte(got), &gotVal); err != nil {
t.Fatalf("FormatArgsJSON() returned invalid JSON: %v", err)
}
want := `{"path":"README.md","line":42}`
if err := json.Unmarshal([]byte(want), &wantVal); err != nil {
t.Fatalf("invalid test want JSON: %v", err)
}
if !jsonValEq(gotVal, wantVal) {
t.Fatalf("FormatArgsJSON() = %q, want %q", got, want)
}
}
func TestFormatArgsJSON_PrettyPrint(t *testing.T) {
args := map[string]any{"path": "README.md", "line": 42}
got := FormatArgsJSON(args, true, false)
var gotVal any
if err := json.Unmarshal([]byte(got), &gotVal); err != nil {
t.Fatalf("FormatArgsJSON() returned invalid JSON: %v", err)
}
want := `{"path":"README.md","line":42}`
var wantVal any
if err := json.Unmarshal([]byte(want), &wantVal); err != nil {
t.Fatalf("invalid test want JSON: %v", err)
}
if !jsonValEq(gotVal, wantVal) {
t.Fatalf("FormatArgsJSON() prettyPrint = %q, want structure %q", got, want)
}
}
func TestFormatArgsJSON_DisableEscapeHTML(t *testing.T) {
args := map[string]any{"msg": "a < b && c > d"}
got := FormatArgsJSON(args, false, true)
var gotVal, wantVal any
want := `{"msg":"a < b && c > d"}`
if err := json.Unmarshal([]byte(got), &gotVal); err != nil {
t.Fatalf("FormatArgsJSON() returned invalid JSON: %v", err)
}
if err := json.Unmarshal([]byte(want), &wantVal); err != nil {
t.Fatalf("invalid test want JSON: %v", err)
}
if !jsonValEq(gotVal, wantVal) {
t.Fatalf("FormatArgsJSON() disableEscapeHTML = %q, want %q", got, want)
}
}
func TestFormatArgsJSON_PrettyPrintAndDisableEscapeHTML(t *testing.T) {
args := map[string]any{"msg": "a < b && c > d"}
got := FormatArgsJSON(args, true, true)
var gotVal, wantVal any
want := `{"msg":"a < b && c > d"}`
if err := json.Unmarshal([]byte(got), &gotVal); err != nil {
t.Fatalf("FormatArgsJSON() returned invalid JSON: %v", err)
}
if err := json.Unmarshal([]byte(want), &wantVal); err != nil {
t.Fatalf("invalid test want JSON: %v", err)
}
if !jsonValEq(gotVal, wantVal) {
t.Fatalf("FormatArgsJSON() combined = %q, want %q", got, want)
}
}
func TestFormatArgsJSON_EscapeHTMLByDefault(t *testing.T) {
args := map[string]any{"msg": "a < b && c > d"}
got := FormatArgsJSON(args, false, false)
var gotVal, wantVal any
want := `{"msg":"a \u003c b \u0026\u0026 c \u003e d"}`
if err := json.Unmarshal([]byte(got), &gotVal); err != nil {
t.Fatalf("FormatArgsJSON() returned invalid JSON: %v", err)
}
if err := json.Unmarshal([]byte(want), &wantVal); err != nil {
t.Fatalf("invalid test want JSON: %v", err)
}
if !jsonValEq(gotVal, wantVal) {
t.Fatalf("FormatArgsJSON() default escape = %q, want %q", got, want)
}
}
func TestFormatArgsJSON_NilArgs(t *testing.T) {
got := FormatArgsJSON(nil, false, false)
want := `null`
if got != want {
t.Fatalf("FormatArgsJSON() nil = %q, want %q", got, want)
}
}
func jsonValEq(a, b any) bool {
aJSON, _ := json.Marshal(a)
bJSON, _ := json.Marshal(b)
return string(aJSON) == string(bJSON)
}