From 160437b11c253d176e18ac03559785d9774af382 Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Wed, 14 Jan 2026 01:07:11 -0500 Subject: [PATCH 1/5] Add tests for thenables returned from async script --- .../classic/execute_async_script/promise.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/webdriver/tests/classic/execute_async_script/promise.py b/webdriver/tests/classic/execute_async_script/promise.py index d726d0d7128303..4458f32961ed3a 100644 --- a/webdriver/tests/classic/execute_async_script/promise.py +++ b/webdriver/tests/classic/execute_async_script/promise.py @@ -116,3 +116,28 @@ def test_promise_reject_timeout(session): resolve(promise); """) assert_error(response, "script timeout") + + +def test_returned_promise_fulfilled(session): + response = execute_async_script(session, """ + let resolve = arguments[0]; + setTimeout(() => resolve('callback'), 50); + return Promise.resolve('promise'); + """) + assert_success(response, "promise") + + +def test_returned_promise_rejected(session): + session.timeouts.script = .1 + response = execute_async_script(session, """ + return Promise.reject(new Error ('my error')); + """) + assert_error(response, "javascript error") + + +def test_returned_poisoned_thenable(session): + session.timeouts.script = .1 + response = execute_async_script(session, """ + return { get then() { thow new Error('my error'); } }; + """) + assert_error(response, "javascript error") From 240ebfca2593c9404272f5cae233d5deba88e166 Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Fri, 23 Jan 2026 21:35:46 -0500 Subject: [PATCH 2/5] Incorporate review feedback --- .../classic/execute_async_script/promise.py | 19 +++++++++++-------- .../tests/classic/execute_script/promise.py | 8 ++++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/webdriver/tests/classic/execute_async_script/promise.py b/webdriver/tests/classic/execute_async_script/promise.py index 4458f32961ed3a..398539bdf07f0a 100644 --- a/webdriver/tests/classic/execute_async_script/promise.py +++ b/webdriver/tests/classic/execute_async_script/promise.py @@ -118,21 +118,24 @@ def test_promise_reject_timeout(session): assert_error(response, "script timeout") -def test_returned_promise_fulfilled(session): +def test_returned_promise_fulfilled_over_callback(session): + session.timeouts.script = 1 response = execute_async_script(session, """ let resolve = arguments[0]; - setTimeout(() => resolve('callback'), 50); - return Promise.resolve('promise'); + resolve('callback'); + return new Promise((resolve) => { + setTimeout(() => resolve('promise'), 100); + }); """) assert_success(response, "promise") -def test_returned_promise_rejected(session): - session.timeouts.script = .1 +def test_returned_promise_rejected_over_callback(session): + session.timeouts.script = 1 response = execute_async_script(session, """ - return Promise.reject(new Error ('my error')); + return Promise.reject(new Error('my error')); """) - assert_error(response, "javascript error") + assert_error(response, "javascript error", "my error") def test_returned_poisoned_thenable(session): @@ -140,4 +143,4 @@ def test_returned_poisoned_thenable(session): response = execute_async_script(session, """ return { get then() { thow new Error('my error'); } }; """) - assert_error(response, "javascript error") + assert_error(response, "javascript error", "my error") diff --git a/webdriver/tests/classic/execute_script/promise.py b/webdriver/tests/classic/execute_script/promise.py index c206674baefc75..530c58b1cbb667 100644 --- a/webdriver/tests/classic/execute_script/promise.py +++ b/webdriver/tests/classic/execute_script/promise.py @@ -100,3 +100,11 @@ def test_promise_reject_timeout(session): ); """) assert_error(response, "script timeout") + + +def test_returned_poisoned_thenable(session): + session.timeouts.script = .1 + response = execute_script(session, """ + return { get then() { thow new Error('my error'); } }; + """) + assert_error(response, "javascript error", "my error") From 192af48bb2b2a7f54050c787804f8aa05a863a2b Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Sat, 24 Jan 2026 21:16:49 -0500 Subject: [PATCH 3/5] Remove assertions for response data --- webdriver/tests/classic/execute_async_script/promise.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webdriver/tests/classic/execute_async_script/promise.py b/webdriver/tests/classic/execute_async_script/promise.py index 398539bdf07f0a..d4b8a6557994bd 100644 --- a/webdriver/tests/classic/execute_async_script/promise.py +++ b/webdriver/tests/classic/execute_async_script/promise.py @@ -135,7 +135,7 @@ def test_returned_promise_rejected_over_callback(session): response = execute_async_script(session, """ return Promise.reject(new Error('my error')); """) - assert_error(response, "javascript error", "my error") + assert_error(response, "javascript error") def test_returned_poisoned_thenable(session): @@ -143,4 +143,4 @@ def test_returned_poisoned_thenable(session): response = execute_async_script(session, """ return { get then() { thow new Error('my error'); } }; """) - assert_error(response, "javascript error", "my error") + assert_error(response, "javascript error") From b6904bc2901dd2694a56857a186d557f8227b48d Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Sat, 24 Jan 2026 21:19:26 -0500 Subject: [PATCH 4/5] Clarify test --- webdriver/tests/classic/execute_async_script/promise.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/webdriver/tests/classic/execute_async_script/promise.py b/webdriver/tests/classic/execute_async_script/promise.py index d4b8a6557994bd..4f718cee683b9c 100644 --- a/webdriver/tests/classic/execute_async_script/promise.py +++ b/webdriver/tests/classic/execute_async_script/promise.py @@ -122,10 +122,8 @@ def test_returned_promise_fulfilled_over_callback(session): session.timeouts.script = 1 response = execute_async_script(session, """ let resolve = arguments[0]; - resolve('callback'); - return new Promise((resolve) => { - setTimeout(() => resolve('promise'), 100); - }); + setTimeout(() => resolve('callback'), 200); + return Promise.resolve('promise'); """) assert_success(response, "promise") From c678159563aa93faa4af0d8a4affa3fdb544f1fd Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Sat, 24 Jan 2026 21:40:11 -0500 Subject: [PATCH 5/5] Remove assertion for response data --- webdriver/tests/classic/execute_script/promise.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webdriver/tests/classic/execute_script/promise.py b/webdriver/tests/classic/execute_script/promise.py index 530c58b1cbb667..fc9027e8595018 100644 --- a/webdriver/tests/classic/execute_script/promise.py +++ b/webdriver/tests/classic/execute_script/promise.py @@ -107,4 +107,4 @@ def test_returned_poisoned_thenable(session): response = execute_script(session, """ return { get then() { thow new Error('my error'); } }; """) - assert_error(response, "javascript error", "my error") + assert_error(response, "javascript error")