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)
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)
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)
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)
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)
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)
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)
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)