Skip to content

Commit a0b7c2e

Browse files
author
Kanchalai Tanglertsampan
committed
Cache react.d.ts library when running tests
1 parent 8ce7e37 commit a0b7c2e

File tree

1 file changed

+32
-3
lines changed

1 file changed

+32
-3
lines changed

src/harness/harness.ts

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -922,10 +922,15 @@ namespace Harness {
922922
export const defaultLibFileName = "lib.d.ts";
923923
export const es2015DefaultLibFileName = "lib.es2015.d.ts";
924924

925+
// Cache of lib files from "built/local"
925926
const libFileNameSourceFileMap = ts.createMapFromTemplate<ts.SourceFile>({
926927
[defaultLibFileName]: createSourceFileAndAssertInvariants(defaultLibFileName, IO.readFile(libFolder + "lib.es5.d.ts"), /*languageVersion*/ ts.ScriptTarget.Latest)
927928
});
928929

930+
// Cache of lib files from "tests/lib/"
931+
const testLibFileNameSourceFileMap = ts.createMap<ts.SourceFile>();
932+
const es6TestLibFileNameSourceFileMap = ts.createMap<ts.SourceFile>();
933+
929934
export function getDefaultLibrarySourceFile(fileName = defaultLibFileName): ts.SourceFile {
930935
if (!isDefaultLibraryFile(fileName)) {
931936
return undefined;
@@ -967,7 +972,8 @@ namespace Harness {
967972
useCaseSensitiveFileNames: boolean,
968973
// the currentDirectory is needed for rwcRunner to passed in specified current directory to compiler host
969974
currentDirectory: string,
970-
newLineKind?: ts.NewLineKind): ts.CompilerHost {
975+
newLineKind?: ts.NewLineKind,
976+
libFiles?: string): ts.CompilerHost {
971977

972978
// Local get canonical file name function, that depends on passed in parameter for useCaseSensitiveFileNames
973979
const getCanonicalFileName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
@@ -999,6 +1005,24 @@ namespace Harness {
9991005
}
10001006
}
10011007

1008+
if (libFiles) {
1009+
// Because @libFiles don't change between execution. We would cache the result of the files and reuse it to speed help compilation
1010+
for (const fileName of libFiles.split(",")) {
1011+
const libFileName = "tests/lib/" + fileName;
1012+
1013+
if (scriptTarget <= ts.ScriptTarget.ES5) {
1014+
if (!testLibFileNameSourceFileMap[libFileName]) {
1015+
testLibFileNameSourceFileMap[libFileName] = createSourceFileAndAssertInvariants(libFileName, IO.readFile(libFileName), scriptTarget);
1016+
}
1017+
}
1018+
else {
1019+
if (!es6TestLibFileNameSourceFileMap[libFileName]) {
1020+
es6TestLibFileNameSourceFileMap[libFileName] = createSourceFileAndAssertInvariants(libFileName, IO.readFile(libFileName), scriptTarget);
1021+
}
1022+
}
1023+
}
1024+
}
1025+
10021026
function getSourceFile(fileName: string) {
10031027
fileName = ts.normalizePath(fileName);
10041028
const fromFileMap = fileMap.get(toPath(fileName));
@@ -1010,6 +1034,9 @@ namespace Harness {
10101034
fourslashSourceFile = fourslashSourceFile || createSourceFileAndAssertInvariants(tsFn, Harness.IO.readFile(tsFn), scriptTarget);
10111035
return fourslashSourceFile;
10121036
}
1037+
else if (ts.startsWith(fileName, "tests/lib/")) {
1038+
return scriptTarget <= ts.ScriptTarget.ES5 ? testLibFileNameSourceFileMap[fileName] : es6TestLibFileNameSourceFileMap[fileName];
1039+
}
10131040
else {
10141041
// Don't throw here -- the compiler might be looking for a test that actually doesn't exist as part of the TC
10151042
// Return if it is other library file, otherwise return undefined
@@ -1221,7 +1248,8 @@ namespace Harness {
12211248
if (options.libFiles) {
12221249
for (const fileName of options.libFiles.split(",")) {
12231250
const libFileName = "tests/lib/" + fileName;
1224-
programFiles.push({ unitName: libFileName, content: normalizeLineEndings(IO.readFile(libFileName), Harness.IO.newLine()) });
1251+
// Content is undefined here because in createCompilerHost we will create sourceFile for the lib file and cache the result
1252+
programFiles.push({ unitName: libFileName, content: undefined });
12251253
}
12261254
}
12271255

@@ -1234,7 +1262,8 @@ namespace Harness {
12341262
options.target,
12351263
useCaseSensitiveFileNames,
12361264
currentDirectory,
1237-
options.newLine);
1265+
options.newLine,
1266+
options.libFiles);
12381267

12391268
let traceResults: string[];
12401269
if (options.traceResolution) {

0 commit comments

Comments
 (0)