|
|
|
@ -9,10 +9,6 @@ import (
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestParser(t *testing.T) {
|
|
|
|
|
traceOnCommandFlag := func(cmd argh.CommandFlag) {
|
|
|
|
|
t.Logf("CommandFlag.On: %+#[1]v", cmd)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, tc := range []struct {
|
|
|
|
|
name string
|
|
|
|
|
args []string
|
|
|
|
@ -31,10 +27,10 @@ func TestParser(t *testing.T) {
|
|
|
|
|
Prog: &argh.CommandConfig{
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"e": {On: traceOnCommandFlag},
|
|
|
|
|
"a": {On: traceOnCommandFlag},
|
|
|
|
|
"t": {On: traceOnCommandFlag},
|
|
|
|
|
"wat": {On: traceOnCommandFlag},
|
|
|
|
|
"e": {},
|
|
|
|
|
"a": {},
|
|
|
|
|
"t": {},
|
|
|
|
|
"wat": {},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
Commands: &argh.Commands{
|
|
|
|
@ -42,29 +38,27 @@ func TestParser(t *testing.T) {
|
|
|
|
|
"hello": argh.CommandConfig{
|
|
|
|
|
NValue: 1,
|
|
|
|
|
ValueNames: []string{"name"},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pies",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CompoundShortFlag{
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "e"},
|
|
|
|
|
&argh.CommandFlag{Name: "a"},
|
|
|
|
|
&argh.CommandFlag{Name: "t"},
|
|
|
|
|
&argh.Flag{Name: "e"},
|
|
|
|
|
&argh.Flag{Name: "a"},
|
|
|
|
|
&argh.Flag{Name: "t"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "wat"},
|
|
|
|
|
&argh.Flag{Name: "wat"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "hello",
|
|
|
|
|
Values: map[string]string{
|
|
|
|
|
"name": "mario",
|
|
|
|
@ -78,14 +72,14 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pies",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "e"},
|
|
|
|
|
&argh.CommandFlag{Name: "a"},
|
|
|
|
|
&argh.CommandFlag{Name: "t"},
|
|
|
|
|
&argh.CommandFlag{Name: "wat"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "e"},
|
|
|
|
|
&argh.Flag{Name: "a"},
|
|
|
|
|
&argh.Flag{Name: "t"},
|
|
|
|
|
&argh.Flag{Name: "wat"},
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "hello",
|
|
|
|
|
Values: map[string]string{
|
|
|
|
|
"name": "mario",
|
|
|
|
@ -108,13 +102,12 @@ func TestParser(t *testing.T) {
|
|
|
|
|
cmdCfg := &argh.CommandConfig{
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"e": {Persist: true, On: traceOnCommandFlag},
|
|
|
|
|
"a": {Persist: true, On: traceOnCommandFlag},
|
|
|
|
|
"t": {Persist: true, On: traceOnCommandFlag},
|
|
|
|
|
"wat": {On: traceOnCommandFlag},
|
|
|
|
|
"e": {Persist: true},
|
|
|
|
|
"a": {Persist: true},
|
|
|
|
|
"t": {Persist: true},
|
|
|
|
|
"wat": {},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cmdCfg.Commands = &argh.Commands{
|
|
|
|
@ -126,7 +119,6 @@ func TestParser(t *testing.T) {
|
|
|
|
|
Parent: cmdCfg.Flags,
|
|
|
|
|
Map: map[string]argh.FlagConfig{},
|
|
|
|
|
},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
@ -135,13 +127,13 @@ func TestParser(t *testing.T) {
|
|
|
|
|
}(),
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pies",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "wat"},
|
|
|
|
|
&argh.Flag{Name: "wat"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "hello",
|
|
|
|
|
Values: map[string]string{
|
|
|
|
|
"name": "mario",
|
|
|
|
@ -152,9 +144,9 @@ func TestParser(t *testing.T) {
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CompoundShortFlag{
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "e"},
|
|
|
|
|
&argh.CommandFlag{Name: "a"},
|
|
|
|
|
&argh.CommandFlag{Name: "t"},
|
|
|
|
|
&argh.Flag{Name: "e"},
|
|
|
|
|
&argh.Flag{Name: "a"},
|
|
|
|
|
&argh.Flag{Name: "t"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -163,20 +155,20 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pies",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "wat"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "wat"},
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "hello",
|
|
|
|
|
Values: map[string]string{
|
|
|
|
|
"name": "mario",
|
|
|
|
|
},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.Ident{Literal: "mario"},
|
|
|
|
|
&argh.CommandFlag{Name: "e"},
|
|
|
|
|
&argh.CommandFlag{Name: "a"},
|
|
|
|
|
&argh.CommandFlag{Name: "t"},
|
|
|
|
|
&argh.Flag{Name: "e"},
|
|
|
|
|
&argh.Flag{Name: "a"},
|
|
|
|
|
&argh.Flag{Name: "t"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -187,12 +179,12 @@ func TestParser(t *testing.T) {
|
|
|
|
|
name: "bare",
|
|
|
|
|
args: []string{"pizzas"},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -201,10 +193,10 @@ func TestParser(t *testing.T) {
|
|
|
|
|
name: "one positional arg",
|
|
|
|
|
args: []string{"pizzas", "excel"},
|
|
|
|
|
cfg: &argh.ParserConfig{
|
|
|
|
|
Prog: &argh.CommandConfig{NValue: 1, On: traceOnCommandFlag},
|
|
|
|
|
Prog: &argh.CommandConfig{NValue: 1},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Values: map[string]string{"0": "excel"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
@ -214,7 +206,7 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Values: map[string]string{"0": "excel"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
@ -230,11 +222,10 @@ func TestParser(t *testing.T) {
|
|
|
|
|
Prog: &argh.CommandConfig{
|
|
|
|
|
NValue: argh.OneOrMoreValue,
|
|
|
|
|
ValueNames: []string{"word"},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Values: map[string]string{
|
|
|
|
|
"word": "excel",
|
|
|
|
@ -255,7 +246,7 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Values: map[string]string{
|
|
|
|
|
"word": "excel",
|
|
|
|
@ -279,34 +270,33 @@ func TestParser(t *testing.T) {
|
|
|
|
|
Prog: &argh.CommandConfig{
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"tasty": {On: traceOnCommandFlag},
|
|
|
|
|
"fresh": {On: traceOnCommandFlag},
|
|
|
|
|
"super-hot-right-now": {On: traceOnCommandFlag},
|
|
|
|
|
"tasty": {},
|
|
|
|
|
"fresh": {},
|
|
|
|
|
"super-hot-right-now": {},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "tasty"},
|
|
|
|
|
&argh.Flag{Name: "tasty"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "fresh"},
|
|
|
|
|
&argh.Flag{Name: "fresh"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "super-hot-right-now"},
|
|
|
|
|
&argh.Flag{Name: "super-hot-right-now"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "tasty"},
|
|
|
|
|
&argh.CommandFlag{Name: "fresh"},
|
|
|
|
|
&argh.CommandFlag{Name: "super-hot-right-now"},
|
|
|
|
|
&argh.Flag{Name: "tasty"},
|
|
|
|
|
&argh.Flag{Name: "fresh"},
|
|
|
|
|
&argh.Flag{Name: "super-hot-right-now"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -326,24 +316,23 @@ func TestParser(t *testing.T) {
|
|
|
|
|
Commands: &argh.Commands{Map: map[string]argh.CommandConfig{}},
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"tasty": {On: traceOnCommandFlag},
|
|
|
|
|
"fresh": argh.FlagConfig{NValue: 1, On: traceOnCommandFlag},
|
|
|
|
|
"super-hot-right-now": {On: traceOnCommandFlag},
|
|
|
|
|
"box": argh.FlagConfig{NValue: argh.OneOrMoreValue, On: traceOnCommandFlag},
|
|
|
|
|
"please": {On: traceOnCommandFlag},
|
|
|
|
|
"tasty": {},
|
|
|
|
|
"fresh": argh.FlagConfig{NValue: 1},
|
|
|
|
|
"super-hot-right-now": {},
|
|
|
|
|
"box": argh.FlagConfig{NValue: argh.OneOrMoreValue},
|
|
|
|
|
"please": {},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "tasty"},
|
|
|
|
|
&argh.Flag{Name: "tasty"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "fresh",
|
|
|
|
|
Values: map[string]string{"0": "soon"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
@ -352,9 +341,9 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "super-hot-right-now"},
|
|
|
|
|
&argh.Flag{Name: "super-hot-right-now"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "box",
|
|
|
|
|
Values: map[string]string{"0": "square", "1": "shaped", "2": "hot"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
@ -367,24 +356,24 @@ func TestParser(t *testing.T) {
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
&argh.CommandFlag{Name: "please"},
|
|
|
|
|
&argh.Flag{Name: "please"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "tasty"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "tasty"},
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "fresh",
|
|
|
|
|
Values: map[string]string{"0": "soon"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.Ident{Literal: "soon"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
&argh.CommandFlag{Name: "super-hot-right-now"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "super-hot-right-now"},
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "box",
|
|
|
|
|
Values: map[string]string{"0": "square", "1": "shaped", "2": "hot"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
@ -393,7 +382,7 @@ func TestParser(t *testing.T) {
|
|
|
|
|
&argh.Ident{Literal: "hot"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
&argh.CommandFlag{Name: "please"},
|
|
|
|
|
&argh.Flag{Name: "please"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -405,34 +394,33 @@ func TestParser(t *testing.T) {
|
|
|
|
|
Prog: &argh.CommandConfig{
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"t": {On: traceOnCommandFlag},
|
|
|
|
|
"f": {On: traceOnCommandFlag},
|
|
|
|
|
"s": {On: traceOnCommandFlag},
|
|
|
|
|
"t": {},
|
|
|
|
|
"f": {},
|
|
|
|
|
"s": {},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "t"},
|
|
|
|
|
&argh.Flag{Name: "t"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "f"},
|
|
|
|
|
&argh.Flag{Name: "f"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "s"},
|
|
|
|
|
&argh.Flag{Name: "s"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "t"},
|
|
|
|
|
&argh.CommandFlag{Name: "f"},
|
|
|
|
|
&argh.CommandFlag{Name: "s"},
|
|
|
|
|
&argh.Flag{Name: "t"},
|
|
|
|
|
&argh.Flag{Name: "f"},
|
|
|
|
|
&argh.Flag{Name: "s"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -444,51 +432,50 @@ func TestParser(t *testing.T) {
|
|
|
|
|
Prog: &argh.CommandConfig{
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"a": {On: traceOnCommandFlag},
|
|
|
|
|
"b": {On: traceOnCommandFlag},
|
|
|
|
|
"c": {On: traceOnCommandFlag},
|
|
|
|
|
"l": {On: traceOnCommandFlag},
|
|
|
|
|
"o": {On: traceOnCommandFlag},
|
|
|
|
|
"a": {},
|
|
|
|
|
"b": {},
|
|
|
|
|
"c": {},
|
|
|
|
|
"l": {},
|
|
|
|
|
"o": {},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CompoundShortFlag{
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "a"},
|
|
|
|
|
&argh.CommandFlag{Name: "c"},
|
|
|
|
|
&argh.CommandFlag{Name: "a"},
|
|
|
|
|
&argh.Flag{Name: "a"},
|
|
|
|
|
&argh.Flag{Name: "c"},
|
|
|
|
|
&argh.Flag{Name: "a"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CompoundShortFlag{
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "b"},
|
|
|
|
|
&argh.CommandFlag{Name: "l"},
|
|
|
|
|
&argh.CommandFlag{Name: "o"},
|
|
|
|
|
&argh.CommandFlag{Name: "l"},
|
|
|
|
|
&argh.Flag{Name: "b"},
|
|
|
|
|
&argh.Flag{Name: "l"},
|
|
|
|
|
&argh.Flag{Name: "o"},
|
|
|
|
|
&argh.Flag{Name: "l"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "a"},
|
|
|
|
|
&argh.CommandFlag{Name: "c"},
|
|
|
|
|
&argh.CommandFlag{Name: "a"},
|
|
|
|
|
&argh.CommandFlag{Name: "b"},
|
|
|
|
|
&argh.CommandFlag{Name: "l"},
|
|
|
|
|
&argh.CommandFlag{Name: "o"},
|
|
|
|
|
&argh.CommandFlag{Name: "l"},
|
|
|
|
|
&argh.Flag{Name: "a"},
|
|
|
|
|
&argh.Flag{Name: "c"},
|
|
|
|
|
&argh.Flag{Name: "a"},
|
|
|
|
|
&argh.Flag{Name: "b"},
|
|
|
|
|
&argh.Flag{Name: "l"},
|
|
|
|
|
&argh.Flag{Name: "o"},
|
|
|
|
|
&argh.Flag{Name: "l"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -501,26 +488,25 @@ func TestParser(t *testing.T) {
|
|
|
|
|
Commands: &argh.Commands{Map: map[string]argh.CommandConfig{}},
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"a": {On: traceOnCommandFlag},
|
|
|
|
|
"b": argh.FlagConfig{NValue: 1, On: traceOnCommandFlag},
|
|
|
|
|
"ca": {On: traceOnCommandFlag},
|
|
|
|
|
"l": {On: traceOnCommandFlag},
|
|
|
|
|
"o": {On: traceOnCommandFlag},
|
|
|
|
|
"a": {},
|
|
|
|
|
"b": argh.FlagConfig{NValue: 1},
|
|
|
|
|
"ca": {},
|
|
|
|
|
"l": {},
|
|
|
|
|
"o": {},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "a"},
|
|
|
|
|
&argh.Flag{Name: "a"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "ca"},
|
|
|
|
|
&argh.Flag{Name: "ca"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "b",
|
|
|
|
|
Values: map[string]string{"0": "1312"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
@ -531,30 +517,30 @@ func TestParser(t *testing.T) {
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CompoundShortFlag{
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "l"},
|
|
|
|
|
&argh.CommandFlag{Name: "o"},
|
|
|
|
|
&argh.CommandFlag{Name: "l"},
|
|
|
|
|
&argh.Flag{Name: "l"},
|
|
|
|
|
&argh.Flag{Name: "o"},
|
|
|
|
|
&argh.Flag{Name: "l"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "a"},
|
|
|
|
|
&argh.CommandFlag{Name: "ca"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "a"},
|
|
|
|
|
&argh.Flag{Name: "ca"},
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "b",
|
|
|
|
|
Values: map[string]string{"0": "1312"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.Ident{Literal: "1312"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
&argh.CommandFlag{Name: "l"},
|
|
|
|
|
&argh.CommandFlag{Name: "o"},
|
|
|
|
|
&argh.CommandFlag{Name: "l"},
|
|
|
|
|
&argh.Flag{Name: "l"},
|
|
|
|
|
&argh.Flag{Name: "o"},
|
|
|
|
|
&argh.Flag{Name: "l"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -572,7 +558,7 @@ func TestParser(t *testing.T) {
|
|
|
|
|
"fry": argh.CommandConfig{
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"forever": {On: traceOnCommandFlag},
|
|
|
|
|
"forever": {},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -582,15 +568,14 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
Flags: &argh.Flags{Map: map[string]argh.FlagConfig{}},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "fly",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
@ -604,13 +589,13 @@ func TestParser(t *testing.T) {
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.Ident{Literal: "times"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "fry",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.Ident{Literal: "deeply"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "forever"},
|
|
|
|
|
&argh.Flag{Name: "forever"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -619,10 +604,10 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "fly",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.Ident{Literal: "freely"},
|
|
|
|
@ -630,11 +615,11 @@ func TestParser(t *testing.T) {
|
|
|
|
|
&argh.Ident{Literal: "and"},
|
|
|
|
|
&argh.Ident{Literal: "other"},
|
|
|
|
|
&argh.Ident{Literal: "times"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "fry",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.Ident{Literal: "deeply"},
|
|
|
|
|
&argh.CommandFlag{Name: "forever"},
|
|
|
|
|
&argh.Flag{Name: "forever"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -650,29 +635,28 @@ func TestParser(t *testing.T) {
|
|
|
|
|
Prog: &argh.CommandConfig{
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"a": {NValue: argh.ZeroOrMoreValue, On: traceOnCommandFlag},
|
|
|
|
|
"d": {NValue: argh.OneOrMoreValue, On: traceOnCommandFlag},
|
|
|
|
|
"e": {On: traceOnCommandFlag},
|
|
|
|
|
"l": {On: traceOnCommandFlag},
|
|
|
|
|
"n": {On: traceOnCommandFlag},
|
|
|
|
|
"o": {NValue: 1, ValueNames: []string{"level"}, On: traceOnCommandFlag},
|
|
|
|
|
"s": {NValue: argh.ZeroOrMoreValue, On: traceOnCommandFlag},
|
|
|
|
|
"a": {NValue: argh.ZeroOrMoreValue},
|
|
|
|
|
"d": {NValue: argh.OneOrMoreValue},
|
|
|
|
|
"e": {},
|
|
|
|
|
"l": {},
|
|
|
|
|
"n": {},
|
|
|
|
|
"o": {NValue: 1, ValueNames: []string{"level"}},
|
|
|
|
|
"s": {NValue: argh.ZeroOrMoreValue},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CompoundShortFlag{
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "n"},
|
|
|
|
|
&argh.CommandFlag{Name: "e"},
|
|
|
|
|
&argh.CommandFlag{Name: "e"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "n"},
|
|
|
|
|
&argh.Flag{Name: "e"},
|
|
|
|
|
&argh.Flag{Name: "e"},
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "d",
|
|
|
|
|
Values: map[string]string{
|
|
|
|
|
"0": "sauce",
|
|
|
|
@ -693,10 +677,10 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
&argh.CompoundShortFlag{
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "a"},
|
|
|
|
|
&argh.CommandFlag{Name: "l"},
|
|
|
|
|
&argh.CommandFlag{Name: "s"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "a"},
|
|
|
|
|
&argh.Flag{Name: "l"},
|
|
|
|
|
&argh.Flag{Name: "s"},
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "o",
|
|
|
|
|
Values: map[string]string{
|
|
|
|
|
"level": "over9000",
|
|
|
|
@ -712,13 +696,13 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "n"},
|
|
|
|
|
&argh.CommandFlag{Name: "e"},
|
|
|
|
|
&argh.CommandFlag{Name: "e"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "n"},
|
|
|
|
|
&argh.Flag{Name: "e"},
|
|
|
|
|
&argh.Flag{Name: "e"},
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "d",
|
|
|
|
|
Values: map[string]string{
|
|
|
|
|
"0": "sauce",
|
|
|
|
@ -731,10 +715,10 @@ func TestParser(t *testing.T) {
|
|
|
|
|
&argh.Ident{Literal: "love"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
&argh.CommandFlag{Name: "a"},
|
|
|
|
|
&argh.CommandFlag{Name: "l"},
|
|
|
|
|
&argh.CommandFlag{Name: "s"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "a"},
|
|
|
|
|
&argh.Flag{Name: "l"},
|
|
|
|
|
&argh.Flag{Name: "s"},
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "o",
|
|
|
|
|
Values: map[string]string{
|
|
|
|
|
"level": "over9000",
|
|
|
|
@ -757,7 +741,7 @@ func TestParser(t *testing.T) {
|
|
|
|
|
"fly": argh.CommandConfig{
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"freely": {On: traceOnCommandFlag},
|
|
|
|
|
"freely": {},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
Commands: &argh.Commands{
|
|
|
|
@ -765,10 +749,10 @@ func TestParser(t *testing.T) {
|
|
|
|
|
"fry": argh.CommandConfig{
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"deeply": {On: traceOnCommandFlag},
|
|
|
|
|
"w": {On: traceOnCommandFlag},
|
|
|
|
|
"A": {On: traceOnCommandFlag},
|
|
|
|
|
"t": argh.FlagConfig{NValue: 1, On: traceOnCommandFlag},
|
|
|
|
|
"deeply": {},
|
|
|
|
|
"w": {},
|
|
|
|
|
"A": {},
|
|
|
|
|
"t": argh.FlagConfig{NValue: 1},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -778,31 +762,30 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
Flags: &argh.Flags{Map: map[string]argh.FlagConfig{}},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "fly",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "freely"},
|
|
|
|
|
&argh.Flag{Name: "freely"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "fry",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "deeply"},
|
|
|
|
|
&argh.Flag{Name: "deeply"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CompoundShortFlag{
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "w"},
|
|
|
|
|
&argh.CommandFlag{Name: "A"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "w"},
|
|
|
|
|
&argh.Flag{Name: "A"},
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "t",
|
|
|
|
|
Values: map[string]string{"0": "hugs"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
@ -820,20 +803,20 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expAST: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "fly",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "freely"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "freely"},
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "fry",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "deeply"},
|
|
|
|
|
&argh.CommandFlag{Name: "w"},
|
|
|
|
|
&argh.CommandFlag{Name: "A"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "deeply"},
|
|
|
|
|
&argh.Flag{Name: "w"},
|
|
|
|
|
&argh.Flag{Name: "A"},
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "t",
|
|
|
|
|
Values: map[string]string{"0": "hugs"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
@ -859,7 +842,7 @@ func TestParser(t *testing.T) {
|
|
|
|
|
NValue: 1,
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"FIERCENESS": argh.FlagConfig{NValue: 1, On: traceOnCommandFlag},
|
|
|
|
|
"FIERCENESS": argh.FlagConfig{NValue: 1},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -867,13 +850,12 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"w": {On: traceOnCommandFlag},
|
|
|
|
|
"A": {On: traceOnCommandFlag},
|
|
|
|
|
"T": {NValue: 1, On: traceOnCommandFlag},
|
|
|
|
|
"hecKing": {On: traceOnCommandFlag},
|
|
|
|
|
"w": argh.FlagConfig{},
|
|
|
|
|
"A": argh.FlagConfig{},
|
|
|
|
|
"T": argh.FlagConfig{NValue: 1},
|
|
|
|
|
"hecKing": argh.FlagConfig{},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
ScannerConfig: &argh.ScannerConfig{
|
|
|
|
|
AssignmentOperator: '@',
|
|
|
|
@ -882,15 +864,15 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "PIZZAs",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CompoundShortFlag{
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{Name: "w"},
|
|
|
|
|
&argh.CommandFlag{Name: "A"},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{Name: "w"},
|
|
|
|
|
&argh.Flag{Name: "A"},
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "T",
|
|
|
|
|
Values: map[string]string{"0": "golf"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
@ -901,16 +883,16 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "hecKing"},
|
|
|
|
|
&argh.Flag{Name: "hecKing"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "goose",
|
|
|
|
|
Values: map[string]string{"0": "bonk"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.Ident{Literal: "bonk"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "FIERCENESS",
|
|
|
|
|
Values: map[string]string{"0": "-2"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
@ -931,9 +913,9 @@ func TestParser(t *testing.T) {
|
|
|
|
|
Prog: &argh.CommandConfig{
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"f": {On: traceOnCommandFlag},
|
|
|
|
|
"L": {On: traceOnCommandFlag},
|
|
|
|
|
"o": argh.FlagConfig{NValue: 1, On: traceOnCommandFlag},
|
|
|
|
|
"f": {},
|
|
|
|
|
"L": {},
|
|
|
|
|
"o": argh.FlagConfig{NValue: 1},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
Commands: &argh.Commands{
|
|
|
|
@ -941,7 +923,6 @@ func TestParser(t *testing.T) {
|
|
|
|
|
"hats": {},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
ScannerConfig: &argh.ScannerConfig{
|
|
|
|
|
AssignmentOperator: ':',
|
|
|
|
@ -950,15 +931,15 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "hotdog",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "f"},
|
|
|
|
|
&argh.Flag{Name: "f"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "L"},
|
|
|
|
|
&argh.Flag{Name: "L"},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Flag{
|
|
|
|
|
Name: "o",
|
|
|
|
|
Values: map[string]string{"0": "ppy"},
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
@ -967,7 +948,7 @@ func TestParser(t *testing.T) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "hats"},
|
|
|
|
|
&argh.Command{Name: "hats"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -979,22 +960,21 @@ func TestParser(t *testing.T) {
|
|
|
|
|
Prog: &argh.CommandConfig{
|
|
|
|
|
Flags: &argh.Flags{
|
|
|
|
|
Map: map[string]argh.FlagConfig{
|
|
|
|
|
"wat": {On: traceOnCommandFlag},
|
|
|
|
|
"wat": {},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
On: traceOnCommandFlag,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
expErr: argh.ParserErrorList{
|
|
|
|
|
&argh.ParserError{Pos: argh.Position{Column: 8}, Msg: "invalid bare assignment"},
|
|
|
|
|
},
|
|
|
|
|
expPT: []argh.Node{
|
|
|
|
|
&argh.CommandFlag{
|
|
|
|
|
&argh.Command{
|
|
|
|
|
Name: "pizzas",
|
|
|
|
|
Nodes: []argh.Node{
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.ArgDelimiter{},
|
|
|
|
|
&argh.CommandFlag{Name: "wat"},
|
|
|
|
|
&argh.Flag{Name: "wat"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -1007,12 +987,7 @@ func TestParser(t *testing.T) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pCfg := tc.cfg
|
|
|
|
|
if pCfg == nil {
|
|
|
|
|
pCfg = argh.NewParserConfig()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pt, err := argh.ParseArgs(tc.args, pCfg)
|
|
|
|
|
pt, err := argh.ParseArgs(tc.args, tc.cfg)
|
|
|
|
|
if err != nil || tc.expErr != nil {
|
|
|
|
|
if !assert.ErrorIs(ct, err, tc.expErr) {
|
|
|
|
|
spew.Dump(err, tc.expErr)
|
|
|
|
@ -1034,12 +1009,7 @@ func TestParser(t *testing.T) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pCfg := tc.cfg
|
|
|
|
|
if pCfg == nil {
|
|
|
|
|
pCfg = argh.NewParserConfig()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pt, err := argh.ParseArgs(tc.args, pCfg)
|
|
|
|
|
pt, err := argh.ParseArgs(tc.args, tc.cfg)
|
|
|
|
|
if err != nil || tc.expErr != nil {
|
|
|
|
|
if !assert.ErrorIs(ct, err, tc.expErr) {
|
|
|
|
|
spew.Dump(pt)
|
|
|
|
@ -1047,7 +1017,7 @@ func TestParser(t *testing.T) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ast := argh.ToAST(pt.Nodes)
|
|
|
|
|
ast := argh.NewQuerier(pt.Nodes).AST()
|
|
|
|
|
|
|
|
|
|
if !assert.Equal(ct, tc.expAST, ast) {
|
|
|
|
|
spew.Dump(ast)
|
|
|
|
|