From 32cad20e06c70920266dd24f935526769a51e1f4 Mon Sep 17 00:00:00 2001 From: gedi Date: Tue, 9 Jun 2015 17:09:31 +0300 Subject: [PATCH] add multiline step parsing test --- gherkin/parse.go | 1 + gherkin/parse_steps_test.go | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/gherkin/parse.go b/gherkin/parse.go index ddbd74d..3ccbf1d 100644 --- a/gherkin/parse.go +++ b/gherkin/parse.go @@ -190,6 +190,7 @@ func (p *parser) parseSteps() (steps []*Step, err error) { } } // step text maybe multilined + // @TODO: think about use case when there is a different token matched instead of TEXT for ; p.peek().OfType(lexer.TEXT); tok = p.next() { step.Text += " " + tok.Value } diff --git a/gherkin/parse_steps_test.go b/gherkin/parse_steps_test.go index 04f555f..f6fb4e8 100644 --- a/gherkin/parse_steps_test.go +++ b/gherkin/parse_steps_test.go @@ -38,7 +38,7 @@ var testStepSamples = map[string]string{ When I do something Then something should happen`, - "step_group_multiline": `Given: an admin user "John Doe" + "step_group_multiline": `Given an admin user "John Doe" And user "John Doe" belongs to user group "editors" When I do something @@ -273,3 +273,37 @@ func Test_parse_step_group(t *testing.T) { lexer.EOF, }, t) } + +func Test_parse_step_group_multiline(t *testing.T) { + p := &parser{ + lx: lexer.New(strings.NewReader(testStepSamples["step_group_multiline"])), + path: "some.feature", + ast: newAST(), + } + steps, err := p.parseSteps() + if err != nil { + t.Fatalf("unexpected error: %s", err) + } + if len(steps) != 4 { + t.Fatalf("expected four steps to be parsed, but got: %d", len(steps)) + } + + steps[0].assertType(Given, t) + steps[0].assertText(`an admin user "John Doe"`, t) + steps[1].assertType(Given, t) + steps[1].assertText(`user "John Doe" belongs user "John Doe" belongs`, t) + steps[2].assertType(When, t) + steps[2].assertText("I do something", t) + steps[3].assertType(Then, t) + steps[3].assertText("I expect the result", t) + + p.next() // step over to eof + p.ast.assertMatchesTypes([]lexer.TokenType{ + lexer.GIVEN, + lexer.AND, + lexer.TEXT, + lexer.WHEN, + lexer.THEN, + lexer.EOF, + }, t) +}