godog/gherkin/scenario_test.go
gedi 4afb53d310 support gherkin scenario outline and examples
read scenario outline related tokens in gherkin lexer

* e8b71e6 test lexing of scenario outline with examples
* 13f73f2 update gherkin parser to parse scenario outline with examples
* cfad4fe test scenario outline persing
2015-06-11 13:24:21 +03:00

77 строки
1,9 КиБ
Go

package gherkin
import (
"strings"
"testing"
)
func (s *Scenario) assertTitle(title string, t *testing.T) {
if s.Title != title {
t.Fatalf("expected scenario title to be '%s', but got '%s'", title, s.Title)
}
}
func (s *Scenario) assertStep(text string, t *testing.T) *Step {
for _, stp := range s.Steps {
if stp.Text == text {
return stp
}
}
t.Fatal("expected scenario '%s' to have step: '%s', but it did not", s.Title, text)
return nil
}
func (s *Scenario) assertExampleRow(t *testing.T, num int, cols ...string) {
if s.Examples == nil {
t.Fatalf("outline scenario '%s' has no examples", s.Title)
}
if len(s.Examples.rows) <= num {
t.Fatalf("outline scenario '%s' table has no row: %d", s.Title, num)
}
if len(s.Examples.rows[num]) != len(cols) {
t.Fatalf("outline scenario '%s' table row length, does not match expected: %d", s.Title, len(cols))
}
for i, col := range s.Examples.rows[num] {
if col != cols[i] {
t.Fatalf("outline scenario '%s' table row %d, column %d - value '%s', does not match expected: %s", s.Title, num, i, col, cols[i])
}
}
}
func Test_parse_scenario_outline(t *testing.T) {
p := &parser{
lx: newLexer(strings.NewReader(testLexerSamples["scenario_outline_with_examples"])),
path: "usual.feature",
ast: newAST(),
}
s, err := p.parseScenario()
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
s.assertTitle("ls supports kinds of options", t)
p.ast.assertMatchesTypes([]TokenType{
SCENARIO_OUTLINE,
GIVEN,
AND,
AND,
WHEN,
THEN,
NEW_LINE,
EXAMPLES,
TABLE_ROW,
TABLE_ROW,
TABLE_ROW,
}, t)
s.assertStep(`I am in a directory "test"`, t)
s.assertStep(`I have a file named "foo"`, t)
s.assertStep(`I have a file named "bar"`, t)
s.assertStep(`I run "ls" with options "<options>"`, t)
s.assertStep(`I should see "<result>"`, t)
s.assertExampleRow(t, 0, "options", "result")
s.assertExampleRow(t, 1, "-t", "bar foo")
s.assertExampleRow(t, 2, "-tr", "foo bar")
}