[jsinterp] Adding ast to while parser test

This commit is contained in:
sulyi 2016-12-12 21:45:08 +01:00
parent a2e42ed416
commit 4b8754c6b0
2 changed files with 30 additions and 5 deletions

View File

@ -882,19 +882,44 @@ class TestJSInterpreterParser(unittest.TestCase):
]
self.assertEqual(list(jsi.statements()), ast)
@unittest.skip('Test not yet implemented: missing ast')
def test_while(self):
# ASAP while statement test
jsi = JSInterpreter('''
function f(x){
i = 1
i = 1;
while (i < x) {
i++;
}
return i;
}
''')
ast = []
ast = [
(Token.FUNC, 'f', ['x'],
(Token.BLOCK, [
(Token.EXPR, [
(Token.ASSIGN, _ASSIGN_OPERATORS['='][1],
(Token.OPEXPR, [(Token.MEMBER, (Token.ID, 'i'), None, None)]),
(Token.ASSIGN, None, (Token.OPEXPR, [(Token.MEMBER, (Token.INT, 1), None, None)]), None))
]),
(Token.WHILE,
(Token.EXPR, [
(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.ID, 'i'), None, None),
(Token.MEMBER, (Token.ID, 'x'), None, None),
(Token.REL, _RELATIONS['<'][1])
]), None)
]),
(Token.BLOCK, [
(Token.EXPR, [
(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.ID, 'i'), None, None),
(Token.UOP, _UNARY_OPERATORS['++'][1])
]), None)
])
])),
(Token.RETURN, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.ID, 'i'), None, None)]), None)]))
]))
]
self.assertEqual(list(jsi.statements()), ast)
@unittest.skip('Test not yet implemented: missing code and ast')

View File

@ -307,7 +307,7 @@ class JSInterpreter(object):
if token_id is not Token.PCLOSE:
raise ExtractorError('''Expected ')' at %d''' % token_pos)
body = self._statement(token_stream, stack_top)
return (Token.DO, expr, body)
return (Token.WHILE, expr, body)
def _return_statement(self, token_stream, stack_top):
token_stream.pop()