forked from nodejs/node
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest-vm-module-linkmodulerequests.js
More file actions
78 lines (62 loc) · 2.19 KB
/
test-vm-module-linkmodulerequests.js
File metadata and controls
78 lines (62 loc) · 2.19 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
74
75
76
77
78
'use strict';
// Flags: --experimental-vm-modules --js-source-phase-imports
require('../common');
const assert = require('assert');
const { SourceTextModule } = require('vm');
const test = require('node:test');
test('simple graph', async function simple() {
const foo = new SourceTextModule('export default 5;');
foo.linkRequests([]);
globalThis.fiveResult = undefined;
const bar = new SourceTextModule('import five from "foo"; fiveResult = five');
bar.linkRequests([foo]);
bar.instantiate();
await bar.evaluate();
assert.strictEqual(globalThis.fiveResult, 5);
delete globalThis.fiveResult;
});
test('invalid link values', () => {
const invalidValues = [
undefined,
null,
{},
SourceTextModule.prototype,
];
for (const value of invalidValues) {
const module = new SourceTextModule('import "foo"');
assert.throws(() => module.linkRequests([value]), {
code: 'ERR_VM_MODULE_NOT_MODULE',
});
}
});
test('mismatch linkage', () => {
const foo = new SourceTextModule('export default 5;');
foo.linkRequests([]);
// Link with more modules than requested.
const bar = new SourceTextModule('import foo from "foo";');
assert.throws(() => bar.linkRequests([foo, foo]), {
code: 'ERR_MODULE_LINK_MISMATCH',
});
// Link with fewer modules than requested.
const baz = new SourceTextModule('import foo from "foo"; import bar from "bar";');
assert.throws(() => baz.linkRequests([foo]), {
code: 'ERR_MODULE_LINK_MISMATCH',
});
// Link a same module cache key with different instances.
const qux = new SourceTextModule(`
import foo from "foo";
import source Foo from "foo";
`);
assert.throws(() => qux.linkRequests([foo, bar]), {
code: 'ERR_MODULE_LINK_MISMATCH',
});
});
test('instantiate error should hint about module identifier', () => {
const foo = new SourceTextModule('import bar from "bar"', { identifier: 'file://foo' });
const bar = new SourceTextModule('import "unknown"', { identifier: 'file://bar' });
foo.linkRequests([bar]);
assert.throws(() => foo.instantiate(), {
message: `request for 'unknown' can not be resolved on module 'file://bar' that is not linked`,
code: 'ERR_VM_MODULE_LINK_FAILURE',
});
});