pgx/pgtype/json_test.go

57 lines
1.5 KiB
Go

package pgtype_test
import (
"testing"
"github.com/jackc/pgx/v5/pgtype/testutil"
)
func isExpectedEqMap(a interface{}) func(interface{}) bool {
return func(v interface{}) bool {
aa := a.(map[string]interface{})
bb := v.(map[string]interface{})
if (aa == nil) != (bb == nil) {
return false
}
if aa == nil {
return true
}
if len(aa) != len(bb) {
return false
}
for k := range aa {
if aa[k] != bb[k] {
return false
}
}
return true
}
}
func TestJSONCodec(t *testing.T) {
type jsonStruct struct {
Name string `json:"name"`
Age int `json:"age"`
}
testutil.RunTranscodeTests(t, "json", []testutil.TranscodeTestCase{
{[]byte("{}"), new([]byte), isExpectedEqBytes([]byte("{}"))},
{[]byte("null"), new([]byte), isExpectedEqBytes([]byte("null"))},
{[]byte("42"), new([]byte), isExpectedEqBytes([]byte("42"))},
{[]byte(`"hello"`), new([]byte), isExpectedEqBytes([]byte(`"hello"`))},
{[]byte(`"hello"`), new(string), isExpectedEq(`"hello"`)},
{map[string]interface{}{"foo": "bar"}, new(map[string]interface{}), isExpectedEqMap(map[string]interface{}{"foo": "bar"})},
{jsonStruct{Name: "Adam", Age: 10}, new(jsonStruct), isExpectedEq(jsonStruct{Name: "Adam", Age: 10})},
{nil, new(*jsonStruct), isExpectedEq((*jsonStruct)(nil))},
{map[string]interface{}(nil), new(string), isExpectedEq(`null`)},
{map[string]interface{}(nil), new([]byte), isExpectedEqBytes([]byte("null"))},
{[]byte(nil), new([]byte), isExpectedEqBytes([]byte(nil))},
{nil, new([]byte), isExpectedEqBytes([]byte(nil))},
})
}