blob: cc3fd0a860a69975107c44f8f17412fb5e7f5e5a [file] [log] [blame]
Colin Cross3f40fa42015-01-30 17:27:36 -08001package parser
2
3import (
4 "strings"
5 "testing"
Dan Willemsen88b4c292015-06-23 19:45:56 -07006 "text/scanner"
Colin Cross3f40fa42015-01-30 17:27:36 -08007)
8
9var splitNTestCases = []struct {
10 in *MakeString
11 expected []*MakeString
12 sep string
13 n int
14}{
15 {
16 in: &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070017 Strings: []string{
Colin Cross3f40fa42015-01-30 17:27:36 -080018 "a b c",
19 "d e f",
20 " h i j",
21 },
Dan Willemsen88b4c292015-06-23 19:45:56 -070022 Variables: []Variable{
23 Variable{Name: SimpleMakeString("var1", scanner.Position{})},
24 Variable{Name: SimpleMakeString("var2", scanner.Position{})},
Colin Cross3f40fa42015-01-30 17:27:36 -080025 },
26 },
27 sep: " ",
28 n: -1,
29 expected: []*MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070030 SimpleMakeString("a", scanner.Position{}),
31 SimpleMakeString("b", scanner.Position{}),
Colin Cross3f40fa42015-01-30 17:27:36 -080032 &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070033 Strings: []string{"c", "d"},
34 Variables: []Variable{
35 Variable{Name: SimpleMakeString("var1", scanner.Position{})},
Colin Cross3f40fa42015-01-30 17:27:36 -080036 },
37 },
Dan Willemsen88b4c292015-06-23 19:45:56 -070038 SimpleMakeString("e", scanner.Position{}),
Colin Cross3f40fa42015-01-30 17:27:36 -080039 &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070040 Strings: []string{"f", ""},
41 Variables: []Variable{
42 Variable{Name: SimpleMakeString("var2", scanner.Position{})},
Colin Cross3f40fa42015-01-30 17:27:36 -080043 },
44 },
Dan Willemsen88b4c292015-06-23 19:45:56 -070045 SimpleMakeString("h", scanner.Position{}),
46 SimpleMakeString("i", scanner.Position{}),
47 SimpleMakeString("j", scanner.Position{}),
Colin Cross3f40fa42015-01-30 17:27:36 -080048 },
49 },
50 {
51 in: &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070052 Strings: []string{
Colin Cross3f40fa42015-01-30 17:27:36 -080053 "a b c",
54 "d e f",
55 " h i j",
56 },
Dan Willemsen88b4c292015-06-23 19:45:56 -070057 Variables: []Variable{
58 Variable{Name: SimpleMakeString("var1", scanner.Position{})},
59 Variable{Name: SimpleMakeString("var2", scanner.Position{})},
Colin Cross3f40fa42015-01-30 17:27:36 -080060 },
61 },
62 sep: " ",
63 n: 3,
64 expected: []*MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070065 SimpleMakeString("a", scanner.Position{}),
66 SimpleMakeString("b", scanner.Position{}),
Colin Cross3f40fa42015-01-30 17:27:36 -080067 &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070068 Strings: []string{"c", "d e f", " h i j"},
69 Variables: []Variable{
70 Variable{Name: SimpleMakeString("var1", scanner.Position{})},
71 Variable{Name: SimpleMakeString("var2", scanner.Position{})},
Colin Cross3f40fa42015-01-30 17:27:36 -080072 },
73 },
74 },
75 },
76}
77
78func TestMakeStringSplitN(t *testing.T) {
79 for _, test := range splitNTestCases {
80 got := test.in.SplitN(test.sep, test.n)
81 gotString := dumpArray(got)
82 expectedString := dumpArray(test.expected)
83 if gotString != expectedString {
84 t.Errorf("expected:\n%s\ngot:\n%s", expectedString, gotString)
85 }
86 }
87}
88
89func dumpArray(a []*MakeString) string {
90 ret := make([]string, len(a))
91
92 for i, s := range a {
93 ret[i] = s.Dump()
94 }
95
96 return strings.Join(ret, "|||")
97}