Allow RWC runner to use default library instead of the one in json file

This commit is contained in:
Yui T
2015-03-27 10:30:45 -07:00
parent 4894fee7d3
commit 66f0715a84
3 changed files with 46 additions and 14 deletions

View File

@@ -1703,6 +1703,14 @@ module Harness {
return (Path.getFileName(filePath) === 'lib.d.ts') || (Path.getFileName(filePath) === 'lib.core.d.ts');
}
export function getDefaultLibraryFile(): { unitName: string, content: string } {
var libFile = Harness.userSpecifiedroot + Harness.libFolder + "/" + "lib.d.ts";
return {
unitName: libFile,
content: IO.readFile(libFile)
}
}
if (Error) (<any>Error).stackTraceLimit = 1;
}

View File

@@ -15,6 +15,7 @@ interface IOLog {
arguments: string[];
executingPath: string;
currentDirectory: string;
useDefaultLibFile?: boolean;
filesRead: {
path: string;
codepage: number;

View File

@@ -32,6 +32,7 @@ module RWC {
};
var baseName = /(.*)\/(.*).json/.exec(ts.normalizeSlashes(jsonPath))[2];
var currentDirectory: string;
var useDefaultLibFile: boolean;
after(() => {
// Mocha holds onto the closure environment of the describe callback even after the test is done.
@@ -43,6 +44,10 @@ module RWC {
baselineOpts = undefined;
baseName = undefined;
currentDirectory = undefined;
// useDefaultLibFile is a flag specified in the json object to indicate whether to use built/local/lib.d.ts
// or to use lib.d.ts inside the json object. If the flag is true or undefine, use the build/local/lib.d.ts
// otherwise use the lib.d.ts from the json object.
useDefaultLibFile = undefined;
});
it('can compile', () => {
@@ -51,32 +56,52 @@ module RWC {
var ioLog: IOLog = JSON.parse(Harness.IO.readFile(jsonPath));
currentDirectory = ioLog.currentDirectory;
useDefaultLibFile = ioLog.useDefaultLibFile;
if (useDefaultLibFile === undefined) {
useDefaultLibFile = true;
}
runWithIOLog(ioLog, () => {
opts = ts.parseCommandLine(ioLog.arguments);
assert.equal(opts.errors.length, 0);
// To provide test coverage of output javascript file,
// we will set noEmitOnError flag to be false.
opts.options.noEmitOnError = false;
});
runWithIOLog(ioLog, () => {
harnessCompiler.reset();
// Load the files
ts.forEach(opts.fileNames, fileName => {
inputFiles.push(getHarnessCompilerInputUnit(fileName));
});
if (!opts.options.noLib) {
// Find the lib.d.ts file in the input file and add it to the input files list
var libFile = ts.forEach(ioLog.filesRead, fileRead=> Harness.isLibraryFile(fileRead.path) ? fileRead.path : undefined);
if (libFile) {
inputFiles.push(getHarnessCompilerInputUnit(libFile));
}
}
// Add files to compilation
ts.forEach(ioLog.filesRead, fileRead => {
// Check if the file is already added into the set of input files.
var resolvedPath = ts.normalizeSlashes(ts.sys.resolvePath(fileRead.path));
var inInputList = ts.forEach(inputFiles, inputFile=> inputFile.unitName === resolvedPath);
if (!inInputList) {
// Add the file to other files
otherFiles.push(getHarnessCompilerInputUnit(fileRead.path));
if (!Harness.isLibraryFile(fileRead.path)) {
if (!inInputList) {
otherFiles.push(getHarnessCompilerInputUnit(fileRead.path));
}
}
else if (!opts.options.noLib && Harness.isLibraryFile(fileRead.path)){
if (!inInputList) {
// If useDefaultLibFile is true, we will use built/local/lib.d.ts
// instead of the provided lib.d.ts from json object.
// Majority of RWC code will be using built/local/lib.d.ts instead of
// lib.d.ts inside json file. However, some RWC cases will still use
// their own version of lib.d.ts because they have customized lib.d.ts
if (useDefaultLibFile) {
inputFiles.push(Harness.getDefaultLibraryFile());
}
else {
inputFiles.push(getHarnessCompilerInputUnit(fileRead.path));
}
}
}
});
@@ -115,9 +140,7 @@ module RWC {
it('has the expected declaration file content', () => {
Harness.Baseline.runBaseline('has the expected declaration file content', baseName + '.d.ts', () => {
if (compilerResult.errors.length || !compilerResult.declFilesCode.length) {
return null;
}
if (!compilerResult.declFilesCode.length) {
return null;
}