Esempio n. 1
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)
Esempio n. 2
0
    def test_invalid(self):
        model = get_model('''\
*** Test Cases ***
Example
    IF    too    many
    ELSE    ooops
    ELSE IF
''',
                          data_only=True)
        node = model.sections[0].body[0].body[0]
        expected = If(
            header=IfHeader([
                Token(Token.IF, 'IF', 3, 4),
                Token(Token.ARGUMENT, 'too', 3, 10),
                Token(Token.ARGUMENT, 'many', 3, 17),
            ]),
            orelse=If(header=ElseHeader([
                Token(Token.ELSE, 'ELSE', 4, 4),
                Token(Token.ARGUMENT, 'ooops', 4, 12)
            ]),
                      orelse=If(header=ElseIfHeader(
                          [Token(Token.ELSE_IF, 'ELSE IF', 5, 4)]),
                                errors=[
                                    'ELSE IF has no condition.',
                                    'ELSE IF has empty body.'
                                ]),
                      errors=['ELSE has condition.', 'ELSE has empty body.']),
            errors=[
                'IF has more than one condition.', 'IF has empty body.',
                'ELSE IF after ELSE.', 'IF has no closing END.'
            ])
        assert_model(node, expected)
Esempio n. 3
0
    def test_if_else_if_else(self):
        model = get_model('''\
*** Test Cases ***
Example
    IF    True
        K1
    ELSE IF    False
        K2
    ELSE
        K3
    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, 'True', 3, 10),
            ]),
            body=[KeywordCall([Token(Token.KEYWORD, 'K1', 4, 8)])],
            orelse=If(
                header=ElseIfHeader([
                    Token(Token.ELSE_IF, 'ELSE IF', 5, 4),
                    Token(Token.ARGUMENT, 'False', 5, 15),
                ]),
                body=[KeywordCall([Token(Token.KEYWORD, 'K2', 6, 8)])],
                orelse=If(
                    header=ElseHeader([
                        Token(Token.ELSE, 'ELSE', 7, 4),
                    ]),
                    body=[KeywordCall([Token(Token.KEYWORD, 'K3', 8, 8)])],
                )),
            end=End([Token(Token.END, 'END', 9, 4)]))
        assert_model(node, expected)
Esempio n. 4
0
    def test_if_else_if_else(self):
        data = '''
*** Test Cases ***
Example
    IF    True
        K1
    ELSE IF    False
        K2
    ELSE
        K3
    END
    '''
        expected = If(
            header=IfHeader([
                Token(Token.IF, 'IF', 3, 4),
                Token(Token.ARGUMENT, 'True', 3, 10),
            ]),
            body=[KeywordCall([Token(Token.KEYWORD, 'K1', 4, 8)])],
            orelse=If(
                header=ElseIfHeader([
                    Token(Token.ELSE_IF, 'ELSE IF', 5, 4),
                    Token(Token.ARGUMENT, 'False', 5, 15),
                ]),
                body=[KeywordCall([Token(Token.KEYWORD, 'K2', 6, 8)])],
                orelse=If(
                    header=ElseHeader([
                        Token(Token.ELSE, 'ELSE', 7, 4),
                    ]),
                    body=[KeywordCall([Token(Token.KEYWORD, 'K3', 8, 8)])],
                )),
            end=End([Token(Token.END, 'END', 9, 4)]))
        get_and_assert_model(data, expected)
Esempio n. 5
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)
Esempio n. 6
0
    def test_invalid(self):
        data1 = '''
*** Test Cases ***
Example
    IF
    ELSE    ooops
        # Empty
    ELSE IF

    END    ooops
'''
        data2 = '''
*** Test Cases ***
Example
    IF
'''
        expected1 = If(
            header=IfHeader(tokens=[Token(Token.IF, 'IF', 3, 4)],
                            errors=('IF must have a condition.', )),
            orelse=If(header=ElseHeader(
                tokens=[
                    Token(Token.ELSE, 'ELSE', 4, 4),
                    Token(Token.ARGUMENT, 'ooops', 4, 12)
                ],
                errors=("ELSE does not accept arguments, got 'ooops'.", )),
                      orelse=If(header=ElseIfHeader(
                          tokens=[Token(Token.ELSE_IF, 'ELSE IF', 6, 4)],
                          errors=('ELSE IF must have a condition.', )),
                                errors=('ELSE IF branch cannot be empty.', )),
                      errors=('ELSE branch cannot be empty.', )),
            end=End(tokens=[
                Token(Token.END, 'END', 8, 4),
                Token(Token.ARGUMENT, 'ooops', 8, 11)
            ],
                    errors=("END does not accept arguments, got 'ooops'.", )),
            errors=('IF branch cannot be empty.',
                    'ELSE IF not allowed after ELSE.'))
        expected2 = If(header=IfHeader(tokens=[Token(Token.IF, 'IF', 3, 4)],
                                       errors=('IF must have a condition.', )),
                       errors=('IF branch cannot be empty.',
                               'IF must have closing END.'))
        get_and_assert_model(data1, expected1)
        get_and_assert_model(data2, expected2)
Esempio n. 7
0
    def test_invalid(self):
        model = get_model('''\
*** Test Cases ***
Example
    IF    too    many
    ELSE    ooops
    ELSE IF
    END    ooops

    IF
''',
                          data_only=True)
        if1, if2 = model.sections[0].body[0].body
        expected1 = If(
            header=IfHeader(tokens=[
                Token(Token.IF, 'IF', 3, 4),
                Token(Token.ARGUMENT, 'too', 3, 10),
                Token(Token.ARGUMENT, 'many', 3, 17)
            ],
                            errors=('IF has more than one condition.', )),
            orelse=If(header=ElseHeader(tokens=[
                Token(Token.ELSE, 'ELSE', 4, 4),
                Token(Token.ARGUMENT, 'ooops', 4, 12)
            ],
                                        errors=('ELSE has condition.', )),
                      orelse=If(header=ElseIfHeader(
                          tokens=[Token(Token.ELSE_IF, 'ELSE IF', 5, 4)],
                          errors=('ELSE IF has no condition.', )),
                                errors=('ELSE IF has empty body.', )),
                      errors=('ELSE has empty body.', )),
            end=End(tokens=[
                Token(Token.END, 'END', 6, 4),
                Token(Token.ARGUMENT, 'ooops', 6, 11)
            ],
                    errors=('END does not accept arguments.', )),
            errors=('IF has empty body.', 'ELSE IF after ELSE.'))
        expected2 = If(header=IfHeader(tokens=[Token(Token.IF, 'IF', 8, 4)],
                                       errors=('IF has no condition.', )),
                       errors=('IF has empty body.', 'IF has no closing END.'))
        assert_model(if1, expected1)
        assert_model(if2, expected2)
Esempio n. 8
0
    def test_invalid(self):
        model = get_model('''\
*** Test Cases ***
Example
    IF
    ELSE    ooops
    ELSE IF
    END    ooops

    IF
''',
                          data_only=True)
        if1, if2 = model.sections[0].body[0].body
        expected1 = If(
            header=IfHeader(tokens=[Token(Token.IF, 'IF', 3, 4)],
                            errors=('IF must have a condition.', )),
            orelse=If(header=ElseHeader(
                tokens=[
                    Token(Token.ELSE, 'ELSE', 4, 4),
                    Token(Token.ARGUMENT, 'ooops', 4, 12)
                ],
                errors=("ELSE does not accept arguments, got 'ooops'.", )),
                      orelse=If(header=ElseIfHeader(
                          tokens=[Token(Token.ELSE_IF, 'ELSE IF', 5, 4)],
                          errors=('ELSE IF must have a condition.', )),
                                errors=('ELSE IF branch cannot be empty.', )),
                      errors=('ELSE branch cannot be empty.', )),
            end=End(tokens=[
                Token(Token.END, 'END', 6, 4),
                Token(Token.ARGUMENT, 'ooops', 6, 11)
            ],
                    errors=("END does not accept arguments, got 'ooops'.", )),
            errors=('IF branch cannot be empty.', 'ELSE IF after ELSE.'))
        expected2 = If(header=IfHeader(tokens=[Token(Token.IF, 'IF', 8, 4)],
                                       errors=('IF must have a condition.', )),
                       errors=('IF branch cannot be empty.',
                               'IF has no closing END.'))
        assert_model(if1, expected1)
        assert_model(if2, expected2)
Esempio n. 9
0
    def test_if(self):
        data = '''
*** Test Cases ***
Example
    IF    True
        Keyword
        Another    argument
    END
    '''
        expected = If(header=IfHeader([
            Token(Token.IF, 'IF', 3, 4),
            Token(Token.ARGUMENT, 'True', 3, 10),
        ]),
                      body=[
                          KeywordCall([Token(Token.KEYWORD, 'Keyword', 4, 8)]),
                          KeywordCall([
                              Token(Token.KEYWORD, 'Another', 5, 8),
                              Token(Token.ARGUMENT, 'argument', 5, 19)
                          ])
                      ],
                      end=End([Token(Token.END, 'END', 6, 4)]))
        get_and_assert_model(data, expected)
Esempio n. 10
0
    def test_if(self):
        model = get_model('''\
*** Test Cases ***
Example
    IF    True
        Keyword
        Another    argument
    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, 'True', 3, 10),
            ]),
            body=[
                KeywordCall([Token(Token.KEYWORD, 'Keyword', 4, 8)]),
                KeywordCall([Token(Token.KEYWORD, 'Another', 5, 8),
                             Token(Token.ARGUMENT, 'argument', 5, 19)])
            ],
            end=End([Token(Token.END, 'END', 6, 4)])
        )
        assert_model(node, expected)