make_strings_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // 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. package parser
  15. import (
  16. "strings"
  17. "testing"
  18. )
  19. var splitNTestCases = []struct {
  20. in *MakeString
  21. expected []*MakeString
  22. sep string
  23. n int
  24. }{
  25. {
  26. in: &MakeString{
  27. Strings: []string{
  28. "a b c",
  29. "d e f",
  30. " h i j",
  31. },
  32. Variables: []Variable{
  33. Variable{Name: SimpleMakeString("var1", NoPos)},
  34. Variable{Name: SimpleMakeString("var2", NoPos)},
  35. },
  36. },
  37. sep: " ",
  38. n: -1,
  39. expected: []*MakeString{
  40. SimpleMakeString("a", NoPos),
  41. SimpleMakeString("b", NoPos),
  42. &MakeString{
  43. Strings: []string{"c", "d"},
  44. Variables: []Variable{
  45. Variable{Name: SimpleMakeString("var1", NoPos)},
  46. },
  47. },
  48. SimpleMakeString("e", NoPos),
  49. &MakeString{
  50. Strings: []string{"f", ""},
  51. Variables: []Variable{
  52. Variable{Name: SimpleMakeString("var2", NoPos)},
  53. },
  54. },
  55. SimpleMakeString("h", NoPos),
  56. SimpleMakeString("i", NoPos),
  57. SimpleMakeString("j", NoPos),
  58. },
  59. },
  60. {
  61. in: &MakeString{
  62. Strings: []string{
  63. "a b c",
  64. "d e f",
  65. " h i j",
  66. },
  67. Variables: []Variable{
  68. Variable{Name: SimpleMakeString("var1", NoPos)},
  69. Variable{Name: SimpleMakeString("var2", NoPos)},
  70. },
  71. },
  72. sep: " ",
  73. n: 3,
  74. expected: []*MakeString{
  75. SimpleMakeString("a", NoPos),
  76. SimpleMakeString("b", NoPos),
  77. &MakeString{
  78. Strings: []string{"c", "d e f", " h i j"},
  79. Variables: []Variable{
  80. Variable{Name: SimpleMakeString("var1", NoPos)},
  81. Variable{Name: SimpleMakeString("var2", NoPos)},
  82. },
  83. },
  84. },
  85. },
  86. }
  87. func TestMakeStringSplitN(t *testing.T) {
  88. for _, test := range splitNTestCases {
  89. got := test.in.SplitN(test.sep, test.n)
  90. gotString := dumpArray(got)
  91. expectedString := dumpArray(test.expected)
  92. if gotString != expectedString {
  93. t.Errorf("expected:\n%s\ngot:\n%s", expectedString, gotString)
  94. }
  95. }
  96. }
  97. func dumpArray(a []*MakeString) string {
  98. ret := make([]string, len(a))
  99. for i, s := range a {
  100. ret[i] = s.Dump()
  101. }
  102. return strings.Join(ret, "|||")
  103. }