123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- // Copyright 2017 Google Inc. All rights reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package parser
- import (
- "strings"
- "testing"
- )
- 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", NoPos)},
- Variable{Name: SimpleMakeString("var2", NoPos)},
- },
- },
- sep: " ",
- n: -1,
- expected: []*MakeString{
- SimpleMakeString("a", NoPos),
- SimpleMakeString("b", NoPos),
- &MakeString{
- Strings: []string{"c", "d"},
- Variables: []Variable{
- Variable{Name: SimpleMakeString("var1", NoPos)},
- },
- },
- SimpleMakeString("e", NoPos),
- &MakeString{
- Strings: []string{"f", ""},
- Variables: []Variable{
- Variable{Name: SimpleMakeString("var2", NoPos)},
- },
- },
- SimpleMakeString("h", NoPos),
- SimpleMakeString("i", NoPos),
- SimpleMakeString("j", NoPos),
- },
- },
- {
- in: &MakeString{
- Strings: []string{
- "a b c",
- "d e f",
- " h i j",
- },
- Variables: []Variable{
- Variable{Name: SimpleMakeString("var1", NoPos)},
- Variable{Name: SimpleMakeString("var2", NoPos)},
- },
- },
- sep: " ",
- n: 3,
- expected: []*MakeString{
- SimpleMakeString("a", NoPos),
- SimpleMakeString("b", NoPos),
- &MakeString{
- Strings: []string{"c", "d e f", " h i j"},
- Variables: []Variable{
- Variable{Name: SimpleMakeString("var1", NoPos)},
- Variable{Name: SimpleMakeString("var2", NoPos)},
- },
- },
- },
- },
- }
- 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)
- }
- }
- }
- var valueTestCases = []struct {
- in *MakeString
- expected string
- }{
- {
- in: SimpleMakeString("a b", NoPos),
- expected: "a b",
- },
- {
- in: SimpleMakeString("a\\ \\\tb\\\\", NoPos),
- expected: "a \tb\\",
- },
- {
- in: SimpleMakeString("a\\b\\", NoPos),
- expected: "a\\b\\",
- },
- }
- func TestMakeStringValue(t *testing.T) {
- for _, test := range valueTestCases {
- got := test.in.Value(nil)
- if got != test.expected {
- t.Errorf("\nwith: %q\nwant: %q\n got: %q", test.in.Dump(), test.expected, got)
- }
- }
- }
- var splitWordsTestCases = []struct {
- in *MakeString
- expected []*MakeString
- }{
- {
- in: SimpleMakeString("", NoPos),
- expected: []*MakeString{},
- },
- {
- in: SimpleMakeString(" a b\\ c d", NoPos),
- expected: []*MakeString{
- SimpleMakeString("a", NoPos),
- SimpleMakeString("b\\ c", NoPos),
- SimpleMakeString("d", NoPos),
- },
- },
- {
- in: SimpleMakeString(" a\tb\\\t\\ c d ", NoPos),
- expected: []*MakeString{
- SimpleMakeString("a", NoPos),
- SimpleMakeString("b\\\t\\ c", NoPos),
- SimpleMakeString("d", NoPos),
- },
- },
- {
- in: SimpleMakeString(`a\\ b\\\ c d`, NoPos),
- expected: []*MakeString{
- SimpleMakeString(`a\\`, NoPos),
- SimpleMakeString(`b\\\ c`, NoPos),
- SimpleMakeString("d", NoPos),
- },
- },
- }
- func TestMakeStringWords(t *testing.T) {
- for _, test := range splitWordsTestCases {
- got := test.in.Words()
- gotString := dumpArray(got)
- expectedString := dumpArray(test.expected)
- if gotString != expectedString {
- t.Errorf("with:\n%q\nexpected:\n%s\ngot:\n%s", test.in.Dump(), 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, "|||")
- }
|