try.js (1678B)
1 // |reftest| skip-if(!xulRuntime.shell) 2 { 3 // Check the value of `this` in the callback is undefined. 4 let this_ = {}; 5 Promise.try(function () { 6 "use strict"; 7 this_ = this; 8 }); 9 drainJobQueue(); 10 assertEq(this_, undefined); 11 } 12 13 { 14 // Error when the `resolve` function passed by a custom promise subclass throws. 15 let resolveCalled = false; 16 let rejectCalled = false; 17 let expectedError = new Error("foo"); 18 19 class CustomPromise { 20 constructor(executor) { 21 let resolve = () => { 22 resolveCalled = true; 23 throw expectedError; 24 }; 25 let reject = () => rejectCalled = true; 26 executor(resolve, reject); 27 } 28 } 29 30 let errorThrown = undefined; 31 try { 32 Promise.try.call(CustomPromise, function () {}); 33 } catch (e) { 34 errorThrown = e; 35 } 36 drainJobQueue(); 37 38 assertEq(resolveCalled, true); 39 assertEq(rejectCalled, false); 40 assertEq(errorThrown, expectedError); 41 } 42 43 { 44 // Error when the `reject` function passed by a custom promise subclass throws. 45 let resolveCalled = false; 46 let rejectCalled = false; 47 let expectedError = new Error("foo"); 48 49 class CustomPromise { 50 constructor(executor) { 51 let resolve = () => { 52 resolveCalled = true; 53 }; 54 let reject = () => { 55 rejectCalled = true; 56 throw expectedError; 57 }; 58 executor(resolve, reject); 59 } 60 } 61 62 let errorThrown = undefined; 63 try { 64 Promise.try.call(CustomPromise, function () { throw new Error("bar") }); 65 } catch (e) { 66 errorThrown = e; 67 } 68 drainJobQueue(); 69 70 assertEq(resolveCalled, false); 71 assertEq(rejectCalled, true); 72 assertEq(errorThrown, expectedError); 73 } 74 75 reportCompare(true, true);