Myles Borins 2e54524955
deps: update npm to 7.0.0-rc.3
PR-URL: https://github.com/nodejs/node/pull/35474
Reviewed-By: Ruy Adorno <ruyadorno@github.com>
Reviewed-By: Ujjwal Sharma <ryzokuken@disroot.org>
Reviewed-By: Ben Coe <bencoe@gmail.com>
Reviewed-By: Geoffrey Booth <webmaster@geoffreybooth.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Shelley Vohr <codebytere@gmail.com>
Reviewed-By: Guy Bedford <guybedford@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
2020-10-07 09:59:49 -04:00

89 lines
2.3 KiB
JavaScript

const t = require('tap')
const main = () => {
if (process.argv[2] === 'polyfill-all-settled') {
Promise.allSettled = null
runTests()
} else if (process.argv[2] === 'native-all-settled') {
Promise.allSettled = Promise.allSettled || (
promises => {
const reflections = []
for (let i = 0; i < promises.length; i++) {
reflections[i] = Promise.resolve(promises[i]).then(value => ({
status: 'fulfilled',
value,
}), reason => ({
status: 'rejected',
reason,
}))
}
return Promise.all(reflections)
}
)
runTests()
} else {
t.spawn(process.execPath, [__filename, 'polyfill-all-settled'])
t.spawn(process.execPath, [__filename, 'native-all-settled'])
}
}
const runTests = () => {
const lateFail = require('../')
t.test('fail only after all promises resolve', t => {
let resolvedSlow = false
const fast = () => Promise.reject('nope')
const slow = () => new Promise(res => setTimeout(res, 100))
.then(() => resolvedSlow = true)
// throw some holes and junk in the array to verify that we handle it
return t.rejects(lateFail([fast(),,,,slow(), null, {not: 'a promise'},,,]))
.then(() => t.equal(resolvedSlow, true, 'resolved slow before failure'))
})
t.test('works just like Promise.all() otherwise', t => {
const one = () => Promise.resolve(1)
const two = () => Promise.resolve(2)
const tre = () => Promise.resolve(3)
const fur = () => Promise.resolve(4)
const fiv = () => Promise.resolve(5)
const six = () => Promise.resolve(6)
const svn = () => Promise.resolve(7)
const eit = () => Promise.resolve(8)
const nin = () => Promise.resolve(9)
const ten = () => Promise.resolve(10)
const expect = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const all = Promise.all([
one(),
two(),
tre(),
fur(),
fiv(),
six(),
svn(),
eit(),
nin(),
ten(),
])
const late = lateFail([
one(),
two(),
tre(),
fur(),
fiv(),
six(),
svn(),
eit(),
nin(),
ten(),
])
return Promise.all([all, late]).then(([all, late]) => {
t.strictSame(all, expect)
t.strictSame(late, expect)
})
})
}
main()