From b086b8635de05d469d434bf4c22a8ed598121270 Mon Sep 17 00:00:00 2001 From: c-basalt <117849907+c-basalt@users.noreply.github.com> Date: Tue, 31 Dec 2024 06:25:12 -0500 Subject: [PATCH] update interface --- test/test_jsinterp_external.py | 53 ++++++++++++--------------- yt_dlp/jsinterp/__init__.py | 6 ++-- yt_dlp/jsinterp/_deno.py | 18 ++++++---- yt_dlp/jsinterp/_phantomjs.py | 19 +++++----- yt_dlp/jsinterp/common.py | 65 +++++++++++++++++++++++----------- 5 files changed, 91 insertions(+), 70 deletions(-) diff --git a/test/test_jsinterp_external.py b/test/test_jsinterp_external.py index 9cc4c970f..081f4257a 100644 --- a/test/test_jsinterp_external.py +++ b/test/test_jsinterp_external.py @@ -56,47 +56,44 @@ class TestExternalJSI(unittest.TestCase): def setUp(self): self.ydl = FakeYDL() - self.jsi = self._JSI_CLASS(self.ydl, 19, {}) - if not self.jsi_available(): + self.url = '' + if not self._JSI_CLASS.exe_version: + print(f'{self._JSI_CLASS.__name__} is not installed, skipping') self.skipTest('Not available') - def jsi_available(self): - return self._JSI_CLASS and self._JSI_CLASS.exe_version + @property + def jsi(self): + return self._JSI_CLASS(self.ydl, self.url, 10, {}) def test_execute(self): self.assertEqual(self.jsi.execute('console.log("Hello, world!");'), 'Hello, world!') def test_execute_dom_parse(self): if 'dom' not in self.jsi._SUPPORTED_FEATURES: + print(f'{self._JSI_CLASS.__name__} does not support DOM, skipping') self.skipTest('DOM not supported') self.assertEqual(self.jsi.execute( 'console.log(document.getElementById("test-div").innerHTML);', - location='https://example.com', html='
Hello, world!
'), 'Hello, world!') def test_execute_dom_script(self): if 'dom' not in self.jsi._SUPPORTED_FEATURES: + print(f'{self._JSI_CLASS.__name__} does not support DOM, skipping') self.skipTest('DOM not supported') self.assertEqual(self.jsi.execute( 'console.log(document.getElementById("test-div").innerHTML);', - location='https://example.com', html='''
- - '''), 'Hello, world!') - def test_execute_dom_script_with_error(self): - if 'dom' not in self.jsi._SUPPORTED_FEATURES: - self.skipTest('DOM not supported') self.assertEqual(self.jsi.execute( 'console.log(document.getElementById("test-div").innerHTML);', - location='https://example.com', html='''
@@ -108,20 +105,20 @@ def test_execute_dom_script_with_error(self): '''), 'Hello, world!') - def assert_cookiejar_equal(self, cookiejar: http.cookiejar.CookieJar, ref_cookiejar: http.cookiejar.CookieJar): - for cookie in cookiejar: - ref_cookie = next((c for c in ref_cookiejar if c.name == cookie.name and c.domain == cookie.domain), None) - self.assertEqual(repr(cookie), repr(ref_cookie)) - - def assert_cookie_str_equal(self, cookie_str, ref_cookie_str): - print([cookie_str, ref_cookie_str]) - self.assertEqual(set(cookie_str.split('; ')), set(ref_cookie_str.split('; '))) - def test_execute_cookiejar(self): if 'cookies' not in self.jsi._SUPPORTED_FEATURES: + print(f'{self._JSI_CLASS.__name__} does not support cookies, skipping') self.skipTest('Cookies not supported') cookiejar = YoutubeDLCookieJar() ref_cookiejar = YoutubeDLCookieJar() + + def _assert_expected_execute(cookie_str, ref_cookie_str): + self.assertEqual(set(cookie_str.split('; ')), set(ref_cookie_str.split('; '))) + for cookie in cookiejar: + ref_cookie = next((c for c in ref_cookiejar if c.name == cookie.name + and c.domain == cookie.domain), None) + self.assertEqual(repr(cookie), repr(ref_cookie)) + for test_cookie in [ NetscapeFields('test1', 'test1', '.example.com', '/', False, int(time.time()) + 1000), NetscapeFields('test2', 'test2', '.example.com', '/', True, int(time.time()) + 1000), @@ -137,23 +134,20 @@ def test_execute_cookiejar(self): ref_cookiejar.set_cookie(test_cookie.to_cookie()) # test identity without modification from js - self.assert_cookie_str_equal(self.jsi.execute( - 'console.log(document.cookie);', - location='http://example.com/123/456', - html='
Hello, world!
', - cookiejar=cookiejar), + self.url = 'http://example.com/123/456' + _assert_expected_execute(self.jsi.execute( + 'console.log(document.cookie);', cookiejar=cookiejar), 'test1=test1; test3=test3') - self.assert_cookiejar_equal(cookiejar, ref_cookiejar) # test modification of existing cookie from js new_cookie_1 = NetscapeFields('test1', 'new1', '.example.com', '/', True, int(time.time()) + 900) new_cookie_2 = NetscapeFields('test2', 'new2', '.example.com', '/', True, int(time.time()) + 900) ref_cookiejar.set_cookie(new_cookie_1.to_cookie()) ref_cookiejar.set_cookie(new_cookie_2.to_cookie()) - self.assert_cookie_str_equal(self.jsi.execute( + self.url = 'https://example.com/123/456' + _assert_expected_execute(self.jsi.execute( f'''document.cookie = "test1=new1; secure; expires={new_cookie_1.expire_str()}; domain=.example.com; path=/"; console.log(document.cookie);''', - location='https://example.com/123/456', html=f'''
Hello, world!