summaryrefslogtreecommitdiff
path: root/parse_test.go
diff options
context:
space:
mode:
authorAlex Flint <[email protected]>2022-10-29 15:19:23 -0400
committerAlex Flint <[email protected]>2022-10-29 15:19:23 -0400
commit3d95a706a6a1cc80d62f403778c5d160698003b0 (patch)
treeb451fc515320dc6721dacc601b799266a8f78c3b /parse_test.go
parentd949871b676ed52669c17c2070dfb770b6ce28da (diff)
parentdbc2ba5d0c9a6a439d1f825f8c299fb276bbc911 (diff)
Merge remote-tracking branch 'origin/master' into default-value-issue
Diffstat (limited to 'parse_test.go')
-rw-r--r--parse_test.go76
1 files changed, 76 insertions, 0 deletions
diff --git a/parse_test.go b/parse_test.go
index 7747d05..5d38306 100644
--- a/parse_test.go
+++ b/parse_test.go
@@ -96,6 +96,21 @@ func TestInt(t *testing.T) {
assert.EqualValues(t, 8, *args.Ptr)
}
+func TestHexOctBin(t *testing.T) {
+ var args struct {
+ Hex int
+ Oct int
+ Bin int
+ Underscored int
+ }
+ err := parse("--hex 0xA --oct 0o10 --bin 0b101 --underscored 123_456", &args)
+ require.NoError(t, err)
+ assert.EqualValues(t, 10, args.Hex)
+ assert.EqualValues(t, 8, args.Oct)
+ assert.EqualValues(t, 5, args.Bin)
+ assert.EqualValues(t, 123456, args.Underscored)
+}
+
func TestNegativeInt(t *testing.T) {
var args struct {
Foo int
@@ -817,6 +832,19 @@ func TestEnvironmentVariableIgnored(t *testing.T) {
assert.Equal(t, "", args.Foo)
}
+func TestDefaultValuesIgnored(t *testing.T) {
+ var args struct {
+ Foo string `default:"bad"`
+ }
+
+ p, err := NewParser(Config{IgnoreDefault: true}, &args)
+ require.NoError(t, err)
+
+ err = p.Parse(nil)
+ assert.NoError(t, err)
+ assert.Equal(t, "", args.Foo)
+}
+
func TestEnvironmentVariableInSubcommandIgnored(t *testing.T) {
var args struct {
Sub *struct {
@@ -833,6 +861,54 @@ func TestEnvironmentVariableInSubcommandIgnored(t *testing.T) {
assert.Equal(t, "", args.Sub.Foo)
}
+func TestParserMustParseEmptyArgs(t *testing.T) {
+ // this mirrors TestEmptyArgs
+ p, err := NewParser(Config{}, &struct{}{})
+ require.NoError(t, err)
+ assert.NotNil(t, p)
+ p.MustParse(nil)
+}
+
+func TestParserMustParse(t *testing.T) {
+ tests := []struct {
+ name string
+ args versioned
+ cmdLine []string
+ code int
+ output string
+ }{
+ {name: "help", args: struct{}{}, cmdLine: []string{"--help"}, code: 0, output: "display this help and exit"},
+ {name: "version", args: versioned{}, cmdLine: []string{"--version"}, code: 0, output: "example 3.2.1"},
+ {name: "invalid", args: struct{}{}, cmdLine: []string{"invalid"}, code: -1, output: ""},
+ }
+
+ for _, tt := range tests {
+ tt := tt
+ t.Run(tt.name, func(t *testing.T) {
+ originalExit := osExit
+ originalStdout := stdout
+ defer func() {
+ osExit = originalExit
+ stdout = originalStdout
+ }()
+
+ var exitCode *int
+ osExit = func(code int) { exitCode = &code }
+ var b bytes.Buffer
+ stdout = &b
+
+ p, err := NewParser(Config{}, &tt.args)
+ require.NoError(t, err)
+ assert.NotNil(t, p)
+
+ p.MustParse(tt.cmdLine)
+ assert.NotNil(t, exitCode)
+ assert.Equal(t, tt.code, *exitCode)
+ assert.Contains(t, b.String(), tt.output)
+ })
+ }
+}
+
type textUnmarshaler struct {
val int
}