-
Notifications
You must be signed in to change notification settings - Fork 21
/
main_test.go
135 lines (106 loc) · 2.8 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package main
import (
"bytes"
"os"
"path/filepath"
"testing"
"text/template"
"github.com/rliebz/ghost"
"github.com/rliebz/ghost/be"
)
func TestRun_printVersion(t *testing.T) {
g := ghost.New(t)
stdout := new(bytes.Buffer)
args := []string{"tusk", "--version"}
status := run(
config{
args: args,
stdout: stdout,
},
)
want := "(devel)\n"
g.Should(be.Equal(stdout.String(), want))
g.Should(be.Equal(status, 0))
}
func TestRun_printHelp(t *testing.T) {
g := ghost.New(t)
stdout := new(bytes.Buffer)
args := []string{"tusk", "--help"}
status := run(
config{
args: args,
stdout: stdout,
},
)
executable := filepath.Base(os.Args[0])
message := `{{.}} - the modern task runner
Usage:
{{.}} [global options] <task> [task options]
Tasks:
generate Generate tusk.schema.json from tusk.schema.yaml
lint Run static analysis
release Release the latest version with goreleaser
test Run the tests
tidy Clean up and format the repo
Global Options:
-f, --file <file> Set file to use as the config file
-h, --help Show help and exit
--install-completion <shell> Install tab completion for a shell
-q, --quiet Only print command output and application errors
-s, --silent Print no output
--uninstall-completion <shell> Uninstall tab completion for a shell
-V, --version Print version and exit
-v, --verbose Print verbose output
`
tpl := template.Must(template.New("help").Parse(message))
var buf bytes.Buffer
err := tpl.Execute(&buf, executable)
g.NoError(err)
want := buf.String()
g.Should(be.Equal(stdout.String(), want))
g.Should(be.Equal(status, 0))
}
func TestRun_exitCodeZero(t *testing.T) {
g := ghost.New(t)
stderr := new(bytes.Buffer)
args := []string{"tusk", "-f", "./testdata/tusk.yml", "exit", "0"}
status := run(
config{
args: args,
stderr: stderr,
},
)
want := "exit $ exit 0\n"
g.Should(be.Equal(stderr.String(), want))
g.Should(be.Equal(status, 0))
}
func TestRun_exitCodeNonZero(t *testing.T) {
g := ghost.New(t)
stderr := new(bytes.Buffer)
args := []string{"tusk", "-f", "./testdata/tusk.yml", "exit", "5"}
status := run(
config{
args: args,
stderr: stderr,
},
)
want := `exit $ exit 5
exit status 5
`
g.Should(be.Equal(stderr.String(), want))
g.Should(be.Equal(status, 5))
}
func TestRun_incorrectUsage(t *testing.T) {
g := ghost.New(t)
stderr := new(bytes.Buffer)
args := []string{"tusk", "-f", "./testdata/tusk.yml", "fake-command"}
status := run(
config{
args: args,
stderr: stderr,
},
)
want := "Error: No help topic for 'fake-command'\n"
g.Should(be.Equal(stderr.String(), want))
g.Should(be.Equal(status, 1))
}