github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/p/demo/json/indent_test.gno (about)

     1  package json
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  )
     7  
     8  func 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  }