Ejemplo n.º 1
0
    def test_invalid(self):
        data = '''
*** Variables ***
Ooops     I did it again
${}       invalid
${x}==    invalid
${not     closed
          invalid
&{dict}   invalid    ${invalid}
'''
        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."
                     )),
            ])
        get_and_assert_model(data, expected, depth=0)
Ejemplo n.º 2
0
 def test_Variable(self):
     # ${variable_name}  {'a': 4, 'b': 'abc'}
     tokens = [
         Token(Token.VARIABLE, '${variable_name}'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.ARGUMENT, "{'a': 4, 'b': 'abc'}"),
         Token(Token.EOL, '\n')
     ]
     assert_created_statement(tokens,
                              Variable,
                              name='${variable_name}',
                              value="{'a': 4, 'b': 'abc'}")
     # ${var}    first    second    third
     # @{var}    first    second    third
     # &{var}    first    second    third
     for name in ['${var}', '@{var}', '&{var}']:
         tokens = [
             Token(Token.VARIABLE, name),
             Token(Token.SEPARATOR, '    '),
             Token(Token.ARGUMENT, 'first'),
             Token(Token.SEPARATOR, '    '),
             Token(Token.ARGUMENT, 'second'),
             Token(Token.SEPARATOR, '    '),
             Token(Token.ARGUMENT, 'third'),
             Token(Token.EOL, '\n')
         ]
         assert_created_statement(tokens,
                                  Variable,
                                  name=name,
                                  value=['first', 'second', 'third'])
Ejemplo n.º 3
0
DATA = '''
*** Test Cases ***
Example
    Keyword    arg
    ...    argh

*** Keywords ***
Keyword
    [Arguments]    ${arg1}    ${arg2}
    Log    Got ${arg1} and ${arg}!
'''
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=TestCaseSectionHeader([
        Token('TESTCASE_HEADER', '*** Test Cases ***', 2, 0),
        Token('EOL', '\n', 2, 18)
    ]),
                    body=[
                        TestCase(header=TestCaseName([
                            Token('TESTCASE_NAME', 'Example', 3, 0),
                            Token('EOL', '\n', 3, 7)
                        ]),
                                 body=[
                                     KeywordCall([
                                         Token('SEPARATOR', '    ', 4, 0),
                                         Token('KEYWORD', 'Keyword', 4, 4),
                                         Token('SEPARATOR', '    ', 4, 11),
                                         Token('ARGUMENT', 'arg', 4, 15),
Ejemplo n.º 4
0
    def test_try_except_else_finally(self):
        data = '''
*** Test Cases ***
Example
    TRY
        Fail    Oh no!
    EXCEPT    does not match
        No operation
    EXCEPT    AS    ${exp}
        Log    Catch
    ELSE
        No operation
    FINALLY
        Log    finally here!
    END
'''
        expected = Try(
            header=TryHeader([Token(Token.TRY, 'TRY', 3, 4)]),
            body=[
                KeywordCall([
                    Token(Token.KEYWORD, 'Fail', 4, 8),
                    Token(Token.ARGUMENT, 'Oh no!', 4, 16)
                ])
            ],
            next=Try(
                header=ExceptHeader([
                    Token(Token.EXCEPT, 'EXCEPT', 5, 4),
                    Token(Token.ARGUMENT, 'does not match', 5, 14)
                ]),
                body=[
                    KeywordCall((Token(Token.KEYWORD, 'No operation', 6, 8), ))
                ],
                next=Try(header=ExceptHeader(
                    (Token(Token.EXCEPT, 'EXCEPT', 7,
                           4), Token(Token.AS, 'AS', 7,
                                     14), Token(Token.VARIABLE, '${exp}', 7,
                                                20))),
                         body=[
                             KeywordCall((Token(Token.KEYWORD, 'Log', 8, 8),
                                          Token(Token.ARGUMENT,
                                                'Catch', 8, 15)))
                         ],
                         next=Try(header=ElseHeader(
                             (Token(Token.ELSE, 'ELSE', 9, 4), )),
                                  body=[
                                      KeywordCall(
                                          (Token(Token.KEYWORD, 'No operation',
                                                 10, 8), ))
                                  ],
                                  next=Try(
                                      header=FinallyHeader(
                                          (Token(Token.FINALLY,
                                                 'FINALLY', 11, 4), )),
                                      body=[
                                          KeywordCall(
                                              (Token(Token.KEYWORD, 'Log', 12,
                                                     8),
                                               Token(Token.ARGUMENT,
                                                     'finally here!', 12, 15)))
                                      ])))),
            end=End([Token(Token.END, 'END', 13, 4)]))
        get_and_assert_model(data, expected)
Ejemplo n.º 5
0
 def test_KeywordCall(self):
     # Test
     #     ${return1}    ${return2}    Keyword Call    ${arg1}    ${arg2}
     tokens = [
         Token(Token.SEPARATOR, '    '),
         Token(Token.ASSIGN, '${return1}'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.ASSIGN, '${return2}'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.KEYWORD, 'Keyword Call'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.ARGUMENT, '${arg1}'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.ARGUMENT, '${arg2}'),
         Token(Token.EOL, '\n')
     ]
     assert_created_statement(tokens,
                              KeywordCall,
                              name='Keyword Call',
                              assign=['${return1}', '${return2}'],
                              args=['${arg1}', '${arg2}'])
Ejemplo n.º 6
0
 def test_ExceptHeader(self):
     # EXCEPT
     tokens = [
         Token(Token.SEPARATOR, '    '),
         Token(Token.EXCEPT),
         Token(Token.EOL, '\n')
     ]
     assert_created_statement(tokens, ExceptHeader)
     # EXCEPT    one
     tokens = [
         Token(Token.SEPARATOR, '    '),
         Token(Token.EXCEPT),
         Token(Token.SEPARATOR, '    '),
         Token(Token.ARGUMENT, 'one'),
         Token(Token.EOL, '\n')
     ]
     assert_created_statement(tokens, ExceptHeader, patterns=['one'])
     # EXCEPT    one    two    AS    ${var}
     tokens = [
         Token(Token.SEPARATOR, '    '),
         Token(Token.EXCEPT),
         Token(Token.SEPARATOR, '    '),
         Token(Token.ARGUMENT, 'one'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.ARGUMENT, 'two'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.AS, 'AS'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.VARIABLE, '${var}'),
         Token(Token.EOL, '\n')
     ]
     assert_created_statement(tokens,
                              ExceptHeader,
                              patterns=['one', 'two'],
                              variable='${var}')
     # EXCEPT    Example: *    type=glob
     tokens = [
         Token(Token.SEPARATOR, '    '),
         Token(Token.EXCEPT),
         Token(Token.SEPARATOR, '    '),
         Token(Token.ARGUMENT, 'Example: *'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.OPTION, 'type=glob'),
         Token(Token.EOL, '\n')
     ]
     assert_created_statement(tokens,
                              ExceptHeader,
                              patterns=['Example: *'],
                              type='glob')
     # EXCEPT    Error \\d    (x|y)    type=regexp    AS    ${var}
     tokens = [
         Token(Token.SEPARATOR, '    '),
         Token(Token.EXCEPT),
         Token(Token.SEPARATOR, '    '),
         Token(Token.ARGUMENT, 'Error \\d'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.ARGUMENT, '(x|y)'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.OPTION, 'type=regexp'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.AS, 'AS'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.VARIABLE, '${var}'),
         Token(Token.EOL, '\n')
     ]
     assert_created_statement(tokens,
                              ExceptHeader,
                              patterns=['Error \\d', '(x|y)'],
                              type='regexp',
                              variable='${var}')
Ejemplo n.º 7
0
    def test_nested(self):
        model = get_model('''\
*** Test Cases ***
Example
    IF    ${x}
        Log    ${x}
        IF    ${y}
            Log    ${y}
        ELSE
            Log    ${z}
        END
    END
''',
                          data_only=True)
        node = model.sections[0].body[0].body[0]
        expected = If(header=IfHeader([
            Token(Token.IF, 'IF', 3, 4),
            Token(Token.ARGUMENT, '${x}', 3, 10),
        ]),
                      body=[
                          KeywordCall([
                              Token(Token.KEYWORD, 'Log', 4, 8),
                              Token(Token.ARGUMENT, '${x}', 4, 15)
                          ]),
                          If(header=IfHeader([
                              Token(Token.IF, 'IF', 5, 8),
                              Token(Token.ARGUMENT, '${y}', 5, 14),
                          ]),
                             body=[
                                 KeywordCall([
                                     Token(Token.KEYWORD, 'Log', 6, 12),
                                     Token(Token.ARGUMENT, '${y}', 6, 19)
                                 ])
                             ],
                             orelse=If(header=ElseHeader(
                                 [Token(Token.ELSE, 'ELSE', 7, 8)]),
                                       body=[
                                           KeywordCall([
                                               Token(Token.KEYWORD, 'Log', 8,
                                                     12),
                                               Token(Token.ARGUMENT, '${z}', 8,
                                                     19)
                                           ])
                                       ]),
                             end=End([Token(Token.END, 'END', 9, 8)]))
                      ],
                      end=End([Token(Token.END, 'END', 10, 4)]))
        assert_model(node, expected)
Ejemplo n.º 8
0
    def test_Documentation(self):
        # Documentation    Example documentation
        tokens = [
            Token(Token.DOCUMENTATION, 'Documentation'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.ARGUMENT, 'Example documentation'),
            Token(Token.EOL, '\n')
        ]
        assert_created_statement(tokens,
                                 Documentation,
                                 value='Example documentation')

        # Documentation    First line.
        # ...              Second line aligned.
        # ...
        # ...              Second paragraph.
        tokens = [
            Token(Token.DOCUMENTATION, 'Documentation'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.ARGUMENT, 'First line.'),
            Token(Token.EOL),
            Token(Token.CONTINUATION),
            Token(Token.SEPARATOR, '              '),
            Token(Token.ARGUMENT, 'Second line aligned.'),
            Token(Token.EOL),
            Token(Token.CONTINUATION),
            Token(Token.EOL),
            Token(Token.CONTINUATION),
            Token(Token.SEPARATOR, '              '),
            Token(Token.ARGUMENT, 'Second paragraph.'),
            Token(Token.EOL),
        ]
        assert_created_statement(
            tokens,
            Documentation,
            value='First line.\nSecond line aligned.\n\nSecond paragraph.')

        # Test/Keyword
        #     [Documentation]      First line
        #     ...                  Second line aligned
        #     ...
        #     ...                  Second paragraph.
        tokens = [
            Token(Token.SEPARATOR, '  '),
            Token(Token.DOCUMENTATION, '[Documentation]'),
            Token(Token.SEPARATOR, '      '),
            Token(Token.ARGUMENT, 'First line.'),
            Token(Token.EOL),
            Token(Token.SEPARATOR, '  '),
            Token(Token.CONTINUATION),
            Token(Token.SEPARATOR, '                  '),
            Token(Token.ARGUMENT, 'Second line aligned.'),
            Token(Token.EOL),
            Token(Token.SEPARATOR, '  '),
            Token(Token.CONTINUATION),
            Token(Token.EOL),
            Token(Token.SEPARATOR, '  '),
            Token(Token.CONTINUATION),
            Token(Token.SEPARATOR, '                  '),
            Token(Token.ARGUMENT, 'Second paragraph.'),
            Token(Token.EOL),
        ]
        assert_created_statement(
            tokens,
            Documentation,
            value='First line.\nSecond line aligned.\n\nSecond paragraph.\n',
            indent='  ',
            separator='      ',
            settings_section=False)
Ejemplo n.º 9
0
    def test_try_except_else_finally(self):
        for data_only in [True, False]:
            with self.subTest(data_only=data_only):
                model = get_model('''\
*** Test Cases ***
Example
    TRY
        Fail    Oh no!
    EXCEPT   does not match
        No operation
    EXCEPT    AS    ${exp}
        Log    Catch
    ELSE
        No operation
    FINALLY
        Log    finally here!
    END
        ''',
                                  data_only=data_only)
                node = model.sections[0].body[0].body[0]
                expected = Try(
                    header=TryHeader([Token(Token.TRY, 'TRY', 3, 4)]),
                    body=[
                        KeywordCall([
                            Token(Token.KEYWORD, 'Fail', 4, 8),
                            Token(Token.ARGUMENT, 'Oh no!', 4, 16)
                        ])
                    ],
                    next=Try(
                        header=ExceptHeader([
                            Token(Token.EXCEPT, 'EXCEPT', 5, 4),
                            Token(Token.ARGUMENT, 'does not match', 5, 13)
                        ]),
                        body=[
                            KeywordCall((Token(Token.KEYWORD, 'No operation',
                                               6, 8), ))
                        ],
                        next=Try(
                            header=ExceptHeader(
                                (Token(Token.EXCEPT, 'EXCEPT', 7,
                                       4), Token(Token.AS, 'AS', 7, 14),
                                 Token(Token.VARIABLE, '${exp}', 7, 20))),
                            body=[
                                KeywordCall(
                                    (Token(Token.KEYWORD, 'Log', 8, 8),
                                     Token(Token.ARGUMENT, 'Catch', 8, 15)))
                            ],
                            next=Try(header=ElseHeader(
                                (Token(Token.ELSE, 'ELSE', 9, 4), )),
                                     body=[
                                         KeywordCall(
                                             (Token(Token.KEYWORD,
                                                    'No operation', 10, 8), ))
                                     ],
                                     next=Try(header=FinallyHeader(
                                         (Token(Token.FINALLY, 'FINALLY', 11,
                                                4), )),
                                              body=[
                                                  KeywordCall(
                                                      (Token(
                                                          Token.KEYWORD, 'Log',
                                                          12, 8),
                                                       Token(
                                                           Token.ARGUMENT,
                                                           'finally here!', 12,
                                                           15)))
                                              ])))),
                    end=End([Token(Token.END, 'END', 13, 4)]))

                if not data_only:
                    RemoveNonDataTokensVisitor().visit(node)

                assert_model(node, expected)
Ejemplo n.º 10
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)
Ejemplo n.º 11
0
 def test_EmptyLine(self):
     tokens = [Token(Token.EOL, '\n')]
     assert_created_statement(tokens, EmptyLine, eol='\n')
Ejemplo n.º 12
0
 def visit_Keyword(self, node):
     if not node.body.items or node != self.keywords[-1]:
         node.body.items.append(EmptyLine([Token(Token.EOL,
                                                 self._newline)]))
     self.generic_visit(node)
     return node
Ejemplo n.º 13
0
 def visit_Section(self, node):
     if node != self.sections[-1]:
         node.body.add(EmptyLine([Token(Token.EOL, self._newline)]))
     self.generic_visit(node)
     return node
Ejemplo n.º 14
0
    def test_LibraryImport(self):
        # Library    library_name.py
        tokens = [
            Token(Token.LIBRARY, 'Library'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.NAME, 'library_name.py'),
            Token(Token.EOL, '\n')
        ]
        assert_created_statement(tokens, LibraryImport, name='library_name.py')

        # Library    library_name.py    127.0.0.1    8080
        tokens = [
            Token(Token.LIBRARY, 'Library'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.NAME, 'library_name.py'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.ARGUMENT, '127.0.0.1'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.ARGUMENT, '8080'),
            Token(Token.EOL, '\n')
        ]

        # Library    library_name.py    WITH NAME    anothername
        tokens = [
            Token(Token.LIBRARY, 'Library'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.NAME, 'library_name.py'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.WITH_NAME),
            Token(Token.SEPARATOR, '    '),
            Token(Token.NAME, 'anothername'),
            Token(Token.EOL, '\n')
        ]
        assert_created_statement(tokens,
                                 LibraryImport,
                                 name='library_name.py',
                                 alias='anothername')
Ejemplo n.º 15
0
  # Comment
    Keyword    arg
    ...\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),
Ejemplo n.º 16
0
    def test_VariablesImport(self):
        # Variables    variables.py
        tokens = [
            Token(Token.VARIABLES, 'Variables'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.NAME, 'variables.py'),
            Token(Token.EOL, '\n')
        ]
        assert_created_statement(tokens, VariablesImport, name='variables.py')

        # Variables    variables.py    arg1    2
        tokens = [
            Token(Token.VARIABLES, 'Variables'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.NAME, 'variables.py'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.ARGUMENT, 'arg1'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.ARGUMENT, '2'),
            Token(Token.EOL, '\n')
        ]
        assert_created_statement(tokens,
                                 VariablesImport,
                                 name='variables.py',
                                 args=['arg1', '2'])
Ejemplo n.º 17
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)
Ejemplo n.º 18
0
    def test_Metadata(self):
        tokens = [
            Token(Token.METADATA, 'Metadata'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.NAME, 'Key'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.ARGUMENT, 'Value'),
            Token(Token.EOL, '\n')
        ]
        assert_created_statement(tokens, Metadata, name='Key', value='Value')

        tokens = [
            Token(Token.METADATA, 'Metadata'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.NAME, 'Key'),
            Token(Token.SEPARATOR, '    '),
            Token(Token.ARGUMENT, 'First line'),
            Token(Token.EOL, '\n'),
            Token(Token.CONTINUATION),
            Token(Token.SEPARATOR, '    '),
            Token(Token.ARGUMENT, 'Second line'),
            Token(Token.EOL, '\n')
        ]
        assert_created_statement(tokens,
                                 Metadata,
                                 name='Key',
                                 value='First line\nSecond line')
Ejemplo n.º 19
0
    def test_nested(self):
        data = '''
*** Test Cases ***
Example
    IF    ${x}
        Log    ${x}
        IF    ${y}
            Log    ${y}
        ELSE
            Log    ${z}
        END
    END
'''
        expected = If(header=IfHeader([
            Token(Token.IF, 'IF', 3, 4),
            Token(Token.ARGUMENT, '${x}', 3, 10),
        ]),
                      body=[
                          KeywordCall([
                              Token(Token.KEYWORD, 'Log', 4, 8),
                              Token(Token.ARGUMENT, '${x}', 4, 15)
                          ]),
                          If(header=IfHeader([
                              Token(Token.IF, 'IF', 5, 8),
                              Token(Token.ARGUMENT, '${y}', 5, 14),
                          ]),
                             body=[
                                 KeywordCall([
                                     Token(Token.KEYWORD, 'Log', 6, 12),
                                     Token(Token.ARGUMENT, '${y}', 6, 19)
                                 ])
                             ],
                             orelse=If(header=ElseHeader(
                                 [Token(Token.ELSE, 'ELSE', 7, 8)]),
                                       body=[
                                           KeywordCall([
                                               Token(Token.KEYWORD, 'Log', 8,
                                                     12),
                                               Token(Token.ARGUMENT, '${z}', 8,
                                                     19)
                                           ])
                                       ]),
                             end=End([Token(Token.END, 'END', 9, 8)]))
                      ],
                      end=End([Token(Token.END, 'END', 10, 4)]))
        get_and_assert_model(data, expected)
Ejemplo n.º 20
0
 def test_ForHeader(self):
     # Keyword
     #     FOR  ${value1}  ${value2}  IN ZIP  ${list1}  ${list2}
     tokens = [
         Token(Token.SEPARATOR, '    '),
         Token(Token.FOR),
         Token(Token.SEPARATOR, '  '),
         Token(Token.VARIABLE, '${value1}'),
         Token(Token.SEPARATOR, '  '),
         Token(Token.VARIABLE, '${value2}'),
         Token(Token.SEPARATOR, '  '),
         Token(Token.FOR_SEPARATOR, 'IN ZIP'),
         Token(Token.SEPARATOR, '  '),
         Token(Token.ARGUMENT, '${list1}'),
         Token(Token.SEPARATOR, '  '),
         Token(Token.ARGUMENT, '${list2}'),
         Token(Token.EOL, '\n')
     ]
     assert_created_statement(tokens,
                              ForHeader,
                              flavor='IN ZIP',
                              variables=['${value1}', '${value2}'],
                              values=['${list1}', '${list2}'],
                              separator='  ')
Ejemplo n.º 21
0
    def test_invalid(self):
        data1 = '''
*** Test Cases ***
Example
    ${x} =    ${y}    IF    ELSE    ooops    ELSE IF
'''
        data2 = '''
*** Test Cases ***
Example
    IF    e    K    ELSE
'''
        expected1 = If(
            header=InlineIfHeader([
                Token(Token.ASSIGN, '${x} =', 3, 4),
                Token(Token.ASSIGN, '${y}', 3, 14),
                Token(Token.INLINE_IF, 'IF', 3, 22),
                Token(Token.ARGUMENT, 'ELSE', 3, 28)
            ]),
            body=[KeywordCall([Token(Token.KEYWORD, 'ooops', 3, 36)])],
            orelse=If(
                header=ElseIfHeader(
                    [Token(Token.ELSE_IF, 'ELSE IF', 3, 45)],
                    errors=('ELSE IF must have a condition.', )),
                errors=('ELSE IF branch cannot be empty.', ),
            ),
            end=End([Token(Token.END, '', 3, 52)]))
        expected2 = If(header=InlineIfHeader([
            Token(Token.INLINE_IF, 'IF', 3, 4),
            Token(Token.ARGUMENT, 'e', 3, 10)
        ]),
                       body=[KeywordCall([Token(Token.KEYWORD, 'K', 3, 15)])],
                       orelse=If(
                           header=ElseHeader(
                               [Token(Token.ELSE, 'ELSE', 3, 20)]),
                           errors=('ELSE branch cannot be empty.', ),
                       ),
                       end=End([Token(Token.END, '', 3, 24)]))
        get_and_assert_model(data1, expected1)
        get_and_assert_model(data2, expected2)
Ejemplo n.º 22
0
 def test_WhileHeader(self):
     # WHILE    $cond
     tokens = [
         Token(Token.SEPARATOR, '    '),
         Token(Token.WHILE),
         Token(Token.SEPARATOR, '    '),
         Token(Token.ARGUMENT, '$cond'),
         Token(Token.EOL, '\n')
     ]
     assert_created_statement(tokens, WhileHeader, condition='$cond')
     # WHILE    $cond    limit=100s
     tokens = [
         Token(Token.SEPARATOR, '    '),
         Token(Token.WHILE),
         Token(Token.SEPARATOR, '    '),
         Token(Token.ARGUMENT, '$cond'),
         Token(Token.SEPARATOR, '    '),
         Token(Token.OPTION, 'limit=100s'),
         Token(Token.EOL, '\n')
     ]
     assert_created_statement(tokens,
                              WhileHeader,
                              condition='$cond',
                              limit='100s')
Ejemplo n.º 23
0
 def visit_TestCaseSection(self, node):
     self.generic_visit(node)
     node.body.items.append(
         TestCase(Name([Token('NAME', 'Added'),
                        Token('EOL', '\n')])))
     return node