MCPcopy
hub / github.com/urfave/cli / TestParseAndRunShortOpts

Function TestParseAndRunShortOpts

command_test.go:202–271  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

200}
201
202func TestParseAndRunShortOpts(t *testing.T) {
203 testCases := []struct {
204 testArgs *stringSliceArgs
205 expectedErr string
206 expectedArgs Args
207 }{
208 {testArgs: &stringSliceArgs{v: []string{"test", "-a"}}},
209 {testArgs: &stringSliceArgs{v: []string{"test", "-c", "arg1", "arg2"}}, expectedArgs: &stringSliceArgs{v: []string{"arg1", "arg2"}}},
210 {testArgs: &stringSliceArgs{v: []string{"test", "-f"}}, expectedArgs: &stringSliceArgs{v: []string{}}},
211 {testArgs: &stringSliceArgs{v: []string{"test", "-ac", "--fgh"}}, expectedArgs: &stringSliceArgs{v: []string{}}},
212 {testArgs: &stringSliceArgs{v: []string{"test", "-af"}}, expectedArgs: &stringSliceArgs{v: []string{}}},
213 {testArgs: &stringSliceArgs{v: []string{"test", "-cf"}}, expectedArgs: &stringSliceArgs{v: []string{}}},
214 {testArgs: &stringSliceArgs{v: []string{"test", "-acf"}}, expectedArgs: &stringSliceArgs{v: []string{}}},
215 {testArgs: &stringSliceArgs{v: []string{"test", "--acf"}}, expectedErr: "flag provided but not defined: -acf"},
216 {testArgs: &stringSliceArgs{v: []string{"test", "-invalid"}}, expectedErr: "flag provided but not defined: -invalid"},
217 {testArgs: &stringSliceArgs{v: []string{"test", "-acf", "-invalid"}}, expectedErr: "flag provided but not defined: -invalid"},
218 {testArgs: &stringSliceArgs{v: []string{"test", "--invalid"}}, expectedErr: "flag provided but not defined: -invalid"},
219 {testArgs: &stringSliceArgs{v: []string{"test", "-acf", "--invalid"}}, expectedErr: "flag provided but not defined: -invalid"},
220 {testArgs: &stringSliceArgs{v: []string{"test", "-acf", "arg1", "-invalid"}}, expectedErr: "flag provided but not defined: -invalid"},
221 {testArgs: &stringSliceArgs{v: []string{"test", "-acf", "arg1", "--invalid"}}, expectedErr: "flag provided but not defined: -invalid"},
222 {testArgs: &stringSliceArgs{v: []string{"test", "-acfi", "not-arg", "arg1", "-invalid"}}, expectedErr: "flag provided but not defined: -invalid"},
223 {testArgs: &stringSliceArgs{v: []string{"test", "-i", "ivalue"}}, expectedArgs: &stringSliceArgs{v: []string{}}},
224 {testArgs: &stringSliceArgs{v: []string{"test", "-i", "ivalue", "arg1"}}, expectedArgs: &stringSliceArgs{v: []string{"arg1"}}},
225 {testArgs: &stringSliceArgs{v: []string{"test", "-i"}}, expectedErr: "flag needs an argument: -i"},
226 }
227
228 for _, tc := range testCases {
229 t.Run(strings.Join(tc.testArgs.v, " "), func(t *testing.T) {
230 state := map[string]Args{"args": nil}
231
232 cmd := &Command{
233 Name: "test",
234 Usage: "this is for testing",
235 Description: "testing",
236 Action: func(_ context.Context, cmd *Command) error {
237 state["args"] = cmd.Args()
238 return nil
239 },
240 UseShortOptionHandling: true,
241 Writer: io.Discard,
242 Flags: []Flag{
243 &BoolFlag{Name: "abc", Aliases: []string{"a"}},
244 &BoolFlag{Name: "cde", Aliases: []string{"c"}},
245 &BoolFlag{Name: "fgh", Aliases: []string{"f"}},
246 &StringFlag{Name: "ijk", Aliases: []string{"i"}},
247 },
248 }
249
250 err := cmd.Run(buildTestContext(t), tc.testArgs.Slice())
251
252 r := require.New(t)
253
254 if tc.expectedErr == "" {
255 r.NoError(err)
256 } else {
257 r.ErrorContains(err, tc.expectedErr)
258 }
259

Callers

nothing calls this directly

Calls 5

RunMethod · 0.95
ArgsMethod · 0.95
buildTestContextFunction · 0.85
SliceMethod · 0.65
LenMethod · 0.65

Tested by

no test coverage detected