From fe8f73620789976b8894f8cef907996e85caccd3 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 3 Oct 2014 15:07:18 -0700 Subject: [PATCH 1/3] Enable tests for the case sensitive and non case sensitive path resolution during soucemap path calculation --- src/harness/fourslash.ts | 22 +-- src/harness/harness.ts | 50 +++++- .../sourceMapWithCaseSensitiveFileNames.js | 26 +++ ...sourceMapWithCaseSensitiveFileNames.js.map | 2 + ...apWithCaseSensitiveFileNames.sourcemap.txt | 150 ++++++++++++++++++ .../sourceMapWithCaseSensitiveFileNames.types | 11 ++ .../sourceMapWithNonCaseSensitiveFileNames.js | 26 +++ ...rceMapWithNonCaseSensitiveFileNames.js.map | 2 + ...ithNonCaseSensitiveFileNames.sourcemap.txt | 150 ++++++++++++++++++ ...urceMapWithNonCaseSensitiveFileNames.types | 11 ++ .../sourceMapWithCaseSensitiveFileNames.ts | 12 ++ .../sourceMapWithNonCaseSensitiveFileNames.ts | 12 ++ 12 files changed, 452 insertions(+), 22 deletions(-) create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js.map create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.sourcemap.txt create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.types create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.types create mode 100644 tests/cases/compiler/sourceMapWithCaseSensitiveFileNames.ts create mode 100644 tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNames.ts diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index e746bd9e7c9..e0c34bacb67 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -2096,9 +2096,6 @@ module FourSlash { xmlData.push(xml); } - // Cache these between executions so we don't have to re-parse them for every test - var fourslashSourceFile: ts.SourceFile = undefined; - export function runFourSlashTestContent(content: string, fileName: string): TestXmlData { // Parse out the files and their metadata var testData = parseTestData(content, fileName); @@ -2106,21 +2103,16 @@ module FourSlash { currentTestState = new TestState(testData); var result = ''; - var fourslashFilename = 'fourslash.ts'; - var tsFn = 'tests/cases/fourslash/' + fourslashFilename; - fourslashSourceFile = fourslashSourceFile || ts.createSourceFile(tsFn, Harness.IO.readFile(tsFn), ts.ScriptTarget.ES5, /*version*/ "0", /*isOpen*/ false); - - var files: { [filename: string]: ts.SourceFile; } = {}; - files[Harness.Compiler.getCanonicalFileName(fourslashFilename)] = fourslashSourceFile; - files[Harness.Compiler.getCanonicalFileName(fileName)] = ts.createSourceFile(fileName, content, ts.ScriptTarget.ES5, /*version*/ "0", /*isOpen*/ false); - files[Harness.Compiler.getCanonicalFileName(Harness.Compiler.defaultLibFileName)] = Harness.Compiler.defaultLibSourceFile; - - var host = Harness.Compiler.createCompilerHost(files, (fn, contents) => result = contents); - var program = ts.createProgram([fourslashFilename, fileName], { out: "fourslashTestOutput.js" }, host); + var host = Harness.Compiler.createCompilerHost([{ unitName: Harness.Compiler.fourslashFilename, content: undefined }, + { unitName: fileName, content: content }], + (fn, contents) => result = contents, + ts.ScriptTarget.ES5, + sys.useCaseSensitiveFileNames); + var program = ts.createProgram([Harness.Compiler.fourslashFilename, fileName], { out: "fourslashTestOutput.js" }, host); var checker = ts.createTypeChecker(program, /*fullTypeCheckMode*/ true); checker.checkProgram(); - var errs = checker.getDiagnostics(files[fileName]); + var errs = checker.getDiagnostics(program.getSourceFile(fileName)); if (errs.length > 0) { throw new Error('Error compiling ' + fileName + ': ' + errs.map(e => e.messageText).join('\r\n')); } diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 268d2125c2c..686f6f9bd0f 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -534,18 +534,47 @@ module Harness { export var defaultLibFileName = 'lib.d.ts'; export var defaultLibSourceFile = ts.createSourceFile(defaultLibFileName, IO.readFile(libFolder + 'lib.core.d.ts'), /*languageVersion*/ ts.ScriptTarget.ES5, /*version:*/ "0"); + // Cache these between executions so we don't have to re-parse them for every test + export var fourslashFilename = 'fourslash.ts'; + export var fourslashSourceFile: ts.SourceFile; + export function getCanonicalFileName(fileName: string): string { return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); } - export function createCompilerHost(filemap: { [filename: string]: ts.SourceFile; }, writeFile: (fn: string, contents: string, writeByteOrderMark:boolean) => void): ts.CompilerHost { + export function createCompilerHost(inputFiles: { unitName: string; content: string; }[], + writeFile: (fn: string, contents: string, writeByteOrderMark: boolean) => void, + scriptTarget: ts.ScriptTarget, + useCaseSensitiveFileNames: boolean): ts.CompilerHost { + + // Local get canonical file name function, that depends on passed in parameter for useCaseSensitiveFileNames + function getCanonicalFileName(fileName: string): string { + return useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); + } + + var filemap: { [filename: string]: ts.SourceFile; } = {}; + // Register input files + function register(file: { unitName: string; content: string; }) { + if (file.content !== undefined) { + var filename = Path.switchToForwardSlashes(file.unitName); + filemap[getCanonicalFileName(filename)] = ts.createSourceFile(filename, file.content, scriptTarget, /*version:*/ "0"); + } + }; + inputFiles.forEach(register); + return { getCurrentDirectory: sys.getCurrentDirectory, getCancellationToken: (): any => undefined, getSourceFile: (fn, languageVersion) => { if (Object.prototype.hasOwnProperty.call(filemap, getCanonicalFileName(fn))) { return filemap[getCanonicalFileName(fn)]; - } else { + } + else if (fn === fourslashFilename) { + var tsFn = 'tests/cases/fourslash/' + fourslashFilename; + fourslashSourceFile = fourslashSourceFile || ts.createSourceFile(tsFn, Harness.IO.readFile(tsFn), scriptTarget, /*version*/ "0", /*isOpen*/ false); + return fourslashSourceFile; + } + else { var lib = defaultLibFileName; if (fn === defaultLibFileName) { return defaultLibSourceFile; @@ -557,7 +586,7 @@ module Harness { getDefaultLibFilename: () => defaultLibFileName, writeFile: writeFile, getCanonicalFileName: getCanonicalFileName, - useCaseSensitiveFileNames: () => sys.useCaseSensitiveFileNames, + useCaseSensitiveFileNames: () => useCaseSensitiveFileNames, getNewLine: ()=> sys.newLine }; } @@ -614,7 +643,7 @@ module Harness { } public compileFiles(inputFiles: { unitName: string; content: string }[], - otherFiles: { unitName: string; content?: string }[], + otherFiles: { unitName: string; content: string }[], onComplete: (result: CompilerResult, checker: ts.TypeChecker) => void, settingsCallback?: (settings: ts.CompilerOptions) => void, options?: ts.CompilerOptions) { @@ -628,6 +657,7 @@ module Harness { settingsCallback(null); } + var useCaseSensitiveFileNames = sys.useCaseSensitiveFileNames; this.settings.forEach(setting => { switch (setting.flag.toLowerCase()) { // "filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outDir", "noimplicitany", "noresolve" @@ -706,10 +736,13 @@ module Harness { options.removeComments = setting.value === 'false'; break; + case 'usecasesensitivefilenames': + useCaseSensitiveFileNames = setting.value === 'true'; + break; + case 'mapsourcefiles': case 'maproot': case 'generatedeclarationfiles': - case 'usecasesensitivefileresolution': case 'gatherDiagnostics': case 'codepage': case 'createFileLog': @@ -748,7 +781,10 @@ module Harness { var fileOutputs: GeneratedFile[] = []; var programFiles = inputFiles.map(file => file.unitName); - var program = ts.createProgram(programFiles, options, createCompilerHost(filemap, (fn, contents, writeByteOrderMark) => fileOutputs.push({ fileName: fn, code: contents, writeByteOrderMark: writeByteOrderMark }))); + var program = ts.createProgram(programFiles, options, createCompilerHost(inputFiles.concat(otherFiles), + (fn, contents, writeByteOrderMark) => fileOutputs.push({ fileName: fn, code: contents, writeByteOrderMark: writeByteOrderMark }), + options.target, + useCaseSensitiveFileNames)); var hadParseErrors = program.getDiagnostics().length > 0; @@ -1034,7 +1070,7 @@ module Harness { var optionRegex = /^[\/]{2}\s*@(\w+)\s*:\s*(\S*)/gm; // multiple matches on multiple lines // List of allowed metadata names - var fileMetadataNames = ["filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outDir", "noimplicitany", "noresolve", "newline", "newlines", "emitbom", "errortruncation"]; + var fileMetadataNames = ["filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outDir", "noimplicitany", "noresolve", "newline", "newlines", "emitbom", "errortruncation", "usecasesensitivefilenames"]; function extractCompilerSettings(content: string): CompilerSetting[] { diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js new file mode 100644 index 00000000000..37ef08d97fb --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/sourceMapWithCaseSensitiveFileNames.ts] //// + +//// [app.ts] +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +class c { +} + +//// [app2.ts] +class d { +} + +//// [fooResult.js] +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +var c = (function () { + function c() { + } + return c; +})(); +var d = (function () { + function d() { + } + return d; +})(); +//# sourceMappingURL=fooResult.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js.map b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js.map new file mode 100644 index 00000000000..384caae23ea --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js.map @@ -0,0 +1,2 @@ +//// [fooResult.js.map] +{"version":3,"file":"fooResult.js","sourceRoot":"","sources":["../testFiles/app.ts","../testFiles/app2.ts"],"names":["c","c.constructor","d","d.constructor"],"mappings":"AAEA,AAFA,gFAAgF;AAChF,wIAAwI;IAClI,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC;ACHD,IAAM,CAAC;IAAPE,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"} \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.sourcemap.txt b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.sourcemap.txt new file mode 100644 index 00000000000..b67d4e3be57 --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.sourcemap.txt @@ -0,0 +1,150 @@ +=================================================================== +JsFile: fooResult.js +mapUrl: fooResult.js.map +sourceRoot: +sources: ../testFiles/app.ts,../testFiles/app2.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/fooResult.js +sourceFile:../testFiles/app.ts +------------------------------------------------------------------- +>>>// Note in the out result we are using same folder name only different in casing +1 > +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 >// Note in the out result we are using same folder name only different in casing + >// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts + > +2 > +3 >// Note in the out result we are using same folder name only different in casing +1 >Emitted(1, 1) Source(3, 1) + SourceIndex(0) +2 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +3 >Emitted(1, 81) Source(1, 81) + SourceIndex(0) +--- +>>>// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +1-> +2 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1-> + > +2 >// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +1->Emitted(2, 1) Source(2, 1) + SourceIndex(0) +2 >Emitted(2, 137) Source(2, 137) + SourceIndex(0) +--- +>>>var c = (function () { +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^^^^^^-> +1 > + >class +2 > c +1 >Emitted(3, 5) Source(3, 7) + SourceIndex(0) +2 >Emitted(3, 6) Source(3, 8) + SourceIndex(0) +--- +>>> function c() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > c +1->Emitted(4, 5) Source(3, 1) + SourceIndex(0) name (c) +2 >Emitted(4, 14) Source(3, 7) + SourceIndex(0) name (c) +3 >Emitted(4, 15) Source(3, 8) + SourceIndex(0) name (c) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(5, 5) Source(4, 1) + SourceIndex(0) name (c.constructor) +2 >Emitted(5, 6) Source(4, 2) + SourceIndex(0) name (c.constructor) +--- +>>> return c; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(6, 5) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(6, 13) Source(4, 2) + SourceIndex(0) name (c) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class c { + > } +1 >Emitted(7, 1) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(7, 2) Source(4, 2) + SourceIndex(0) name (c) +3 >Emitted(7, 2) Source(3, 1) + SourceIndex(0) +4 >Emitted(7, 6) Source(4, 2) + SourceIndex(0) +--- +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/fooResult.js +sourceFile:../testFiles/app2.ts +------------------------------------------------------------------- +>>>var d = (function () { +1-> +2 >^^^^ +3 > ^ +4 > ^^^^^^^^^^^^^^-> +1-> +2 >class +3 > d +1->Emitted(8, 1) Source(1, 1) + SourceIndex(1) +2 >Emitted(8, 5) Source(1, 7) + SourceIndex(1) +3 >Emitted(8, 6) Source(1, 8) + SourceIndex(1) +--- +>>> function d() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > d +1->Emitted(9, 5) Source(1, 1) + SourceIndex(1) name (d) +2 >Emitted(9, 14) Source(1, 7) + SourceIndex(1) name (d) +3 >Emitted(9, 15) Source(1, 8) + SourceIndex(1) name (d) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(10, 5) Source(2, 1) + SourceIndex(1) name (d.constructor) +2 >Emitted(10, 6) Source(2, 2) + SourceIndex(1) name (d.constructor) +--- +>>> return d; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(11, 5) Source(2, 1) + SourceIndex(1) name (d) +2 >Emitted(11, 13) Source(2, 2) + SourceIndex(1) name (d) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class d { + > } +1 >Emitted(12, 1) Source(2, 1) + SourceIndex(1) name (d) +2 >Emitted(12, 2) Source(2, 2) + SourceIndex(1) name (d) +3 >Emitted(12, 2) Source(1, 1) + SourceIndex(1) +4 >Emitted(12, 6) Source(2, 2) + SourceIndex(1) +--- +>>>//# sourceMappingURL=fooResult.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.types b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.types new file mode 100644 index 00000000000..2d42e0b5e4b --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/testFiles/app.ts === +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +class c { +>c : c +} + +=== tests/cases/compiler/testFiles/app2.ts === +class d { +>d : d +} diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js new file mode 100644 index 00000000000..50a3a2f3bc8 --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNames.ts] //// + +//// [app.ts] +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +class c { +} + +//// [app2.ts] +class d { +} + +//// [fooResult.js] +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +var c = (function () { + function c() { + } + return c; +})(); +var d = (function () { + function d() { + } + return d; +})(); +//# sourceMappingURL=fooResult.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map new file mode 100644 index 00000000000..49f94ed3829 --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map @@ -0,0 +1,2 @@ +//// [fooResult.js.map] +{"version":3,"file":"fooResult.js","sourceRoot":"","sources":["../testFiles/app.ts","../testFiles/app2.ts"],"names":["c","c.constructor","d","d.constructor"],"mappings":"AAEA,AAFA,gFAAgF;AAChF,0GAA0G;IACpG,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC;ACHD,IAAM,CAAC;IAAPE,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"} \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt new file mode 100644 index 00000000000..67f80b38bec --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt @@ -0,0 +1,150 @@ +=================================================================== +JsFile: fooResult.js +mapUrl: fooResult.js.map +sourceRoot: +sources: ../testFiles/app.ts,../testFiles/app2.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/fooResult.js +sourceFile:../testFiles/app.ts +------------------------------------------------------------------- +>>>// Note in the out result we are using same folder name only different in casing +1 > +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 >// Note in the out result we are using same folder name only different in casing + >// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap + > +2 > +3 >// Note in the out result we are using same folder name only different in casing +1 >Emitted(1, 1) Source(3, 1) + SourceIndex(0) +2 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +3 >Emitted(1, 81) Source(1, 81) + SourceIndex(0) +--- +>>>// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +1-> +2 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1-> + > +2 >// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +1->Emitted(2, 1) Source(2, 1) + SourceIndex(0) +2 >Emitted(2, 107) Source(2, 107) + SourceIndex(0) +--- +>>>var c = (function () { +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^^^^^^-> +1 > + >class +2 > c +1 >Emitted(3, 5) Source(3, 7) + SourceIndex(0) +2 >Emitted(3, 6) Source(3, 8) + SourceIndex(0) +--- +>>> function c() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > c +1->Emitted(4, 5) Source(3, 1) + SourceIndex(0) name (c) +2 >Emitted(4, 14) Source(3, 7) + SourceIndex(0) name (c) +3 >Emitted(4, 15) Source(3, 8) + SourceIndex(0) name (c) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(5, 5) Source(4, 1) + SourceIndex(0) name (c.constructor) +2 >Emitted(5, 6) Source(4, 2) + SourceIndex(0) name (c.constructor) +--- +>>> return c; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(6, 5) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(6, 13) Source(4, 2) + SourceIndex(0) name (c) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class c { + > } +1 >Emitted(7, 1) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(7, 2) Source(4, 2) + SourceIndex(0) name (c) +3 >Emitted(7, 2) Source(3, 1) + SourceIndex(0) +4 >Emitted(7, 6) Source(4, 2) + SourceIndex(0) +--- +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/fooResult.js +sourceFile:../testFiles/app2.ts +------------------------------------------------------------------- +>>>var d = (function () { +1-> +2 >^^^^ +3 > ^ +4 > ^^^^^^^^^^^^^^-> +1-> +2 >class +3 > d +1->Emitted(8, 1) Source(1, 1) + SourceIndex(1) +2 >Emitted(8, 5) Source(1, 7) + SourceIndex(1) +3 >Emitted(8, 6) Source(1, 8) + SourceIndex(1) +--- +>>> function d() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > d +1->Emitted(9, 5) Source(1, 1) + SourceIndex(1) name (d) +2 >Emitted(9, 14) Source(1, 7) + SourceIndex(1) name (d) +3 >Emitted(9, 15) Source(1, 8) + SourceIndex(1) name (d) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(10, 5) Source(2, 1) + SourceIndex(1) name (d.constructor) +2 >Emitted(10, 6) Source(2, 2) + SourceIndex(1) name (d.constructor) +--- +>>> return d; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(11, 5) Source(2, 1) + SourceIndex(1) name (d) +2 >Emitted(11, 13) Source(2, 2) + SourceIndex(1) name (d) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class d { + > } +1 >Emitted(12, 1) Source(2, 1) + SourceIndex(1) name (d) +2 >Emitted(12, 2) Source(2, 2) + SourceIndex(1) name (d) +3 >Emitted(12, 2) Source(1, 1) + SourceIndex(1) +4 >Emitted(12, 6) Source(2, 2) + SourceIndex(1) +--- +>>>//# sourceMappingURL=fooResult.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.types b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.types new file mode 100644 index 00000000000..2dd1319e9dd --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/testFiles/app.ts === +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +class c { +>c : c +} + +=== tests/cases/compiler/testFiles/app2.ts === +class d { +>d : d +} diff --git a/tests/cases/compiler/sourceMapWithCaseSensitiveFileNames.ts b/tests/cases/compiler/sourceMapWithCaseSensitiveFileNames.ts new file mode 100644 index 00000000000..d0dff702aae --- /dev/null +++ b/tests/cases/compiler/sourceMapWithCaseSensitiveFileNames.ts @@ -0,0 +1,12 @@ +// @out: tests/cases/compiler/testfiles/fooResult.js +// @sourcemap: true +// @useCaseSensitiveFileNames: true +// @Filename: testFiles/app.ts +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +class c { +} + +// @Filename: testFiles/app2.ts +class d { +} \ No newline at end of file diff --git a/tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNames.ts b/tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNames.ts new file mode 100644 index 00000000000..85905fb29b9 --- /dev/null +++ b/tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNames.ts @@ -0,0 +1,12 @@ +// @out: tests/cases/compiler/testfiles/fooResult.js +// @sourcemap: true +// @useCaseSensitiveFileNames: false +// @Filename: testFiles/app.ts +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +class c { +} + +// @Filename: testFiles/app2.ts +class d { +} \ No newline at end of file From 710bac6d81a11174eff8c0e60fe1de99262c98ba Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 3 Oct 2014 15:10:12 -0700 Subject: [PATCH 2/3] Fix the source map directory resolution with non case sensitive file names --- src/compiler/core.ts | 4 ++-- src/compiler/emitter.ts | 9 ++++++--- src/harness/projectsRunner.ts | 3 ++- .../sourceMapWithNonCaseSensitiveFileNames.js.map | 2 +- .../sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt | 6 +++--- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 123bde2e719..5155289c73a 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -476,7 +476,7 @@ module ts { } } - export function getRelativePathToDirectoryOrUrl(directoryPathOrUrl: string, relativeOrAbsolutePath: string, currentDirectory: string, isAbsolutePathAnUrl: boolean) { + export function getRelativePathToDirectoryOrUrl(directoryPathOrUrl: string, relativeOrAbsolutePath: string, currentDirectory: string, getCanonicalFileName: (fileName: string) => string, isAbsolutePathAnUrl: boolean) { var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory); var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory); if (directoryComponents.length > 1 && directoryComponents[directoryComponents.length - 1] === "") { @@ -487,7 +487,7 @@ module ts { // Find the component that differs for (var joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) { - if (directoryComponents[joinStartIndex] !== pathComponents[joinStartIndex]) { + if (getCanonicalFileName(directoryComponents[joinStartIndex]) !== getCanonicalFileName(pathComponents[joinStartIndex])) { break; } } diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index a91637f2332..d9eb5ca12c9 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -527,7 +527,8 @@ module ts { sourceMapData.sourceMapSources.push(getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.filename, compilerHost.getCurrentDirectory(), - /*isAbsolutePathAnUrl*/ true)); + compilerHost.getCanonicalFileName, + /*isAbsolutePathAnUrl*/ true)); sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1; // The one that can be used from program to get the actual source file @@ -692,7 +693,8 @@ module ts { getDirectoryPath(normalizePath(jsFilePath)), // get the relative sourceMapDir path based on jsFilePath combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), // this is where user expects to see sourceMap compilerHost.getCurrentDirectory(), - /*isAbsolutePathAnUrl*/ true); + compilerHost.getCanonicalFileName, + /*isAbsolutePathAnUrl*/ true); } else { sourceMapData.jsSourceMappingURL = combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL); @@ -3170,7 +3172,8 @@ module ts { getDirectoryPath(normalizeSlashes(jsFilePath)), declFileName, compilerHost.getCurrentDirectory(), - /*isAbsolutePathAnUrl*/ false); + compilerHost.getCanonicalFileName, + /*isAbsolutePathAnUrl*/ false); referencePathsOutput += "/// " + newLine; } diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index c294f5b1be4..2886c43f091 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -226,7 +226,8 @@ class ProjectRunner extends RunnerBase { ? filename : ts.normalizeSlashes(testCase.projectRoot) + "/" + ts.normalizeSlashes(filename); - var diskRelativeName = ts.getRelativePathToDirectoryOrUrl(testCase.projectRoot, diskFileName, getCurrentDirectory(), false); + var diskRelativeName = ts.getRelativePathToDirectoryOrUrl(testCase.projectRoot, diskFileName, + getCurrentDirectory(), Harness.Compiler.getCanonicalFileName, /*isAbsolutePathAnUrl*/ false); if (ts.isRootedDiskPath(diskRelativeName) || diskRelativeName.substr(0, 3) === "../") { // If the generated output file resides in the parent folder or is rooted path, // we need to instead create files that can live in the project reference folder diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map index 49f94ed3829..0a164a2a2c2 100644 --- a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map @@ -1,2 +1,2 @@ //// [fooResult.js.map] -{"version":3,"file":"fooResult.js","sourceRoot":"","sources":["../testFiles/app.ts","../testFiles/app2.ts"],"names":["c","c.constructor","d","d.constructor"],"mappings":"AAEA,AAFA,gFAAgF;AAChF,0GAA0G;IACpG,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC;ACHD,IAAM,CAAC;IAAPE,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"} \ No newline at end of file +{"version":3,"file":"fooResult.js","sourceRoot":"","sources":["app.ts","app2.ts"],"names":["c","c.constructor","d","d.constructor"],"mappings":"AAEA,AAFA,gFAAgF;AAChF,0GAA0G;IACpG,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC;ACHD,IAAM,CAAC;IAAPE,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"} \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt index 67f80b38bec..1923426adc6 100644 --- a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt @@ -2,11 +2,11 @@ JsFile: fooResult.js mapUrl: fooResult.js.map sourceRoot: -sources: ../testFiles/app.ts,../testFiles/app2.ts +sources: app.ts,app2.ts =================================================================== ------------------------------------------------------------------- emittedFile:tests/cases/compiler/testfiles/fooResult.js -sourceFile:../testFiles/app.ts +sourceFile:app.ts ------------------------------------------------------------------- >>>// Note in the out result we are using same folder name only different in casing 1 > @@ -88,7 +88,7 @@ sourceFile:../testFiles/app.ts --- ------------------------------------------------------------------- emittedFile:tests/cases/compiler/testfiles/fooResult.js -sourceFile:../testFiles/app2.ts +sourceFile:app2.ts ------------------------------------------------------------------- >>>var d = (function () { 1-> From 4cf78744e32f9d3ad305e9a222814f5c9f4b618e Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 6 Oct 2014 11:37:08 -0700 Subject: [PATCH 3/3] Added test cases for --outDir option --- src/harness/harness.ts | 4 +- ...eMapWithCaseSensitiveFileNamesAndOutDir.js | 27 +++ ...WithCaseSensitiveFileNamesAndOutDir.js.map | 3 + ...eSensitiveFileNamesAndOutDir.sourcemap.txt | 156 ++++++++++++++++++ ...pWithCaseSensitiveFileNamesAndOutDir.types | 11 ++ ...pWithNonCaseSensitiveFileNamesAndOutDir.js | 27 +++ ...hNonCaseSensitiveFileNamesAndOutDir.js.map | 3 + ...eSensitiveFileNamesAndOutDir.sourcemap.txt | 156 ++++++++++++++++++ ...thNonCaseSensitiveFileNamesAndOutDir.types | 11 ++ ...eMapWithCaseSensitiveFileNamesAndOutDir.ts | 12 ++ ...pWithNonCaseSensitiveFileNamesAndOutDir.ts | 12 ++ 11 files changed, 420 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js.map create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.sourcemap.txt create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.types create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js.map create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.sourcemap.txt create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.types create mode 100644 tests/cases/compiler/sourceMapWithCaseSensitiveFileNamesAndOutDir.ts create mode 100644 tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.ts diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 686f6f9bd0f..e35fe83f9b2 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -660,7 +660,7 @@ module Harness { var useCaseSensitiveFileNames = sys.useCaseSensitiveFileNames; this.settings.forEach(setting => { switch (setting.flag.toLowerCase()) { - // "filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outDir", "noimplicitany", "noresolve" + // "filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outdir", "noimplicitany", "noresolve" case "module": case "modulegentarget": if (typeof setting.value === 'string') { @@ -1070,7 +1070,7 @@ module Harness { var optionRegex = /^[\/]{2}\s*@(\w+)\s*:\s*(\S*)/gm; // multiple matches on multiple lines // List of allowed metadata names - var fileMetadataNames = ["filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outDir", "noimplicitany", "noresolve", "newline", "newlines", "emitbom", "errortruncation", "usecasesensitivefilenames"]; + var fileMetadataNames = ["filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outdir", "noimplicitany", "noresolve", "newline", "newlines", "emitbom", "errortruncation", "usecasesensitivefilenames"]; function extractCompilerSettings(content: string): CompilerSetting[] { diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js new file mode 100644 index 00000000000..148a66f15db --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js @@ -0,0 +1,27 @@ +//// [tests/cases/compiler/sourceMapWithCaseSensitiveFileNamesAndOutDir.ts] //// + +//// [app.ts] +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +class c { +} + +//// [app2.ts] +class d { +} + +//// [app.js] +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +var c = (function () { + function c() { + } + return c; +})(); +//# sourceMappingURL=app.js.map//// [app2.js] +var d = (function () { + function d() { + } + return d; +})(); +//# sourceMappingURL=app2.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js.map b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js.map new file mode 100644 index 00000000000..e665c70c15b --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js.map @@ -0,0 +1,3 @@ +//// [app.js.map] +{"version":3,"file":"app.js","sourceRoot":"","sources":["../testFiles/app.ts"],"names":["c","c.constructor"],"mappings":"AAEA,AAFA,gFAAgF;AAChF,wIAAwI;IAClI,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"}//// [app2.js.map] +{"version":3,"file":"app2.js","sourceRoot":"","sources":["../testFiles/app2.ts"],"names":["d","d.constructor"],"mappings":"AAAA,IAAM,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"} \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.sourcemap.txt b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.sourcemap.txt new file mode 100644 index 00000000000..7d94304c359 --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.sourcemap.txt @@ -0,0 +1,156 @@ +=================================================================== +JsFile: app.js +mapUrl: app.js.map +sourceRoot: +sources: ../testFiles/app.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/app.js +sourceFile:../testFiles/app.ts +------------------------------------------------------------------- +>>>// Note in the out result we are using same folder name only different in casing +1 > +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 >// Note in the out result we are using same folder name only different in casing + >// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts + > +2 > +3 >// Note in the out result we are using same folder name only different in casing +1 >Emitted(1, 1) Source(3, 1) + SourceIndex(0) +2 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +3 >Emitted(1, 81) Source(1, 81) + SourceIndex(0) +--- +>>>// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +1-> +2 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1-> + > +2 >// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +1->Emitted(2, 1) Source(2, 1) + SourceIndex(0) +2 >Emitted(2, 137) Source(2, 137) + SourceIndex(0) +--- +>>>var c = (function () { +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^^^^^^-> +1 > + >class +2 > c +1 >Emitted(3, 5) Source(3, 7) + SourceIndex(0) +2 >Emitted(3, 6) Source(3, 8) + SourceIndex(0) +--- +>>> function c() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > c +1->Emitted(4, 5) Source(3, 1) + SourceIndex(0) name (c) +2 >Emitted(4, 14) Source(3, 7) + SourceIndex(0) name (c) +3 >Emitted(4, 15) Source(3, 8) + SourceIndex(0) name (c) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(5, 5) Source(4, 1) + SourceIndex(0) name (c.constructor) +2 >Emitted(5, 6) Source(4, 2) + SourceIndex(0) name (c.constructor) +--- +>>> return c; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(6, 5) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(6, 13) Source(4, 2) + SourceIndex(0) name (c) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class c { + > } +1 >Emitted(7, 1) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(7, 2) Source(4, 2) + SourceIndex(0) name (c) +3 >Emitted(7, 2) Source(3, 1) + SourceIndex(0) +4 >Emitted(7, 6) Source(4, 2) + SourceIndex(0) +--- +>>>//# sourceMappingURL=app.js.map=================================================================== +JsFile: app2.js +mapUrl: app2.js.map +sourceRoot: +sources: ../testFiles/app2.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/app2.js +sourceFile:../testFiles/app2.ts +------------------------------------------------------------------- +>>>var d = (function () { +1 > +2 >^^^^ +3 > ^ +4 > ^^^^^^^^^^^^^^-> +1 > +2 >class +3 > d +1 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +2 >Emitted(1, 5) Source(1, 7) + SourceIndex(0) +3 >Emitted(1, 6) Source(1, 8) + SourceIndex(0) +--- +>>> function d() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > d +1->Emitted(2, 5) Source(1, 1) + SourceIndex(0) name (d) +2 >Emitted(2, 14) Source(1, 7) + SourceIndex(0) name (d) +3 >Emitted(2, 15) Source(1, 8) + SourceIndex(0) name (d) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(3, 5) Source(2, 1) + SourceIndex(0) name (d.constructor) +2 >Emitted(3, 6) Source(2, 2) + SourceIndex(0) name (d.constructor) +--- +>>> return d; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(4, 5) Source(2, 1) + SourceIndex(0) name (d) +2 >Emitted(4, 13) Source(2, 2) + SourceIndex(0) name (d) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class d { + > } +1 >Emitted(5, 1) Source(2, 1) + SourceIndex(0) name (d) +2 >Emitted(5, 2) Source(2, 2) + SourceIndex(0) name (d) +3 >Emitted(5, 2) Source(1, 1) + SourceIndex(0) +4 >Emitted(5, 6) Source(2, 2) + SourceIndex(0) +--- +>>>//# sourceMappingURL=app2.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.types b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.types new file mode 100644 index 00000000000..2d42e0b5e4b --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/testFiles/app.ts === +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +class c { +>c : c +} + +=== tests/cases/compiler/testFiles/app2.ts === +class d { +>d : d +} diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js new file mode 100644 index 00000000000..4dc043e0ce7 --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js @@ -0,0 +1,27 @@ +//// [tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.ts] //// + +//// [app.ts] +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +class c { +} + +//// [app2.ts] +class d { +} + +//// [app.js] +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +var c = (function () { + function c() { + } + return c; +})(); +//# sourceMappingURL=app.js.map//// [app2.js] +var d = (function () { + function d() { + } + return d; +})(); +//# sourceMappingURL=app2.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js.map b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js.map new file mode 100644 index 00000000000..027c795967c --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js.map @@ -0,0 +1,3 @@ +//// [app.js.map] +{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":["c","c.constructor"],"mappings":"AAEA,AAFA,gFAAgF;AAChF,0GAA0G;IACpG,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"}//// [app2.js.map] +{"version":3,"file":"app2.js","sourceRoot":"","sources":["app2.ts"],"names":["d","d.constructor"],"mappings":"AAAA,IAAM,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"} \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.sourcemap.txt b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.sourcemap.txt new file mode 100644 index 00000000000..cfcd91a6552 --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.sourcemap.txt @@ -0,0 +1,156 @@ +=================================================================== +JsFile: app.js +mapUrl: app.js.map +sourceRoot: +sources: app.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/app.js +sourceFile:app.ts +------------------------------------------------------------------- +>>>// Note in the out result we are using same folder name only different in casing +1 > +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 >// Note in the out result we are using same folder name only different in casing + >// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap + > +2 > +3 >// Note in the out result we are using same folder name only different in casing +1 >Emitted(1, 1) Source(3, 1) + SourceIndex(0) +2 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +3 >Emitted(1, 81) Source(1, 81) + SourceIndex(0) +--- +>>>// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +1-> +2 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1-> + > +2 >// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +1->Emitted(2, 1) Source(2, 1) + SourceIndex(0) +2 >Emitted(2, 107) Source(2, 107) + SourceIndex(0) +--- +>>>var c = (function () { +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^^^^^^-> +1 > + >class +2 > c +1 >Emitted(3, 5) Source(3, 7) + SourceIndex(0) +2 >Emitted(3, 6) Source(3, 8) + SourceIndex(0) +--- +>>> function c() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > c +1->Emitted(4, 5) Source(3, 1) + SourceIndex(0) name (c) +2 >Emitted(4, 14) Source(3, 7) + SourceIndex(0) name (c) +3 >Emitted(4, 15) Source(3, 8) + SourceIndex(0) name (c) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(5, 5) Source(4, 1) + SourceIndex(0) name (c.constructor) +2 >Emitted(5, 6) Source(4, 2) + SourceIndex(0) name (c.constructor) +--- +>>> return c; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(6, 5) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(6, 13) Source(4, 2) + SourceIndex(0) name (c) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class c { + > } +1 >Emitted(7, 1) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(7, 2) Source(4, 2) + SourceIndex(0) name (c) +3 >Emitted(7, 2) Source(3, 1) + SourceIndex(0) +4 >Emitted(7, 6) Source(4, 2) + SourceIndex(0) +--- +>>>//# sourceMappingURL=app.js.map=================================================================== +JsFile: app2.js +mapUrl: app2.js.map +sourceRoot: +sources: app2.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/app2.js +sourceFile:app2.ts +------------------------------------------------------------------- +>>>var d = (function () { +1 > +2 >^^^^ +3 > ^ +4 > ^^^^^^^^^^^^^^-> +1 > +2 >class +3 > d +1 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +2 >Emitted(1, 5) Source(1, 7) + SourceIndex(0) +3 >Emitted(1, 6) Source(1, 8) + SourceIndex(0) +--- +>>> function d() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > d +1->Emitted(2, 5) Source(1, 1) + SourceIndex(0) name (d) +2 >Emitted(2, 14) Source(1, 7) + SourceIndex(0) name (d) +3 >Emitted(2, 15) Source(1, 8) + SourceIndex(0) name (d) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(3, 5) Source(2, 1) + SourceIndex(0) name (d.constructor) +2 >Emitted(3, 6) Source(2, 2) + SourceIndex(0) name (d.constructor) +--- +>>> return d; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(4, 5) Source(2, 1) + SourceIndex(0) name (d) +2 >Emitted(4, 13) Source(2, 2) + SourceIndex(0) name (d) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class d { + > } +1 >Emitted(5, 1) Source(2, 1) + SourceIndex(0) name (d) +2 >Emitted(5, 2) Source(2, 2) + SourceIndex(0) name (d) +3 >Emitted(5, 2) Source(1, 1) + SourceIndex(0) +4 >Emitted(5, 6) Source(2, 2) + SourceIndex(0) +--- +>>>//# sourceMappingURL=app2.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.types b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.types new file mode 100644 index 00000000000..2dd1319e9dd --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/testFiles/app.ts === +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +class c { +>c : c +} + +=== tests/cases/compiler/testFiles/app2.ts === +class d { +>d : d +} diff --git a/tests/cases/compiler/sourceMapWithCaseSensitiveFileNamesAndOutDir.ts b/tests/cases/compiler/sourceMapWithCaseSensitiveFileNamesAndOutDir.ts new file mode 100644 index 00000000000..17195b434e5 --- /dev/null +++ b/tests/cases/compiler/sourceMapWithCaseSensitiveFileNamesAndOutDir.ts @@ -0,0 +1,12 @@ +// @outDir: tests/cases/compiler/testfiles +// @sourcemap: true +// @useCaseSensitiveFileNames: true +// @Filename: testFiles/app.ts +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +class c { +} + +// @Filename: testFiles/app2.ts +class d { +} \ No newline at end of file diff --git a/tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.ts b/tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.ts new file mode 100644 index 00000000000..90343b8cffc --- /dev/null +++ b/tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.ts @@ -0,0 +1,12 @@ +// @outDir: tests/cases/compiler/testfiles +// @sourcemap: true +// @useCaseSensitiveFileNames: false +// @Filename: testFiles/app.ts +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +class c { +} + +// @Filename: testFiles/app2.ts +class d { +} \ No newline at end of file