• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1package parser
2
3import (
4	"strings"
5	"testing"
6	"text/scanner"
7)
8
9var splitNTestCases = []struct {
10	in       *MakeString
11	expected []*MakeString
12	sep      string
13	n        int
14}{
15	{
16		in: &MakeString{
17			Strings: []string{
18				"a b c",
19				"d e f",
20				" h i j",
21			},
22			Variables: []Variable{
23				Variable{Name: SimpleMakeString("var1", scanner.Position{})},
24				Variable{Name: SimpleMakeString("var2", scanner.Position{})},
25			},
26		},
27		sep: " ",
28		n:   -1,
29		expected: []*MakeString{
30			SimpleMakeString("a", scanner.Position{}),
31			SimpleMakeString("b", scanner.Position{}),
32			&MakeString{
33				Strings: []string{"c", "d"},
34				Variables: []Variable{
35					Variable{Name: SimpleMakeString("var1", scanner.Position{})},
36				},
37			},
38			SimpleMakeString("e", scanner.Position{}),
39			&MakeString{
40				Strings: []string{"f", ""},
41				Variables: []Variable{
42					Variable{Name: SimpleMakeString("var2", scanner.Position{})},
43				},
44			},
45			SimpleMakeString("h", scanner.Position{}),
46			SimpleMakeString("i", scanner.Position{}),
47			SimpleMakeString("j", scanner.Position{}),
48		},
49	},
50	{
51		in: &MakeString{
52			Strings: []string{
53				"a b c",
54				"d e f",
55				" h i j",
56			},
57			Variables: []Variable{
58				Variable{Name: SimpleMakeString("var1", scanner.Position{})},
59				Variable{Name: SimpleMakeString("var2", scanner.Position{})},
60			},
61		},
62		sep: " ",
63		n:   3,
64		expected: []*MakeString{
65			SimpleMakeString("a", scanner.Position{}),
66			SimpleMakeString("b", scanner.Position{}),
67			&MakeString{
68				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{})},
72				},
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}
98