|
|
|
@ -477,6 +477,9 @@ var stringFlagTests = []struct {
|
|
|
|
|
func TestStringFlagHelpOutput(t *testing.T) {
|
|
|
|
|
for _, test := range stringFlagTests {
|
|
|
|
|
fl := &StringFlag{Name: test.name, Aliases: test.aliases, Usage: test.usage, Value: test.value}
|
|
|
|
|
// create a tmp flagset
|
|
|
|
|
tfs := flag.NewFlagSet("test", 0)
|
|
|
|
|
fl.Apply(tfs)
|
|
|
|
|
output := fl.String()
|
|
|
|
|
|
|
|
|
|
if output != test.expected {
|
|
|
|
@ -575,6 +578,11 @@ var pathFlagTests = []struct {
|
|
|
|
|
func TestPathFlagHelpOutput(t *testing.T) {
|
|
|
|
|
for _, test := range pathFlagTests {
|
|
|
|
|
fl := &PathFlag{Name: test.name, Aliases: test.aliases, Usage: test.usage, Value: test.value}
|
|
|
|
|
|
|
|
|
|
// create a temporary flag set to apply
|
|
|
|
|
tfs := flag.NewFlagSet("test", 0)
|
|
|
|
|
fl.Apply(tfs)
|
|
|
|
|
|
|
|
|
|
output := fl.String()
|
|
|
|
|
|
|
|
|
|
if output != test.expected {
|
|
|
|
@ -767,6 +775,11 @@ var intFlagTests = []struct {
|
|
|
|
|
func TestIntFlagHelpOutput(t *testing.T) {
|
|
|
|
|
for _, test := range intFlagTests {
|
|
|
|
|
fl := &IntFlag{Name: test.name, Value: 9}
|
|
|
|
|
|
|
|
|
|
// create a temporary flag set to apply
|
|
|
|
|
tfs := flag.NewFlagSet("test", 0)
|
|
|
|
|
fl.Apply(tfs)
|
|
|
|
|
|
|
|
|
|
output := fl.String()
|
|
|
|
|
|
|
|
|
|
if output != test.expected {
|
|
|
|
@ -824,6 +837,11 @@ var int64FlagTests = []struct {
|
|
|
|
|
func TestInt64FlagHelpOutput(t *testing.T) {
|
|
|
|
|
for _, test := range int64FlagTests {
|
|
|
|
|
fl := Int64Flag{Name: test.name, Value: 8589934592}
|
|
|
|
|
|
|
|
|
|
// create a temporary flag set to apply
|
|
|
|
|
tfs := flag.NewFlagSet("test", 0)
|
|
|
|
|
fl.Apply(tfs)
|
|
|
|
|
|
|
|
|
|
output := fl.String()
|
|
|
|
|
|
|
|
|
|
if output != test.expected {
|
|
|
|
@ -870,6 +888,11 @@ var uintFlagTests = []struct {
|
|
|
|
|
func TestUintFlagHelpOutput(t *testing.T) {
|
|
|
|
|
for _, test := range uintFlagTests {
|
|
|
|
|
fl := UintFlag{Name: test.name, Value: 41}
|
|
|
|
|
|
|
|
|
|
// create a temporary flag set to apply
|
|
|
|
|
tfs := flag.NewFlagSet("test", 0)
|
|
|
|
|
fl.Apply(tfs)
|
|
|
|
|
|
|
|
|
|
output := fl.String()
|
|
|
|
|
|
|
|
|
|
if output != test.expected {
|
|
|
|
@ -916,6 +939,11 @@ var uint64FlagTests = []struct {
|
|
|
|
|
func TestUint64FlagHelpOutput(t *testing.T) {
|
|
|
|
|
for _, test := range uint64FlagTests {
|
|
|
|
|
fl := Uint64Flag{Name: test.name, Value: 8589934582}
|
|
|
|
|
|
|
|
|
|
// create a temporary flag set to apply
|
|
|
|
|
tfs := flag.NewFlagSet("test", 0)
|
|
|
|
|
fl.Apply(tfs)
|
|
|
|
|
|
|
|
|
|
output := fl.String()
|
|
|
|
|
|
|
|
|
|
if output != test.expected {
|
|
|
|
@ -962,6 +990,11 @@ var durationFlagTests = []struct {
|
|
|
|
|
func TestDurationFlagHelpOutput(t *testing.T) {
|
|
|
|
|
for _, test := range durationFlagTests {
|
|
|
|
|
fl := &DurationFlag{Name: test.name, Value: 1 * time.Second}
|
|
|
|
|
|
|
|
|
|
// create a temporary flag set to apply
|
|
|
|
|
tfs := flag.NewFlagSet("test", 0)
|
|
|
|
|
fl.Apply(tfs)
|
|
|
|
|
|
|
|
|
|
output := fl.String()
|
|
|
|
|
|
|
|
|
|
if output != test.expected {
|
|
|
|
@ -1783,6 +1816,9 @@ var genericFlagTests = []struct {
|
|
|
|
|
func TestGenericFlagHelpOutput(t *testing.T) {
|
|
|
|
|
for _, test := range genericFlagTests {
|
|
|
|
|
fl := &GenericFlag{Name: test.name, Value: test.value, Usage: "test flag"}
|
|
|
|
|
// create a temporary flag set to apply
|
|
|
|
|
tfs := flag.NewFlagSet("test", 0)
|
|
|
|
|
fl.Apply(tfs)
|
|
|
|
|
output := fl.String()
|
|
|
|
|
|
|
|
|
|
if output != test.expected {
|
|
|
|
@ -3100,6 +3136,186 @@ func TestFlagDefaultValue(t *testing.T) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type flagDefaultTestCaseWithEnv struct {
|
|
|
|
|
name string
|
|
|
|
|
flag Flag
|
|
|
|
|
toParse []string
|
|
|
|
|
expect string
|
|
|
|
|
environ map[string]string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestFlagDefaultValueWithEnv(t *testing.T) {
|
|
|
|
|
defer resetEnv(os.Environ())
|
|
|
|
|
os.Clearenv()
|
|
|
|
|
|
|
|
|
|
ts, err := time.Parse(time.RFC3339, "2005-01-02T15:04:05Z")
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
cases := []*flagDefaultTestCaseWithEnv{
|
|
|
|
|
{
|
|
|
|
|
name: "stringSlice",
|
|
|
|
|
flag: &StringSliceFlag{Name: "flag", Value: NewStringSlice("default1", "default2"), EnvVars: []string{"ssflag"}},
|
|
|
|
|
toParse: []string{"--flag", "parsed"},
|
|
|
|
|
expect: `--flag value [ --flag value ] (default: "default1", "default2") [$ssflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"ssflag": "some-other-env_value",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "float64Slice",
|
|
|
|
|
flag: &Float64SliceFlag{Name: "flag", Value: NewFloat64Slice(1.1, 2.2), EnvVars: []string{"fsflag"}},
|
|
|
|
|
toParse: []string{"--flag", "13.3"},
|
|
|
|
|
expect: `--flag value [ --flag value ] (default: 1.1, 2.2) [$fsflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"fsflag": "20304.222",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "int64Slice",
|
|
|
|
|
flag: &Int64SliceFlag{Name: "flag", Value: NewInt64Slice(1, 2), EnvVars: []string{"isflag"}},
|
|
|
|
|
toParse: []string{"--flag", "13"},
|
|
|
|
|
expect: `--flag value [ --flag value ] (default: 1, 2) [$isflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"isflag": "101",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "intSlice",
|
|
|
|
|
flag: &IntSliceFlag{Name: "flag", Value: NewIntSlice(1, 2), EnvVars: []string{"isflag"}},
|
|
|
|
|
toParse: []string{"--flag", "13"},
|
|
|
|
|
expect: `--flag value [ --flag value ] (default: 1, 2) [$isflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"isflag": "101",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "uint64Slice",
|
|
|
|
|
flag: &Uint64SliceFlag{Name: "flag", Value: NewUint64Slice(1, 2), EnvVars: []string{"uisflag"}},
|
|
|
|
|
toParse: []string{"--flag", "13"},
|
|
|
|
|
expect: `--flag value [ --flag value ] (default: 1, 2) [$uisflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"uisflag": "3",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "uintSlice",
|
|
|
|
|
flag: &UintSliceFlag{Name: "flag", Value: NewUintSlice(1, 2), EnvVars: []string{"uisflag"}},
|
|
|
|
|
toParse: []string{"--flag", "13"},
|
|
|
|
|
expect: `--flag value [ --flag value ] (default: 1, 2) [$uisflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"uisflag": "3",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "string",
|
|
|
|
|
flag: &StringFlag{Name: "flag", Value: "default", EnvVars: []string{"uflag"}},
|
|
|
|
|
toParse: []string{"--flag", "parsed"},
|
|
|
|
|
expect: `--flag value (default: "default") [$uflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"uflag": "some-other-string",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "bool",
|
|
|
|
|
flag: &BoolFlag{Name: "flag", Value: true, EnvVars: []string{"uflag"}},
|
|
|
|
|
toParse: []string{"--flag", "false"},
|
|
|
|
|
expect: `--flag (default: true) [$uflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"uflag": "false",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "uint64",
|
|
|
|
|
flag: &Uint64Flag{Name: "flag", Value: 1, EnvVars: []string{"uflag"}},
|
|
|
|
|
toParse: []string{"--flag", "13"},
|
|
|
|
|
expect: `--flag value (default: 1) [$uflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"uflag": "10",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "uint",
|
|
|
|
|
flag: &UintFlag{Name: "flag", Value: 1, EnvVars: []string{"uflag"}},
|
|
|
|
|
toParse: []string{"--flag", "13"},
|
|
|
|
|
expect: `--flag value (default: 1) [$uflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"uflag": "10",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "int64",
|
|
|
|
|
flag: &Int64Flag{Name: "flag", Value: 1, EnvVars: []string{"uflag"}},
|
|
|
|
|
toParse: []string{"--flag", "13"},
|
|
|
|
|
expect: `--flag value (default: 1) [$uflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"uflag": "10",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "int",
|
|
|
|
|
flag: &IntFlag{Name: "flag", Value: 1, EnvVars: []string{"uflag"}},
|
|
|
|
|
toParse: []string{"--flag", "13"},
|
|
|
|
|
expect: `--flag value (default: 1) [$uflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"uflag": "10",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "duration",
|
|
|
|
|
flag: &DurationFlag{Name: "flag", Value: time.Second, EnvVars: []string{"uflag"}},
|
|
|
|
|
toParse: []string{"--flag", "2m"},
|
|
|
|
|
expect: `--flag value (default: 1s) [$uflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"uflag": "2h4m10s",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "path",
|
|
|
|
|
flag: &PathFlag{Name: "flag", Value: "/tmp/foo", EnvVars: []string{"uflag"}},
|
|
|
|
|
toParse: []string{"--flag", "/bar/ddfr"},
|
|
|
|
|
expect: `--flag value (default: "/tmp/foo") [$uflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"uflag": "/bar/t/err",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "timestamp",
|
|
|
|
|
flag: &TimestampFlag{Name: "flag", Value: NewTimestamp(ts), Layout: time.RFC3339, EnvVars: []string{"tflag"}},
|
|
|
|
|
toParse: []string{"--flag", "2006-11-02T15:04:05Z"},
|
|
|
|
|
expect: `--flag value (default: 2005-01-02 15:04:05 +0000 UTC) [$tflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"tflag": "2010-01-02T15:04:05Z",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "generic",
|
|
|
|
|
flag: &GenericFlag{Name: "flag", Value: &Parser{"11", "12"}, EnvVars: []string{"gflag"}},
|
|
|
|
|
toParse: []string{"--flag", "15,16"},
|
|
|
|
|
expect: `--flag value (default: 11,12) [$gflag]`,
|
|
|
|
|
environ: map[string]string{
|
|
|
|
|
"gflag": "13,14",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
for i, v := range cases {
|
|
|
|
|
for key, val := range v.environ {
|
|
|
|
|
os.Setenv(key, val)
|
|
|
|
|
}
|
|
|
|
|
set := flag.NewFlagSet("test", 0)
|
|
|
|
|
set.SetOutput(ioutil.Discard)
|
|
|
|
|
if err := v.flag.Apply(set); err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
if err := set.Parse(v.toParse); err != nil {
|
|
|
|
|
t.Error(err)
|
|
|
|
|
}
|
|
|
|
|
if got := v.flag.String(); got != v.expect {
|
|
|
|
|
t.Errorf("TestFlagDefaultValue %d %s\nexpect:%s\ngot:%s", i, v.name, v.expect, got)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type flagValueTestCase struct {
|
|
|
|
|
name string
|
|
|
|
|
flag Flag
|
|
|
|
|