[jsinterp] Adding switch ast to parser test

This commit is contained in:
sulyi 2016-12-12 16:27:15 +01:00
parent 007f19ea49
commit cf4c9c3db8
2 changed files with 52 additions and 6 deletions

View File

@ -731,7 +731,6 @@ class TestJSInterpreterParser(unittest.TestCase):
]
self.assertEqual(list(jsi.statements()), ast)
@unittest.skip('Test not yet implemented: missing ast')
def test_switch(self):
# ASAP switch statement test
jsi = JSInterpreter(
@ -752,8 +751,54 @@ class TestJSInterpreterParser(unittest.TestCase):
}
'''
)
ast = []
self.assertEqual(list(jsi.statements()), ast)
ast = [
(Token.FUNC, 'a', ['x'],
(Token.BLOCK, [
(Token.SWITCH, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.ID, 'x'), None, None)
]), None)]),
[
((Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 6), None, None)]), None)]),
[
(Token.BREAK, None)
]),
((Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 5), None, None)]), None)]),
[
(Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.ID, 'x'), None, None),
(Token.UOP, _UNARY_OPERATORS['++'][1])
]), None)])
]),
((Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 8), None, None)]), None)]),
[
(Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.ID, 'x'), None, None),
(Token.UOP, _UNARY_OPERATORS['--'][1])
]), None)]),
(Token.BREAK, None)
]),
(None,
[
(Token.EXPR, [
(Token.ASSIGN,
_ASSIGN_OPERATORS['='][1],
(Token.OPEXPR, [(Token.MEMBER, (Token.ID, 'x'), None, None)]),
(Token.ASSIGN, None, (Token.OPEXPR, [(Token.MEMBER, (Token.INT, 0), None, None)]), None)
)
])
])
]
),
(Token.RETURN, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.ID, 'x'), None, None)]), None)]))
]))
]
result = list(jsi.statements())
self.assertEqual(result, ast)
@unittest.skip('Test not yet implemented: missing ast')
def test_for(self):

View File

@ -314,11 +314,12 @@ class JSInterpreter(object):
break
elif token_id is Token.END and token_stream.ended:
raise ExtractorError('Unbalanced parentheses at %d' % open_pos)
statement_list.append(self._next_statement(token_id, stack_top - 1))
token_stream.pop()
statement_list.append(self._next_statement(token_stream, stack_top - 1))
block.append((expr, statement_list))
statement = (Token.BLOCK, discriminant, block)
token_stream.pop()
statement = (Token.SWITCH, discriminant, block)
elif token_value == 'throw':
token_stream.pop()