1from tests.support.asserts import assert_error, assert_success
2
3
4def execute_script(session, script, args=None):
5    if args is None:
6        args = []
7    body = {"script": script, "args": args}
8
9    return session.transport.send(
10        "POST", "/session/{session_id}/execute/sync".format(
11            session_id=session.session_id),
12        body)
13
14
15def test_promise_resolve(session):
16    response = execute_script(session, """
17        return Promise.resolve('foobar');
18        """)
19    assert_success(response, "foobar")
20
21
22def test_promise_resolve_delayed(session):
23    response = execute_script(session, """
24        return new Promise(
25            (resolve) => setTimeout(
26                () => resolve('foobar'),
27                50
28            )
29        );
30        """)
31    assert_success(response, "foobar")
32
33
34def test_promise_all_resolve(session):
35    response = execute_script(session, """
36        return Promise.all([
37            Promise.resolve(1),
38            Promise.resolve(2)
39        ]);
40        """)
41    assert_success(response, [1, 2])
42
43
44def test_await_promise_resolve(session):
45    response = execute_script(session, """
46        let res = await Promise.resolve('foobar');
47        return res;
48        """)
49    assert_success(response, "foobar")
50
51
52def test_promise_resolve_timeout(session):
53    session.timeouts.script = .1
54    response = execute_script(session, """
55        return new Promise(
56            (resolve) => setTimeout(
57                () => resolve(),
58                1000
59            )
60        );
61        """)
62    assert_error(response, "script timeout")
63
64
65def test_promise_reject(session):
66    response = execute_script(session, """
67        return Promise.reject(new Error('my error'));
68        """)
69    assert_error(response, "javascript error")
70
71
72def test_promise_reject_delayed(session):
73    response = execute_script(session, """
74        return new Promise(
75            (resolve, reject) => setTimeout(
76                () => reject(new Error('my error')),
77                50
78            )
79        );
80        """)
81    assert_error(response, "javascript error")
82
83
84def test_promise_all_reject(session):
85    response = execute_script(session, """
86        return Promise.all([
87            Promise.resolve(1),
88            Promise.reject(new Error('error'))
89        ]);
90        """)
91    assert_error(response, "javascript error")
92
93
94def test_await_promise_reject(session):
95    response = execute_script(session, """
96        await Promise.reject(new Error('my error'));
97        return 'foo';
98        """)
99    assert_error(response, "javascript error")
100
101
102def test_promise_reject_timeout(session):
103    session.timeouts.script = .1
104    response = execute_script(session, """
105        return new Promise(
106            (resolve, reject) => setTimeout(
107                () => reject(new Error('my error')),
108                1000
109            )
110        );
111        """)
112    assert_error(response, "script timeout")
113