|
4 | 4 | "bytes"
|
5 | 5 | "context"
|
6 | 6 | "fmt"
|
| 7 | +"os" |
7 | 8 | "strings"
|
8 | 9 | "testing"
|
9 | 10 |
|
@@ -555,42 +556,80 @@ func TestCommand_EmptySlice(t *testing.T) {
|
555 | 556 | funcTestCommand_DefaultsOverride(t*testing.T) {
|
556 | 557 | t.Parallel()
|
557 | 558 |
|
558 |
| -vargotstring |
559 |
| -cmd:=&clibase.Cmd{ |
560 |
| -Options: clibase.OptionSet{ |
561 |
| -{ |
562 |
| -Name:"url", |
563 |
| -Flag:"url", |
564 |
| -Default:"def.com", |
565 |
| -Env:"URL", |
566 |
| -Value:clibase.StringOf(&got), |
567 |
| -}, |
568 |
| -}, |
569 |
| -Handler: (func(i*clibase.Invocation)error { |
570 |
| -_,_=fmt.Fprintf(i.Stdout,"%s",got) |
571 |
| -returnnil |
572 |
| -}), |
| 559 | +test:=func(namestring,wantstring,fnfunc(t*testing.T,inv*clibase.Invocation)) { |
| 560 | +t.Run(name,func(t*testing.T) { |
| 561 | +t.Parallel() |
| 562 | + |
| 563 | +var ( |
| 564 | +gotstring |
| 565 | +config clibase.YAMLConfigPath |
| 566 | +) |
| 567 | +cmd:=&clibase.Cmd{ |
| 568 | +Options: clibase.OptionSet{ |
| 569 | +{ |
| 570 | +Name:"url", |
| 571 | +Flag:"url", |
| 572 | +Default:"def.com", |
| 573 | +Env:"URL", |
| 574 | +Value:clibase.StringOf(&got), |
| 575 | +YAML:"url", |
| 576 | +}, |
| 577 | +{ |
| 578 | +Name:"config", |
| 579 | +Flag:"config", |
| 580 | +Default:"", |
| 581 | +Value:&config, |
| 582 | +}, |
| 583 | +}, |
| 584 | +Handler: (func(i*clibase.Invocation)error { |
| 585 | +_,_=fmt.Fprintf(i.Stdout,"%s",got) |
| 586 | +returnnil |
| 587 | +}), |
| 588 | +} |
| 589 | + |
| 590 | +inv:=cmd.Invoke() |
| 591 | +stdio:=fakeIO(inv) |
| 592 | +fn(t,inv) |
| 593 | +err:=inv.Run() |
| 594 | +require.NoError(t,err) |
| 595 | +require.Equal(t,want,stdio.Stdout.String()) |
| 596 | +}) |
573 | 597 | }
|
574 | 598 |
|
575 |
| -// Base case |
576 |
| -inv:=cmd.Invoke() |
577 |
| -stdio:=fakeIO(inv) |
578 |
| -err:=inv.Run() |
579 |
| -require.NoError(t,err) |
580 |
| -require.Equal(t,"def.com",stdio.Stdout.String()) |
| 599 | +test("DefaultOverNothing","def.com",func(t*testing.T,inv*clibase.Invocation) {}) |
581 | 600 |
|
582 |
| -// Flag overrides |
583 |
| -inv=cmd.Invoke("--url","good.com") |
584 |
| -stdio=fakeIO(inv) |
585 |
| -err=inv.Run() |
586 |
| -require.NoError(t,err) |
587 |
| -require.Equal(t,"good.com",stdio.Stdout.String()) |
| 601 | +test("FlagOverDefault","good.com",func(t*testing.T,inv*clibase.Invocation) { |
| 602 | +inv.Args= []string{"--url","good.com"} |
| 603 | +}) |
588 | 604 |
|
589 |
| -// Env overrides |
590 |
| -inv=cmd.Invoke() |
591 |
| -inv.Environ.Set("URL","good.com") |
592 |
| -stdio=fakeIO(inv) |
593 |
| -err=inv.Run() |
594 |
| -require.NoError(t,err) |
595 |
| -require.Equal(t,"good.com",stdio.Stdout.String()) |
| 605 | +test("EnvOverDefault","good.com",func(t*testing.T,inv*clibase.Invocation) { |
| 606 | +inv.Environ.Set("URL","good.com") |
| 607 | +}) |
| 608 | + |
| 609 | +test("FlagOverEnv","good.com",func(t*testing.T,inv*clibase.Invocation) { |
| 610 | +inv.Environ.Set("URL","bad.com") |
| 611 | +inv.Args= []string{"--url","good.com"} |
| 612 | +}) |
| 613 | + |
| 614 | +test("FlagOverYAML","good.com",func(t*testing.T,inv*clibase.Invocation) { |
| 615 | +fi,err:=os.CreateTemp(t.TempDir(),"config.yaml") |
| 616 | +require.NoError(t,err) |
| 617 | +deferfi.Close() |
| 618 | + |
| 619 | +_,err=fi.WriteString("url: bad.com") |
| 620 | +require.NoError(t,err) |
| 621 | + |
| 622 | +inv.Args= []string{"--config",fi.Name(),"--url","good.com"} |
| 623 | +}) |
| 624 | + |
| 625 | +test("YAMLOverDefault","good.com",func(t*testing.T,inv*clibase.Invocation) { |
| 626 | +fi,err:=os.CreateTemp(t.TempDir(),"config.yaml") |
| 627 | +require.NoError(t,err) |
| 628 | +deferfi.Close() |
| 629 | + |
| 630 | +_,err=fi.WriteString("url: good.com") |
| 631 | +require.NoError(t,err) |
| 632 | + |
| 633 | +inv.Args= []string{"--config",fi.Name()} |
| 634 | +}) |
596 | 635 | }
|