package godog import ( "bytes" "fmt" "io/ioutil" "strings" "testing" "github.com/DATA-DOG/godog/colors" "github.com/DATA-DOG/godog/gherkin" ) func okStep() error { return nil } func TestPrintsStepDefinitions(t *testing.T) { var buf bytes.Buffer w := colors.Uncolored(&buf) s := &Suite{} steps := []string{ "^passing step$", `^with name "([^"])"`, } for _, step := range steps { s.Step(step, okStep) } s.printStepDefinitions(w) out := buf.String() ref := `github.com/DATA-DOG/godog.okStep` for i, def := range strings.Split(strings.TrimSpace(out), "\n") { if idx := strings.Index(def, steps[i]); idx == -1 { t.Fatalf(`step "%s" was not found in output`, steps[i]) } if idx := strings.Index(def, ref); idx == -1 { t.Fatalf(`step definition reference "%s" was not found in output: "%s"`, ref, def) } } } func TestPrintsNoStepDefinitionsIfNoneFound(t *testing.T) { var buf bytes.Buffer w := colors.Uncolored(&buf) s := &Suite{} s.printStepDefinitions(w) out := strings.TrimSpace(buf.String()) if out != "there were no contexts registered, could not find any step definition.." { t.Fatalf("expected output does not match to: %s", out) } } func TestShouldNotFailWhenHasPendingSteps(t *testing.T) { feat, err := gherkin.ParseFeature(strings.NewReader(basicGherkinFeature)) if err != nil { t.Fatalf("unexpected error: %v", err) } r := runner{ fmt: progressFunc("progress", ioutil.Discard), features: []*feature{&feature{Feature: feat}}, initializer: func(s *Suite) { s.Step(`^one$`, func() error { return nil }) s.Step(`^two$`, func() error { return ErrPending }) }, } if r.run() { t.Fatal("the suite should have passed") } } func TestShouldFailOnError(t *testing.T) { feat, err := gherkin.ParseFeature(strings.NewReader(basicGherkinFeature)) if err != nil { t.Fatalf("unexpected error: %v", err) } r := runner{ fmt: progressFunc("progress", ioutil.Discard), features: []*feature{&feature{Feature: feat}}, initializer: func(s *Suite) { s.Step(`^one$`, func() error { return nil }) s.Step(`^two$`, func() error { return fmt.Errorf("error") }) }, } if !r.run() { t.Fatal("the suite should have failed") } }