package tljson import ( "testing" "github.com/go-faster/jx" "github.com/stretchr/testify/require" "go.mau.fi/mautrix-telegram/pkg/gotd/tg" ) func TestDecodeEncodeDecode(t *testing.T) { tests := []struct { name string input string wantErr bool expect tg.JSONValueClass }{ {"Empty", "", true, nil}, {"InvalidNull", "nul", true, nil}, {"InvalidTrue", "tru", true, nil}, {"InvalidFalse", "falsy", true, nil}, {"InvalidInt", `[1a]"`, true, nil}, {"InvalidFloat", "1.", true, nil}, {"InvalidString", `"hello`, true, nil}, {"InvalidArray", "[1, 2, 3.]", true, nil}, {"InvalidObject", `{"abc":"def}`, true, nil}, {"Null", "null", false, nil}, {"True", "true", false, nil}, {"False", "false", false, nil}, {"Int", "10", false, nil}, {"Float", "1.1", false, nil}, {"String", `"hello"`, false, nil}, {"EmptyArray", "[]", false, nil}, {"Array", "[1, 2, 3]", false, nil}, {"EmptyObject", `{}`, false, nil}, {"Object", `{"abc":"def"}`, false, nil}, {"Tree", `{"a":1,"b":true,"c":null,"sub":{"abc":"def"}}`, false, nil}, } for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { a := require.New(t) // Decode. d := jx.DecodeStr(tt.input) obj, err := Decode(d) if tt.wantErr { a.Error(err) return } a.NoError(err) // Encode. e := jx.GetEncoder() Encode(obj, e) // Decode. d.ResetBytes(e.Bytes()) obj2, err := Decode(d) a.NoError(err) a.Equal(obj, obj2) }) } }