forked from nodejs/node
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtest-primordials-promise.js
More file actions
73 lines (64 loc) · 2.12 KB
/
test-primordials-promise.js
File metadata and controls
73 lines (64 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// Flags: --expose-internals
'use strict';
const common = require('../common');
const assert = require('assert');
const {
PromisePrototypeThen,
SafePromiseAll,
SafePromiseAllSettled,
SafePromiseAny,
SafePromisePrototypeFinally,
SafePromiseRace,
} = require('internal/test/binding').primordials;
Array.prototype[Symbol.iterator] = common.mustNotCall('%Array.prototype%[@@iterator]');
Promise.all = common.mustNotCall('%Promise%.all');
Promise.allSettled = common.mustNotCall('%Promise%.allSettled');
Promise.any = common.mustNotCall('%Promise%.any');
Promise.race = common.mustNotCall('%Promise%.race');
Object.defineProperties(Promise.prototype, {
catch: {
set: common.mustNotCall('set %Promise.prototype%.catch'),
get: common.mustNotCall('get %Promise.prototype%.catch'),
},
finally: {
set: common.mustNotCall('set %Promise.prototype%.finally'),
get: common.mustNotCall('get %Promise.prototype%.finally'),
},
then: {
set: common.mustNotCall('set %Promise.prototype%.then'),
get: common.mustNotCall('get %Promise.prototype%.then'),
},
});
Object.defineProperties(Array.prototype, {
// %Promise.all% and %Promise.allSettled% are depending on the value of
// `%Array.prototype%.then`.
then: {},
});
Object.defineProperties(Object.prototype, {
then: {
set: common.mustNotCall('set %Object.prototype%.then'),
get: common.mustNotCall('get %Object.prototype%.then'),
},
});
assertIsPromise(PromisePrototypeThen(test(), common.mustCall()));
assertIsPromise(SafePromisePrototypeFinally(test(), common.mustCall()));
assertIsPromise(SafePromiseAll([test()]));
assertIsPromise(SafePromiseAllSettled([test()]));
assertIsPromise(SafePromiseAny([test()]));
assertIsPromise(SafePromiseRace([test()]));
async function test() {
const catchFn = common.mustCall();
const finallyFn = common.mustCall();
try {
await Promise.reject();
} catch {
catchFn();
} finally {
finallyFn();
}
}
function assertIsPromise(promise) {
// Make sure the returned promise is a genuine %Promise% object and not a
// subclass instance.
assert.strictEqual(Object.getPrototypeOf(promise), Promise.prototype);
}