[jsinterp] Fixing py3 zip generator issues in parser tests
This commit is contained in:
parent
88d2a4ed40
commit
200903cee8
@ -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):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user