Mock Version: 2.2 ENTER ['do_with_status'](['bash', '--login', '-c', '/usr/bin/rpmbuild -bs --target x86_64 --nodeps /builddir/build/SPECS/nodejs-promise.spec'], chrootPath='/var/lib/mock/epel-8-x86_64-1589100244.370668/root'env={'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'C.UTF-8'}shell=Falselogger=timeout=0uid=1001gid=135user='mockbuild'nspawn_args=['--capability=cap_ipc_lock', '--rlimit=RLIMIT_NOFILE=10240', '--capability=cap_ipc_lock', '--bind=/tmp/mock-resolv.wqx8oh55:/etc/resolv.conf', '--bind=/dev/loop-control', '--bind=/dev/loop0', '--bind=/dev/loop1', '--bind=/dev/loop2', '--bind=/dev/loop3', '--bind=/dev/loop4', '--bind=/dev/loop5', '--bind=/dev/loop6', '--bind=/dev/loop7', '--bind=/dev/loop8', '--bind=/dev/loop9', '--bind=/dev/loop10', '--bind=/dev/loop11']unshare_net=TrueprintOutput=True) Using nspawn with args ['--capability=cap_ipc_lock', '--rlimit=RLIMIT_NOFILE=10240', '--capability=cap_ipc_lock', '--bind=/tmp/mock-resolv.wqx8oh55:/etc/resolv.conf', '--bind=/dev/loop-control', '--bind=/dev/loop0', '--bind=/dev/loop1', '--bind=/dev/loop2', '--bind=/dev/loop3', '--bind=/dev/loop4', '--bind=/dev/loop5', '--bind=/dev/loop6', '--bind=/dev/loop7', '--bind=/dev/loop8', '--bind=/dev/loop9', '--bind=/dev/loop10', '--bind=/dev/loop11'] Executing command: ['/usr/bin/systemd-nspawn', '-q', '-M', 'dcb83fe93000419bad2a7916dd1711c8', '-D', '/var/lib/mock/epel-8-x86_64-1589100244.370668/root', '-a', '-u', 'mockbuild', '--capability=cap_ipc_lock', '--rlimit=RLIMIT_NOFILE=10240', '--capability=cap_ipc_lock', '--bind=/tmp/mock-resolv.wqx8oh55:/etc/resolv.conf', '--bind=/dev/loop-control', '--bind=/dev/loop0', '--bind=/dev/loop1', '--bind=/dev/loop2', '--bind=/dev/loop3', '--bind=/dev/loop4', '--bind=/dev/loop5', '--bind=/dev/loop6', '--bind=/dev/loop7', '--bind=/dev/loop8', '--bind=/dev/loop9', '--bind=/dev/loop10', '--bind=/dev/loop11', '--console=pipe', '--setenv=TERM=vt100', '--setenv=SHELL=/bin/bash', '--setenv=HOME=/builddir', '--setenv=HOSTNAME=mock', '--setenv=PATH=/usr/bin:/bin:/usr/sbin:/sbin', '--setenv=PROMPT_COMMAND=printf "\\033]0;\\007"', '--setenv=PS1= \\s-\\v\\$ ', '--setenv=LANG=C.UTF-8', 'bash', '--login', '-c', '/usr/bin/rpmbuild -bs --target x86_64 --nodeps /builddir/build/SPECS/nodejs-promise.spec'] with env {'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'C.UTF-8', 'SYSTEMD_NSPAWN_TMPFS_TMP': '0'} and shell False Building target platforms: x86_64 Building for target x86_64 Wrote: /builddir/build/SRPMS/nodejs-promise-8.0.1-6.el8.src.rpm Child return code was: 0 ENTER ['do_with_status'](['bash', '--login', '-c', '/usr/bin/rpmbuild -bb --target x86_64 --nodeps /builddir/build/SPECS/nodejs-promise.spec'], chrootPath='/var/lib/mock/epel-8-x86_64-1589100244.370668/root'env={'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'C.UTF-8'}shell=Falselogger=timeout=0uid=1001gid=135user='mockbuild'nspawn_args=['--capability=cap_ipc_lock', '--rlimit=RLIMIT_NOFILE=10240', '--capability=cap_ipc_lock', '--bind=/tmp/mock-resolv.wqx8oh55:/etc/resolv.conf', '--bind=/dev/loop-control', '--bind=/dev/loop0', '--bind=/dev/loop1', '--bind=/dev/loop2', '--bind=/dev/loop3', '--bind=/dev/loop4', '--bind=/dev/loop5', '--bind=/dev/loop6', '--bind=/dev/loop7', '--bind=/dev/loop8', '--bind=/dev/loop9', '--bind=/dev/loop10', '--bind=/dev/loop11']unshare_net=TrueprintOutput=True) Using nspawn with args ['--capability=cap_ipc_lock', '--rlimit=RLIMIT_NOFILE=10240', '--capability=cap_ipc_lock', '--bind=/tmp/mock-resolv.wqx8oh55:/etc/resolv.conf', '--bind=/dev/loop-control', '--bind=/dev/loop0', '--bind=/dev/loop1', '--bind=/dev/loop2', '--bind=/dev/loop3', '--bind=/dev/loop4', '--bind=/dev/loop5', '--bind=/dev/loop6', '--bind=/dev/loop7', '--bind=/dev/loop8', '--bind=/dev/loop9', '--bind=/dev/loop10', '--bind=/dev/loop11'] Executing command: ['/usr/bin/systemd-nspawn', '-q', '-M', 'd9640a8520d64736a1809b5afce1d083', '-D', '/var/lib/mock/epel-8-x86_64-1589100244.370668/root', '-a', '-u', 'mockbuild', '--capability=cap_ipc_lock', '--rlimit=RLIMIT_NOFILE=10240', '--capability=cap_ipc_lock', '--bind=/tmp/mock-resolv.wqx8oh55:/etc/resolv.conf', '--bind=/dev/loop-control', '--bind=/dev/loop0', '--bind=/dev/loop1', '--bind=/dev/loop2', '--bind=/dev/loop3', '--bind=/dev/loop4', '--bind=/dev/loop5', '--bind=/dev/loop6', '--bind=/dev/loop7', '--bind=/dev/loop8', '--bind=/dev/loop9', '--bind=/dev/loop10', '--bind=/dev/loop11', '--console=pipe', '--setenv=TERM=vt100', '--setenv=SHELL=/bin/bash', '--setenv=HOME=/builddir', '--setenv=HOSTNAME=mock', '--setenv=PATH=/usr/bin:/bin:/usr/sbin:/sbin', '--setenv=PROMPT_COMMAND=printf "\\033]0;\\007"', '--setenv=PS1= \\s-\\v\\$ ', '--setenv=LANG=C.UTF-8', 'bash', '--login', '-c', '/usr/bin/rpmbuild -bb --target x86_64 --nodeps /builddir/build/SPECS/nodejs-promise.spec'] with env {'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'C.UTF-8', 'SYSTEMD_NSPAWN_TMPFS_TMP': '0'} and shell False Building target platforms: x86_64 Building for target x86_64 Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.7helzf + umask 022 + cd /builddir/build/BUILD + cd /builddir/build/BUILD + rm -rf package + /usr/bin/gzip -dc /builddir/build/SOURCES/promise-8.0.1.tgz + /usr/bin/tar -xof - + STATUS=0 + '[' 0 -ne 0 ']' + cd package + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + cd /builddir/build/BUILD + cd package + /usr/bin/bzip2 -dc /builddir/build/SOURCES/tests-8.0.1.tar.bz2 + /usr/bin/tar -xof - + STATUS=0 + '[' 0 -ne 0 ']' + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + /usr/lib/rpm/nodejs-fixdep asap '^2.0.3' + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.ik4vig + umask 022 + cd /builddir/build/BUILD + cd package + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.c5z51g + umask 022 + cd /builddir/build/BUILD + '[' /builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64 '!=' / ']' + rm -rf /builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64 ++ dirname /builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64 + mkdir -p /builddir/build/BUILDROOT + mkdir /builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64 + cd package + mkdir -p /builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64/usr/lib/node_modules/promise + cp -pr package.json build.js core.js index.js polyfill-done.js polyfill.js lib/ domains/ setimmediate/ /builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64/usr/lib/node_modules/promise + /usr/lib/rpm/nodejs-symlink-deps /usr/lib/node_modules + /usr/lib/rpm/find-debuginfo.sh -j2 --strict-build-id -m -i --build-id-seed 8.0.1-6.el8 --unique-debug-suffix -8.0.1-6.el8.x86_64 --unique-debug-src-base nodejs-promise-8.0.1-6.el8.x86_64 --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 110000000 -S debugsourcefiles.list /builddir/build/BUILD/package find: 'debug': No such file or directory + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig /sbin/ldconfig: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf: No such file or directory + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/brp-python-bytecompile 1 + /usr/lib/rpm/brp-python-hardlink + PYTHON3=/usr/libexec/platform-python + /usr/lib/rpm/redhat/brp-mangle-shebangs Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.8PeLwi + umask 022 + cd /builddir/build/BUILD + cd package + /usr/lib/rpm/nodejs-symlink-deps /usr/lib/node_modules --check + /usr/bin/node -e 'require("./")' + /usr/bin/mocha -R spec --timeout 200 --slow 99999 You must run with --expose-gc to test for memory leak. extensions Promise.denodeify(fn, [argumentCount]) ✓ returns a function that uses promises instead of callbacks ✓ converts callback error arguments into rejection ✓ with an argumentCount it ignores extra arguments ✓ resolves correctly when the wrapped function returns a promise anyway Promise.nodeify(fn) ✓ converts a promise returning function into a callback function ✓ converts rejected promises into the first argument of the callback ✓ passes through when no callback is provided ✓ passes through the `this` argument Promise.all(...) an array that is empty ✓ returns a promise for an empty array of objects ✓ returns a promise for the array of promises ✓ returns a promise for an array containing the fulfilled values of mixed values ✓ returns a promise for an array containing the fulfilled values containing at least one rejected promise ✓ rejects the resulting promise containing at least one eventually rejected promise ✓ rejects the resulting promise with a promise that resolves twice ✓ still waits for all the other promises when given a foreign promise ✓ should provide the correct value of `this` promise.done(onFulfilled, onRejected) - behaves like then except for not returning anything ✓ rethrows unhandled rejections promise.nodeify(callback) ✓ converts a promise returning function into a callback function ✓ converts rejected promises into the first argument of the callback ✓ passes through when no callback is provided ✓ accepts a `context` argument inheritance ✓ allows its prototype methods to act upon foreign constructors nested promises ✓ does not result in any wierd behaviour - 1 ✓ does not result in any wierd behaviour - 2 ✓ does not result in any wierd behaviour - 2 2.1.2.1: When fulfilled, a promise: must not transition to any other state. ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ trying to fulfill then immediately reject ✓ trying to fulfill then reject, delayed ✓ trying to fulfill immediately then reject delayed 2.1.3.1: When rejected, a promise: must not transition to any other state. ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected ✓ trying to reject then immediately fulfill ✓ trying to reject then fulfill, delayed ✓ trying to reject immediately then fulfill delayed 2.2.1: Both `onFulfilled` and `onRejected` are optional arguments. 2.2.1.1: If `onFulfilled` is not a function, it must be ignored. applied to a directly-rejected promise ✓ `onFulfilled` is `undefined` ✓ `onFulfilled` is `null` ✓ `onFulfilled` is `false` ✓ `onFulfilled` is `5` ✓ `onFulfilled` is an object applied to a promise rejected and then chained off of ✓ `onFulfilled` is `undefined` ✓ `onFulfilled` is `null` ✓ `onFulfilled` is `false` ✓ `onFulfilled` is `5` ✓ `onFulfilled` is an object 2.2.1.2: If `onRejected` is not a function, it must be ignored. applied to a directly-fulfilled promise ✓ `onRejected` is `undefined` ✓ `onRejected` is `null` ✓ `onRejected` is `false` ✓ `onRejected` is `5` ✓ `onRejected` is an object applied to a promise fulfilled and then chained off of ✓ `onFulfilled` is `undefined` ✓ `onFulfilled` is `null` ✓ `onFulfilled` is `false` ✓ `onFulfilled` is `5` ✓ `onFulfilled` is an object 2.2.2: If `onFulfilled` is a function, 2.2.2.1: it must be called after `promise` is fulfilled, with `promise`’s fulfillment value as its first argument. ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled 2.2.2.2: it must not be called before `promise` is fulfilled ✓ fulfilled after a delay ✓ never fulfilled 2.2.2.3: it must not be called more than once. ✓ already-fulfilled ✓ trying to fulfill a pending promise more than once, immediately ✓ trying to fulfill a pending promise more than once, delayed ✓ trying to fulfill a pending promise more than once, immediately then delayed ✓ when multiple `then` calls are made, spaced apart in time ✓ when `then` is interleaved with fulfillment 2.2.3: If `onRejected` is a function, 2.2.3.1: it must be called after `promise` is rejected, with `promise`’s rejection reason as its first argument. ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected 2.2.3.2: it must not be called before `promise` is rejected ✓ rejected after a delay ✓ never rejected 2.2.3.3: it must not be called more than once. ✓ already-rejected ✓ trying to reject a pending promise more than once, immediately ✓ trying to reject a pending promise more than once, delayed ✓ trying to reject a pending promise more than once, immediately then delayed ✓ when multiple `then` calls are made, spaced apart in time ✓ when `then` is interleaved with rejection 2.2.4: `onFulfilled` or `onRejected` must not be called until the execution context stack contains only platform code. `then` returns before the promise becomes fulfilled or rejected ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected Clean-stack execution ordering tests (fulfillment case) ✓ when `onFulfilled` is added immediately before the promise is fulfilled ✓ when `onFulfilled` is added immediately after the promise is fulfilled ✓ when one `onFulfilled` is added inside another `onFulfilled` ✓ when `onFulfilled` is added inside an `onRejected` ✓ when the promise is fulfilled asynchronously Clean-stack execution ordering tests (rejection case) ✓ when `onRejected` is added immediately before the promise is rejected ✓ when `onRejected` is added immediately after the promise is rejected ✓ when `onRejected` is added inside an `onFulfilled` ✓ when one `onRejected` is added inside another `onRejected` ✓ when the promise is rejected asynchronously 2.2.5 `onFulfilled` and `onRejected` must be called as functions (i.e. with no `this` value). strict mode ✓ fulfilled ✓ rejected sloppy mode ✓ fulfilled ✓ rejected 2.2.6: `then` may be called multiple times on the same promise. 2.2.6.1: If/when `promise` is fulfilled, all respective `onFulfilled` callbacks must execute in the order of their originating calls to `then`. multiple boring fulfillment handlers ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled multiple fulfillment handlers, one of which throws ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled results in multiple branching chains with their own fulfillment values ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled `onFulfilled` handlers are called in the original order ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled even when one handler is added inside another handler ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled 2.2.6.2: If/when `promise` is rejected, all respective `onRejected` callbacks must execute in the order of their originating calls to `then`. multiple boring rejection handlers ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected multiple rejection handlers, one of which throws ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected results in multiple branching chains with their own fulfillment values ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected `onRejected` handlers are called in the original order ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected even when one handler is added inside another handler ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected 2.2.7: `then` must return a promise: `promise2 = promise1.then(onFulfilled, onRejected)` ✓ is a promise 2.2.7.1: If either `onFulfilled` or `onRejected` returns a value `x`, run the Promise Resolution Procedure `[[Resolve]](promise2, x)` ✓ see separate 3.3 tests 2.2.7.2: If either `onFulfilled` or `onRejected` throws an exception `e`, `promise2` must be rejected with `e` as the reason. The reason is `undefined` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The reason is `null` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The reason is `false` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The reason is `0` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The reason is an error ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The reason is an error without a stack ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The reason is a date ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The reason is an object ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The reason is an always-pending thenable ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The reason is a fulfilled promise ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The reason is a rejected promise ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected 2.2.7.3: If `onFulfilled` is not a function and `promise1` is fulfilled, `promise2` must be fulfilled with the same value. `onFulfilled` is `undefined` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled `onFulfilled` is `null` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled `onFulfilled` is `false` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled `onFulfilled` is `5` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled `onFulfilled` is an object ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled `onFulfilled` is an array containing a function ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled 2.2.7.4: If `onRejected` is not a function and `promise1` is rejected, `promise2` must be rejected with the same reason. `onRejected` is `undefined` ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected `onRejected` is `null` ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected `onRejected` is `false` ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected `onRejected` is `5` ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected `onRejected` is an object ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected `onRejected` is an array containing a function ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected 2.3.1: If `promise` and `x` refer to the same object, reject `promise` with a `TypeError' as the reason. ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.2: If `x` is a promise, adopt its state 2.3.2.1: If `x` is pending, `promise` must remain pending until `x` is fulfilled or rejected. ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.2.2: If/when `x` is fulfilled, fulfill `promise` with the same value. `x` is already-fulfilled ✓ via return from a fulfilled promise ✓ via return from a rejected promise `x` is eventually-fulfilled ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.2.3: If/when `x` is rejected, reject `promise` with the same reason. `x` is already-rejected ✓ via return from a fulfilled promise ✓ via return from a rejected promise `x` is eventually-rejected ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.3: Otherwise, if `x` is an object or function, 2.3.3.1: Let `then` be `x.then` `x` is an object with null prototype ✓ via return from a fulfilled promise ✓ via return from a rejected promise `x` is an object with normal Object.prototype ✓ via return from a fulfilled promise ✓ via return from a rejected promise `x` is a function ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.3.2: If retrieving the property `x.then` results in a thrown exception `e`, reject `promise` with `e` as the reason. `e` is `undefined` ✓ via return from a fulfilled promise ✓ via return from a rejected promise `e` is `null` ✓ via return from a fulfilled promise ✓ via return from a rejected promise `e` is `false` ✓ via return from a fulfilled promise ✓ via return from a rejected promise `e` is `0` ✓ via return from a fulfilled promise ✓ via return from a rejected promise `e` is an error ✓ via return from a fulfilled promise ✓ via return from a rejected promise `e` is an error without a stack ✓ via return from a fulfilled promise ✓ via return from a rejected promise `e` is a date ✓ via return from a fulfilled promise ✓ via return from a rejected promise `e` is an object ✓ via return from a fulfilled promise ✓ via return from a rejected promise `e` is an always-pending thenable ✓ via return from a fulfilled promise ✓ via return from a rejected promise `e` is a fulfilled promise ✓ via return from a fulfilled promise ✓ via return from a rejected promise `e` is a rejected promise ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.3.3: If `then` is a function, call it with `x` as `this`, first argument `resolvePromise`, and second argument `rejectPromise` Calls with `x` as `this` and two function arguments ✓ via return from a fulfilled promise ✓ via return from a rejected promise Uses the original value of `then` ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.3.3.1: If/when `resolvePromise` is called with value `y`, run `[[Resolve]](promise, y)` `y` is not a thenable `y` is `undefined` `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is `null` `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is `false` `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is `5` `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an object `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an array `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable `y` is a synchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-rejected one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that immediately throws in `then` `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an object with a throwing `then` accessor `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable for a thenable `y` is a synchronously-fulfilled custom thenable for a synchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for an asynchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for a synchronously-fulfilled one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for a thenable that tries to fulfill twice `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for a thenable that fulfills but then throws `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for an already-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for an eventually-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for a synchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for an asynchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for a synchronously-rejected one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for a thenable that immediately throws in `then` `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for an object with a throwing `then` accessor `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for an already-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled custom thenable for an eventually-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for a synchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for an asynchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for a synchronously-fulfilled one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for a thenable that tries to fulfill twice `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for a thenable that fulfills but then throws `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for an already-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for an eventually-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for a synchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for an asynchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for a synchronously-rejected one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for a thenable that immediately throws in `then` `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for an object with a throwing `then` accessor `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for an already-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an asynchronously-fulfilled custom thenable for an eventually-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for a synchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for an asynchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for a synchronously-fulfilled one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for a thenable that tries to fulfill twice `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for a thenable that fulfills but then throws `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for an already-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for an eventually-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for a synchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for an asynchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for a synchronously-rejected one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for a thenable that immediately throws in `then` `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for an object with a throwing `then` accessor `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for an already-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a synchronously-fulfilled one-time thenable for an eventually-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for a synchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for an asynchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for a synchronously-fulfilled one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for a thenable that tries to fulfill twice `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for a thenable that fulfills but then throws `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for an already-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for an eventually-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for a synchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for an asynchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for a synchronously-rejected one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for a thenable that immediately throws in `then` `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for an object with a throwing `then` accessor `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for an already-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that tries to fulfill twice for an eventually-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for a synchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for an asynchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for a synchronously-fulfilled one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for a thenable that tries to fulfill twice `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for a thenable that fulfills but then throws `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for an already-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for an eventually-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for a synchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for an asynchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for a synchronously-rejected one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for a thenable that immediately throws in `then` `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for an object with a throwing `then` accessor `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for an already-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is a thenable that fulfills but then throws for an eventually-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for a synchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for an asynchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for a synchronously-fulfilled one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for a thenable that tries to fulfill twice `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for a thenable that fulfills but then throws `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for an already-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for an eventually-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for a synchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for an asynchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for a synchronously-rejected one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for a thenable that immediately throws in `then` `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for an object with a throwing `then` accessor `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for an already-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an already-fulfilled promise for an eventually-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for a synchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for an asynchronously-fulfilled custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for a synchronously-fulfilled one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for a thenable that tries to fulfill twice `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for a thenable that fulfills but then throws `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for an already-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for an eventually-fulfilled promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for a synchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for an asynchronously-rejected custom thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for a synchronously-rejected one-time thenable `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for a thenable that immediately throws in `then` `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for an object with a throwing `then` accessor `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for an already-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `y` is an eventually-fulfilled promise for an eventually-rejected promise `then` calls `resolvePromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.3.3.2: If/when `rejectPromise` is called with reason `r`, reject `promise` with `r` `r` is `undefined` `then` calls `rejectPromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `rejectPromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `r` is `null` `then` calls `rejectPromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `rejectPromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `r` is `false` `then` calls `rejectPromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `rejectPromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `r` is `0` `then` calls `rejectPromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `rejectPromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `r` is an error `then` calls `rejectPromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `rejectPromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `r` is an error without a stack `then` calls `rejectPromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `rejectPromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `r` is a date `then` calls `rejectPromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `rejectPromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `r` is an object `then` calls `rejectPromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `rejectPromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `r` is an always-pending thenable `then` calls `rejectPromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `rejectPromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `r` is a fulfilled promise `then` calls `rejectPromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `rejectPromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `r` is a rejected promise `then` calls `rejectPromise` synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` calls `rejectPromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.3.3.3: If both `resolvePromise` and `rejectPromise` are called, or multiple calls to the same argument are made, the first call takes precedence, and any further calls are ignored. calling `resolvePromise` then `rejectPromise`, both synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `resolvePromise` synchronously then `rejectPromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `resolvePromise` then `rejectPromise`, both asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `resolvePromise` with an asynchronously-fulfilled promise, then calling `rejectPromise`, both synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `resolvePromise` with an asynchronously-rejected promise, then calling `rejectPromise`, both synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `rejectPromise` then `resolvePromise`, both synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `rejectPromise` synchronously then `resolvePromise` asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `rejectPromise` then `resolvePromise`, both asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `resolvePromise` twice synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `resolvePromise` twice, first synchronously then asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `resolvePromise` twice, both times asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `resolvePromise` with an asynchronously-fulfilled promise, then calling it again, both times synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `resolvePromise` with an asynchronously-rejected promise, then calling it again, both times synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `rejectPromise` twice synchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `rejectPromise` twice, first synchronously then asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise calling `rejectPromise` twice, both times asynchronously ✓ via return from a fulfilled promise ✓ via return from a rejected promise saving and abusing `resolvePromise` and `rejectPromise` ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.3.3.4: If calling `then` throws an exception `e`, 2.3.3.3.4.1: If `resolvePromise` or `rejectPromise` have been called, ignore it. `resolvePromise` was called with a non-thenable ✓ via return from a fulfilled promise ✓ via return from a rejected promise `resolvePromise` was called with an asynchronously-fulfilled promise ✓ via return from a fulfilled promise ✓ via return from a rejected promise `resolvePromise` was called with an asynchronously-rejected promise ✓ via return from a fulfilled promise ✓ via return from a rejected promise `rejectPromise` was called ✓ via return from a fulfilled promise ✓ via return from a rejected promise `resolvePromise` then `rejectPromise` were called ✓ via return from a fulfilled promise ✓ via return from a rejected promise `rejectPromise` then `resolvePromise` were called ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.3.3.4.2: Otherwise, reject `promise` with `e` as the reason. straightforward case ✓ via return from a fulfilled promise ✓ via return from a rejected promise `resolvePromise` is called asynchronously before the `throw` ✓ via return from a fulfilled promise ✓ via return from a rejected promise `rejectPromise` is called asynchronously before the `throw` ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.3.4: If `then` is not a function, fulfill promise with `x` `then` is `5` ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` is an object ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` is an array containing a function ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` is a regular expression ✓ via return from a fulfilled promise ✓ via return from a rejected promise `then` is an object inheriting from `Function.prototype` ✓ via return from a fulfilled promise ✓ via return from a rejected promise 2.3.4: If `x` is not an object or function, fulfill `promise` with `x` The value is `undefined` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The value is `null` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The value is `false` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The value is `true` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The value is `0` ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The value is `true` with `Boolean.prototype` modified to have a `then` method ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected The value is `1` with `Number.prototype` modified to have a `then` method ✓ already-fulfilled ✓ immediately-fulfilled ✓ eventually-fulfilled ✓ already-rejected ✓ immediately-rejected ✓ eventually-rejected unhandled rejections ✓ tracks rejected promises ✓ tracks rejected promises ✓ tracks rejected promises ✓ tracks rejected promises resolver-tests The Promise Constructor ✓ has `Object.getPrototypeOf(promise) === Promise.prototype` ✓ has `promise.constructor === Promise` ✓ has `promise.constructor === Promise.prototype.constructor` ✓ has `Promise.length === 1` if resolver is not a function ✓ must throw a `TypeError` if resolver is a function ✓ must be called with the promise's resolver arguments ✓ must be called immediately, before `Promise` returns Calling resolve(x) if promise is resolved ✓ nothing happens otherwise if x is a thenable ✓ assimilates the thenable otherwise ✓ is fulfilled with x as the fulfillment value Calling reject(x) if promise is resolved ✓ nothing happens otherwise ✓ is rejected with x as the rejection reason if resolver throws if promise is resolved ✓ nothing happens otherwise ✓ is rejected with e as the rejection reason synchronous-inspection-tests ✓ cannot synchronously inspect before enabling synchronous inspection ✓ can poll a promise to see if it is resolved ✓ can poll a promise to see if it is rejected ✓ will throw an error if getting a value of an unfulfilled promise ✓ will throw an error if getting a reason of a non-rejected promise ✓ can disable synchronous inspection ✓ can synchronously poll a resolving promise chain ✓ can synchronously poll a rejecting promise chain 923 passing (18s) 1 pending + exit 0 Processing files: nodejs-promise-8.0.1-6.el8.noarch Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.egLqg4 + umask 022 + cd /builddir/build/BUILD + cd package + DOCDIR=/builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64/usr/share/doc/nodejs-promise + export LC_ALL=C + LC_ALL=C + export DOCDIR + /usr/bin/mkdir -p /builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64/usr/share/doc/nodejs-promise + cp -pr Readme.md /builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64/usr/share/doc/nodejs-promise + exit 0 Executing(%license): /bin/sh -e /var/tmp/rpm-tmp.YnLZ0P + umask 022 + cd /builddir/build/BUILD + cd package + LICENSEDIR=/builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64/usr/share/licenses/nodejs-promise + export LC_ALL=C + LC_ALL=C + export LICENSEDIR + /usr/bin/mkdir -p /builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64/usr/share/licenses/nodejs-promise + cp -pr LICENSE /builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64/usr/share/licenses/nodejs-promise + exit 0 Provides: nodejs-promise = 8.0.1-6.el8 npm(promise) = 8.0.1 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires: (npm(asap) >= 2.0.3 with npm(asap) < 3) nodejs(engine) Checking for unpackaged file(s): /usr/lib/rpm/check-files /builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64 Wrote: /builddir/build/RPMS/nodejs-promise-8.0.1-6.el8.noarch.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.uFnvtC + umask 022 + cd /builddir/build/BUILD + cd package + /usr/bin/rm -rf /builddir/build/BUILDROOT/nodejs-promise-8.0.1-6.el8.x86_64 + exit 0 Child return code was: 0