count_test.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package pflag
  2. import (
  3. "fmt"
  4. "os"
  5. "testing"
  6. )
  7. var _ = fmt.Printf
  8. func setUpCount(c *int) *FlagSet {
  9. f := NewFlagSet("test", ContinueOnError)
  10. f.CountVarP(c, "verbose", "v", "a counter")
  11. return f
  12. }
  13. func TestCount(t *testing.T) {
  14. testCases := []struct {
  15. input []string
  16. success bool
  17. expected int
  18. }{
  19. {[]string{"-vvv"}, true, 3},
  20. {[]string{"-v", "-v", "-v"}, true, 3},
  21. {[]string{"-v", "--verbose", "-v"}, true, 3},
  22. {[]string{"-v=3", "-v"}, true, 4},
  23. {[]string{"-v=a"}, false, 0},
  24. }
  25. devnull, _ := os.Open(os.DevNull)
  26. os.Stderr = devnull
  27. for i := range testCases {
  28. var count int
  29. f := setUpCount(&count)
  30. tc := &testCases[i]
  31. err := f.Parse(tc.input)
  32. if err != nil && tc.success == true {
  33. t.Errorf("expected success, got %q", err)
  34. continue
  35. } else if err == nil && tc.success == false {
  36. t.Errorf("expected failure, got success")
  37. continue
  38. } else if tc.success {
  39. c, err := f.GetCount("verbose")
  40. if err != nil {
  41. t.Errorf("Got error trying to fetch the counter flag")
  42. }
  43. if c != tc.expected {
  44. t.Errorf("expected %q, got %q", tc.expected, c)
  45. }
  46. }
  47. }
  48. }