mirror of https://github.com/yt-dlp/yt-dlp.git
parent
83c4970e52
commit
8b008d6254
|
@ -155,6 +155,38 @@ class TestJSInterpreter(unittest.TestCase):
|
||||||
self.assertEqual(jsi.call_function('z'), 5)
|
self.assertEqual(jsi.call_function('z'), 5)
|
||||||
self.assertEqual(jsi.call_function('y'), 2)
|
self.assertEqual(jsi.call_function('y'), 2)
|
||||||
|
|
||||||
|
def test_if(self):
|
||||||
|
jsi = JSInterpreter('''
|
||||||
|
function x() {
|
||||||
|
let a = 9;
|
||||||
|
if (0==0) {a++}
|
||||||
|
return a
|
||||||
|
}''')
|
||||||
|
self.assertEqual(jsi.call_function('x'), 10)
|
||||||
|
|
||||||
|
jsi = JSInterpreter('''
|
||||||
|
function x() {
|
||||||
|
if (0==0) {return 10}
|
||||||
|
}''')
|
||||||
|
self.assertEqual(jsi.call_function('x'), 10)
|
||||||
|
|
||||||
|
jsi = JSInterpreter('''
|
||||||
|
function x() {
|
||||||
|
if (0!=0) {return 1}
|
||||||
|
else {return 10}
|
||||||
|
}''')
|
||||||
|
self.assertEqual(jsi.call_function('x'), 10)
|
||||||
|
|
||||||
|
""" # Unsupported
|
||||||
|
jsi = JSInterpreter('''
|
||||||
|
function x() {
|
||||||
|
if (0!=0) {return 1}
|
||||||
|
else if (1==0) {return 2}
|
||||||
|
else {return 10}
|
||||||
|
}''')
|
||||||
|
self.assertEqual(jsi.call_function('x'), 10)
|
||||||
|
"""
|
||||||
|
|
||||||
def test_for_loop(self):
|
def test_for_loop(self):
|
||||||
jsi = JSInterpreter('''
|
jsi = JSInterpreter('''
|
||||||
function x() { a=0; for (i=0; i-10; i++) {a++} return a }
|
function x() { a=0; for (i=0; i-10; i++) {a++} return a }
|
||||||
|
|
|
@ -134,6 +134,10 @@ _NSIG_TESTS = [
|
||||||
'https://www.youtube.com/s/player/7a062b77/player_ias.vflset/en_US/base.js',
|
'https://www.youtube.com/s/player/7a062b77/player_ias.vflset/en_US/base.js',
|
||||||
'NRcE3y3mVtm_cV-W', 'VbsCYUATvqlt5w',
|
'NRcE3y3mVtm_cV-W', 'VbsCYUATvqlt5w',
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
'https://www.youtube.com/s/player/dac945fd/player_ias.vflset/en_US/base.js',
|
||||||
|
'o8BkRxXhuYsBCWi6RplPdP', '3Lx32v_hmzTm6A',
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -403,10 +403,25 @@ class JSInterpreter:
|
||||||
|
|
||||||
m = re.match(r'''(?x)
|
m = re.match(r'''(?x)
|
||||||
(?P<try>try)\s*\{|
|
(?P<try>try)\s*\{|
|
||||||
|
(?P<if>if)\s*\(|
|
||||||
(?P<switch>switch)\s*\(|
|
(?P<switch>switch)\s*\(|
|
||||||
(?P<for>for)\s*\(
|
(?P<for>for)\s*\(
|
||||||
''', expr)
|
''', expr)
|
||||||
md = m.groupdict() if m else {}
|
md = m.groupdict() if m else {}
|
||||||
|
if md.get('if'):
|
||||||
|
cndn, expr = self._separate_at_paren(expr[m.end() - 1:])
|
||||||
|
if_expr, expr = self._separate_at_paren(expr.lstrip())
|
||||||
|
# TODO: "else if" is not handled
|
||||||
|
else_expr = None
|
||||||
|
m = re.match(r'else\s*{', expr)
|
||||||
|
if m:
|
||||||
|
else_expr, expr = self._separate_at_paren(expr[m.end() - 1:])
|
||||||
|
cndn = _js_ternary(self.interpret_expression(cndn, local_vars, allow_recursion))
|
||||||
|
ret, should_abort = self.interpret_statement(
|
||||||
|
if_expr if cndn else else_expr, local_vars, allow_recursion)
|
||||||
|
if should_abort:
|
||||||
|
return ret, True
|
||||||
|
|
||||||
if md.get('try'):
|
if md.get('try'):
|
||||||
try_expr, expr = self._separate_at_paren(expr[m.end() - 1:])
|
try_expr, expr = self._separate_at_paren(expr[m.end() - 1:])
|
||||||
err = None
|
err = None
|
||||||
|
|
Loading…
Reference in New Issue