aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/test_jsinterp.py26
-rw-r--r--yt_dlp/casefold.py5
-rw-r--r--yt_dlp/jsinterp.py2
3 files changed, 32 insertions, 1 deletions
diff --git a/test/test_jsinterp.py b/test/test_jsinterp.py
index e9682ddab..86928a6a0 100644
--- a/test/test_jsinterp.py
+++ b/test/test_jsinterp.py
@@ -35,6 +35,21 @@ class TestJSInterpreter(unittest.TestCase):
self._test('function f(){42}', None)
self._test('var f = function(){return 42;}', 42)
+ def test_add(self):
+ self._test('function f(){return 42 + 7;}', 49)
+ self._test('function f(){return 42 + undefined;}', NaN)
+ self._test('function f(){return 42 + null;}', 42)
+
+ def test_sub(self):
+ self._test('function f(){return 42 - 7;}', 35)
+ self._test('function f(){return 42 - undefined;}', NaN)
+ self._test('function f(){return 42 - null;}', 42)
+
+ def test_mul(self):
+ self._test('function f(){return 42 * 7;}', 294)
+ self._test('function f(){return 42 * undefined;}', NaN)
+ self._test('function f(){return 42 * null;}', 0)
+
def test_div(self):
jsi = JSInterpreter('function f(a, b){return a / b;}')
self._test(jsi, NaN, args=(0, 0))
@@ -42,6 +57,17 @@ class TestJSInterpreter(unittest.TestCase):
self._test(jsi, float('inf'), args=(2, 0))
self._test(jsi, 0, args=(0, 3))
+ def test_mod(self):
+ self._test('function f(){return 42 % 7;}', 0)
+ self._test('function f(){return 42 % 0;}', NaN)
+ self._test('function f(){return 42 % undefined;}', NaN)
+
+ def test_exp(self):
+ self._test('function f(){return 42 ** 2;}', 1764)
+ self._test('function f(){return 42 ** undefined;}', NaN)
+ self._test('function f(){return 42 ** null;}', 1)
+ self._test('function f(){return undefined ** 42;}', NaN)
+
def test_calc(self):
self._test('function f(a){return 2*a+1;}', 7, args=[3])
diff --git a/yt_dlp/casefold.py b/yt_dlp/casefold.py
new file mode 100644
index 000000000..41a53e5b6
--- /dev/null
+++ b/yt_dlp/casefold.py
@@ -0,0 +1,5 @@
+import warnings
+
+warnings.warn(DeprecationWarning(f'{__name__} is deprecated'))
+
+casefold = str.casefold
diff --git a/yt_dlp/jsinterp.py b/yt_dlp/jsinterp.py
index 9c280fb86..bda3fb459 100644
--- a/yt_dlp/jsinterp.py
+++ b/yt_dlp/jsinterp.py
@@ -812,9 +812,9 @@ class JSInterpreter:
\((?P<args>[^)]*)\)\s*
(?P<code>{.+})''' % {'name': re.escape(funcname)},
self.code)
- code, _ = self._separate_at_paren(func_m.group('code'))
if func_m is None:
raise self.Exception(f'Could not find JS function "{funcname}"')
+ code, _ = self._separate_at_paren(func_m.group('code'))
return [x.strip() for x in func_m.group('args').split(',')], code
def extract_function(self, funcname):