-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathframer_test.go
92 lines (89 loc) · 3.15 KB
/
framer_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
package csvframer_test
import (
"strings"
"testing"
"github.com/grafana/grafana-plugin-sdk-go/experimental"
"github.com/grafana/infinity-libs/lib/go/csvframer"
"github.com/grafana/infinity-libs/lib/go/gframer"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestCsvStringToFrame(t *testing.T) {
tests := []struct {
name string
csvString string
options csvframer.FramerOptions
wantError error
}{
{
name: "empty csv should return error",
wantError: csvframer.ErrEmptyCsv,
},
{
name: "valid csv should not return error",
csvString: strings.Join([]string{`a,b,c`, `1,2,3`, `11,12,13`, `21,22,23`}, "\n"),
},
{
name: "valid csv without headers should not return error",
csvString: strings.Join([]string{`1,2,3`, `11,12,13`, `21,22,23`}, "\n"),
options: csvframer.FramerOptions{NoHeaders: true},
},
{
name: "framer options should be respected",
csvString: strings.Join([]string{`a b c`, `1 2 3`, `11 12 13`, `21 22 23`}, "\n"),
options: csvframer.FramerOptions{FrameName: "foo", Delimiter: "\t", RelaxColumnCount: true, Columns: []gframer.ColumnSelector{
{Selector: "a", Alias: "A", Type: "number"},
{Selector: "b", Alias: "b", Type: "string"},
{Selector: "c", Type: "timestamp_epoch"},
}},
},
{
name: "relax column count",
csvString: strings.Join([]string{`a b c`, `1 2 3`, `11 12`, `21 22 23`}, "\n"),
options: csvframer.FramerOptions{FrameName: "foo", Delimiter: "\t", SkipLinesWithError: true, Columns: []gframer.ColumnSelector{
{Selector: "a", Alias: "A", Type: "number"},
{Selector: "b", Alias: "b", Type: "string"},
{Selector: "c", Type: "timestamp_epoch"},
}},
},
{
name: "Skip empty lines",
csvString: strings.Join([]string{`a b c`, `1 2 3`, ``, `21 22 23`}, "\n"),
options: csvframer.FramerOptions{FrameName: "foo", Delimiter: "\t", Columns: []gframer.ColumnSelector{
{Selector: "a", Alias: "A", Type: "number"},
{Selector: "b", Alias: "b", Type: "string"},
{Selector: "c", Type: "timestamp_epoch_s"},
}},
},
{
name: "relax column count",
csvString: strings.Join([]string{`a;b;c`, `1;2;3`, `11;13`, `21;22;23`}, "\n"),
options: csvframer.FramerOptions{FrameName: "foo", Delimiter: ";", RelaxColumnCount: true, Columns: []gframer.ColumnSelector{
{Selector: "a", Alias: "A", Type: "number"},
{Selector: "b", Alias: "b", Type: "string"},
{Selector: "c", Type: "string"},
}},
},
{
name: "comment",
csvString: strings.Join([]string{`# foo`, `a,b,c`, `#01,02,03`, `1,2,3`, `11,12,13`, `21,22,23`, `#`}, "\n"),
options: csvframer.FramerOptions{Comment: "#"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotFrame, err := csvframer.ToFrame(tt.csvString, tt.options)
if tt.wantError != nil {
require.NotNil(t, err)
assert.Equal(t, tt.wantError, err)
return
}
require.Nil(t, err)
require.NotNil(t, gotFrame)
if tt.wantError == nil {
goldenFileName := strings.Replace(t.Name(), "TestCsvStringToFrame/", "", 1)
experimental.CheckGoldenJSONFrame(t, "testdata", goldenFileName, gotFrame, false)
}
})
}
}