blob: 5636b79431f178284e85a87f21c14ff838af878c [file] [log] [blame]
Colin Cross3f40fa42015-01-30 17:27:36 -08001package parser
2
3import (
4 "strings"
5 "testing"
6)
7
8var splitNTestCases = []struct {
9 in *MakeString
10 expected []*MakeString
11 sep string
12 n int
13}{
14 {
15 in: &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070016 Strings: []string{
Colin Cross3f40fa42015-01-30 17:27:36 -080017 "a b c",
18 "d e f",
19 " h i j",
20 },
Dan Willemsen88b4c292015-06-23 19:45:56 -070021 Variables: []Variable{
Colin Cross08693d22016-05-25 17:25:40 -070022 Variable{Name: SimpleMakeString("var1", NoPos)},
23 Variable{Name: SimpleMakeString("var2", NoPos)},
Colin Cross3f40fa42015-01-30 17:27:36 -080024 },
25 },
26 sep: " ",
27 n: -1,
28 expected: []*MakeString{
Colin Cross08693d22016-05-25 17:25:40 -070029 SimpleMakeString("a", NoPos),
30 SimpleMakeString("b", NoPos),
Colin Cross3f40fa42015-01-30 17:27:36 -080031 &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070032 Strings: []string{"c", "d"},
33 Variables: []Variable{
Colin Cross08693d22016-05-25 17:25:40 -070034 Variable{Name: SimpleMakeString("var1", NoPos)},
Colin Cross3f40fa42015-01-30 17:27:36 -080035 },
36 },
Colin Cross08693d22016-05-25 17:25:40 -070037 SimpleMakeString("e", NoPos),
Colin Cross3f40fa42015-01-30 17:27:36 -080038 &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070039 Strings: []string{"f", ""},
40 Variables: []Variable{
Colin Cross08693d22016-05-25 17:25:40 -070041 Variable{Name: SimpleMakeString("var2", NoPos)},
Colin Cross3f40fa42015-01-30 17:27:36 -080042 },
43 },
Colin Cross08693d22016-05-25 17:25:40 -070044 SimpleMakeString("h", NoPos),
45 SimpleMakeString("i", NoPos),
46 SimpleMakeString("j", NoPos),
Colin Cross3f40fa42015-01-30 17:27:36 -080047 },
48 },
49 {
50 in: &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070051 Strings: []string{
Colin Cross3f40fa42015-01-30 17:27:36 -080052 "a b c",
53 "d e f",
54 " h i j",
55 },
Dan Willemsen88b4c292015-06-23 19:45:56 -070056 Variables: []Variable{
Colin Cross08693d22016-05-25 17:25:40 -070057 Variable{Name: SimpleMakeString("var1", NoPos)},
58 Variable{Name: SimpleMakeString("var2", NoPos)},
Colin Cross3f40fa42015-01-30 17:27:36 -080059 },
60 },
61 sep: " ",
62 n: 3,
63 expected: []*MakeString{
Colin Cross08693d22016-05-25 17:25:40 -070064 SimpleMakeString("a", NoPos),
65 SimpleMakeString("b", NoPos),
Colin Cross3f40fa42015-01-30 17:27:36 -080066 &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070067 Strings: []string{"c", "d e f", " h i j"},
68 Variables: []Variable{
Colin Cross08693d22016-05-25 17:25:40 -070069 Variable{Name: SimpleMakeString("var1", NoPos)},
70 Variable{Name: SimpleMakeString("var2", NoPos)},
Colin Cross3f40fa42015-01-30 17:27:36 -080071 },
72 },
73 },
74 },
75}
76
77func TestMakeStringSplitN(t *testing.T) {
78 for _, test := range splitNTestCases {
79 got := test.in.SplitN(test.sep, test.n)
80 gotString := dumpArray(got)
81 expectedString := dumpArray(test.expected)
82 if gotString != expectedString {
83 t.Errorf("expected:\n%s\ngot:\n%s", expectedString, gotString)
84 }
85 }
86}
87
88func dumpArray(a []*MakeString) string {
89 ret := make([]string, len(a))
90
91 for i, s := range a {
92 ret[i] = s.Dump()
93 }
94
95 return strings.Join(ret, "|||")
96}