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