godog/flags_test.go

202 строки
5,3 КиБ
Go

package godog
import (
"bytes"
"flag"
"fmt"
"strings"
"testing"
"github.com/cucumber/godog/colors"
"github.com/cucumber/godog/internal/formatters"
)
func TestFlagsShouldRandomizeAndGenerateSeed(t *testing.T) {
var opt Options
flags := FlagSet(&opt)
if err := flags.Parse([]string{"--random"}); err != nil {
t.Fatalf("unable to parse flags: %v", err)
}
if opt.Randomize <= 0 {
t.Fatal("should have generated random seed")
}
}
func TestFlagsShouldRandomizeByGivenSeed(t *testing.T) {
var opt Options
flags := FlagSet(&opt)
if err := flags.Parse([]string{"--random=123"}); err != nil {
t.Fatalf("unable to parse flags: %v", err)
}
if opt.Randomize != 123 {
t.Fatalf("expected random seed to be: 123, but it was: %d", opt.Randomize)
}
}
func TestFlagsShouldParseFormat(t *testing.T) {
cases := map[string][]string{
"pretty": {},
"progress": {"-f", "progress"},
"junit": {"-f=junit"},
"custom": {"--format", "custom"},
"cust": {"--format=cust"},
}
for format, args := range cases {
var opt Options
flags := FlagSet(&opt)
if err := flags.Parse(args); err != nil {
t.Fatalf("unable to parse flags: %v", err)
}
if opt.Format != format {
t.Fatalf("expected format: %s, but it was: %s", format, opt.Format)
}
}
}
func TestFlagsUsageShouldIncludeFormatDescriptons(t *testing.T) {
var buf bytes.Buffer
output := colors.Uncolored(&buf)
// register some custom formatter
Format("custom", "custom format description", formatters.JUnitFormatterFunc)
var opt Options
flags := FlagSet(&opt)
usage(flags, output)()
out := buf.String()
for name, desc := range AvailableFormatters() {
match := fmt.Sprintf("%s: %s\n", name, desc)
if idx := strings.Index(out, match); idx == -1 {
t.Fatalf("could not locate format: %s description in flag usage", name)
}
}
}
func TestBindFlagsShouldRespectFlagDefaults(t *testing.T) {
opts := Options{}
BindFlags("flagDefaults.", flag.CommandLine, &opts)
if opts.Format != "pretty" {
t.Fatalf("expected Format: pretty, but it was: %s", opts.Format)
}
if opts.Tags != "" {
t.Fatalf("expected Tags: '', but it was: %s", opts.Tags)
}
if opts.Concurrency != 1 {
t.Fatalf("expected Concurrency: 1, but it was: %d", opts.Concurrency)
}
if opts.ShowStepDefinitions {
t.Fatalf("expected ShowStepDefinitions: false, but it was: %t", opts.ShowStepDefinitions)
}
if opts.StopOnFailure {
t.Fatalf("expected StopOnFailure: false, but it was: %t", opts.StopOnFailure)
}
if opts.Strict {
t.Fatalf("expected Strict: false, but it was: %t", opts.Strict)
}
if opts.NoColors {
t.Fatalf("expected NoColors: false, but it was: %t", opts.NoColors)
}
if opts.Randomize != 0 {
t.Fatalf("expected Randomize: 0, but it was: %d", opts.Randomize)
}
}
func TestBindFlagsShouldRespectOptDefaults(t *testing.T) {
opts := Options{
Format: "progress",
Tags: "test",
Concurrency: 2,
ShowStepDefinitions: true,
StopOnFailure: true,
Strict: true,
NoColors: true,
Randomize: int64(7),
}
BindFlags("optDefaults.", flag.CommandLine, &opts)
if opts.Format != "progress" {
t.Fatalf("expected Format: progress, but it was: %s", opts.Format)
}
if opts.Tags != "test" {
t.Fatalf("expected Tags: 'test', but it was: %s", opts.Tags)
}
if opts.Concurrency != 2 {
t.Fatalf("expected Concurrency: 2, but it was: %d", opts.Concurrency)
}
if !opts.ShowStepDefinitions {
t.Fatalf("expected ShowStepDefinitions: true, but it was: %t", opts.ShowStepDefinitions)
}
if !opts.StopOnFailure {
t.Fatalf("expected StopOnFailure: true, but it was: %t", opts.StopOnFailure)
}
if !opts.Strict {
t.Fatalf("expected Strict: true, but it was: %t", opts.Strict)
}
if !opts.NoColors {
t.Fatalf("expected NoColors: true, but it was: %t", opts.NoColors)
}
if opts.Randomize != 7 {
t.Fatalf("expected Randomize: 7, but it was: %d", opts.Randomize)
}
}
func TestBindFlagsShouldRespectFlagOverrides(t *testing.T) {
opts := Options{
Format: "progress",
Tags: "test",
Concurrency: 2,
ShowStepDefinitions: true,
StopOnFailure: true,
Strict: true,
NoColors: true,
Randomize: 11,
}
flagSet := flag.FlagSet{}
BindFlags("optOverrides.", &flagSet, &opts)
flagSet.Parse([]string{
"--optOverrides.format=junit",
"--optOverrides.tags=test2",
"--optOverrides.concurrency=3",
"--optOverrides.definitions=false",
"--optOverrides.stop-on-failure=false",
"--optOverrides.strict=false",
"--optOverrides.no-colors=false",
"--optOverrides.random=2",
})
if opts.Format != "junit" {
t.Fatalf("expected Format: junit, but it was: %s", opts.Format)
}
if opts.Tags != "test2" {
t.Fatalf("expected Tags: 'test2', but it was: %s", opts.Tags)
}
if opts.Concurrency != 3 {
t.Fatalf("expected Concurrency: 3, but it was: %d", opts.Concurrency)
}
if opts.ShowStepDefinitions {
t.Fatalf("expected ShowStepDefinitions: true, but it was: %t", opts.ShowStepDefinitions)
}
if opts.StopOnFailure {
t.Fatalf("expected StopOnFailure: true, but it was: %t", opts.StopOnFailure)
}
if opts.Strict {
t.Fatalf("expected Strict: true, but it was: %t", opts.Strict)
}
if opts.NoColors {
t.Fatalf("expected NoColors: true, but it was: %t", opts.NoColors)
}
if opts.Randomize != 2 {
t.Fatalf("expected Randomize: 2, but it was: %d", opts.Randomize)
}
}