| 3781 | } |
| 3782 | |
| 3783 | func TestDuplicatePersistentFlagUsesEnvSource(t *testing.T) { |
| 3784 | t.Setenv("APP_RESULT", "from-env") |
| 3785 | |
| 3786 | resultFlag := &StringFlag{ |
| 3787 | Name: "result", |
| 3788 | Sources: EnvVars("APP_RESULT"), |
| 3789 | Required: true, |
| 3790 | } |
| 3791 | |
| 3792 | var beforeResult string |
| 3793 | var actionResult string |
| 3794 | app := &Command{ |
| 3795 | Name: "root", |
| 3796 | Flags: []Flag{ |
| 3797 | resultFlag, |
| 3798 | }, |
| 3799 | Before: func(_ context.Context, cmd *Command) (context.Context, error) { |
| 3800 | beforeResult = cmd.String("result") |
| 3801 | return nil, nil |
| 3802 | }, |
| 3803 | Commands: []*Command{ |
| 3804 | { |
| 3805 | Name: "sub", |
| 3806 | Flags: []Flag{ |
| 3807 | resultFlag, |
| 3808 | }, |
| 3809 | Action: func(_ context.Context, cmd *Command) error { |
| 3810 | actionResult = cmd.String("result") |
| 3811 | return nil |
| 3812 | }, |
| 3813 | }, |
| 3814 | }, |
| 3815 | } |
| 3816 | |
| 3817 | err := app.Run(context.Background(), []string{"root", "sub"}) |
| 3818 | require.NoError(t, err) |
| 3819 | require.Equal(t, "from-env", beforeResult) |
| 3820 | require.Equal(t, "from-env", actionResult) |
| 3821 | require.True(t, app.IsSet("result")) |
| 3822 | require.True(t, app.Command("sub").IsSet("result")) |
| 3823 | } |
| 3824 | |
| 3825 | func TestRequiredFlagDelayed(t *testing.T) { |
| 3826 | sf := &StringFlag{ |