From cf4c9c3db8f1086e240b03a76029cd8dbf5a2ca6 Mon Sep 17 00:00:00 2001 From: sulyi Date: Mon, 12 Dec 2016 16:27:15 +0100 Subject: [PATCH] [jsinterp] Adding switch ast to parser test --- test/test_jsinterp_parser.py | 51 +++++++++++++++++++++++++++++++-- youtube_dl/jsinterp/jsinterp.py | 7 +++-- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/test/test_jsinterp_parser.py b/test/test_jsinterp_parser.py index 8381412ee..71c8ce161 100644 --- a/test/test_jsinterp_parser.py +++ b/test/test_jsinterp_parser.py @@ -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): diff --git a/youtube_dl/jsinterp/jsinterp.py b/youtube_dl/jsinterp/jsinterp.py index 1c67ce59b..79726540e 100644 --- a/youtube_dl/jsinterp/jsinterp.py +++ b/youtube_dl/jsinterp/jsinterp.py @@ -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()