Add a way to mark a rejected promise as handled
[WebKit-https.git] / JSTests / stress / reject-as-handled.js
1 function shouldBe(actual, expected) {
2     if (actual !== expected)
3         throw new Error('bad value: ' + actual);
4 }
5
6 var set = new Set;
7 var count = 0;
8 setUnhandledRejectionCallback(function (promise) {
9     shouldBe(set.has(promise), true);
10     ++count;
11 });
12 var promise1 = Promise.reject(42);
13 set.add(promise1);
14 var promise2 = new Promise(function () { });
15 $vm.rejectPromiseAsHandled(promise2, 42);
16
17 // If it is already rejected, rejectPromiseAsHandled is no-op: not marking the promise as handled.
18 var promise3 = Promise.reject(43);
19 set.add(promise3);
20 $vm.rejectPromiseAsHandled(promise3, 43);
21
22 drainMicrotasks();
23 shouldBe(count, 2);
24
25 promise1.then($vm.abort, function (value) {
26     shouldBe(value, 42);
27     ++count;
28 });
29 promise2.then($vm.abort, function (value) {
30     shouldBe(value, 42);
31     ++count;
32 });
33 promise3.then($vm.abort, function (value) {
34     shouldBe(value, 43);
35     ++count;
36 });
37 drainMicrotasks();
38 shouldBe(count, 5);