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 + }); + }); + }); +}); +