from tests.support.asserts import assert_error, assert_success def execute_async_script(session, script, args=None): if args is None: args = [] body = {"script": script, "args": args} return session.transport.send( "POST", "/session/{session_id}/execute/async".format(**vars(session)), body) def test_promise_resolve(session): response = execute_async_script(session, """ let resolve = arguments[0]; resolve(Promise.resolve('foobar')); """) assert_success(response, "foobar") def test_promise_resolve_delayed(session): response = execute_async_script(session, """ let resolve = arguments[0]; let promise = new Promise( (resolve) => setTimeout( () => resolve('foobar'), 50 ) ); resolve(promise); """) assert_success(response, "foobar") def test_promise_all_resolve(session): response = execute_async_script(session, """ let resolve = arguments[0]; let promise = Promise.all([ Promise.resolve(1), Promise.resolve(2) ]); resolve(promise); """) assert_success(response, [1, 2]) def test_await_promise_resolve(session): response = execute_async_script(session, """ let resolve = arguments[0]; let res = await Promise.resolve('foobar'); resolve(res); """) assert_success(response, "foobar") def test_promise_resolve_timeout(session): session.timeouts.script = .1 response = execute_async_script(session, """ let resolve = arguments[0]; let promise = new Promise( (resolve) => setTimeout( () => resolve(), 1000 ) ); resolve(promise); """) assert_error(response, "script timeout") def test_promise_reject(session): response = execute_async_script(session, """ let resolve = arguments[0]; resolve(Promise.reject(new Error('my error'))); """) assert_error(response, "javascript error") def test_promise_reject_delayed(session): response = execute_async_script(session, """ let resolve = arguments[0]; let promise = new Promise( (resolve, reject) => setTimeout( () => reject(new Error('my error')), 50 ) ); resolve(promise); """) assert_error(response, "javascript error") def test_promise_all_reject(session): response = execute_async_script(session, """ let resolve = arguments[0]; let promise = Promise.all([ Promise.resolve(1), Promise.reject(new Error('error')) ]); resolve(promise); """) assert_error(response, "javascript error") def test_await_promise_reject(session): response = execute_async_script(session, """ let resolve = arguments[0]; await Promise.reject(new Error('my error')); resolve('foo'); """) assert_error(response, "javascript error") def test_promise_reject_timeout(session): session.timeouts.script = .1 response = execute_async_script(session, """ let resolve = arguments[0]; let promise = new Promise( (resolve, reject) => setTimeout( () => reject(new Error('my error')), 1000 ) ); resolve(promise); """) assert_error(response, "script timeout")