// Copyright JS Foundation and other contributors, http://js.foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. var successCount = 0 var p, r // Test 1 async function f1(p) { assert(await p === 1) return 2 } p = new Promise(function(resolve, reject) { r = resolve }) f1(p).then(function (v) { assert(v === 2) successCount++ }) r(1) // Test 2 var f2 = async(p) => { assert(await p === 3) } p = new Promise(function(resolve, reject) { r = resolve }) f2(p).then(function (v) { assert(v === undefined) successCount++ }) r(3) // Test 3 var thenableCounter = 0 async function f3() { return new Promise(function(resolve) { resolve(f3) }) } f3.then = function(resolve) { // Repeating resolve with 'then' if (++thenableCounter < 5) { resolve(f3) } else { successCount++ } } f3() // Test 4 async function f4(p) { try { throw 4 } catch (e) { throw 5 } } p = new Promise(function(resolve, reject) { r = resolve }) f4(p).then(undefined, function (v) { assert(v === 5) successCount++ }) r(1) // Test 5 async function f5(p) { try { return 6 } finally { throw 7 } } p = new Promise(function(resolve, reject) { r = resolve }) f5(p).then(undefined, function (v) { assert(v === 7) successCount++ }) r(1) // Test 6 p = new Promise(function(resolve, reject) { r = resolve }) async function f6(p) { await p return self } var self = f6() self.then(undefined, function (v) { assert(v instanceof TypeError) successCount++ }) r(1) // Test 7 async function f7(p) { var x = {} assert((await x) === x) x = 3.14 assert((await x) === x) x = "Test string" assert((await x) === x) successCount++ } f7(); // Test 8 async function f8() { var p = new Promise(function() {}); Object.defineProperty(p, 'constructor', { get() { throw "Error!" } }); await p } f8().then(undefined, function (v) { assert(v === "Error!") successCount++ }) // END function __checkAsync() { assert(successCount === 8) assert(thenableCounter === 5) }