-
Notifications
You must be signed in to change notification settings - Fork 0
/
main_test.go
55 lines (49 loc) · 1.25 KB
/
main_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package main
import (
"flag"
"os"
"testing"
)
var (
forcedFailure = flag.Bool("forcefailure", false, "Run the tests that force failures.")
tests = []struct {
name string
skipTest bool
cmdArgs []string
wantOutput string
}{
{"valid argument", false, []string{"--arg", "valid"}, ""},
{"forced failure 1", true, []string{"--arg", "valid"}, "forced failure"},
{"invalid argument", false, []string{"--arg", "invalid"}, "invalid argument: invalid"},
{"forced failure 2", true, []string{"--arg", "invalid"}, ""},
}
)
func TestMain(m *testing.M) {
flag.Parse()
os.Exit(m.Run())
}
func TestMainFunc(t *testing.T) {
for _, test := range tests {
test := test // not running parallel tests, but good to do this anyway
if test.skipTest && !*forcedFailure {
continue
}
t.Run(test.name, func(t *testing.T) {
if gotOutput := runMain(test.cmdArgs); gotOutput != test.wantOutput {
t.Errorf("main(%v) = %q, want %q", test.cmdArgs, gotOutput, test.wantOutput)
}
})
}
}
func runMain(cmdArgs []string) string {
oldArgs := os.Args
oldPanicOnError := panicOnError
defer func() {
os.Args = oldArgs
panicOnError = oldPanicOnError
}()
os.Args = append([]string{"main"}, cmdArgs...)
panicOnError = true
main()
return fatalError
}