From 4b8754c6b029798a5cec1be4c88448075dcbc721 Mon Sep 17 00:00:00 2001 From: sulyi Date: Mon, 12 Dec 2016 21:45:08 +0100 Subject: [PATCH] [jsinterp] Adding ast to while parser test --- test/test_jsinterp_parser.py | 33 +++++++++++++++++++++++++++++---- youtube_dl/jsinterp/jsinterp.py | 2 +- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/test/test_jsinterp_parser.py b/test/test_jsinterp_parser.py index feccb2cce..5eafd2fe4 100644 --- a/test/test_jsinterp_parser.py +++ b/test/test_jsinterp_parser.py @@ -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') diff --git a/youtube_dl/jsinterp/jsinterp.py b/youtube_dl/jsinterp/jsinterp.py index 43947cc99..a19384947 100644 --- a/youtube_dl/jsinterp/jsinterp.py +++ b/youtube_dl/jsinterp/jsinterp.py @@ -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()