Skip to content

Commit dc5250e

Browse files
authored
fixes #4118: robot.api.get_token throws an exeption, when an invalid assign with an "=" sign is parsed (#4119)
1 parent 52673d9 commit dc5250e

File tree

2 files changed

+104
-1
lines changed

2 files changed

+104
-1
lines changed

src/robot/variables/search.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def is_dict_variable(self):
124124

125125
def is_assign(self, allow_assign_mark=False):
126126
if allow_assign_mark and self.string.endswith('='):
127-
return search_variable(rstrip(self.string[:-1])).is_assign()
127+
return search_variable(rstrip(self.string[:-1]), ignore_errors=True).is_assign()
128128
return (self.is_variable()
129129
and self.identifier in '$@&'
130130
and not self.items

utest/parsing/test_lexer.py

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,5 +1277,108 @@ def test_keywords(self):
12771277
data_only=True, tokenize_variables=True)
12781278

12791279

1280+
class TestKeywordCallAssign(unittest.TestCase):
1281+
1282+
def test_valid_assign(self):
1283+
data = '''\
1284+
*** Keywords ***
1285+
do something
1286+
${a}
1287+
'''
1288+
expected = [(T.KEYWORD_HEADER, '*** Keywords ***', 1, 0),
1289+
(T.EOS, '', 1, 16),
1290+
(T.KEYWORD_NAME, 'do something', 2, 0),
1291+
(T.EOS, '', 2, 12),
1292+
(T.ASSIGN, '${a}', 3, 4),
1293+
(T.EOS, '', 3, 8)]
1294+
1295+
assert_tokens(data, expected, get_tokens=get_tokens,
1296+
data_only=True, tokenize_variables=True)
1297+
assert_tokens(data, expected, get_tokens=get_resource_tokens,
1298+
data_only=True, tokenize_variables=True)
1299+
assert_tokens(data, expected, get_tokens=get_init_tokens,
1300+
data_only=True, tokenize_variables=True)
1301+
1302+
def test_valid_assign_with_keyword(self):
1303+
data = '''\
1304+
*** Keywords ***
1305+
do something
1306+
${a} do nothing
1307+
'''
1308+
expected = [(T.KEYWORD_HEADER, '*** Keywords ***', 1, 0),
1309+
(T.EOS, '', 1, 16),
1310+
(T.KEYWORD_NAME, 'do something', 2, 0),
1311+
(T.EOS, '', 2, 12),
1312+
(T.ASSIGN, '${a}', 3, 4),
1313+
(T.KEYWORD, 'do nothing', 3, 10),
1314+
(T.EOS, '', 3, 20)]
1315+
1316+
assert_tokens(data, expected, get_tokens=get_tokens,
1317+
data_only=True, tokenize_variables=True)
1318+
assert_tokens(data, expected, get_tokens=get_resource_tokens,
1319+
data_only=True, tokenize_variables=True)
1320+
assert_tokens(data, expected, get_tokens=get_init_tokens,
1321+
data_only=True, tokenize_variables=True)
1322+
1323+
def test_invalid_assign_not_closed_should_be_keyword(self):
1324+
data = '''\
1325+
*** Keywords ***
1326+
do something
1327+
${a
1328+
'''
1329+
expected = [(T.KEYWORD_HEADER, '*** Keywords ***', 1, 0),
1330+
(T.EOS, '', 1, 16),
1331+
(T.KEYWORD_NAME, 'do something', 2, 0),
1332+
(T.EOS, '', 2, 12),
1333+
(T.KEYWORD, '${a', 3, 4),
1334+
(T.EOS, '', 3, 7)]
1335+
1336+
assert_tokens(data, expected, get_tokens=get_tokens,
1337+
data_only=True, tokenize_variables=True)
1338+
assert_tokens(data, expected, get_tokens=get_resource_tokens,
1339+
data_only=True, tokenize_variables=True)
1340+
assert_tokens(data, expected, get_tokens=get_init_tokens,
1341+
data_only=True, tokenize_variables=True)
1342+
1343+
def test_invalid_assign_ends_with_equal_should_be_keyword(self):
1344+
data = '''\
1345+
*** Keywords ***
1346+
do something
1347+
${=
1348+
'''
1349+
expected = [(T.KEYWORD_HEADER, '*** Keywords ***', 1, 0),
1350+
(T.EOS, '', 1, 16),
1351+
(T.KEYWORD_NAME, 'do something', 2, 0),
1352+
(T.EOS, '', 2, 12),
1353+
(T.KEYWORD, '${=', 3, 4),
1354+
(T.EOS, '', 3, 7)]
1355+
1356+
assert_tokens(data, expected, get_tokens=get_tokens,
1357+
data_only=True, tokenize_variables=True)
1358+
assert_tokens(data, expected, get_tokens=get_resource_tokens,
1359+
data_only=True, tokenize_variables=True)
1360+
assert_tokens(data, expected, get_tokens=get_init_tokens,
1361+
data_only=True, tokenize_variables=True)
1362+
1363+
def test_invalid_assign_variable_and_ends_with_equal_should_be_keyword(self):
1364+
data = '''\
1365+
*** Keywords ***
1366+
do something
1367+
${abc def=
1368+
'''
1369+
expected = [(T.KEYWORD_HEADER, '*** Keywords ***', 1, 0),
1370+
(T.EOS, '', 1, 16),
1371+
(T.KEYWORD_NAME, 'do something', 2, 0),
1372+
(T.EOS, '', 2, 12),
1373+
(T.KEYWORD, '${abc def=', 3, 4),
1374+
(T.EOS, '', 3, 14)]
1375+
1376+
assert_tokens(data, expected, get_tokens=get_tokens,
1377+
data_only=True, tokenize_variables=True)
1378+
assert_tokens(data, expected, get_tokens=get_resource_tokens,
1379+
data_only=True, tokenize_variables=True)
1380+
assert_tokens(data, expected, get_tokens=get_init_tokens,
1381+
data_only=True, tokenize_variables=True)
1382+
12801383
if __name__ == '__main__':
12811384
unittest.main()

0 commit comments

Comments
 (0)