From d2857751b250ecc3041c4fba230ac8bc379478f4 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 5 May 2015 17:27:31 -0700 Subject: [PATCH] Always include 'lib.d.ts' last in tests unless '@noLib' is specified. --- src/compiler/checker.ts | 2 ++ src/harness/harness.ts | 15 +++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 6b889e58e58..47e1828711a 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10958,6 +10958,8 @@ module ts { function checkSourceFile(node: SourceFile) { let start = new Date().getTime(); + // Check whether the file has declared it is the default lib, + // and whether the user has specifically chosen to avoid checking it. let skipCheck = node.hasNoDefaultLib && compilerOptions.noLibCheck; if (!skipCheck) { checkSourceFileWorker(node); diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 024a9748aa3..4aa2775b243 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -962,12 +962,19 @@ module Harness { var includeBuiltFiles: { unitName: string; content: string }[] = []; var useCaseSensitiveFileNames = ts.sys.useCaseSensitiveFileNames; - this.settings.forEach(setOptionForSetting); + this.settings.forEach(setCompilerOptionForSetting); var fileOutputs: GeneratedFile[] = []; var programFiles = inputFiles.concat(includeBuiltFiles).map(file => file.unitName); - var program = ts.createProgram(programFiles, options, createCompilerHost(inputFiles.concat(includeBuiltFiles).concat(otherFiles), + if (!options.noLib) { + // Unless the user doesn't want a default lib at all, + // always push the default lib in *last* to normalize the type/symbol baselines. + programFiles.push(defaultLibFileName); + } + + var program = ts.createProgram(programFiles, options, + createCompilerHost(inputFiles.concat(includeBuiltFiles).concat(otherFiles), (fn, contents, writeByteOrderMark) => fileOutputs.push({ fileName: fn, code: contents, writeByteOrderMark: writeByteOrderMark }), options.target, useCaseSensitiveFileNames, currentDirectory, options.newLine)); @@ -986,8 +993,8 @@ module Harness { // reset what newline means in case the last test changed it ts.sys.newLine = newLine; return options; - - function setOptionForSetting(setting: Harness.TestCaseParser.CompilerSetting) { + + function setCompilerOptionForSetting(setting: Harness.TestCaseParser.CompilerSetting) { switch (setting.flag.toLowerCase()) { // "fileName", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outdir", "noimplicitany", "noresolve" case "module":