mirror of
https://github.com/denoland/deno.git
synced 2025-03-03 17:34:47 -05:00
Unit tests for circular references
This commit is contained in:
parent
739ef6a8ec
commit
77faad8070
1 changed files with 84 additions and 1 deletions
|
@ -58,6 +58,34 @@ const fooBazTsSource = `import { foo } from "./bar.ts";
|
||||||
console.log(foo);
|
console.log(foo);
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
const modASource = `import { B } from "./modB.ts";
|
||||||
|
|
||||||
|
export class A {
|
||||||
|
b = new B();
|
||||||
|
};
|
||||||
|
`;
|
||||||
|
|
||||||
|
const modAModuleInfo = mockModuleInfo(
|
||||||
|
"modA",
|
||||||
|
"/root/project/modA.ts",
|
||||||
|
modASource,
|
||||||
|
undefined
|
||||||
|
);
|
||||||
|
|
||||||
|
const modBSource = `import { A } from "./modA.ts";
|
||||||
|
|
||||||
|
export class B {
|
||||||
|
a = new A();
|
||||||
|
};
|
||||||
|
`;
|
||||||
|
|
||||||
|
const modBModuleInfo = mockModuleInfo(
|
||||||
|
"modB",
|
||||||
|
"/root/project/modB.ts",
|
||||||
|
modBSource,
|
||||||
|
undefined
|
||||||
|
);
|
||||||
|
|
||||||
// TODO(#23) Remove source map strings from fooBarTsOutput.
|
// TODO(#23) Remove source map strings from fooBarTsOutput.
|
||||||
// tslint:disable:max-line-length
|
// tslint:disable:max-line-length
|
||||||
const fooBarTsOutput = `define(["require", "exports", "compiler"], function (require, exports, compiler) {
|
const fooBarTsOutput = `define(["require", "exports", "compiler"], function (require, exports, compiler) {
|
||||||
|
@ -94,7 +122,8 @@ const moduleMap: {
|
||||||
"/root/project/foo/baz.ts",
|
"/root/project/foo/baz.ts",
|
||||||
fooBazTsSource,
|
fooBazTsSource,
|
||||||
fooBazTsOutput
|
fooBazTsOutput
|
||||||
)
|
),
|
||||||
|
"modA.ts": modAModuleInfo
|
||||||
},
|
},
|
||||||
"/root/project/foo/baz.ts": {
|
"/root/project/foo/baz.ts": {
|
||||||
"./bar.ts": mockModuleInfo(
|
"./bar.ts": mockModuleInfo(
|
||||||
|
@ -103,9 +132,22 @@ const moduleMap: {
|
||||||
fooBarTsSource,
|
fooBarTsSource,
|
||||||
fooBarTsOutput
|
fooBarTsOutput
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
"/root/project/modA.ts": {
|
||||||
|
"./modB.ts": modBModuleInfo
|
||||||
|
},
|
||||||
|
"/root/project/modB.ts": {
|
||||||
|
"./modA.ts": modAModuleInfo
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const moduleCache: {
|
||||||
|
[fileName: string]: ModuleInfo;
|
||||||
|
} = {
|
||||||
|
"/root/project/modA.ts": modAModuleInfo,
|
||||||
|
"/root/project/modB.ts": modBModuleInfo
|
||||||
|
};
|
||||||
|
|
||||||
const emittedFiles = {
|
const emittedFiles = {
|
||||||
"/root/project/foo/qat.ts": "console.log('foo');"
|
"/root/project/foo/qat.ts": "console.log('foo');"
|
||||||
};
|
};
|
||||||
|
@ -138,6 +180,17 @@ function logMock(...args: any[]): void {
|
||||||
const osMock: compiler.Os = {
|
const osMock: compiler.Os = {
|
||||||
codeCache(fileName: string, sourceCode: string, outputCode: string): void {
|
codeCache(fileName: string, sourceCode: string, outputCode: string): void {
|
||||||
codeCacheStack.push({ fileName, sourceCode, outputCode });
|
codeCacheStack.push({ fileName, sourceCode, outputCode });
|
||||||
|
if (fileName in moduleCache) {
|
||||||
|
moduleCache[fileName].sourceCode = sourceCode;
|
||||||
|
moduleCache[fileName].outputCode = outputCode;
|
||||||
|
} else {
|
||||||
|
moduleCache[fileName] = mockModuleInfo(
|
||||||
|
fileName,
|
||||||
|
fileName,
|
||||||
|
sourceCode,
|
||||||
|
outputCode
|
||||||
|
);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
codeFetch(moduleSpecifier: string, containingFile: string): ModuleInfo {
|
codeFetch(moduleSpecifier: string, containingFile: string): ModuleInfo {
|
||||||
codeFetchStack.push({ moduleSpecifier, containingFile });
|
codeFetchStack.push({ moduleSpecifier, containingFile });
|
||||||
|
@ -312,6 +365,36 @@ test(function compilerRunMultiModule() {
|
||||||
teardown();
|
teardown();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test(function compilerRunCircularDependency() {
|
||||||
|
setup();
|
||||||
|
const factoryStack: string[] = [];
|
||||||
|
const modADeps = ["require", "exports", "./modB.ts"];
|
||||||
|
const modAFactory = (_require, _exports, _modB) => {
|
||||||
|
assertEqual(_modB.foo, "bar");
|
||||||
|
factoryStack.push("modA");
|
||||||
|
_exports.bar = "baz";
|
||||||
|
_modB.assertModA();
|
||||||
|
};
|
||||||
|
const modBDeps = ["require", "exports", "./modA.ts"];
|
||||||
|
const modBFactory = (_require, _exports, _modA) => {
|
||||||
|
assertEqual(_modA, {});
|
||||||
|
factoryStack.push("modB");
|
||||||
|
_exports.foo = "bar";
|
||||||
|
_exports.assertModA = () => {
|
||||||
|
assertEqual(_modA, {
|
||||||
|
bar: "baz"
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mockDepsStack.push(modBDeps);
|
||||||
|
mockFactoryStack.push(modBFactory);
|
||||||
|
mockDepsStack.push(modADeps);
|
||||||
|
mockFactoryStack.push(modAFactory);
|
||||||
|
compilerInstance.run("modA.ts", "/root/project");
|
||||||
|
assertEqual(factoryStack, ["modB", "modA"]);
|
||||||
|
teardown();
|
||||||
|
});
|
||||||
|
|
||||||
test(function compilerResolveModule() {
|
test(function compilerResolveModule() {
|
||||||
setup();
|
setup();
|
||||||
const moduleMetaData = compilerInstance.resolveModule(
|
const moduleMetaData = compilerInstance.resolveModule(
|
||||||
|
|
Loading…
Add table
Reference in a new issue