[jsinterp] Fixing py3 zip generator issues in parser tests

This commit is contained in:
sulyi 2016-12-10 11:41:59 +01:00
parent 88d2a4ed40
commit 200903cee8

View File

@ -23,6 +23,15 @@ from youtube_dl.jsinterp.tstream import (
) )
def traverse(o, tree_types=(list, tuple)):
if isinstance(o, tree_types) or type(o) == zip:
for value in o:
for subvalue in traverse(value, tree_types):
yield subvalue
else:
yield o
class TestJSInterpreterParser(unittest.TestCase): class TestJSInterpreterParser(unittest.TestCase):
def test_basic(self): def test_basic(self):
jsi = JSInterpreter(';') jsi = JSInterpreter(';')
@ -120,7 +129,7 @@ class TestJSInterpreterParser(unittest.TestCase):
None)] None)]
) )
)] )]
self.assertEqual(list(jsi.statements()), ast) self.assertEqual(list(traverse(list(jsi.statements()))), list(traverse(ast)))
def test_operators(self): def test_operators(self):
jsi = JSInterpreter('return 1 << 5;') jsi = JSInterpreter('return 1 << 5;')
@ -233,7 +242,7 @@ class TestJSInterpreterParser(unittest.TestCase):
]) ])
) )
] ]
self.assertEqual(list(jsi.statements()), ast) self.assertEqual(list(traverse(list(jsi.statements()))), list(traverse(ast)))
def test_parens(self): def test_parens(self):
jsi = JSInterpreter('return (1 + 2) * 3;') jsi = JSInterpreter('return (1 + 2) * 3;')
@ -306,13 +315,13 @@ class TestJSInterpreterParser(unittest.TestCase):
def test_assignments(self): def test_assignments(self):
jsi = JSInterpreter('var x = 20; x = 30 + 1; return x;') jsi = JSInterpreter('var x = 20; x = 30 + 1; return x;')
ast = [ ast = [
(Token.VAR, zip( (Token.VAR, list(zip(
['x'], ['x'],
[(Token.ASSIGN, [(Token.ASSIGN,
None, None,
(Token.OPEXPR, [(Token.MEMBER, (Token.INT, 20), None, None)]), (Token.OPEXPR, [(Token.MEMBER, (Token.INT, 20), None, None)]),
None)] None)]
)), ))),
(Token.EXPR, [ (Token.EXPR, [
(Token.ASSIGN, (Token.ASSIGN,
@ -333,7 +342,7 @@ class TestJSInterpreterParser(unittest.TestCase):
]), None) ]), None)
])) ]))
] ]
self.assertEqual(list(jsi.statements()), ast) self.assertEqual(list(traverse(list(jsi.statements()))), list(traverse(ast)))
jsi = JSInterpreter('var x = 20; x += 30 + 1; return x;') jsi = JSInterpreter('var x = 20; x += 30 + 1; return x;')
ast[1] = (Token.EXPR, [ ast[1] = (Token.EXPR, [
@ -347,7 +356,7 @@ class TestJSInterpreterParser(unittest.TestCase):
(Token.OP, _OPERATORS['+'][1])]), (Token.OP, _OPERATORS['+'][1])]),
None)) None))
]) ])
self.assertEqual(list(jsi.statements()), ast) self.assertEqual(list(traverse(list(jsi.statements()))), list(traverse(ast)))
jsi = JSInterpreter('var x = 20; x -= 30 + 1; return x;') jsi = JSInterpreter('var x = 20; x -= 30 + 1; return x;')
ast[1] = (Token.EXPR, [ ast[1] = (Token.EXPR, [
@ -361,7 +370,7 @@ class TestJSInterpreterParser(unittest.TestCase):
(Token.OP, _OPERATORS['+'][1])]), (Token.OP, _OPERATORS['+'][1])]),
None)) None))
]) ])
self.assertEqual(list(jsi.statements()), ast) self.assertEqual(list(traverse(list(jsi.statements()))), list(traverse(ast)))
def test_comments(self): def test_comments(self):
# var x = 2; var y = 50; return x + y; # var x = 2; var y = 50; return x + y;
@ -392,7 +401,7 @@ class TestJSInterpreterParser(unittest.TestCase):
]), None) ]), None)
])) ]))
] ]
self.assertEqual(list(jsi.statements()), ast) self.assertEqual(list(traverse(list(jsi.statements()))), list(traverse(ast)))
# var x = "/*"; var y = 1 + 2; return y; # var x = "/*"; var y = 1 + 2; return y;
jsi = JSInterpreter('var x = "/*"; var y = 1 /* comment */ + 2; return y;') jsi = JSInterpreter('var x = "/*"; var y = 1 /* comment */ + 2; return y;')
@ -423,7 +432,7 @@ class TestJSInterpreterParser(unittest.TestCase):
None) None)
])) ]))
] ]
self.assertEqual(list(jsi.statements()), ast) self.assertEqual(list(traverse(list(jsi.statements()))), list(traverse(ast)))
def test_precedence(self): def test_precedence(self):
jsi = JSInterpreter(' var a = [10, 20, 30, 40, 50]; var b = 6; a[0]=a[b%a.length]; return a;') jsi = JSInterpreter(' var a = [10, 20, 30, 40, 50]; var b = 6; a[0]=a[b%a.length]; return a;')
@ -491,7 +500,7 @@ class TestJSInterpreterParser(unittest.TestCase):
]) ])
) )
] ]
self.assertEqual(list(jsi.statements()), ast) self.assertEqual(list(traverse(list(jsi.statements()))), list(traverse(ast)))
@unittest.skip('Parsing function declaration not yet implemented') @unittest.skip('Parsing function declaration not yet implemented')
def test_call(self): def test_call(self):