예제 #1
0
    def test_nested(self):
        data = '''
*** Test Cases ***
Example
    FOR    ${x}    IN    1    2
        FOR    ${y}    IN RANGE    ${x}
            Log    ${y}
        END
    END
'''
        expected = For(header=ForHeader([
            Token(Token.FOR, 'FOR', 3, 4),
            Token(Token.VARIABLE, '${x}', 3, 11),
            Token(Token.FOR_SEPARATOR, 'IN', 3, 19),
            Token(Token.ARGUMENT, '1', 3, 25),
            Token(Token.ARGUMENT, '2', 3, 30),
        ]),
                       body=[
                           For(header=ForHeader([
                               Token(Token.FOR, 'FOR', 4, 8),
                               Token(Token.VARIABLE, '${y}', 4, 15),
                               Token(Token.FOR_SEPARATOR, 'IN RANGE', 4, 23),
                               Token(Token.ARGUMENT, '${x}', 4, 35),
                           ]),
                               body=[
                                   KeywordCall([
                                       Token(Token.KEYWORD, 'Log', 5, 12),
                                       Token(Token.ARGUMENT, '${y}', 5, 19)
                                   ])
                               ],
                               end=End([Token(Token.END, 'END', 6, 8)]))
                       ],
                       end=End([Token(Token.END, 'END', 7, 4)]))
        get_and_assert_model(data, expected)
예제 #2
0
    def test_invalid(self):
        model = get_model('''\
*** Test Cases ***
Example
    FOR
    END    ooops

    FOR    wrong    IN
''',
                          data_only=True)
        loop1, loop2 = model.sections[0].body[0].body
        expected1 = For(header=ForHeader(
            tokens=[Token(Token.FOR, 'FOR', 3, 4)],
            errors=('FOR loop has no loop variables.',
                    "FOR loop has no 'IN' or other valid separator."),
        ),
                        end=End(tokens=[
                            Token(Token.END, 'END', 4, 4),
                            Token(Token.ARGUMENT, 'ooops', 4, 11)
                        ],
                                errors=('END does not accept arguments.', )),
                        errors=('FOR loop has empty body.', ))
        expected2 = For(header=ForHeader(
            tokens=[
                Token(Token.FOR, 'FOR', 6, 4),
                Token(Token.VARIABLE, 'wrong', 6, 11),
                Token(Token.FOR_SEPARATOR, 'IN', 6, 20)
            ],
            errors=("FOR loop has invalid loop variable 'wrong'.",
                    "FOR loop has no loop values."),
        ),
                        errors=('FOR loop has empty body.',
                                'FOR loop has no closing END.'))
        assert_model(loop1, expected1)
        assert_model(loop2, expected2)
예제 #3
0
    def test_valid(self):
        model = get_model('''\
*** Test Cases ***
Example
    FOR    ${x}    IN    a    b    c
        Log    ${x}
    END
''',
                          data_only=True)
        loop = model.sections[0].body[0].body[0]
        expected = For(header=ForHeader([
            Token(Token.FOR, 'FOR', 3, 4),
            Token(Token.VARIABLE, '${x}', 3, 11),
            Token(Token.FOR_SEPARATOR, 'IN', 3, 19),
            Token(Token.ARGUMENT, 'a', 3, 25),
            Token(Token.ARGUMENT, 'b', 3, 30),
            Token(Token.ARGUMENT, 'c', 3, 35),
        ]),
                       body=[
                           KeywordCall([
                               Token(Token.KEYWORD, 'Log', 4, 8),
                               Token(Token.ARGUMENT, '${x}', 4, 15)
                           ])
                       ],
                       end=End([Token(Token.END, 'END', 5, 4)]))
        assert_model(loop, expected)
예제 #4
0
    def test_continue(self):
        model = get_model('''\
*** Keywords ***
Name
    FOR    ${x}    IN    @{stuff}
        Continue    CONTINUE
        CONTINUE
    END
''', data_only=True)
        expected = KeywordSection(
            header=SectionHeader(
                tokens=[Token(Token.KEYWORD_HEADER, '*** Keywords ***', 1, 0)]
            ),
            body=[
                Keyword(
                    header=KeywordName(
                        tokens=[Token(Token.KEYWORD_NAME, 'Name', 2, 0)]
                    ),
                    body=[
                        For(
                            header=ForHeader([Token(Token.FOR, 'FOR', 3, 4),
                                              Token(Token.VARIABLE, '${x}', 3, 11),
                                              Token(Token.FOR_SEPARATOR, 'IN', 3, 19),
                                              Token(Token.ARGUMENT, '@{stuff}', 3, 25)]),
                            body=[KeywordCall([Token(Token.KEYWORD, 'Continue', 4, 8),
                                               Token(Token.ARGUMENT, 'CONTINUE', 4, 20)]),
                                  Continue([Token(Token.CONTINUE, 'CONTINUE', 5, 8)])],
                            end=End([Token(Token.END, 'END', 6, 4)])
                        )
                    ],
                )
            ]
        )
        assert_model(model.sections[0], expected)
예제 #5
0
    def test_nested(self):
        model = get_model('''\
*** Test Cases ***
Example
    FOR    ${x}    IN    1    2
        FOR    ${y}    IN RANGE    ${x}
            Log    ${y}
        END
    END
''', data_only=True)
        loop = model.sections[0].body[0].body[0]
        expected = For(
            header=ForHeader([
                Token(Token.FOR, 'FOR', 3, 4),
                Token(Token.VARIABLE, '${x}', 3, 11),
                Token(Token.FOR_SEPARATOR, 'IN', 3, 19),
                Token(Token.ARGUMENT, '1', 3, 25),
                Token(Token.ARGUMENT, '2', 3, 30),
            ]),
            body=[
                For(
                    header=ForHeader([
                        Token(Token.FOR, 'FOR', 4, 8),
                        Token(Token.VARIABLE, '${y}', 4, 15),
                        Token(Token.FOR_SEPARATOR, 'IN RANGE', 4, 23),
                        Token(Token.ARGUMENT, '${x}', 4, 35),
                    ]),
                    body=[
                        KeywordCall([Token(Token.KEYWORD, 'Log', 5, 12),
                                     Token(Token.ARGUMENT, '${y}', 5, 19)])
                    ],
                    end=End([
                        Token(Token.END, 'END', 6, 8)
                    ])
                )
            ],
            end=End([
                Token(Token.END, 'END', 7, 4)
            ])
        )
        assert_model(loop, expected)
예제 #6
0
    def test_invalid(self):
        data1 = '''
*** Test Cases ***
Example
    FOR

    END    ooops
'''
        data2 = '''
*** Test Cases ***
Example
    FOR    wrong    IN
'''
        expected1 = For(
            header=ForHeader(
                tokens=[Token(Token.FOR, 'FOR', 3, 4)],
                errors=('FOR loop has no loop variables.',
                        "FOR loop has no 'IN' or other valid separator."),
            ),
            end=End(tokens=[
                Token(Token.END, 'END', 5, 4),
                Token(Token.ARGUMENT, 'ooops', 5, 11)
            ],
                    errors=("END does not accept arguments, got 'ooops'.", )),
            errors=('FOR loop cannot be empty.', ))
        expected2 = For(header=ForHeader(
            tokens=[
                Token(Token.FOR, 'FOR', 3, 4),
                Token(Token.VARIABLE, 'wrong', 3, 11),
                Token(Token.FOR_SEPARATOR, 'IN', 3, 20)
            ],
            errors=("FOR loop has invalid loop variable 'wrong'.",
                    "FOR loop has no loop values."),
        ),
                        errors=('FOR loop cannot be empty.',
                                'FOR loop must have closing END.'))
        get_and_assert_model(data1, expected1)
        get_and_assert_model(data2, expected2)
예제 #7
0
    def test_continue(self):
        data = '''
*** Keywords ***
Name
    FOR    ${x}    IN    @{stuff}
        Continue    CONTINUE
        CONTINUE
    END
'''
        expected = For(header=ForHeader([
            Token(Token.FOR, 'FOR', 3, 4),
            Token(Token.VARIABLE, '${x}', 3, 11),
            Token(Token.FOR_SEPARATOR, 'IN', 3, 19),
            Token(Token.ARGUMENT, '@{stuff}', 3, 25)
        ]),
                       body=[
                           KeywordCall([
                               Token(Token.KEYWORD, 'Continue', 4, 8),
                               Token(Token.ARGUMENT, 'CONTINUE', 4, 20)
                           ]),
                           Continue([Token(Token.CONTINUE, 'CONTINUE', 5, 8)])
                       ],
                       end=End([Token(Token.END, 'END', 6, 4)]))
        get_and_assert_model(data, expected)
예제 #8
0
    def test_valid(self):
        data = '''
*** Test Cases ***
Example
    FOR    ${x}    IN    a    b    c
        Log    ${x}
    END
'''
        expected = For(header=ForHeader([
            Token(Token.FOR, 'FOR', 3, 4),
            Token(Token.VARIABLE, '${x}', 3, 11),
            Token(Token.FOR_SEPARATOR, 'IN', 3, 19),
            Token(Token.ARGUMENT, 'a', 3, 25),
            Token(Token.ARGUMENT, 'b', 3, 30),
            Token(Token.ARGUMENT, 'c', 3, 35),
        ]),
                       body=[
                           KeywordCall([
                               Token(Token.KEYWORD, 'Log', 4, 8),
                               Token(Token.ARGUMENT, '${x}', 4, 15)
                           ])
                       ],
                       end=End([Token(Token.END, 'END', 5, 4)]))
        get_and_assert_model(data, expected)