88 "bytes"
99 "strconv"
1010 "testing"
11+
12+ "github.com/stretchr/testify/require"
1113)
1214
1315// This value can be a boolean ("true", "false") or "maybe"
@@ -40,6 +42,7 @@ func (v *triStateValue) Set(s string) error {
4042 } else {
4143 * v = triStateFalse
4244 }
45+
4346 return err
4447}
4548
@@ -60,120 +63,102 @@ func setUpFlagSet(tristate *triStateValue) *FlagSet {
6063 * tristate = triStateFalse
6164 flag := f .VarPF (tristate , "tristate" , "t" , "tristate value (true, maybe or false)" )
6265 flag .NoOptDefVal = "true"
63- return f
64- }
65-
66- func TestExplicitTrue (t * testing.T ) {
67- var tristate triStateValue
68- f := setUpFlagSet (& tristate )
69- err := f .Parse ([]string {"--tristate=true" })
70- if err != nil {
71- t .Fatal ("expected no error; got" , err )
72- }
73- if tristate != triStateTrue {
74- t .Fatal ("expected" , triStateTrue , "(triStateTrue) but got" , tristate , "instead" )
75- }
76- }
77-
78- func TestImplicitTrue (t * testing.T ) {
79- var tristate triStateValue
80- f := setUpFlagSet (& tristate )
81- err := f .Parse ([]string {"--tristate" })
82- if err != nil {
83- t .Fatal ("expected no error; got" , err )
84- }
85- if tristate != triStateTrue {
86- t .Fatal ("expected" , triStateTrue , "(triStateTrue) but got" , tristate , "instead" )
87- }
88- }
89-
90- func TestShortFlag (t * testing.T ) {
91- var tristate triStateValue
92- f := setUpFlagSet (& tristate )
93- err := f .Parse ([]string {"-t" })
94- if err != nil {
95- t .Fatal ("expected no error; got" , err )
96- }
97- if tristate != triStateTrue {
98- t .Fatal ("expected" , triStateTrue , "(triStateTrue) but got" , tristate , "instead" )
99- }
100- }
101-
102- func TestShortFlagExtraArgument (t * testing.T ) {
103- var tristate triStateValue
104- f := setUpFlagSet (& tristate )
105- // The"maybe"turns into an arg, since short boolean options will only do true/false
106- err := f .Parse ([]string {"-t" , "maybe" })
107- if err != nil {
108- t .Fatal ("expected no error; got" , err )
109- }
110- if tristate != triStateTrue {
111- t .Fatal ("expected" , triStateTrue , "(triStateTrue) but got" , tristate , "instead" )
112- }
113- args := f .Args ()
114- if len (args ) != 1 || args [0 ] != "maybe" {
115- t .Fatal ("expected an extra 'maybe' argument to stick around" )
116- }
117- }
118-
119- func TestExplicitMaybe (t * testing.T ) {
120- var tristate triStateValue
121- f := setUpFlagSet (& tristate )
122- err := f .Parse ([]string {"--tristate=maybe" })
123- if err != nil {
124- t .Fatal ("expected no error; got" , err )
125- }
126- if tristate != triStateMaybe {
127- t .Fatal ("expected" , triStateMaybe , "(triStateMaybe) but got" , tristate , "instead" )
128- }
129- }
130-
131- func TestExplicitFalse (t * testing.T ) {
132- var tristate triStateValue
133- f := setUpFlagSet (& tristate )
134- err := f .Parse ([]string {"--tristate=false" })
135- if err != nil {
136- t .Fatal ("expected no error; got" , err )
137- }
138- if tristate != triStateFalse {
139- t .Fatal ("expected" , triStateFalse , "(triStateFalse) but got" , tristate , "instead" )
140- }
141- }
14266
143- func TestImplicitFalse (t * testing.T ) {
144- var tristate triStateValue
145- f := setUpFlagSet (& tristate )
146- err := f .Parse ([]string {})
147- if err != nil {
148- t .Fatal ("expected no error; got" , err )
149- }
150- if tristate != triStateFalse {
151- t .Fatal ("expected" , triStateFalse , "(triStateFalse) but got" , tristate , "instead" )
152- }
153- }
154-
155- func TestInvalidValue (t * testing.T ) {
156- var tristate triStateValue
157- f := setUpFlagSet (& tristate )
158- var buf bytes.Buffer
159- f .SetOutput (& buf )
160- err := f .Parse ([]string {"--tristate=invalid" })
161- if err == nil {
162- t .Fatal ("expected an error but did not get any, tristate has value" , tristate )
163- }
67+ return f
16468}
16569
166- func TestBoolP (t * testing.T ) {
167- b := BoolP ("bool" , "b" , false , "bool value in CommandLine" )
168- c := BoolP ("c" , "c" , false , "other bool value" )
169- args := []string {"--bool" }
170- if err := CommandLine .Parse (args ); err != nil {
171- t .Error ("expected no error, got " , err )
172- }
173- if * b != true {
174- t .Errorf ("expected b=true got b=%v" , * b )
175- }
176- if * c != false {
177- t .Errorf ("expect c=false got c=%v" , * c )
178- }
70+ func TestBool (t * testing.T ) {
71+ t .Parallel ()
72+
73+ t .Run ("with explicit true" , func (t * testing.T ) {
74+ var triState triStateValue
75+ f := setUpFlagSet (& triState )
76+ require .NoError (t , f .Parse ([]string {"--tristate=true" }))
77+ require .Equalf (t , triStateTrue , triState ,
78+ "expected" , triStateTrue , "(triStateTrue) but got" , triState , "instead" ,
79+ )
80+ })
81+
82+ t .Run ("with implicit true" , func (t * testing.T ) {
83+ var triState triStateValue
84+ f := setUpFlagSet (& triState )
85+ require .NoError (t , f .Parse ([]string {"--tristate" }))
86+ require .Equalf (t , triStateTrue , triState ,
87+ "expected" , triStateTrue , "(triStateTrue) but got" , triState , "instead" ,
88+ )
89+ })
90+
91+ t .Run ("with short flag" , func (t * testing.T ) {
92+ var triState triStateValue
93+ f := setUpFlagSet (& triState )
94+ require .NoError (t , f .Parse ([]string {"-t" }))
95+ require .Equalf (t , triStateTrue , triState ,
96+ "expected" , triStateTrue , "(triStateTrue) but got" , triState , "instead" ,
97+ )
98+ })
99+
100+ t .Run ("with short flag extra argument" , func (t * testing.T ) {
101+ var triState triStateValue
102+ f := setUpFlagSet (& triState )
103+ // The"maybe"turns into an arg, since short boolean options will only do true/false
104+ require .NoError (t , f .Parse ([]string {"-t" , "maybe" }))
105+ require .Equalf (t , triStateTrue , triState ,
106+ "expected" , triStateTrue , "(triStateTrue) but got" , triState , "instead" ,
107+ )
108+ args := f .Args ()
109+ require .Len (t , args , 1 )
110+ require .Equalf (t , "maybe" , args [0 ],
111+ "expected an extra 'maybe' argument to stick around" ,
112+ )
113+ })
114+
115+ t .Run ("with explicit maybe" , func (t * testing.T ) {
116+ var triState triStateValue
117+ f := setUpFlagSet (& triState )
118+ require .NoError (t , f .Parse ([]string {"--tristate=maybe" }))
119+ require .Equalf (t , triStateMaybe , triState ,
120+ "expected" , triStateMaybe , "(triStateMaybe) but got" , triState , "instead" ,
121+ )
122+ })
123+
124+ t .Run ("with explicit false" , func (t * testing.T ) {
125+ var triState triStateValue
126+ f := setUpFlagSet (& triState )
127+ require .NoError (t , f .Parse ([]string {"--tristate=false" }))
128+ require .Equalf (t , triStateFalse , triState ,
129+ "expected" , triStateFalse , "(triStateFalse) but got" , triState , "instead" ,
130+ )
131+ })
132+
133+ t .Run ("with implicit false" , func (t * testing.T ) {
134+ var triState triStateValue
135+ f := setUpFlagSet (& triState )
136+ require .NoError (t , f .Parse ([]string {}))
137+ require .Equalf (t , triStateFalse , triState ,
138+ "expected" , triStateFalse , "(triStateFalse) but got" , triState , "instead" ,
139+ )
140+ })
141+
142+ t .Run ("with invalid value" , func (t * testing.T ) {
143+ var triState triStateValue
144+ f := setUpFlagSet (& triState )
145+ var buf bytes.Buffer
146+ f .SetOutput (& buf )
147+ require .Errorf (t , f .Parse ([]string {"--tristate=invalid" }),
148+ "expected an error but did not get any, tristate has value" , triState ,
149+ )
150+ })
151+
152+ t .Run ("with BoolP" , func (t * testing.T ) {
153+ b := BoolP ("bool" , "b" , false , "bool value in CommandLine" )
154+ c := BoolP ("c" , "c" , false , "other bool value" )
155+ args := []string {"--bool" }
156+ require .NoError (t , CommandLine .Parse (args ))
157+ require .Truef (t , * b ,
158+ "expected b=true got b=%v" , * b ,
159+ )
160+ require .Falsef (t , * c ,
161+ "expect c=false got c=%v" , * c ,
162+ )
163+ })
179164}
0 commit comments