newtests/dynamic_import/test.js (88 lines of code) (raw):

/* * @flow */ import type {Suite} from "flow-dev-tools/src/test/Suite"; const {suite, test} = require('flow-dev-tools/src/test/Tester'); module.exports = (suite(({addFile, addFiles, addCode}) => [ test('returns a promise of the ModuleNamespaceObject', [ addFile('esmodule.js').noNewErrors(), addCode(` async function f() { const esmodule = await import('./esmodule'); (esmodule.pi: number); } `).noNewErrors(), addCode(` async function g() { const esmodule = await import('./esmodule'); (esmodule.pi: string); esmodule.default; } `).newErrors( ` test.js:13 13: (esmodule.pi: string); ^^^^^^^^^^^ Cannot cast \`esmodule.pi\` to string because number [1] is incompatible with string [2]. [incompatible-cast] References: 3: export const pi = 3.14; ^^^^ [1]. See: esmodule.js:3 13: (esmodule.pi: string); ^^^^^^ [2] test.js:14 14: esmodule.default; ^^^^^^^ Cannot get \`esmodule.default\` because property \`default\` is missing in module \`./esmodule\` [1]. [prop-missing] References: 12: const esmodule = await import('./esmodule'); ^^^^^^^^^^^^^^^^^^^^ [1] `, ), addCode(` async function h() { const esmodule = import('./esmodule'); (esmodule.pi: string); } `).newErrors( ` test.js:21 21: (esmodule.pi: string); ^^ Cannot get \`esmodule.pi\` because property \`pi\` is missing in \`Promise\` [1]. [prop-missing] References: 20: const esmodule = import('./esmodule'); ^^^^^^^^^^^^^^^^^^^^ [1] `, ), ]), test('properly converts CJS modules to ModuleNamespaceObjects', [ addFile('cjsmodule.js').noNewErrors(), addCode(` async function f() { const cjsmodule = await import('./cjsmodule'); (cjsmodule.pi: number); (cjsmodule.default: {pi: number}); } `).noNewErrors(), addCode(` async function g() { const cjsmodule = await import('./cjsmodule'); (cjsmodule.pi: string); (cjsmodule.default: number); } `).newErrors( ` test.js:14 14: (cjsmodule.pi: string); ^^^^^^^^^^^^ Cannot cast \`cjsmodule.pi\` to string because number [1] is incompatible with string [2]. [incompatible-cast] References: 4: pi: 3.14 ^^^^ [1]. See: cjsmodule.js:4 14: (cjsmodule.pi: string); ^^^^^^ [2] test.js:15 15: (cjsmodule.default: number); ^^^^^^^^^^^^^^^^^ Cannot cast \`cjsmodule.default\` to number because object literal [1] is incompatible with number [2]. [incompatible-cast] References: 3: module.exports = { ^ [1]. See: cjsmodule.js:3 15: (cjsmodule.default: number); ^^^^^^ [2] `, ), ]), ]): Suite);