package tools import ( "bytes" "encoding/json" "errors" "testing" "time" "github.com/stretchr/testify/assert" ) func TestWriteBuffer(t *testing.T) { when := time.Now() tests := []struct { name string value any out string err error }{ {"nil", nil, "", nil}, {"string", "hi", "hi", nil}, {"bytes", []byte{104, 105}, "hi", nil}, {"byte", byte(104), "h", nil}, {"rune", 'h', "h", nil}, {"int", 42, "42", nil}, {"int64", int64(42), "42", nil}, {"float", 42.13, "42.13", nil}, {"bool", false, "false", nil}, {"json.Number", json.Number("42.13"), "42.13", nil}, {"json.RawMessage", json.RawMessage("{}"), "{}", nil}, {"time", when, when.Format(time.RFC3339), nil}, {"slice", []any{1, 2, "foo"}, `[1,2,"foo"]`, nil}, {"map", map[string]any{"baz": 42, "foo": "bar"}, `{"baz":42,"foo":"bar"}`, nil}, {"struct", struct{}{}, "", errors.New("Unsupported type struct {}")}, } for _, tt := range tests { t.Run(tt.name, getWriteTestRunner(tt.value, tt.out, tt.err)) } } func getWriteTestRunner(value any, out string, err error) func(*testing.T) { return func(t *testing.T) { buff := &bytes.Buffer{} n, er := WriteValue(buff, value) assert.Equal(t, len(out), n) assert.Equal(t, err, er) assert.Equal(t, out, buff.String()) } }