diff --git a/Jakefile b/Jakefile
index 34879a56691..821f755650c 100644
--- a/Jakefile
+++ b/Jakefile
@@ -82,7 +82,8 @@ var harnessSources = [
return path.join(harnessDirectory, f);
}).concat([
"services/colorization.ts",
- "services/documentRegistry.ts"
+ "services/documentRegistry.ts",
+ "services/preProcessFile.ts"
].map(function (f) {
return path.join(unittestsDirectory, f);
}));
diff --git a/tests/cases/unittests/services/preProcessFile.ts b/tests/cases/unittests/services/preProcessFile.ts
new file mode 100644
index 00000000000..6a55b53c2d5
--- /dev/null
+++ b/tests/cases/unittests/services/preProcessFile.ts
@@ -0,0 +1,101 @@
+///
+///
+
+describe('preProcessFile', function () {
+ function test(sourceText: string, readImportFile: boolean, expectedPreProcess: ts.PreProcessedFileInfo): void {
+ debugger
+ var resultPreProcess = ts.preProcessFile(sourceText, readImportFile);
+
+ var resultIsLibFile = resultPreProcess.isLibFile;
+ var resultImportedFiles = resultPreProcess.importedFiles;
+ var resultReferencedFiles = resultPreProcess.referencedFiles;
+
+ var expectedIsLibFile = expectedPreProcess.isLibFile;
+ var expectedImportedFiles = expectedPreProcess.importedFiles;
+ var expectedReferencedFiles = expectedPreProcess.referencedFiles;
+
+ assert.equal(resultIsLibFile, expectedIsLibFile, "Pre-processed file has different value for isLibFile. Expected: " + expectedPreProcess + ". Actual: " + resultIsLibFile);
+
+ assert.equal(resultImportedFiles.length, expectedImportedFiles.length,
+ "Array's length of imported files does not match expected. Expected: " + expectedImportedFiles.length + ". Actual: " + resultImportedFiles.length);
+
+ assert.equal(resultReferencedFiles.length, expectedReferencedFiles.length,
+ "Array's length of referenced files does not match expected. Expected: " + expectedReferencedFiles.length + ". Actual: " + resultReferencedFiles.length);
+
+ for (var i = 0; i < expectedImportedFiles.length; ++i) {
+ var resultImportedFile = resultImportedFiles[i];
+ var expectedImportedFile = expectedImportedFiles[i];
+
+ assert.equal(resultImportedFile.path, expectedImportedFile.path, "Imported file path does not match expected. Expected: " + expectedImportedFile.path + ". Actual: " + resultImportedFile.path + ".");
+
+ assert.equal(resultImportedFile.position, expectedImportedFile.position, "Imported file position does not match expected. Expected: " + expectedImportedFile.position + ". Actual: " + resultImportedFile.position + ".");
+
+ assert.equal(resultImportedFile.length, expectedImportedFile.length, "Imported file length does not match expected. Expected: " + expectedImportedFile.length + ". Actual: " + resultImportedFile.length + ".");
+ }
+
+ for (var i = 0; i < expectedReferencedFiles.length; ++i) {
+ var resultReferencedFile = resultReferencedFiles[i];
+ var expectedReferencedFile = expectedReferencedFiles[i];
+
+ assert.equal(resultReferencedFile.path, expectedReferencedFile.path, "Referenced file path does not match expected. Expected: " + expectedReferencedFile.path + ". Actual: " + resultReferencedFile.path + ".");
+
+ assert.equal(resultReferencedFile.position, expectedReferencedFile.position, "Referenced file position does not match expected. Expected: " + expectedReferencedFile.position + ". Actual: " + resultReferencedFile.position + ".");
+
+ assert.equal(resultReferencedFile.length, expectedReferencedFile.length, "Referenced file length does not match expected. Expected: " + expectedReferencedFile.length + ". Actual: " + resultReferencedFile.length + ".");
+ }
+ }
+ describe("test preProcessFiles", function () {
+ it("Correctly return referenced files from triple slash", function () {
+ test("///" + "\n" + "///" + "\n" + "///" + "\n" + "///", true,
+ {
+ referencedFiles: [{ path: "refFile1.ts", position: 0, length: 37 }, { path: "refFile2.ts", position: 38, length: 35 },
+ { path: "refFile3.ts", position: 74, length: 35 }, { path: "refFile4d.ts", position: 110, length: 37 }],
+ importedFiles: [],
+ diagnostics: [],
+ isLibFile: false
+ });
+ }),
+
+ it("Invalid referenced files from triple slash", function () {
+ test("///" + "\n" + "///" + "\n" + "///" + "\n" + "///", true,
+ {
+ referencedFiles: [],
+ importedFiles: [],
+ diagnostics: [],
+ isLibFile: false
+ });
+ });
+
+ it("Correctly return imported files", function () {
+ test("import i1 = require(\"r1.ts\"); import i2 =require(\"r2.ts\"); import i3= require(\"r3.ts\"); import i4=require(\"r4.ts\"); import i5 = require (\"r5.ts\");", true,
+ {
+ referencedFiles: [],
+ importedFiles: [{ path: "r1.ts", position: 0, length: 5 }, { path: "r2.ts", position: 30, length: 5 }, { path: "r3.ts", position: 59, length: 5 },
+ { path: "r4.ts", position: 88, length: 5 }, { path: "r5.ts", position: 116, length: 5 }],
+ diagnostics: [],
+ isLibFile: false
+ });
+ });
+
+ it("Do not return imported files if readImportFiles argument is false", function () {
+ test("import i1 = require(\"r1.ts\"); import i2 =require(\"r2.ts\"); import i3= require(\"r3.ts\"); import i4=require(\"r4.ts\"); import i5 = require (\"r5.ts\");", false,
+ {
+ referencedFiles: [],
+ importedFiles: [],
+ diagnostics: [],
+ isLibFile: false
+ });
+ });
+
+ it("Correctly return referenced files and import files", function () {
+ test("///" + "\n" + "///" + "\n" + "import i1 = require(\"r1.ts\"); import i2 =require(\"r2.ts\");", true,
+ {
+ referencedFiles: [{ path: "refFile1.ts", position: 0, length: 35 }, { path: "refFile2.ts", position: 36, length: 35 }],
+ importedFiles: [{ path: "r1.ts", position: 72, length: 5 }, { path: "r2.ts", position: 102, length: 5 }],
+ diagnostics: [],
+ isLibFile: false
+ });
+ });
+ });
+});
+