1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
package json
import (
"fmt"
"io"
"reflect"
"testing"
)
func TestReader(t *testing.T) {
r := Reader(map[string]int{
"foo": 2,
})
bts, err := io.ReadAll(r)
if err != nil {
t.Fatal(err)
}
if string(bts) != `{"foo":2}` {
t.Fatalf("wrong json: %s", string(bts))
}
}
func TestFrom(t *testing.T) {
in := map[string]int{"foo": 10, "bar": 20}
m, err := From(Reader(in), map[string]int{})
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
if !reflect.DeepEqual(m, in) {
t.Fatalf("maps should be equal: %v vs %v", in, m)
}
}
func TestErrReader(t *testing.T) {
err := fmt.Errorf("foo")
_, err2 := io.ReadAll(&ErrorReader{err})
if err != err2 {
t.Fatalf("expected same error")
}
}
func TestIsValid(t *testing.T) {
tests := []struct {
name string
data any
want bool
}{
{
name: "empty string",
data: "",
want: false,
},
{
name: "empty bytes",
data: []byte(""),
want: false,
},
{
name: "valid json string",
data: `{"foo": 2}`,
want: true,
},
{
name: "valid json bytes",
data: []byte(`{"foo": 2}`),
want: true,
},
{
name: "invalid json string",
data: `{"foo": 2`,
want: false,
},
{
name: "invalid json bytes",
data: []byte(`{"foo": 2`),
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var got bool
switch v := tt.data.(type) {
case string:
got = IsValid(v)
case []byte:
got = IsValid(v)
default:
t.Fatalf("unsupported type: %T", tt.data)
}
if got != tt.want {
t.Errorf("IsValid() = %v, want %v", got, tt.want)
}
})
}
}
|