-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrsl_test.go
109 lines (99 loc) · 2.47 KB
/
rsl_test.go
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package main
import (
"bytes"
"fmt"
"io"
"strings"
"testing"
"github.com/carlmjohnson/be"
"go.senan.xyz/rsl/csv"
"go.senan.xyz/rsl/js"
"go.senan.xyz/rsl/json"
"go.senan.xyz/rsl/toml"
"go.senan.xyz/rsl/yaml"
)
func TestEncodeMatrix(t *testing.T) {
formats := []Format{
csv.New(),
json.New(),
toml.New(),
yaml.New(),
}
data := []any{
1,
1.0,
"",
true,
[]any{1},
[]float64{1.0},
[]string{""},
[]bool{true},
map[string]string{"a": "one", "b": "two"},
[]string{"one", "two"},
map[string]any{"a": "one", "b": 2},
map[string]map[string]int{"a": {"a": 1}, "b": {"b": 3}},
}
for _, d := range data {
for _, f := range formats {
t.Run(fmt.Sprintf("%T %T", f, d), func(t *testing.T) {
be.NilErr(t, f.Encode(io.Discard, d))
})
}
}
}
func TestJSONCSV(t *testing.T) {
js := js.New()
json := json.New()
csv := csv.New()
testLine(t,
json, []string{`1`},
csv, []string{"result", "1"},
)
testLine(t,
json, []string{`"one"`},
csv, []string{"result", "one"},
)
testLine(t,
json, []string{`[1, "two", 3]`},
csv, []string{"result", "1", "two", "3"},
)
testLine(t,
json, []string{`[[1, 2, 3]]`},
csv, []string{"a,b,c", "1,2,3"},
)
testLine(t,
json, []string{`[[1, 2, 3], [10, 20, 30]]`},
csv, []string{"a,b,c", "1,2,3", "10,20,30"},
)
testLine(t,
json, []string{`[{"age": 69, "name": "joe"}, {"age": 100, "name": "mick"}]`},
csv, []string{"age,name", "69,joe", "100,mick"},
)
testLine(t,
js, []string{`[{age: 69, name: "joe"}, {age: 100, name: "mick"}]`},
csv, []string{"age,name", "69,joe", "100,mick"},
)
testLine(t,
js, []string{`[{age: 69, name: {first: "joe", last: "davis"}}, {age: 100, name: {first: "mick", last: "jones"}}]`},
csv, []string{"age,name", "69,map[first:joe last:davis]", "100,map[first:mick last:jones]"},
)
}
func TestYAMLJSONNullKey(t *testing.T) {
yaml := yaml.New()
json := json.New()
testLine(t,
yaml, []string{`men: [John Smith, Bill Jones]`, `women:`, ` - Mary Smith`, ` - Susan Williams`},
json, []string{`{"men":["John Smith","Bill Jones"],"women":["Mary Smith","Susan Williams"]}`},
)
}
func testLine(t *testing.T, inFormat Format, in []string, outFormat Format, out []string) {
v, err := inFormat.Decode(bytes.NewReader([]byte(strings.Join(in, "\n"))))
be.NilErr(t, err)
var buff bytes.Buffer
be.NilErr(t, outFormat.Encode(&buff, v))
for _, exp := range out {
got, err := buff.ReadString('\n')
be.NilErr(t, err)
be.Equal(t, strings.TrimSpace(exp), strings.TrimSpace(got))
}
}