newtests/declare_module_imports/test.js (59 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('import named', [ addFile('flow-typed/lib.js'), addCode('import type {BT} from "B";').noNewErrors(), addCode('(42: BT);').noNewErrors(), addCode('("str": BT);').newErrors( ` test.js:7 7: ("str": BT); ^^^^^ Cannot cast \`"str"\` to \`BT\` because string [1] is incompatible with number [2]. [incompatible-cast] References: 7: ("str": BT); ^^^^^ [1] 7: ("str": BT); ^^ [2] `, ), ]), test('import default', [ addFile('flow-typed/lib.js'), addCode('import type BDefault from "B";').noNewErrors(), addCode('import BDefaultValue from "B";').noNewErrors(), addCode('(new BDefaultValue(): BDefault);').noNewErrors(), addCode('(42: BDefault);').newErrors( ` test.js:9 9: (42: BDefault); ^^ Cannot cast \`42\` to \`BDefault\` because number [1] is incompatible with \`Def\` [2]. [incompatible-cast] References: 9: (42: BDefault); ^^ [1] 9: (42: BDefault); ^^^^^^^^ [2] `, ), ]), test('import between libdef files', [ addFile('flow-typed/C.js'), addFile('flow-typed/D.js'), addCode('import type {CT} from "C";').noNewErrors(), addCode('import type {DT} from "D";').noNewErrors(), addCode(` const cVal = {}; const dVal = {}; cVal.D = dVal; dVal.C = cVal; `).noNewErrors(), addCode('(cVal: CT);').noNewErrors(), addCode('(cVal.D: DT);').noNewErrors(), addCode('(cVal: DT);').noNewErrors(), addCode('(cVal.D: CT);').noNewErrors(), addCode('(dVal: DT);').noNewErrors(), addCode('(dVal.C: CT);').noNewErrors(), addCode('(dVal: CT);').noNewErrors(), addCode('(dVal.C: DT);').noNewErrors(), ]), /** * TODO: At the moment it isn't possible to import a non-libdef module from a * libdef. There's no good reason to ban this, it's just a limitation of * the way Flow handles libdefs at the moment. We should fix this test * to pass at some point. */ /* test('import from non-libdef within a libdef file', [ addFile('node_modules/RealModule/index.js').noNewErrors(), addFile('flow-typed/dependsOnRealModule.js').noNewErrors(), addCode('import {T} from "DependsOnRealModule";').noNewErrors(), addCode('(42: T);').noNewErrors(), addCode('("str": T);').newErrors( `...Fill this in when this test runs as expected...` ), ]), */ ]): Suite);