• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3// Flags: --expose-internals
4
5require('../common');
6const assert = require('assert');
7
8const { internalBinding } = require('internal/test/binding');
9const { ModuleWrap } = internalBinding('module_wrap');
10const { getPromiseDetails, isPromise } = internalBinding('util');
11const setTimeoutAsync = require('util').promisify(setTimeout);
12
13const foo = new ModuleWrap('foo', undefined, 'export * from "bar"; 6;', 0, 0);
14const bar = new ModuleWrap('bar', undefined, 'export const five = 5', 0, 0);
15
16(async () => {
17  const promises = foo.link(() => setTimeoutAsync(1000).then(() => bar));
18  assert.strictEqual(promises.length, 1);
19  assert(isPromise(promises[0]));
20
21  await Promise.all(promises);
22
23  assert.strictEqual(getPromiseDetails(promises[0])[1], bar);
24
25  foo.instantiate();
26
27  assert.strictEqual(await foo.evaluate(-1, false), 6);
28  assert.strictEqual(foo.getNamespace().five, 5);
29})();
30