♻️ Add tools.WriteValue

This commit is contained in:
Dan Jones 2024-03-03 13:56:48 -06:00
commit 286ac4557d
4 changed files with 97 additions and 31 deletions

View file

@ -0,0 +1,49 @@
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},
{"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())
}
}