-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstruct_test.go
More file actions
111 lines (108 loc) · 2.25 KB
/
Copy pathstruct_test.go
File metadata and controls
111 lines (108 loc) · 2.25 KB
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
110
111
package table
import (
"fmt"
"testing"
)
func TestBufferToStruct(t *testing.T) {
type runner func(buf *Buffer) (any, error)
list := []struct {
Name string
Columns []string
Data [][]any
Want string
Error string
Run runner
}{
{
Name: "simple",
Columns: []string{"ID", "Name"},
Data: [][]any{
{int64(1), "R1"},
{int64(2), "R2"},
},
Want: `[]table.S{table.S{ID:1, Name:"R1"}, table.S{ID:2, Name:"R2"}}`,
Run: func(buf *Buffer) (any, error) {
type S struct {
ID int64
Name string
}
return BufferToStruct[S](buf)
},
},
{
// Extra buffer columns are allowed.
Name: "extra-buffer",
Columns: []string{"ID", "Name", "Name2"},
Data: [][]any{
{int64(1), "R1", "X1"},
{int64(2), "R2", "X2"},
},
Want: `[]table.S{table.S{ID:1, Name:"R1"}, table.S{ID:2, Name:"R2"}}`,
Run: func(buf *Buffer) (any, error) {
type S struct {
ID int64
Name string
}
return BufferToStruct[S](buf)
},
},
{
// Extra struct fields are disallowed.
Name: "extra-struct",
Columns: []string{"ID", "Name"},
Data: [][]any{
{int64(1), "R1"},
{int64(2), "R2"},
},
Error: `unused fields in struct ["Age"]`,
Run: func(buf *Buffer) (any, error) {
type S struct {
ID int64
Name string
Age int32
}
return BufferToStruct[S](buf)
},
},
{
// Extra struct fields are okay if ignored.
Name: "extra-struct-okay",
Columns: []string{"ID", "Name"},
Data: [][]any{
{int64(1), "R1"},
{int64(2), "R2"},
},
Error: `unused fields in struct ["Age"]`,
Run: func(buf *Buffer) (any, error) {
type S struct {
ID int64
Name string
Age int32 `sql:"-"`
}
return BufferToStruct[S](buf)
},
},
}
for _, item := range list {
t.Run(item.Name, func(t *testing.T) {
b := &Buffer{
Columns: item.Columns,
}
for _, dr := range item.Data {
b.AddRow(dr)
}
v, err := item.Run(b)
var errs string
if err != nil {
errs = err.Error()
}
if g, w := errs, item.Error; g != w {
t.Fatalf("expected error: %s, got error: %s", w, g)
}
got := fmt.Sprintf("%#v", v)
if item.Want != got {
t.Fatalf("got:\n%s\n\nwant:%s\n", got, item.Want)
}
})
}
}