// Copyright 2020 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Flags: --allow-natives-syntax --harmony-promise-any load('test/mjsunit/test-async.js'); (function() { testAsync(assert => { assert.plan(1); Promise.any([]).then( assert.unreachable, (x) => { assert.equals(0, x.errors.length); } ); }); })(); (function() { const p1 = Promise.resolve(1); const p2 = Promise.resolve(2); const p3 = Promise.resolve(3); testAsync(assert => { assert.plan(1); Promise.any([p1, p2, p3]).then( (x) => { assert.equals(1, x); }, assert.unreachable); }); })(); (function() { let outsideResolve; let outsideReject; let p1 = new Promise(() => {}); let p2 = new Promise(function(resolve, reject) { outsideResolve = resolve; outsideReject = reject; }); let p3 = new Promise(() => {}); testAsync(assert => { assert.plan(1); Promise.any([p1, p2, p3]).then( (x) => { assert.equals(2, x); }, assert.unreachable ); outsideResolve(2); }); })(); (function() { const p1 = Promise.reject(1); const p2 = Promise.resolve(2); const p3 = Promise.resolve(3); testAsync(assert => { assert.plan(1); Promise.any([p1, p2, p3]).then( (x) => { assert.equals(2, x); }, assert.unreachable); }); })(); (function() { const p1 = Promise.reject(1); const p2 = Promise.reject(2); const p3 = Promise.reject(3); testAsync(assert => { assert.plan(4); Promise.any([p1, p2, p3]).then( assert.unreachable, (x) => { assert.equals(3, x.errors.length); assert.equals(1, x.errors[0]); assert.equals(2, x.errors[1]); assert.equals(3, x.errors[2]); } ); }); })(); (function() { testAsync(assert => { assert.plan(1); (async function() { const p1 = Promise.reject(1); const p2 = Promise.reject(2); const p3 = Promise.reject(3); try { await Promise.any([p1, p2, p3]); } catch (error) { assert.equals(1, 1); } })(); }); })(); // Test that we return a proper array even if (custom) "then" invokes the // reject callbacks right away. (function() { class MyPromise extends Promise { constructor(executor, id) { super(executor); this.id = id; } then(resolve, reject) { if (this.id) return reject(this.id); return super.then(resolve, reject) } }; const a = new MyPromise(() => {}, 'a'); const b = new MyPromise(() => {}, 'b'); testAsync(assert => { assert.plan(1); MyPromise.any([a, b]).then( assert.unreachable, (e) => { assert.equals(['a', 'b'], e.errors) }); }); })(); (function TestErrorsProperties() { testAsync(assert => { assert.plan(3); Promise.any([]).catch( (error) => { let desc = Object.getOwnPropertyDescriptor(error, 'errors'); assert.equals(true, desc.configurable); assert.equals(false, desc.enumerable); assert.equals(true, desc.writable); }); }); })();