blob: 8ad3d74c4a643ccb2ba291e451198ee25bc5df2a [file] [log] [blame]
Colin Crossd00350c2017-11-17 10:55:38 -08001// Copyright 2017 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
Colin Cross3f40fa42015-01-30 17:27:36 -080015package parser
16
17import (
18 "strings"
19 "testing"
20)
21
22var splitNTestCases = []struct {
23 in *MakeString
24 expected []*MakeString
25 sep string
26 n int
27}{
28 {
29 in: &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070030 Strings: []string{
Colin Cross3f40fa42015-01-30 17:27:36 -080031 "a b c",
32 "d e f",
33 " h i j",
34 },
Dan Willemsen88b4c292015-06-23 19:45:56 -070035 Variables: []Variable{
Colin Cross08693d22016-05-25 17:25:40 -070036 Variable{Name: SimpleMakeString("var1", NoPos)},
37 Variable{Name: SimpleMakeString("var2", NoPos)},
Colin Cross3f40fa42015-01-30 17:27:36 -080038 },
39 },
40 sep: " ",
41 n: -1,
42 expected: []*MakeString{
Colin Cross08693d22016-05-25 17:25:40 -070043 SimpleMakeString("a", NoPos),
44 SimpleMakeString("b", NoPos),
Colin Cross3f40fa42015-01-30 17:27:36 -080045 &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070046 Strings: []string{"c", "d"},
47 Variables: []Variable{
Colin Cross08693d22016-05-25 17:25:40 -070048 Variable{Name: SimpleMakeString("var1", NoPos)},
Colin Cross3f40fa42015-01-30 17:27:36 -080049 },
50 },
Colin Cross08693d22016-05-25 17:25:40 -070051 SimpleMakeString("e", NoPos),
Colin Cross3f40fa42015-01-30 17:27:36 -080052 &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070053 Strings: []string{"f", ""},
54 Variables: []Variable{
Colin Cross08693d22016-05-25 17:25:40 -070055 Variable{Name: SimpleMakeString("var2", NoPos)},
Colin Cross3f40fa42015-01-30 17:27:36 -080056 },
57 },
Colin Cross08693d22016-05-25 17:25:40 -070058 SimpleMakeString("h", NoPos),
59 SimpleMakeString("i", NoPos),
60 SimpleMakeString("j", NoPos),
Colin Cross3f40fa42015-01-30 17:27:36 -080061 },
62 },
63 {
64 in: &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070065 Strings: []string{
Colin Cross3f40fa42015-01-30 17:27:36 -080066 "a b c",
67 "d e f",
68 " h i j",
69 },
Dan Willemsen88b4c292015-06-23 19:45:56 -070070 Variables: []Variable{
Colin Cross08693d22016-05-25 17:25:40 -070071 Variable{Name: SimpleMakeString("var1", NoPos)},
72 Variable{Name: SimpleMakeString("var2", NoPos)},
Colin Cross3f40fa42015-01-30 17:27:36 -080073 },
74 },
75 sep: " ",
76 n: 3,
77 expected: []*MakeString{
Colin Cross08693d22016-05-25 17:25:40 -070078 SimpleMakeString("a", NoPos),
79 SimpleMakeString("b", NoPos),
Colin Cross3f40fa42015-01-30 17:27:36 -080080 &MakeString{
Dan Willemsen88b4c292015-06-23 19:45:56 -070081 Strings: []string{"c", "d e f", " h i j"},
82 Variables: []Variable{
Colin Cross08693d22016-05-25 17:25:40 -070083 Variable{Name: SimpleMakeString("var1", NoPos)},
84 Variable{Name: SimpleMakeString("var2", NoPos)},
Colin Cross3f40fa42015-01-30 17:27:36 -080085 },
86 },
87 },
88 },
89}
90
91func TestMakeStringSplitN(t *testing.T) {
92 for _, test := range splitNTestCases {
93 got := test.in.SplitN(test.sep, test.n)
94 gotString := dumpArray(got)
95 expectedString := dumpArray(test.expected)
96 if gotString != expectedString {
97 t.Errorf("expected:\n%s\ngot:\n%s", expectedString, gotString)
98 }
99 }
100}
101
102func dumpArray(a []*MakeString) string {
103 ret := make([]string, len(a))
104
105 for i, s := range a {
106 ret[i] = s.Dump()
107 }
108
109 return strings.Join(ret, "|||")
110}