예제 #1
0
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', '*****@*****.**'],
                                    ]))
            ]))
예제 #2
0
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'))
                    ])
            ],
        ))
예제 #3
0
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'))
                    ]),
            ],
        ))