def test_parse_tags_on_scenario_outline_examples(): "Parser should allow tags to be defined in examples" # Given a parser loaded with a document that contains tags on # scenario outline examples # @tagged-feature # Feature: Parse tags # @tag1 @tag2 # Scenario Outline: Test # @example-tag1 # @example-tag2 # Examples: # | Header | parser = Parser([ (1, gherkin.TOKEN_TAG, 'tagged-feature'), (1, gherkin.TOKEN_NEWLINE, '\n'), (2, gherkin.TOKEN_LABEL, 'Feature'), (2, gherkin.TOKEN_TEXT, 'Parse tags'), (2, gherkin.TOKEN_NEWLINE, '\n'), (3, gherkin.TOKEN_TAG, 'tag1'), (3, gherkin.TOKEN_TAG, 'tag2'), (3, gherkin.TOKEN_NEWLINE, '\n'), (4, gherkin.TOKEN_LABEL, 'Scenario Outline'), (4, gherkin.TOKEN_TEXT, 'Test'), (4, gherkin.TOKEN_NEWLINE, '\n'), (5, gherkin.TOKEN_TAG, 'example-tag1'), (5, gherkin.TOKEN_NEWLINE, '\n'), (6, gherkin.TOKEN_TAG, 'example-tag2'), (6, gherkin.TOKEN_NEWLINE, '\n'), (7, gherkin.TOKEN_LABEL, 'Examples'), (7, gherkin.TOKEN_NEWLINE, '\n'), (8, gherkin.TOKEN_TABLE_COLUMN, 'Header'), (8, gherkin.TOKEN_NEWLINE, '\n'), (9, gherkin.TOKEN_EOF, ''), ]) # When I parse the document feature = parser.parse_feature() # Then I see all the tags were found feature.should.equal( Ast.Feature(line=2, title=Ast.Text(line=2, text='Parse tags'), tags=['tagged-feature'], scenarios=[ Ast.ScenarioOutline( line=4, title=Ast.Text(line=4, text='Test'), tags=['tag1', 'tag2'], examples=Ast.Examples( line=7, tags=['example-tag1', 'example-tag2'], table=Ast.Table(line=8, fields=[['Header']])), ) ]))
def test_parse_tags_on_feature_and_scenario(): # Given a parser loaded with a gherkin document with one tag on # the feature and two tags on a scenario: # # @tagged-feature # Feature: Parse tags # # @tag1 @tag2 # Scenario: Test parser = Parser([ (1, gherkin.TOKEN_TAG, 'tagged-feature'), (1, gherkin.TOKEN_NEWLINE, '\n'), (2, gherkin.TOKEN_LABEL, 'Feature'), (2, gherkin.TOKEN_TEXT, 'Parse tags'), (2, gherkin.TOKEN_NEWLINE, '\n'), (3, gherkin.TOKEN_NEWLINE, '\n'), (4, gherkin.TOKEN_TAG, 'tag1'), (4, gherkin.TOKEN_TAG, 'tag2'), (4, gherkin.TOKEN_NEWLINE, '\n'), (5, gherkin.TOKEN_LABEL, 'Scenario'), (5, gherkin.TOKEN_TEXT, 'Test'), (6, gherkin.TOKEN_NEWLINE, '\n'), (7, gherkin.TOKEN_EOF, ''), ]) feature = parser.parse_feature() feature.should.equal( Ast.Feature(line=2, title=Ast.Text(line=2, text='Parse tags'), tags=['tagged-feature'], scenarios=[ Ast.Scenario(line=5, title=Ast.Text(line=5, text='Test'), tags=['tag1', 'tag2']) ]))
def test_parse_tables_within_steps(): "Lexer.run() Should be able to parse example tables from steps" # Given a parser loaded with steps that contain example tables '''Feature: Check models existence Background: Given I have a garden in the database: | @name | area | raining | | Secret Garden | 45 | false | And I have gardens in the database: | name | area | raining | | Octopus' Garden | 120 | true | Scenario: Plant a tree Given the <name> of a garden When I plant a tree And wait for <num_days> days Then I see it growing ''' parser = Parser([(1, gherkin.TOKEN_LABEL, 'Feature'), (1, gherkin.TOKEN_TEXT, 'Check models existence'), (1, gherkin.TOKEN_NEWLINE, '\n'), (2, gherkin.TOKEN_LABEL, 'Background'), (2, gherkin.TOKEN_NEWLINE, '\n'), (3, gherkin.TOKEN_LABEL, 'Given I have a garden in the database'), (3, gherkin.TOKEN_NEWLINE, '\n'), (4, gherkin.TOKEN_TABLE_COLUMN, '@name'), (4, gherkin.TOKEN_TABLE_COLUMN, 'area'), (4, gherkin.TOKEN_TABLE_COLUMN, 'raining'), (4, gherkin.TOKEN_NEWLINE, '\n'), (5, gherkin.TOKEN_TABLE_COLUMN, 'Secret Garden'), (5, gherkin.TOKEN_TABLE_COLUMN, '45'), (5, gherkin.TOKEN_TABLE_COLUMN, 'false'), (5, gherkin.TOKEN_NEWLINE, '\n'), (6, gherkin.TOKEN_LABEL, 'And I have gardens in the database'), (6, gherkin.TOKEN_NEWLINE, '\n'), (7, gherkin.TOKEN_TABLE_COLUMN, 'name'), (7, gherkin.TOKEN_TABLE_COLUMN, 'area'), (7, gherkin.TOKEN_TABLE_COLUMN, 'raining'), (7, gherkin.TOKEN_NEWLINE, '\n'), (8, gherkin.TOKEN_TABLE_COLUMN, "Octopus' Garden"), (8, gherkin.TOKEN_TABLE_COLUMN, '120'), (8, gherkin.TOKEN_TABLE_COLUMN, 'true'), (8, gherkin.TOKEN_NEWLINE, '\n'), (9, gherkin.TOKEN_LABEL, 'Scenario'), (9, gherkin.TOKEN_TEXT, 'Plant a tree'), (9, gherkin.TOKEN_NEWLINE, '\n'), (10, gherkin.TOKEN_TEXT, 'Given the <name> of a garden'), (10, gherkin.TOKEN_NEWLINE, '\n'), (11, gherkin.TOKEN_TEXT, 'When I plant a tree'), (11, gherkin.TOKEN_NEWLINE, '\n'), (12, gherkin.TOKEN_TEXT, 'And wait for <num_days> days'), (12, gherkin.TOKEN_NEWLINE, '\n'), (13, gherkin.TOKEN_TEXT, 'Then I see it growing'), (13, gherkin.TOKEN_NEWLINE, '\n'), (14, gherkin.TOKEN_EOF, '')]) feature = parser.parse_feature() feature.should.equal( Ast.Feature( line=1, title=Ast.Text(line=1, text='Check models existence'), background=Ast.Background( line=2, steps=[ Ast.Step(line=3, title=Ast.Text( line=3, text='Given I have a garden in the database'), table=Ast.Table( line=4, fields=[['@name', 'area', 'raining'], ['Secret Garden', '45', 'false']])), Ast.Step(line=6, title=Ast.Text( line=6, text='And I have gardens in the database'), table=Ast.Table( line=7, fields=[['name', 'area', 'raining'], ['Octopus\' Garden', '120', 'true']])), ]), scenarios=[ Ast.Scenario( title=Ast.Text(line=9, text='Plant a tree'), line=9, steps=[ Ast.Step(line=10, title=Ast.Text( line=10, text='Given the <name> of a garden')), Ast.Step(line=11, title=Ast.Text(line=11, text='When I plant a tree')), Ast.Step(line=12, title=Ast.Text( line=12, text='And wait for <num_days> days')), Ast.Step(line=13, title=Ast.Text(line=13, text='Then I see it growing')) ]) ], ))
def test_parse_feature(): parser = Parser([ (1, gherkin.TOKEN_LABEL, 'Feature'), (1, gherkin.TOKEN_TEXT, 'Feature title'), (1, gherkin.TOKEN_NEWLINE, '\n'), (2, gherkin.TOKEN_TEXT, 'feature description'), (2, gherkin.TOKEN_NEWLINE, '\n'), (3, gherkin.TOKEN_LABEL, 'Background'), (3, gherkin.TOKEN_TEXT, 'Some background'), (3, gherkin.TOKEN_NEWLINE, '\n'), (4, gherkin.TOKEN_TEXT, 'Given the problem'), (4, gherkin.TOKEN_NEWLINE, '\n'), (5, gherkin.TOKEN_LABEL, 'Scenario'), (5, gherkin.TOKEN_TEXT, 'Scenario title'), (5, gherkin.TOKEN_NEWLINE, '\n'), (6, gherkin.TOKEN_TEXT, 'Given first step'), (6, gherkin.TOKEN_NEWLINE, '\n'), (7, gherkin.TOKEN_LABEL, 'Scenario'), (7, gherkin.TOKEN_TEXT, 'Another scenario'), (7, gherkin.TOKEN_NEWLINE, '\n'), (8, gherkin.TOKEN_TEXT, 'Given this step'), (8, gherkin.TOKEN_NEWLINE, '\n'), (9, gherkin.TOKEN_TEXT, 'When we take another step'), (9, gherkin.TOKEN_NEWLINE, '\n'), (10, gherkin.TOKEN_EOF, ''), ]) feature = parser.parse_feature() feature.should.equal( Ast.Feature( line=1, title=Ast.Text(line=1, text='Feature title'), description=Ast.Text(line=2, text='feature description'), background=Ast.Background( line=3, title=Ast.Text(line=3, text='Some background'), steps=[ Ast.Step(line=4, title=Ast.Text(line=4, text='Given the problem')) ]), scenarios=[ Ast.Scenario(line=5, title=Ast.Text(line=5, text='Scenario title'), steps=[ Ast.Step(line=6, title=Ast.Text( line=6, text='Given first step')) ]), Ast.Scenario( line=7, title=Ast.Text(line=7, text='Another scenario'), steps=[ Ast.Step(line=8, title=Ast.Text(line=8, text='Given this step')), Ast.Step(line=9, title=Ast.Text( line=9, text='When we take another step')) ]), ], ))