string_slice_test.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. // Copyright 2009 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package pflag
  5. import (
  6. "fmt"
  7. "strings"
  8. "testing"
  9. )
  10. func setUpSSFlagSet(ssp *[]string) *FlagSet {
  11. f := NewFlagSet("test", ContinueOnError)
  12. f.StringSliceVar(ssp, "ss", []string{}, "Command separated list!")
  13. return f
  14. }
  15. func setUpSSFlagSetWithDefault(ssp *[]string) *FlagSet {
  16. f := NewFlagSet("test", ContinueOnError)
  17. f.StringSliceVar(ssp, "ss", []string{"default", "values"}, "Command separated list!")
  18. return f
  19. }
  20. func TestEmptySS(t *testing.T) {
  21. var ss []string
  22. f := setUpSSFlagSet(&ss)
  23. err := f.Parse([]string{})
  24. if err != nil {
  25. t.Fatal("expected no error; got", err)
  26. }
  27. getSS, err := f.GetStringSlice("ss")
  28. if err != nil {
  29. t.Fatal("got an error from GetStringSlice():", err)
  30. }
  31. if len(getSS) != 0 {
  32. t.Fatalf("got ss %v with len=%d but expected length=0", getSS, len(getSS))
  33. }
  34. }
  35. func TestEmptySSValue(t *testing.T) {
  36. var ss []string
  37. f := setUpSSFlagSet(&ss)
  38. err := f.Parse([]string{"--ss="})
  39. if err != nil {
  40. t.Fatal("expected no error; got", err)
  41. }
  42. getSS, err := f.GetStringSlice("ss")
  43. if err != nil {
  44. t.Fatal("got an error from GetStringSlice():", err)
  45. }
  46. if len(getSS) != 0 {
  47. t.Fatalf("got ss %v with len=%d but expected length=0", getSS, len(getSS))
  48. }
  49. }
  50. func TestSS(t *testing.T) {
  51. var ss []string
  52. f := setUpSSFlagSet(&ss)
  53. vals := []string{"one", "two", "4", "3"}
  54. arg := fmt.Sprintf("--ss=%s", strings.Join(vals, ","))
  55. err := f.Parse([]string{arg})
  56. if err != nil {
  57. t.Fatal("expected no error; got", err)
  58. }
  59. for i, v := range ss {
  60. if vals[i] != v {
  61. t.Fatalf("expected ss[%d] to be %s but got: %s", i, vals[i], v)
  62. }
  63. }
  64. getSS, err := f.GetStringSlice("ss")
  65. if err != nil {
  66. t.Fatal("got an error from GetStringSlice():", err)
  67. }
  68. for i, v := range getSS {
  69. if vals[i] != v {
  70. t.Fatalf("expected ss[%d] to be %s from GetStringSlice but got: %s", i, vals[i], v)
  71. }
  72. }
  73. }
  74. func TestSSDefault(t *testing.T) {
  75. var ss []string
  76. f := setUpSSFlagSetWithDefault(&ss)
  77. vals := []string{"default", "values"}
  78. err := f.Parse([]string{})
  79. if err != nil {
  80. t.Fatal("expected no error; got", err)
  81. }
  82. for i, v := range ss {
  83. if vals[i] != v {
  84. t.Fatalf("expected ss[%d] to be %s but got: %s", i, vals[i], v)
  85. }
  86. }
  87. getSS, err := f.GetStringSlice("ss")
  88. if err != nil {
  89. t.Fatal("got an error from GetStringSlice():", err)
  90. }
  91. for i, v := range getSS {
  92. if vals[i] != v {
  93. t.Fatalf("expected ss[%d] to be %s from GetStringSlice but got: %s", i, vals[i], v)
  94. }
  95. }
  96. }
  97. func TestSSWithDefault(t *testing.T) {
  98. var ss []string
  99. f := setUpSSFlagSetWithDefault(&ss)
  100. vals := []string{"one", "two", "4", "3"}
  101. arg := fmt.Sprintf("--ss=%s", strings.Join(vals, ","))
  102. err := f.Parse([]string{arg})
  103. if err != nil {
  104. t.Fatal("expected no error; got", err)
  105. }
  106. for i, v := range ss {
  107. if vals[i] != v {
  108. t.Fatalf("expected ss[%d] to be %s but got: %s", i, vals[i], v)
  109. }
  110. }
  111. getSS, err := f.GetStringSlice("ss")
  112. if err != nil {
  113. t.Fatal("got an error from GetStringSlice():", err)
  114. }
  115. for i, v := range getSS {
  116. if vals[i] != v {
  117. t.Fatalf("expected ss[%d] to be %s from GetStringSlice but got: %s", i, vals[i], v)
  118. }
  119. }
  120. }
  121. func TestSSCalledTwice(t *testing.T) {
  122. var ss []string
  123. f := setUpSSFlagSet(&ss)
  124. in := []string{"one,two", "three"}
  125. expected := []string{"one", "two", "three"}
  126. argfmt := "--ss=%s"
  127. arg1 := fmt.Sprintf(argfmt, in[0])
  128. arg2 := fmt.Sprintf(argfmt, in[1])
  129. err := f.Parse([]string{arg1, arg2})
  130. if err != nil {
  131. t.Fatal("expected no error; got", err)
  132. }
  133. if len(expected) != len(ss) {
  134. t.Fatalf("expected number of ss to be %d but got: %d", len(expected), len(ss))
  135. }
  136. for i, v := range ss {
  137. if expected[i] != v {
  138. t.Fatalf("expected ss[%d] to be %s but got: %s", i, expected[i], v)
  139. }
  140. }
  141. values, err := f.GetStringSlice("ss")
  142. if err != nil {
  143. t.Fatal("expected no error; got", err)
  144. }
  145. if len(expected) != len(values) {
  146. t.Fatalf("expected number of values to be %d but got: %d", len(expected), len(ss))
  147. }
  148. for i, v := range values {
  149. if expected[i] != v {
  150. t.Fatalf("expected got ss[%d] to be %s but got: %s", i, expected[i], v)
  151. }
  152. }
  153. }
  154. func TestSSWithComma(t *testing.T) {
  155. var ss []string
  156. f := setUpSSFlagSet(&ss)
  157. in := []string{`"one,two"`, `"three"`, `"four,five",six`}
  158. expected := []string{"one,two", "three", "four,five", "six"}
  159. argfmt := "--ss=%s"
  160. arg1 := fmt.Sprintf(argfmt, in[0])
  161. arg2 := fmt.Sprintf(argfmt, in[1])
  162. arg3 := fmt.Sprintf(argfmt, in[2])
  163. err := f.Parse([]string{arg1, arg2, arg3})
  164. if err != nil {
  165. t.Fatal("expected no error; got", err)
  166. }
  167. if len(expected) != len(ss) {
  168. t.Fatalf("expected number of ss to be %d but got: %d", len(expected), len(ss))
  169. }
  170. for i, v := range ss {
  171. if expected[i] != v {
  172. t.Fatalf("expected ss[%d] to be %s but got: %s", i, expected[i], v)
  173. }
  174. }
  175. values, err := f.GetStringSlice("ss")
  176. if err != nil {
  177. t.Fatal("expected no error; got", err)
  178. }
  179. if len(expected) != len(values) {
  180. t.Fatalf("expected number of values to be %d but got: %d", len(expected), len(values))
  181. }
  182. for i, v := range values {
  183. if expected[i] != v {
  184. t.Fatalf("expected got ss[%d] to be %s but got: %s", i, expected[i], v)
  185. }
  186. }
  187. }
  188. func TestSSWithSquareBrackets(t *testing.T) {
  189. var ss []string
  190. f := setUpSSFlagSet(&ss)
  191. in := []string{`"[a-z]"`, `"[a-z]+"`}
  192. expected := []string{"[a-z]", "[a-z]+"}
  193. argfmt := "--ss=%s"
  194. arg1 := fmt.Sprintf(argfmt, in[0])
  195. arg2 := fmt.Sprintf(argfmt, in[1])
  196. err := f.Parse([]string{arg1, arg2})
  197. if err != nil {
  198. t.Fatal("expected no error; got", err)
  199. }
  200. if len(expected) != len(ss) {
  201. t.Fatalf("expected number of ss to be %d but got: %d", len(expected), len(ss))
  202. }
  203. for i, v := range ss {
  204. if expected[i] != v {
  205. t.Fatalf("expected ss[%d] to be %s but got: %s", i, expected[i], v)
  206. }
  207. }
  208. values, err := f.GetStringSlice("ss")
  209. if err != nil {
  210. t.Fatal("expected no error; got", err)
  211. }
  212. if len(expected) != len(values) {
  213. t.Fatalf("expected number of values to be %d but got: %d", len(expected), len(values))
  214. }
  215. for i, v := range values {
  216. if expected[i] != v {
  217. t.Fatalf("expected got ss[%d] to be %s but got: %s", i, expected[i], v)
  218. }
  219. }
  220. }