summaryrefslogtreecommitdiff
path: root/example_test.go
diff options
context:
space:
mode:
authorAlex Flint <[email protected]>2019-05-03 15:49:44 -0700
committerAlex Flint <[email protected]>2019-05-03 15:49:44 -0700
commitb83047068d06bf682cdcaad3a090ff289df827b1 (patch)
treead2276d4fb09b54ee20f72f46d4dcf27fd60787d /example_test.go
parent15bf383f1d5db9bf362029529f3c83f092e2d00f (diff)
print help and usage at subcommand level if necessary
Diffstat (limited to 'example_test.go')
-rw-r--r--example_test.go89
1 files changed, 86 insertions, 3 deletions
diff --git a/example_test.go b/example_test.go
index eb8d315..b58085f 100644
--- a/example_test.go
+++ b/example_test.go
@@ -104,7 +104,7 @@ func Example_multipleMixed() {
}
// This example shows the usage string generated by go-arg
-func Example_usageString() {
+func Example_helpText() {
// These are the args you would pass in on the command line
os.Args = split("./example --help")
@@ -136,8 +136,8 @@ func Example_usageString() {
// --help, -h display this help and exit
}
-// This example shows the usage string generated by go-arg
-func Example_usageStringWithSubcommand() {
+// This example shows the usage string generated by go-arg when using subcommands
+func Example_helpTextWithSubcommand() {
// These are the args you would pass in on the command line
os.Args = split("./example --help")
@@ -172,3 +172,86 @@ func Example_usageStringWithSubcommand() {
// get fetch an item and print it
// list list available items
}
+
+// This example shows the usage string generated by go-arg when using subcommands
+func Example_helpTextForSubcommand() {
+ // These are the args you would pass in on the command line
+ os.Args = split("./example get --help")
+
+ type getCmd struct {
+ Item string `arg:"positional" help:"item to fetch"`
+ }
+
+ type listCmd struct {
+ Format string `help:"output format"`
+ Limit int
+ }
+
+ var args struct {
+ Verbose bool
+ Get *getCmd `arg:"subcommand" help:"fetch an item and print it"`
+ List *listCmd `arg:"subcommand" help:"list available items"`
+ }
+
+ // This is only necessary when running inside golang's runnable example harness
+ osExit = func(int) {}
+
+ MustParse(&args)
+
+ // output:
+ // Usage: example get ITEM
+ //
+ // Positional arguments:
+ // ITEM item to fetch
+ //
+ // Options:
+ // --help, -h display this help and exit
+}
+
+// This example shows the error string generated by go-arg when an invalid option is provided
+func Example_errorText() {
+ // These are the args you would pass in on the command line
+ os.Args = split("./example --optimize INVALID")
+
+ var args struct {
+ Input string `arg:"positional"`
+ Output []string `arg:"positional"`
+ Verbose bool `arg:"-v" help:"verbosity level"`
+ Dataset string `help:"dataset to use"`
+ Optimize int `arg:"-O,help:optimization level"`
+ }
+
+ // This is only necessary when running inside golang's runnable example harness
+ osExit = func(int) {}
+ stderr = os.Stdout
+
+ MustParse(&args)
+
+ // output:
+ // Usage: example [--verbose] [--dataset DATASET] [--optimize OPTIMIZE] INPUT [OUTPUT [OUTPUT ...]]
+ // error: error processing --optimize: strconv.ParseInt: parsing "INVALID": invalid syntax
+}
+
+// This example shows the error string generated by go-arg when an invalid option is provided
+func Example_errorTextForSubcommand() {
+ // These are the args you would pass in on the command line
+ os.Args = split("./example get --count INVALID")
+
+ type getCmd struct {
+ Count int
+ }
+
+ var args struct {
+ Get *getCmd `arg:"subcommand"`
+ }
+
+ // This is only necessary when running inside golang's runnable example harness
+ osExit = func(int) {}
+ stderr = os.Stdout
+
+ MustParse(&args)
+
+ // output:
+ // Usage: example get [--count COUNT]
+ // error: error processing --count: strconv.ParseInt: parsing "INVALID": invalid syntax
+}