package util

import (
	"testing"

	"github.com/stretchr/testify/require"
	"go.skia.org/infra/go/deepequal"
	"go.skia.org/infra/go/testutils/unittest"
)

type myTestType struct {
	A int
	B string
}

func TestJSONCodec(t *testing.T) {
	unittest.SmallTest(t)
	itemCodec := NewJSONCodec(&myTestType{})
	testInstance := &myTestType{5, "hello"}
	jsonBytes, err := itemCodec.Encode(testInstance)
	require.NoError(t, err)

	decodedInstance, err := itemCodec.Decode(jsonBytes)
	require.NoError(t, err)
	require.IsType(t, &myTestType{}, decodedInstance)
	require.Equal(t, testInstance, decodedInstance)

	arrCodec := NewJSONCodec([]*myTestType{})
	testArr := []*myTestType{{1, "1"}, {2, "2"}}
	jsonBytes, err = arrCodec.Encode(testArr)
	require.NoError(t, err)

	decodedArr, err := arrCodec.Decode(jsonBytes)
	require.NoError(t, err)
	require.IsType(t, []*myTestType{}, decodedArr)
	require.Equal(t, testArr, decodedArr)

	mapCodec := NewJSONCodec(map[string]map[string]int{})
	testMap := map[string]map[string]int{"hello": {"world": 55}}
	jsonBytes, err = mapCodec.Encode(testMap)
	require.NoError(t, err)
	found, err := mapCodec.Decode(jsonBytes)
	require.NoError(t, err)
	deepequal.AssertDeepEqual(t, testMap, found)
}
