@@ -2282,9 +2282,192 @@ func TestUsageStringer(t *testing.T) {
2282
2282
}
2283
2283
}
2284
2284
2285
- func TestNewParserHelpFuncDefault (t * testing.T ) {
2285
+ func TestParserHelpFuncDefault (t * testing.T ) {
2286
2286
parser := NewParser ("parser" , "" )
2287
2287
if parser .HelpFunc == nil || parser .Help (nil ) != parser .Usage (nil ) {
2288
2288
t .Errorf ("HelpFunc should default to Usage function" )
2289
2289
}
2290
2290
}
2291
+
2292
+ func TestCommandHelpFuncDefault (t * testing.T ) {
2293
+ parser := NewParser ("parser" , "" )
2294
+ command := parser .NewCommand ("command" , "" )
2295
+ if command .HelpFunc != nil {
2296
+ t .Errorf ("HelpFunc should default to Usage function" )
2297
+ }
2298
+ }
2299
+
2300
+ func TestCommandHelpFuncDefaultToParent (t * testing.T ) {
2301
+ parser := NewParser ("parser" , "" )
2302
+ command := parser .NewCommand ("command" , "" )
2303
+
2304
+ parser .HelpFunc = func (c * Command , msg interface {}) string {
2305
+ return "testing"
2306
+ }
2307
+
2308
+ if command .Help (nil ) == command .Usage (nil ) || command .Help (nil ) != parser .Help (nil ) {
2309
+ t .Errorf ("command HelpFunc should default to parent function" )
2310
+ }
2311
+ }
2312
+
2313
+ func TestParserExitOnHelpTrue (t * testing.T ) {
2314
+ exited := false
2315
+ exit = func (n int ) {
2316
+ exited = true
2317
+ }
2318
+
2319
+ parser := NewParser ("parser" , "" )
2320
+
2321
+ print = func (... interface {}) (int , error ) {
2322
+ return 0 , nil
2323
+ }
2324
+
2325
+ if err := parser .Parse ([]string {"parser" , "-h" }); err == nil {
2326
+ if ! exited {
2327
+ t .Errorf ("Parsing help should have invoked os.Exit" )
2328
+ }
2329
+ } else {
2330
+ t .Error (err )
2331
+ }
2332
+ }
2333
+
2334
+ func TestParserExitOnHelpFalse (t * testing.T ) {
2335
+ exited := false
2336
+ exit = func (n int ) {
2337
+ exited = true
2338
+ }
2339
+
2340
+ parser := NewParser ("parser" , "" )
2341
+ parser .ExitOnHelp (false )
2342
+
2343
+ print = func (... interface {}) (int , error ) {
2344
+ return 0 , nil
2345
+ }
2346
+
2347
+ if err := parser .Parse ([]string {"parser" , "-h" }); exited {
2348
+ t .Errorf ("Parsing help should not have invoked os.Exit" )
2349
+ } else if err != nil {
2350
+ t .Error (err )
2351
+ }
2352
+ }
2353
+
2354
+ func TestParserDisableHelp (t * testing.T ) {
2355
+ parser := NewParser ("parser" , "" )
2356
+ parser .DisableHelp ()
2357
+ if len (parser .args ) > 0 {
2358
+ t .Errorf ("Parser should not have any arguments" )
2359
+ }
2360
+
2361
+ print = func (... interface {}) (int , error ) {
2362
+ return 0 , nil
2363
+ }
2364
+
2365
+ if err := parser .Parse ([]string {"parser" , "-h" }); err == nil {
2366
+ t .Errorf ("Parsing should fail, help argument shouldn't exist" )
2367
+ }
2368
+ }
2369
+
2370
+ func TestParserSetHelp (t * testing.T ) {
2371
+ sname , lname := "x" , "xyz"
2372
+ parser := NewParser ("parser" , "" )
2373
+ parser .SetHelp (sname , lname )
2374
+ if len (parser .args ) != 1 {
2375
+ t .Errorf ("Parser should have one argument:\n %s" , parser .Help (nil ))
2376
+ }
2377
+ arg := parser .args [0 ]
2378
+ if _ , ok := arg .result .(* help ); ! ok {
2379
+ t .Errorf ("Argument should be %T, is %T" , help {}, arg .result )
2380
+ }
2381
+ if arg .sname != sname {
2382
+ t .Errorf ("Argument short name should be %s, is %s" , sname , arg .sname )
2383
+ }
2384
+ if arg .lname != lname {
2385
+ t .Errorf ("Argument long name should be %s, is %s" , lname , arg .lname )
2386
+ }
2387
+ }
2388
+
2389
+ func TestCommandExitOnHelpTrue (t * testing.T ) {
2390
+ exited := false
2391
+ exit = func (n int ) {
2392
+ exited = true
2393
+ }
2394
+
2395
+ parser := NewParser ("parser" , "" )
2396
+ parser .NewCommand ("command" , "" )
2397
+
2398
+ print = func (... interface {}) (int , error ) {
2399
+ return 0 , nil
2400
+ }
2401
+
2402
+ if err := parser .Parse ([]string {"parser" , "command" , "-h" }); exited {
2403
+ if err != nil {
2404
+ t .Error (err )
2405
+ }
2406
+ } else {
2407
+ t .Errorf ("Parsing help should have invoked os.Exit" )
2408
+ }
2409
+ }
2410
+
2411
+ func TestCommandExitOnHelpFalse (t * testing.T ) {
2412
+ exited := false
2413
+ exit = func (n int ) {
2414
+ exited = true
2415
+ }
2416
+
2417
+ parser := NewParser ("parser" , "" )
2418
+ parser .NewCommand ("command" , "" )
2419
+ parser .ExitOnHelp (false )
2420
+
2421
+ print = func (... interface {}) (int , error ) {
2422
+ return 0 , nil
2423
+ }
2424
+
2425
+ if err := parser .Parse ([]string {"parser" , "command" , "-h" }); exited {
2426
+ t .Error ("Parsing help should not have exited" )
2427
+ } else if err != nil {
2428
+ t .Error (err )
2429
+ }
2430
+ }
2431
+
2432
+ func TestCommandDisableHelp (t * testing.T ) {
2433
+ parser := NewParser ("parser" , "" )
2434
+ parser .NewCommand ("command" , "" )
2435
+ parser .DisableHelp ()
2436
+ if len (parser .args ) > 0 {
2437
+ t .Errorf ("Parser should not have any arguments" )
2438
+ }
2439
+
2440
+ print = func (... interface {}) (int , error ) {
2441
+ return 0 , nil
2442
+ }
2443
+
2444
+ if err := parser .Parse ([]string {"parser" , "command" , "-h" }); err == nil {
2445
+ t .Errorf ("Parsing should fail, help argument shouldn't exist" )
2446
+ }
2447
+ }
2448
+
2449
+ func TestCommandHelpInheritance (t * testing.T ) {
2450
+ parser := NewParser ("parser" , "" )
2451
+ command := parser .NewCommand ("command" , "" )
2452
+ parser .ExitOnHelp (false )
2453
+
2454
+ if command .exitOnHelp != false {
2455
+ t .Errorf ("Command should inherit exitOnHelp from parent, even after creation" )
2456
+ }
2457
+ }
2458
+
2459
+ func TestCommandHelpSetSnameOnly (t * testing.T ) {
2460
+ parser := NewParser ("parser" , "" )
2461
+ parser .SetHelp ("q" , "" )
2462
+
2463
+ arg := parser .args [0 ]
2464
+
2465
+ _ , ok := arg .result .(* help )
2466
+ if ! ok {
2467
+ t .Error ("Argument should be of help type" )
2468
+ }
2469
+
2470
+ if arg .sname != "h" || arg .lname != "help" {
2471
+ t .Error ("Help arugment names should have defaulted" )
2472
+ }
2473
+ }
0 commit comments