(t *testing.T)
| 200 | } |
| 201 | |
| 202 | func 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 |
nothing calls this directly
no test coverage detected