| package parser |
| |
| import ( |
| "strings" |
| "testing" |
| "text/scanner" |
| ) |
| |
| var splitNTestCases = []struct { |
| in *MakeString |
| expected []*MakeString |
| sep string |
| n int |
| }{ |
| { |
| in: &MakeString{ |
| Strings: []string{ |
| "a b c", |
| "d e f", |
| " h i j", |
| }, |
| Variables: []Variable{ |
| Variable{Name: SimpleMakeString("var1", scanner.Position{})}, |
| Variable{Name: SimpleMakeString("var2", scanner.Position{})}, |
| }, |
| }, |
| sep: " ", |
| n: -1, |
| expected: []*MakeString{ |
| SimpleMakeString("a", scanner.Position{}), |
| SimpleMakeString("b", scanner.Position{}), |
| &MakeString{ |
| Strings: []string{"c", "d"}, |
| Variables: []Variable{ |
| Variable{Name: SimpleMakeString("var1", scanner.Position{})}, |
| }, |
| }, |
| SimpleMakeString("e", scanner.Position{}), |
| &MakeString{ |
| Strings: []string{"f", ""}, |
| Variables: []Variable{ |
| Variable{Name: SimpleMakeString("var2", scanner.Position{})}, |
| }, |
| }, |
| SimpleMakeString("h", scanner.Position{}), |
| SimpleMakeString("i", scanner.Position{}), |
| SimpleMakeString("j", scanner.Position{}), |
| }, |
| }, |
| { |
| in: &MakeString{ |
| Strings: []string{ |
| "a b c", |
| "d e f", |
| " h i j", |
| }, |
| Variables: []Variable{ |
| Variable{Name: SimpleMakeString("var1", scanner.Position{})}, |
| Variable{Name: SimpleMakeString("var2", scanner.Position{})}, |
| }, |
| }, |
| sep: " ", |
| n: 3, |
| expected: []*MakeString{ |
| SimpleMakeString("a", scanner.Position{}), |
| SimpleMakeString("b", scanner.Position{}), |
| &MakeString{ |
| Strings: []string{"c", "d e f", " h i j"}, |
| Variables: []Variable{ |
| Variable{Name: SimpleMakeString("var1", scanner.Position{})}, |
| Variable{Name: SimpleMakeString("var2", scanner.Position{})}, |
| }, |
| }, |
| }, |
| }, |
| } |
| |
| func TestMakeStringSplitN(t *testing.T) { |
| for _, test := range splitNTestCases { |
| got := test.in.SplitN(test.sep, test.n) |
| gotString := dumpArray(got) |
| expectedString := dumpArray(test.expected) |
| if gotString != expectedString { |
| t.Errorf("expected:\n%s\ngot:\n%s", expectedString, gotString) |
| } |
| } |
| } |
| |
| func dumpArray(a []*MakeString) string { |
| ret := make([]string, len(a)) |
| |
| for i, s := range a { |
| ret[i] = s.Dump() |
| } |
| |
| return strings.Join(ret, "|||") |
| } |