def test_parse_background(): # Background: title # Given two users in the database: # | name | email | # | Lincoln | [email protected] | # | Gabriel | [email protected] | # Scenario: parser = Parser([ (1, gherkin.TOKEN_LABEL, 'Background'), (1, gherkin.TOKEN_TEXT, 'title'), (1, gherkin.TOKEN_NEWLINE, '\n'), (2, gherkin.TOKEN_LABEL, 'Given two users in the database'), (2, gherkin.TOKEN_NEWLINE, '\n'), (3, gherkin.TOKEN_TABLE_COLUMN, 'name'), (3, gherkin.TOKEN_TABLE_COLUMN, 'email'), (3, gherkin.TOKEN_NEWLINE, '\n'), (4, gherkin.TOKEN_TABLE_COLUMN, 'Lincoln'), (4, gherkin.TOKEN_TABLE_COLUMN, '*****@*****.**'), (4, gherkin.TOKEN_NEWLINE, '\n'), (5, gherkin.TOKEN_TABLE_COLUMN, 'Gabriel'), (5, gherkin.TOKEN_TABLE_COLUMN, '*****@*****.**'), (5, gherkin.TOKEN_NEWLINE, '\n'), (6, gherkin.TOKEN_LABEL, 'Scenario'), ]) # When the background is parsed feature = parser.parse_background() # Then I see the output contains a valid background with a step # with examples. Notice the scenario label is not returned # anywhere here feature.should.equal( Ast.Background( line=1, title=Ast.Text(line=1, text='title'), steps=[ Ast.Step( line=2, title=Ast.Text(line=2, text='Given two users in the database'), table=Ast.Table(line=3, fields=[ ['name', 'email'], ['Lincoln', '*****@*****.**'], ['Gabriel', '*****@*****.**'], ])) ]))
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')) ]), ], ))