76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
package cli
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestRunNoArgsWritesUsageToStdout(t *testing.T) {
|
|
var stdout bytes.Buffer
|
|
var stderr bytes.Buffer
|
|
|
|
code := Run(nil, &stdout, &stderr)
|
|
|
|
if code != 0 {
|
|
t.Fatalf("Run() code = %d, want 0", code)
|
|
}
|
|
if stdout.String() != usage {
|
|
t.Fatalf("stdout = %q, want %q", stdout.String(), usage)
|
|
}
|
|
if stderr.Len() != 0 {
|
|
t.Fatalf("stderr = %q, want empty", stderr.String())
|
|
}
|
|
}
|
|
|
|
func TestRunHelpArgsWriteUsageToStdout(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args []string
|
|
}{
|
|
{name: "help", args: []string{"help"}},
|
|
{name: "long help flag", args: []string{"--help"}},
|
|
{name: "short help flag", args: []string{"-h"}},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
var stdout bytes.Buffer
|
|
var stderr bytes.Buffer
|
|
|
|
code := Run(tt.args, &stdout, &stderr)
|
|
|
|
if code != 0 {
|
|
t.Fatalf("Run() code = %d, want 0", code)
|
|
}
|
|
if stdout.String() != usage {
|
|
t.Fatalf("stdout = %q, want %q", stdout.String(), usage)
|
|
}
|
|
if stderr.Len() != 0 {
|
|
t.Fatalf("stderr = %q, want empty", stderr.String())
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRunUnknownCommandWritesErrorAndUsageToStderr(t *testing.T) {
|
|
var stdout bytes.Buffer
|
|
var stderr bytes.Buffer
|
|
|
|
code := Run([]string{"extract"}, &stdout, &stderr)
|
|
|
|
if code != 2 {
|
|
t.Fatalf("Run() code = %d, want 2", code)
|
|
}
|
|
if stdout.Len() != 0 {
|
|
t.Fatalf("stdout = %q, want empty", stdout.String())
|
|
}
|
|
gotStderr := stderr.String()
|
|
if !strings.Contains(gotStderr, "notarius: unknown command \"extract\"") {
|
|
t.Fatalf("stderr = %q, want unknown command error", gotStderr)
|
|
}
|
|
if !strings.Contains(gotStderr, usage) {
|
|
t.Fatalf("stderr = %q, want usage", gotStderr)
|
|
}
|
|
}
|