| 595 | } |
| 596 | |
| 597 | func TestCommand_Run_CustomShellCompleteAcceptsMalformedFlags(t *testing.T) { |
| 598 | cases := []struct { |
| 599 | testArgs *stringSliceArgs |
| 600 | expectedOut string |
| 601 | }{ |
| 602 | {testArgs: &stringSliceArgs{v: []string{"--undefined"}}, expectedOut: "found 1 args"}, |
| 603 | {testArgs: &stringSliceArgs{v: []string{"--number"}}, expectedOut: "found 1 args"}, |
| 604 | {testArgs: &stringSliceArgs{v: []string{"--number", "forty-two"}}, expectedOut: "found 0 args"}, |
| 605 | {testArgs: &stringSliceArgs{v: []string{"--number", "42"}}, expectedOut: "found 0 args"}, |
| 606 | {testArgs: &stringSliceArgs{v: []string{"--number", "42", "newArg"}}, expectedOut: "found 1 args"}, |
| 607 | } |
| 608 | |
| 609 | for _, c := range cases { |
| 610 | t.Run(strings.Join(c.testArgs.Slice(), " "), func(t *testing.T) { |
| 611 | out := &bytes.Buffer{} |
| 612 | cmd := &Command{ |
| 613 | Writer: out, |
| 614 | EnableShellCompletion: true, |
| 615 | Name: "bar", |
| 616 | Usage: "this is for testing", |
| 617 | Flags: []Flag{ |
| 618 | &Int64Flag{ |
| 619 | Name: "number", |
| 620 | Usage: "A number to parse", |
| 621 | }, |
| 622 | }, |
| 623 | ShellComplete: func(_ context.Context, cmd *Command) { |
| 624 | fmt.Fprintf(cmd.Root().Writer, "found %[1]d args", cmd.NArg()) |
| 625 | }, |
| 626 | } |
| 627 | |
| 628 | osArgs := &stringSliceArgs{v: []string{"bar"}} |
| 629 | osArgs.v = append(osArgs.v, c.testArgs.Slice()...) |
| 630 | osArgs.v = append(osArgs.v, completionFlag) |
| 631 | |
| 632 | r := require.New(t) |
| 633 | |
| 634 | r.NoError(cmd.Run(buildTestContext(t), osArgs.Slice())) |
| 635 | r.Equal(c.expectedOut, out.String()) |
| 636 | }) |
| 637 | } |
| 638 | } |
| 639 | |
| 640 | func TestCommand_CanAddVFlagOnSubCommands(t *testing.T) { |
| 641 | cmd := &Command{ |