From 3323ab44608a53d356d25fa462a114b111950f2f Mon Sep 17 00:00:00 2001 From: Nathan LeClaire Date: Tue, 27 Oct 2015 13:33:55 -0700 Subject: [PATCH] Use a test table and add --help test Signed-off-by: Nathan LeClaire --- command_test.go | 81 +++++++++++++++++-------------------------------- 1 file changed, 27 insertions(+), 54 deletions(-) diff --git a/command_test.go b/command_test.go index 1e9e7fa..dd9fc87 100644 --- a/command_test.go +++ b/command_test.go @@ -1,70 +1,43 @@ package cli import ( + "errors" "flag" "testing" ) -func TestCommandDoNotIgnoreFlags(t *testing.T) { - app := NewApp() - set := flag.NewFlagSet("test", 0) - test := []string{"blah", "blah", "-break"} - set.Parse(test) - - c := NewContext(app, set, nil) - - command := Command{ - Name: "test-cmd", - Aliases: []string{"tc"}, - Usage: "this is for testing", - Description: "testing", - Action: func(_ *Context) {}, +func TestCommandFlagParsing(t *testing.T) { + cases := []struct { + testArgs []string + skipFlagParsing bool + expectedErr error + }{ + {[]string{"blah", "blah", "-break"}, false, errors.New("flag provided but not defined: -break")}, // Test normal "not ignoring flags" flow + {[]string{"blah", "blah"}, true, nil}, // Test SkipFlagParsing without any args that look like flags + {[]string{"blah", "-break"}, true, nil}, // Test SkipFlagParsing with random flag arg + {[]string{"blah", "-help"}, true, nil}, // Test SkipFlagParsing with "special" help flag arg } - err := command.Run(c) - - expect(t, err.Error(), "flag provided but not defined: -break") -} -func TestCommandIgnoreFlags(t *testing.T) { - app := NewApp() - set := flag.NewFlagSet("test", 0) - test := []string{"blah", "blah", "-break"} - set.Parse(test) + for _, c := range cases { + app := NewApp() + set := flag.NewFlagSet("test", 0) + set.Parse(c.testArgs) - c := NewContext(app, set, nil) + context := NewContext(app, set, nil) - command := Command{ - Name: "test-cmd", - Aliases: []string{"tc"}, - Usage: "this is for testing", - Description: "testing", - Action: func(_ *Context) {}, - SkipFlagParsing: true, - } - err := command.Run(c) - - expect(t, err, nil) -} + command := Command{ + Name: "test-cmd", + Aliases: []string{"tc"}, + Usage: "this is for testing", + Description: "testing", + Action: func(_ *Context) {}, + } -// Fix bug with ignoring flag parsing that would still parse the first flag -func TestCommandIgnoreFlagsIncludingFirstArgument(t *testing.T) { - app := NewApp() - set := flag.NewFlagSet("test", 0) - test := []string{"blah", "-break"} - set.Parse(test) + command.SkipFlagParsing = c.skipFlagParsing - c := NewContext(app, set, nil) + err := command.Run(context) - command := Command{ - Name: "test-cmd", - Aliases: []string{"tc"}, - Usage: "this is for testing", - Description: "testing", - Action: func(_ *Context) {}, - SkipFlagParsing: true, + expect(t, err, c.expectedErr) + expect(t, []string(context.Args()), c.testArgs) } - err := command.Run(c) - expect(t, err, nil) - - expect(t, []string(c.Args()), []string{"blah", "-break"}) }