indent_test.gno
2.14 Kb ยท 84 lines
1package json
2
3import (
4 "bytes"
5 "testing"
6)
7
8func TestIndentJSON(t *testing.T) {
9 tests := []struct {
10 name string
11 input []byte
12 indent string
13 expected []byte
14 }{
15 {
16 name: "empty object",
17 input: []byte(`{}`),
18 indent: " ",
19 expected: []byte(`{}`),
20 },
21 {
22 name: "empty array",
23 input: []byte(`[]`),
24 indent: " ",
25 expected: []byte(`[]`),
26 },
27 {
28 name: "nested object",
29 input: []byte(`{{}}`),
30 indent: "\t",
31 expected: []byte("{\n\t\t{}\n}"),
32 },
33 {
34 name: "nested array",
35 input: []byte(`[[[]]]`),
36 indent: "\t",
37 expected: []byte("[[\n\t\t[\n\t\t\t\t\n\t\t]\n]]"),
38 },
39 {
40 name: "top-level array",
41 input: []byte(`["apple","banana","cherry"]`),
42 indent: "\t",
43 expected: []byte(`["apple","banana","cherry"]`),
44 },
45 {
46 name: "array of arrays",
47 input: []byte(`["apple",["banana","cherry"],"date"]`),
48 indent: " ",
49 expected: []byte("[\"apple\",[\n \"banana\",\n \"cherry\"\n],\"date\"]"),
50 },
51
52 {
53 name: "nested array in object",
54 input: []byte(`{"fruits":["apple",["banana","cherry"],"date"]}`),
55 indent: " ",
56 expected: []byte("{\n \"fruits\": [\"apple\",[\n \"banana\",\n \"cherry\"\n ],\"date\"]\n}"),
57 },
58 {
59 name: "complex nested structure",
60 input: []byte(`{"data":{"array":[1,2,3],"bool":true,"nestedArray":[["a","b"],"c"]}}`),
61 indent: " ",
62 expected: []byte("{\n \"data\": {\n \"array\": [1,2,3],\"bool\": true,\"nestedArray\": [[\n \"a\",\n \"b\"\n ],\"c\"]\n }\n}"),
63 },
64 {
65 name: "custom ident character",
66 input: []byte(`{"fruits":["apple",["banana","cherry"],"date"]}`),
67 indent: "*",
68 expected: []byte("{\n**\"fruits\": [\"apple\",[\n****\"banana\",\n****\"cherry\"\n**],\"date\"]\n}"),
69 },
70 }
71
72 for _, tt := range tests {
73 t.Run(tt.name, func(t *testing.T) {
74 actual, err := Indent(tt.input, tt.indent)
75 if err != nil {
76 t.Errorf("IndentJSON() error = %v", err)
77 return
78 }
79 if !bytes.Equal(actual, tt.expected) {
80 t.Errorf("IndentJSON() = %q, want %q", actual, tt.expected)
81 }
82 })
83 }
84}