string_array_test.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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. "testing"
  8. )
  9. func setUpSAFlagSet(sap *[]string) *FlagSet {
  10. f := NewFlagSet("test", ContinueOnError)
  11. f.StringArrayVar(sap, "sa", []string{}, "Command separated list!")
  12. return f
  13. }
  14. func setUpSAFlagSetWithDefault(sap *[]string) *FlagSet {
  15. f := NewFlagSet("test", ContinueOnError)
  16. f.StringArrayVar(sap, "sa", []string{"default", "values"}, "Command separated list!")
  17. return f
  18. }
  19. func TestEmptySA(t *testing.T) {
  20. var sa []string
  21. f := setUpSAFlagSet(&sa)
  22. err := f.Parse([]string{})
  23. if err != nil {
  24. t.Fatal("expected no error; got", err)
  25. }
  26. getSA, err := f.GetStringArray("sa")
  27. if err != nil {
  28. t.Fatal("got an error from GetStringArray():", err)
  29. }
  30. if len(getSA) != 0 {
  31. t.Fatalf("got sa %v with len=%d but expected length=0", getSA, len(getSA))
  32. }
  33. }
  34. func TestEmptySAValue(t *testing.T) {
  35. var sa []string
  36. f := setUpSAFlagSet(&sa)
  37. err := f.Parse([]string{"--sa="})
  38. if err != nil {
  39. t.Fatal("expected no error; got", err)
  40. }
  41. getSA, err := f.GetStringArray("sa")
  42. if err != nil {
  43. t.Fatal("got an error from GetStringArray():", err)
  44. }
  45. if len(getSA) != 0 {
  46. t.Fatalf("got sa %v with len=%d but expected length=0", getSA, len(getSA))
  47. }
  48. }
  49. func TestSADefault(t *testing.T) {
  50. var sa []string
  51. f := setUpSAFlagSetWithDefault(&sa)
  52. vals := []string{"default", "values"}
  53. err := f.Parse([]string{})
  54. if err != nil {
  55. t.Fatal("expected no error; got", err)
  56. }
  57. for i, v := range sa {
  58. if vals[i] != v {
  59. t.Fatalf("expected sa[%d] to be %s but got: %s", i, vals[i], v)
  60. }
  61. }
  62. getSA, err := f.GetStringArray("sa")
  63. if err != nil {
  64. t.Fatal("got an error from GetStringArray():", err)
  65. }
  66. for i, v := range getSA {
  67. if vals[i] != v {
  68. t.Fatalf("expected sa[%d] to be %s from GetStringArray but got: %s", i, vals[i], v)
  69. }
  70. }
  71. }
  72. func TestSAWithDefault(t *testing.T) {
  73. var sa []string
  74. f := setUpSAFlagSetWithDefault(&sa)
  75. val := "one"
  76. arg := fmt.Sprintf("--sa=%s", val)
  77. err := f.Parse([]string{arg})
  78. if err != nil {
  79. t.Fatal("expected no error; got", err)
  80. }
  81. if len(sa) != 1 {
  82. t.Fatalf("expected number of values to be %d but %d", 1, len(sa))
  83. }
  84. if sa[0] != val {
  85. t.Fatalf("expected value to be %s but got: %s", sa[0], val)
  86. }
  87. getSA, err := f.GetStringArray("sa")
  88. if err != nil {
  89. t.Fatal("got an error from GetStringArray():", err)
  90. }
  91. if len(getSA) != 1 {
  92. t.Fatalf("expected number of values to be %d but %d", 1, len(getSA))
  93. }
  94. if getSA[0] != val {
  95. t.Fatalf("expected value to be %s but got: %s", getSA[0], val)
  96. }
  97. }
  98. func TestSACalledTwice(t *testing.T) {
  99. var sa []string
  100. f := setUpSAFlagSet(&sa)
  101. in := []string{"one", "two"}
  102. expected := []string{"one", "two"}
  103. argfmt := "--sa=%s"
  104. arg1 := fmt.Sprintf(argfmt, in[0])
  105. arg2 := fmt.Sprintf(argfmt, in[1])
  106. err := f.Parse([]string{arg1, arg2})
  107. if err != nil {
  108. t.Fatal("expected no error; got", err)
  109. }
  110. if len(expected) != len(sa) {
  111. t.Fatalf("expected number of sa to be %d but got: %d", len(expected), len(sa))
  112. }
  113. for i, v := range sa {
  114. if expected[i] != v {
  115. t.Fatalf("expected sa[%d] to be %s but got: %s", i, expected[i], v)
  116. }
  117. }
  118. values, err := f.GetStringArray("sa")
  119. if err != nil {
  120. t.Fatal("expected no error; got", err)
  121. }
  122. if len(expected) != len(values) {
  123. t.Fatalf("expected number of values to be %d but got: %d", len(expected), len(sa))
  124. }
  125. for i, v := range values {
  126. if expected[i] != v {
  127. t.Fatalf("expected got sa[%d] to be %s but got: %s", i, expected[i], v)
  128. }
  129. }
  130. }
  131. func TestSAWithSpecialChar(t *testing.T) {
  132. var sa []string
  133. f := setUpSAFlagSet(&sa)
  134. in := []string{"one,two", `"three"`, `"four,five",six`, "seven eight"}
  135. expected := []string{"one,two", `"three"`, `"four,five",six`, "seven eight"}
  136. argfmt := "--sa=%s"
  137. arg1 := fmt.Sprintf(argfmt, in[0])
  138. arg2 := fmt.Sprintf(argfmt, in[1])
  139. arg3 := fmt.Sprintf(argfmt, in[2])
  140. arg4 := fmt.Sprintf(argfmt, in[3])
  141. err := f.Parse([]string{arg1, arg2, arg3, arg4})
  142. if err != nil {
  143. t.Fatal("expected no error; got", err)
  144. }
  145. if len(expected) != len(sa) {
  146. t.Fatalf("expected number of sa to be %d but got: %d", len(expected), len(sa))
  147. }
  148. for i, v := range sa {
  149. if expected[i] != v {
  150. t.Fatalf("expected sa[%d] to be %s but got: %s", i, expected[i], v)
  151. }
  152. }
  153. values, err := f.GetStringArray("sa")
  154. if err != nil {
  155. t.Fatal("expected no error; got", err)
  156. }
  157. if len(expected) != len(values) {
  158. t.Fatalf("expected number of values to be %d but got: %d", len(expected), len(values))
  159. }
  160. for i, v := range values {
  161. if expected[i] != v {
  162. t.Fatalf("expected got sa[%d] to be %s but got: %s", i, expected[i], v)
  163. }
  164. }
  165. }
  166. func TestSAWithSquareBrackets(t *testing.T) {
  167. var sa []string
  168. f := setUpSAFlagSet(&sa)
  169. in := []string{"][]-[", "[a-z]", "[a-z]+"}
  170. expected := []string{"][]-[", "[a-z]", "[a-z]+"}
  171. argfmt := "--sa=%s"
  172. arg1 := fmt.Sprintf(argfmt, in[0])
  173. arg2 := fmt.Sprintf(argfmt, in[1])
  174. arg3 := fmt.Sprintf(argfmt, in[2])
  175. err := f.Parse([]string{arg1, arg2, arg3})
  176. if err != nil {
  177. t.Fatal("expected no error; got", err)
  178. }
  179. if len(expected) != len(sa) {
  180. t.Fatalf("expected number of sa to be %d but got: %d", len(expected), len(sa))
  181. }
  182. for i, v := range sa {
  183. if expected[i] != v {
  184. t.Fatalf("expected sa[%d] to be %s but got: %s", i, expected[i], v)
  185. }
  186. }
  187. values, err := f.GetStringArray("sa")
  188. if err != nil {
  189. t.Fatal("expected no error; got", err)
  190. }
  191. if len(expected) != len(values) {
  192. t.Fatalf("expected number of values to be %d but got: %d", len(expected), len(values))
  193. }
  194. for i, v := range values {
  195. if expected[i] != v {
  196. t.Fatalf("expected got sa[%d] to be %s but got: %s", i, expected[i], v)
  197. }
  198. }
  199. }