uint_slice_test.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package pflag
  2. import (
  3. "fmt"
  4. "strconv"
  5. "strings"
  6. "testing"
  7. )
  8. func setUpUISFlagSet(uisp *[]uint) *FlagSet {
  9. f := NewFlagSet("test", ContinueOnError)
  10. f.UintSliceVar(uisp, "uis", []uint{}, "Command separated list!")
  11. return f
  12. }
  13. func setUpUISFlagSetWithDefault(uisp *[]uint) *FlagSet {
  14. f := NewFlagSet("test", ContinueOnError)
  15. f.UintSliceVar(uisp, "uis", []uint{0, 1}, "Command separated list!")
  16. return f
  17. }
  18. func TestEmptyUIS(t *testing.T) {
  19. var uis []uint
  20. f := setUpUISFlagSet(&uis)
  21. err := f.Parse([]string{})
  22. if err != nil {
  23. t.Fatal("expected no error; got", err)
  24. }
  25. getUIS, err := f.GetUintSlice("uis")
  26. if err != nil {
  27. t.Fatal("got an error from GetUintSlice():", err)
  28. }
  29. if len(getUIS) != 0 {
  30. t.Fatalf("got is %v with len=%d but expected length=0", getUIS, len(getUIS))
  31. }
  32. }
  33. func TestUIS(t *testing.T) {
  34. var uis []uint
  35. f := setUpUISFlagSet(&uis)
  36. vals := []string{"1", "2", "4", "3"}
  37. arg := fmt.Sprintf("--uis=%s", strings.Join(vals, ","))
  38. err := f.Parse([]string{arg})
  39. if err != nil {
  40. t.Fatal("expected no error; got", err)
  41. }
  42. for i, v := range uis {
  43. u, err := strconv.ParseUint(vals[i], 10, 0)
  44. if err != nil {
  45. t.Fatalf("got error: %v", err)
  46. }
  47. if uint(u) != v {
  48. t.Fatalf("expected uis[%d] to be %s but got %d", i, vals[i], v)
  49. }
  50. }
  51. getUIS, err := f.GetUintSlice("uis")
  52. if err != nil {
  53. t.Fatalf("got error: %v", err)
  54. }
  55. for i, v := range getUIS {
  56. u, err := strconv.ParseUint(vals[i], 10, 0)
  57. if err != nil {
  58. t.Fatalf("got error: %v", err)
  59. }
  60. if uint(u) != v {
  61. t.Fatalf("expected uis[%d] to be %s but got: %d from GetUintSlice", i, vals[i], v)
  62. }
  63. }
  64. }
  65. func TestUISDefault(t *testing.T) {
  66. var uis []uint
  67. f := setUpUISFlagSetWithDefault(&uis)
  68. vals := []string{"0", "1"}
  69. err := f.Parse([]string{})
  70. if err != nil {
  71. t.Fatal("expected no error; got", err)
  72. }
  73. for i, v := range uis {
  74. u, err := strconv.ParseUint(vals[i], 10, 0)
  75. if err != nil {
  76. t.Fatalf("got error: %v", err)
  77. }
  78. if uint(u) != v {
  79. t.Fatalf("expect uis[%d] to be %d but got: %d", i, u, v)
  80. }
  81. }
  82. getUIS, err := f.GetUintSlice("uis")
  83. if err != nil {
  84. t.Fatal("got an error from GetUintSlice():", err)
  85. }
  86. for i, v := range getUIS {
  87. u, err := strconv.ParseUint(vals[i], 10, 0)
  88. if err != nil {
  89. t.Fatal("got an error from GetIntSlice():", err)
  90. }
  91. if uint(u) != v {
  92. t.Fatalf("expected uis[%d] to be %d from GetUintSlice but got: %d", i, u, v)
  93. }
  94. }
  95. }
  96. func TestUISWithDefault(t *testing.T) {
  97. var uis []uint
  98. f := setUpUISFlagSetWithDefault(&uis)
  99. vals := []string{"1", "2"}
  100. arg := fmt.Sprintf("--uis=%s", strings.Join(vals, ","))
  101. err := f.Parse([]string{arg})
  102. if err != nil {
  103. t.Fatal("expected no error; got", err)
  104. }
  105. for i, v := range uis {
  106. u, err := strconv.ParseUint(vals[i], 10, 0)
  107. if err != nil {
  108. t.Fatalf("got error: %v", err)
  109. }
  110. if uint(u) != v {
  111. t.Fatalf("expected uis[%d] to be %d from GetUintSlice but got: %d", i, u, v)
  112. }
  113. }
  114. getUIS, err := f.GetUintSlice("uis")
  115. if err != nil {
  116. t.Fatal("got an error from GetUintSlice():", err)
  117. }
  118. for i, v := range getUIS {
  119. u, err := strconv.ParseUint(vals[i], 10, 0)
  120. if err != nil {
  121. t.Fatalf("got error: %v", err)
  122. }
  123. if uint(u) != v {
  124. t.Fatalf("expected uis[%d] to be %d from GetUintSlice but got: %d", i, u, v)
  125. }
  126. }
  127. }
  128. func TestUISCalledTwice(t *testing.T) {
  129. var uis []uint
  130. f := setUpUISFlagSet(&uis)
  131. in := []string{"1,2", "3"}
  132. expected := []int{1, 2, 3}
  133. argfmt := "--uis=%s"
  134. arg1 := fmt.Sprintf(argfmt, in[0])
  135. arg2 := fmt.Sprintf(argfmt, in[1])
  136. err := f.Parse([]string{arg1, arg2})
  137. if err != nil {
  138. t.Fatal("expected no error; got", err)
  139. }
  140. for i, v := range uis {
  141. if uint(expected[i]) != v {
  142. t.Fatalf("expected uis[%d] to be %d but got: %d", i, expected[i], v)
  143. }
  144. }
  145. }