@@ -2,6 +2,7 @@ package flags_test
22
33import (
44 "bytes"
5+ "errors"
56 "flag"
67 "fmt"
78 "strings"
@@ -167,3 +168,84 @@ func TestFlag_Evaluate(t *testing.T) {
167168 })
168169 }
169170}
171+
172+ func TestFlag_Parse (t * testing.T ) {
173+ t .Parallel ()
174+
175+ testCases := []struct {
176+ name string
177+ expected string
178+ args clihelper.Args
179+ expectedErr bool
180+ }{
181+ {
182+ name : "accepted value" ,
183+ args : clihelper.Args {"--level" , "debug" },
184+ expected : "debug" ,
185+ },
186+ {
187+ name : "value rejected by the flag setter" ,
188+ args : clihelper.Args {"--level" , "bogus" },
189+ expectedErr : true ,
190+ },
191+ {
192+ name : "value missing" ,
193+ args : clihelper.Args {"--level" },
194+ expectedErr : true ,
195+ },
196+ {
197+ name : "flag belonging to another parser" ,
198+ args : clihelper.Args {"--some-other-flag" },
199+ },
200+ {
201+ name : "value after a flag belonging to another parser" ,
202+ args : clihelper.Args {"--some-other-flag" , "--level" , "debug" },
203+ expected : "debug" ,
204+ },
205+ {
206+ name : "rejected value after a flag belonging to another parser" ,
207+ args : clihelper.Args {"--some-other-flag" , "--level" , "bogus" },
208+ expectedErr : true ,
209+ },
210+ {
211+ name : "value after --help" ,
212+ args : clihelper.Args {"--help" , "--level" , "debug" },
213+ expected : "debug" ,
214+ },
215+ {
216+ name : "-h alone" ,
217+ args : clihelper.Args {"-h" },
218+ },
219+ }
220+
221+ for _ , tc := range testCases {
222+ t .Run (tc .name , func (t * testing.T ) {
223+ t .Parallel ()
224+
225+ var got string
226+
227+ testFlag := flags .NewFlag (& clihelper.GenericFlag [string ]{
228+ Name : "level" ,
229+ Setter : func (val string ) error {
230+ if val == "bogus" {
231+ return errors .New ("unsupported level" )
232+ }
233+
234+ got = val
235+
236+ return nil
237+ },
238+ })
239+
240+ err := testFlag .Parse (tc .args , map [string ]string {})
241+
242+ if tc .expectedErr {
243+ require .Error (t , err )
244+ return
245+ }
246+
247+ require .NoError (t , err )
248+ assert .Equal (t , tc .expected , got )
249+ })
250+ }
251+ }
0 commit comments