| | |
| | |
| | |
| |
|
| | package testing_test |
| |
|
| | import ( |
| | "flag" |
| | "internal/testenv" |
| | "os" |
| | "os/exec" |
| | "testing" |
| | ) |
| |
|
| | var testFlagArg = flag.String("test_flag_arg", "", "TestFlag: passing -v option") |
| |
|
| | const flagTestEnv = "GO_WANT_FLAG_HELPER_PROCESS" |
| |
|
| | func TestFlag(t *testing.T) { |
| | if os.Getenv(flagTestEnv) == "1" { |
| | testFlagHelper(t) |
| | return |
| | } |
| |
|
| | testenv.MustHaveExec(t) |
| |
|
| | for _, flag := range []string{"", "-test.v", "-test.v=test2json"} { |
| | t.Run(flag, func(t *testing.T) { |
| | t.Parallel() |
| | cmd := exec.Command(testenv.Executable(t), "-test.run=^TestFlag$", "-test_flag_arg="+flag) |
| | if flag != "" { |
| | cmd.Args = append(cmd.Args, flag) |
| | } |
| | cmd.Env = append(cmd.Environ(), flagTestEnv+"=1") |
| | b, err := cmd.CombinedOutput() |
| | if len(b) > 0 { |
| | |
| | |
| | |
| | t.Logf("%q", b) |
| | } |
| | if err != nil { |
| | t.Error(err) |
| | } |
| | }) |
| | } |
| | } |
| |
|
| | |
| | func testFlagHelper(t *testing.T) { |
| | f := flag.Lookup("test.v") |
| | if f == nil { |
| | t.Fatal(`flag.Lookup("test.v") failed`) |
| | } |
| |
|
| | bf, ok := f.Value.(interface{ IsBoolFlag() bool }) |
| | if !ok { |
| | t.Errorf("test.v flag (type %T) does not have IsBoolFlag method", f) |
| | } else if !bf.IsBoolFlag() { |
| | t.Error("test.v IsBoolFlag() returned false") |
| | } |
| |
|
| | gf, ok := f.Value.(flag.Getter) |
| | if !ok { |
| | t.Fatalf("test.v flag (type %T) does not have Get method", f) |
| | } |
| | v := gf.Get() |
| |
|
| | var want any |
| | switch *testFlagArg { |
| | case "": |
| | want = false |
| | case "-test.v": |
| | want = true |
| | case "-test.v=test2json": |
| | want = "test2json" |
| | default: |
| | t.Fatalf("unexpected test_flag_arg %q", *testFlagArg) |
| | } |
| |
|
| | if v != want { |
| | t.Errorf("test.v is %v want %v", v, want) |
| | } |
| | } |
| |
|