Exemple #1
0
    def test_valid(self):
        data = '''
*** Variables ***
${x}      value
@{y}=     two    values
&{z} =    one=item
'''
        expected = VariableSection(header=SectionHeader(
            tokens=[Token(Token.VARIABLE_HEADER, '*** Variables ***', 1, 0)]),
                                   body=[
                                       Variable([
                                           Token(Token.VARIABLE, '${x}', 2, 0),
                                           Token(Token.ARGUMENT, 'value', 2,
                                                 10)
                                       ]),
                                       Variable([
                                           Token(Token.VARIABLE, '@{y}=', 3,
                                                 0),
                                           Token(Token.ARGUMENT, 'two', 3, 10),
                                           Token(Token.ARGUMENT, 'values', 3,
                                                 17)
                                       ]),
                                       Variable([
                                           Token(Token.VARIABLE, '&{z} =', 4,
                                                 0),
                                           Token(Token.ARGUMENT, 'one=item', 4,
                                                 10)
                                       ]),
                                   ])
        get_and_assert_model(data, expected, depth=0)
Exemple #2
0
    def test_model_error_with_error_and_fatal_error(self):
        model = get_resource_model('''\
*** Invalid ***
*** Settings ***
Invalid
Documentation
*** Test Cases ***
''',
                                   data_only=True)
        inv_header = (
            "Unrecognized section header '*** Invalid ***'. Valid sections: "
            "'Settings', 'Variables', 'Keywords' and 'Comments'.")
        inv_setting = "Non-existing setting 'Invalid'."
        inv_testcases = "Resource file with 'Test Cases' section is invalid."
        expected = File([
            CommentSection(body=[
                Error([Token('ERROR', '*** Invalid ***', 1, 0, inv_header)])
            ]),
            SettingSection(
                header=SectionHeader(
                    [Token('SETTING HEADER', '*** Settings ***', 2, 0)]),
                body=[
                    Error([Token('ERROR', 'Invalid', 3, 0, inv_setting)]),
                    Documentation(
                        [Token('DOCUMENTATION', 'Documentation', 4, 0)]),
                    Error([
                        Token('FATAL ERROR', '*** Test Cases ***', 5, 0,
                              inv_testcases)
                    ])
                ])
        ])
        assert_model(model, expected)
Exemple #3
0
    def test_break(self):
        model = get_model('''\
*** Keywords ***
Name
    WHILE    True
        Break    BREAK
        BREAK
    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=[
                        While(header=WhileHeader([
                            Token(Token.WHILE, 'WHILE', 3, 4),
                            Token(Token.ARGUMENT, 'True', 3, 13)
                        ]),
                              body=[
                                  KeywordCall([
                                      Token(Token.KEYWORD, 'Break', 4, 8),
                                      Token(Token.ARGUMENT, 'BREAK', 4, 17)
                                  ]),
                                  Break([Token(Token.BREAK, 'BREAK', 5, 8)])
                              ],
                              end=End([Token(Token.END, 'END', 6, 4)]))
                    ],
                )
            ])
        assert_model(model.sections[0], expected)
    def test_valid(self):
        model = get_model('''\
*** Variables ***
${x}      value
@{y}=     two    values
&{z} =    one=item
''',
                          data_only=True)
        expected = VariableSection(header=SectionHeader(
            tokens=[Token(Token.VARIABLE_HEADER, '*** Variables ***', 1, 0)]),
                                   body=[
                                       Variable([
                                           Token(Token.VARIABLE, '${x}', 2, 0),
                                           Token(Token.ARGUMENT, 'value', 2,
                                                 10)
                                       ]),
                                       Variable([
                                           Token(Token.VARIABLE, '@{y}=', 3,
                                                 0),
                                           Token(Token.ARGUMENT, 'two', 3, 10),
                                           Token(Token.ARGUMENT, 'values', 3,
                                                 17)
                                       ]),
                                       Variable([
                                           Token(Token.VARIABLE, '&{z} =', 4,
                                                 0),
                                           Token(Token.ARGUMENT, 'one=item', 4,
                                                 10)
                                       ]),
                                   ])
        assert_model(model.sections[0], expected)
Exemple #5
0
    def test_return(self):
        model = get_model('''\
*** Keywords ***
Name
    Return    RETURN
    RETURN    RETURN
''',
                          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=[
                        KeywordCall([
                            Token(Token.KEYWORD, 'Return', 3, 4),
                            Token(Token.ARGUMENT, 'RETURN', 3, 14)
                        ]),
                        ReturnStatement([
                            Token(Token.RETURN_STATEMENT, 'RETURN', 4, 4),
                            Token(Token.ARGUMENT, 'RETURN', 4, 14)
                        ])
                    ],
                )
            ])
        assert_model(model.sections[0], expected)
    def test_model(self):
        model = get_model('''\
*** Invalid ***
*** Settings ***
Invalid
Documentation
''', data_only=True)
        inv_header = (
            "Unrecognized section header '*** Invalid ***'. Valid sections: "
            "'Settings', 'Variables', 'Test Cases', 'Tasks', 'Keywords' and 'Comments'."
        )
        inv_setting = "Non-existing setting 'Invalid'."
        expected = File([
            CommentSection(
                body=[
                    Error([Token('ERROR', '*** Invalid ***', 1, 0, inv_header)])
                ]
            ),
            SettingSection(
                header=SectionHeader([
                    Token('SETTING HEADER', '*** Settings ***', 2, 0)
                ]),
                body=[
                    Error([Token('ERROR', 'Invalid', 3, 0, inv_setting)]),
                    Documentation([Token('DOCUMENTATION', 'Documentation', 4, 0)])
                ]
            )
        ])
        assert_model(model, expected)
Exemple #7
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)
Exemple #8
0
    def test_ast_NodeTransformer(self):
        class Transformer(ast.NodeTransformer):
            def visit_Tags(self, node):
                return None

            def visit_TestCaseSection(self, node):
                self.generic_visit(node)
                node.body.append(
                    TestCase(
                        TestCaseName([
                            Token('TESTCASE NAME', 'Added'),
                            Token('EOL', '\n')
                        ])))
                return node

            def visit_TestCase(self, node):
                self.generic_visit(node)
                return node if node.name != 'REMOVE' else None

            def visit_TestCaseName(self, node):
                name_token = node.get_token(Token.TESTCASE_NAME)
                name_token.value = name_token.value.upper()
                return node

            def visit_Block(self, node):
                raise RuntimeError('Should not be executed.')

            def visit_Statement(self, node):
                raise RuntimeError('Should not be executed.')

        model = get_model('''\
*** Test Cases ***
Example
    [Tags]    to be removed
Remove
''')
        Transformer().visit(model)
        expected = File(sections=[
            TestCaseSection(header=SectionHeader([
                Token('TESTCASE HEADER', '*** Test Cases ***', 1, 0),
                Token('EOL', '\n', 1, 18)
            ]),
                            body=[
                                TestCase(
                                    TestCaseName([
                                        Token('TESTCASE NAME', 'EXAMPLE', 2,
                                              0),
                                        Token('EOL', '\n', 2, 7)
                                    ])),
                                TestCase(
                                    TestCaseName([
                                        Token('TESTCASE NAME', 'Added'),
                                        Token('EOL', '\n')
                                    ]))
                            ])
        ])
        assert_model(model, expected)
    def test_invalid(self):
        model = get_model('''\
*** Variables ***
Ooops     I did it again
${}       invalid
${x}==    invalid
${not     closed
          invalid
&{dict}   invalid    ${invalid}
''',
                          data_only=True)
        expected = VariableSection(
            header=SectionHeader(tokens=[
                Token(Token.VARIABLE_HEADER, '*** Variables ***', 1, 0)
            ]),
            body=[
                Variable(tokens=[
                    Token(Token.VARIABLE, 'Ooops', 2, 0),
                    Token(Token.ARGUMENT, 'I did it again', 2, 10)
                ],
                         errors=("Invalid variable name 'Ooops'.", )),
                Variable(tokens=[
                    Token(Token.VARIABLE, '${}', 3, 0),
                    Token(Token.ARGUMENT, 'invalid', 3, 10)
                ],
                         errors=("Invalid variable name '${}'.", )),
                Variable(tokens=[
                    Token(Token.VARIABLE, '${x}==', 4, 0),
                    Token(Token.ARGUMENT, 'invalid', 4, 10)
                ],
                         errors=("Invalid variable name '${x}=='.", )),
                Variable(tokens=[
                    Token(Token.VARIABLE, '${not', 5, 0),
                    Token(Token.ARGUMENT, 'closed', 5, 10)
                ],
                         errors=("Invalid variable name '${not'.", )),
                Variable(tokens=[
                    Token(Token.VARIABLE, '', 6, 0),
                    Token(Token.ARGUMENT, 'invalid', 6, 10)
                ],
                         errors=("Invalid variable name ''.", )),
                Variable(
                    tokens=[
                        Token(Token.VARIABLE, '&{dict}', 7, 0),
                        Token(Token.ARGUMENT, 'invalid', 7, 10),
                        Token(Token.ARGUMENT, '${invalid}', 7, 21)
                    ],
                    errors=
                    ("Invalid dictionary variable item 'invalid'. "
                     "Items must use 'name=value' syntax or be dictionary variables themselves.",
                     "Invalid dictionary variable item '${invalid}'. "
                     "Items must use 'name=value' syntax or be dictionary variables themselves."
                     )),
            ])
        assert_model(model.sections[0], expected)
    def test_ModelTransformer(self):

        class Transformer(ModelTransformer):

            def visit_SectionHeader(self, node):
                return node

            def visit_TestCaseName(self, node):
                return node

            def visit_Statement(self, node):
                return None

            def visit_Block(self, node):
                self.generic_visit(node)
                if hasattr(node, 'header'):
                    for token in node.header.data_tokens:
                        token.value = token.value.upper()
                return node

        model = get_model('''\
*** Test Cases ***
Example
    [Tags]    to be removed
    To be removed
''')
        Transformer().visit(model)
        expected = File(sections=[
            TestCaseSection(
                header=SectionHeader([
                    Token('TESTCASE HEADER', '*** TEST CASES ***', 1, 0),
                    Token('EOL', '\n', 1, 18)
                ]),
                body=[
                    TestCase(TestCaseName([
                        Token('TESTCASE NAME', 'EXAMPLE', 2, 0),
                        Token('EOL', '\n', 2, 7)
                    ])),
                ]
            )
        ])
        assert_model(model, expected)
Exemple #11
0
    def test_invalid_arg_spec(self):
        model = get_model('''\
*** Keywords ***
Invalid
    [Arguments]    ooops    ${optional}=default    ${required}
    ...    @{too}    @{many}    &{notlast}    ${x}
''',
                          data_only=True)
        expected = KeywordSection(
            header=SectionHeader(
                tokens=[Token(Token.KEYWORD_HEADER, '*** Keywords ***', 1, 0)
                        ]),
            body=[
                Keyword(
                    header=KeywordName(
                        tokens=[Token(Token.KEYWORD_NAME, 'Invalid', 2, 0)]),
                    body=[
                        Arguments(
                            tokens=[
                                Token(Token.ARGUMENTS, '[Arguments]', 3, 4),
                                Token(Token.ARGUMENT, 'ooops', 3, 19),
                                Token(Token.ARGUMENT, '${optional}=default', 3,
                                      28),
                                Token(Token.ARGUMENT, '${required}', 3, 51),
                                Token(Token.ARGUMENT, '@{too}', 4, 11),
                                Token(Token.ARGUMENT, '@{many}', 4, 21),
                                Token(Token.ARGUMENT, '&{notlast}', 4, 32),
                                Token(Token.ARGUMENT, '${x}', 4, 46)
                            ],
                            errors=(
                                "Invalid argument syntax 'ooops'.",
                                'Non-default argument after default arguments.',
                                'Cannot have multiple varargs.',
                                'Only last argument can be kwargs.'))
                    ],
                )
            ])
        assert_model(model.sections[0], expected)
Exemple #12
0
    ...\targh

\t\t
*** Keywords ***
# Comment    continues
Keyword
    [Arguments]    ${arg1}    ${arg2}
    Log    Got ${arg1} and ${arg}!
    RETURN    x
'''
PATH = os.path.join(
    os.getenv('TEMPDIR') or tempfile.gettempdir(), 'test_model.robot')
EXPECTED = File(sections=[
    CommentSection(body=[EmptyLine([Token('EOL', '\n', 1, 0)])]),
    TestCaseSection(header=SectionHeader([
        Token('TESTCASE HEADER', '*** Test Cases ***', 2, 0),
        Token('EOL', '\n', 2, 18)
    ]),
                    body=[
                        EmptyLine([Token('EOL', '\n', 3, 0)]),
                        TestCase(header=TestCaseName([
                            Token('TESTCASE NAME', 'Example', 4, 0),
                            Token('EOL', '\n', 4, 7)
                        ]),
                                 body=[
                                     Comment([
                                         Token('SEPARATOR', '  ', 5, 0),
                                         Token('COMMENT', '# Comment', 5, 2),
                                         Token('EOL', '\n', 5, 11),
                                     ]),
                                     KeywordCall([
                                         Token('SEPARATOR', '    ', 6, 0),