Skip to content

Commit 20becef

Browse files
committed
Compiler flag to specify line ending microsoft#1693 unit tests
1 parent f36abfd commit 20becef

11 files changed

+96
-7
lines changed

src/compiler/program.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ module ts {
99

1010
/** The version of the TypeScript compiler release */
1111
export const version = "1.5.0";
12+
13+
const NEWLINE_CRLF = "\r\n";
14+
const NEWLINE_LF = "\n";
1215

1316
export function findConfigFile(searchPath: string): string {
1417
var fileName = "tsconfig.json";
@@ -91,9 +94,9 @@ module ts {
9194
}
9295
}
9396

94-
let newLine =
95-
options.newLine === NewLineKind.CarriageReturnLineFeed ? "\r\n" :
96-
options.newLine === NewLineKind.LineFeed ? "\n" :
97+
let newLine =
98+
options.newLine === NewLineKind.CarriageReturnLineFeed ? NEWLINE_CRLF :
99+
options.newLine === NewLineKind.LineFeed ? NEWLINE_LF :
97100
sys.newLine;
98101

99102
return {

src/harness/harness.ts

+22-4
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,9 @@ module Harness {
805805
return result;
806806
}
807807

808+
const NEWLINE_CRLF = "\r\n";
809+
const NEWLINE_LF = "\n";
810+
808811
export var defaultLibFileName = 'lib.d.ts';
809812
export var defaultLibSourceFile = createSourceFileAndAssertInvariants(defaultLibFileName, IO.readFile(libFolder + 'lib.core.d.ts'), /*languageVersion*/ ts.ScriptTarget.Latest);
810813
export var defaultES6LibSourceFile = createSourceFileAndAssertInvariants(defaultLibFileName, IO.readFile(libFolder + 'lib.core.es6.d.ts'), /*languageVersion*/ ts.ScriptTarget.Latest);
@@ -822,7 +825,8 @@ module Harness {
822825
scriptTarget: ts.ScriptTarget,
823826
useCaseSensitiveFileNames: boolean,
824827
// the currentDirectory is needed for rwcRunner to passed in specified current directory to compiler host
825-
currentDirectory?: string): ts.CompilerHost {
828+
currentDirectory?: string,
829+
newLineKind?: ts.NewLineKind): ts.CompilerHost {
826830

827831
// Local get canonical file name function, that depends on passed in parameter for useCaseSensitiveFileNames
828832
function getCanonicalFileName(fileName: string): string {
@@ -841,6 +845,11 @@ module Harness {
841845
};
842846
inputFiles.forEach(register);
843847

848+
let newLine =
849+
newLineKind === ts.NewLineKind.CarriageReturnLineFeed ? NEWLINE_CRLF :
850+
newLineKind === ts.NewLineKind.LineFeed ? NEWLINE_LF :
851+
ts.sys.newLine;
852+
844853
return {
845854
getCurrentDirectory,
846855
getSourceFile: (fn, languageVersion) => {
@@ -869,7 +878,7 @@ module Harness {
869878
writeFile,
870879
getCanonicalFileName,
871880
useCaseSensitiveFileNames: () => useCaseSensitiveFileNames,
872-
getNewLine: () => ts.sys.newLine
881+
getNewLine: () => newLine
873882
};
874883
}
875884

@@ -1028,7 +1037,16 @@ module Harness {
10281037

10291038
case 'newline':
10301039
case 'newlines':
1031-
newLine = setting.value;
1040+
if (setting.value.toLowerCase() === 'crlf') {
1041+
options.newLine = ts.NewLineKind.CarriageReturnLineFeed;
1042+
} else if (setting.value.toLowerCase() === 'lf') {
1043+
options.newLine = ts.NewLineKind.LineFeed;
1044+
} else if (setting.value === '\\n') {
1045+
// Handle old usage, e.g. contextualTyping.ts:// @newline: \n
1046+
newLine = setting.value;
1047+
} else {
1048+
throw new Error('Unknown option for newLine: ' + setting.value);
1049+
}
10321050
break;
10331051

10341052
case 'comments':
@@ -1081,7 +1099,7 @@ module Harness {
10811099
var programFiles = inputFiles.concat(includeBuiltFiles).map(file => file.unitName);
10821100
var program = ts.createProgram(programFiles, options, createCompilerHost(inputFiles.concat(includeBuiltFiles).concat(otherFiles),
10831101
(fn, contents, writeByteOrderMark) => fileOutputs.push({ fileName: fn, code: contents, writeByteOrderMark: writeByteOrderMark }),
1084-
options.target, useCaseSensitiveFileNames, currentDirectory));
1102+
options.target, useCaseSensitiveFileNames, currentDirectory, options.newLine));
10851103

10861104
var emitResult = program.emit();
10871105

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//// [newLineFlagWithCRLF.ts]
2+
var x=1;
3+
x=2;
4+
5+
6+
7+
//// [newLineFlagWithCRLF.js]
8+
var x = 1;
9+
x = 2;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
=== tests/cases/compiler/newLineFlagWithCRLF.ts ===
2+
var x=1;
3+
>x : Symbol(x, Decl(newLineFlagWithCRLF.ts, 0, 3))
4+
5+
x=2;
6+
>x : Symbol(x, Decl(newLineFlagWithCRLF.ts, 0, 3))
7+
8+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/compiler/newLineFlagWithCRLF.ts ===
2+
var x=1;
3+
>x : number
4+
>1 : number
5+
6+
x=2;
7+
>x=2 : number
8+
>x : number
9+
>2 : number
10+
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//// [newLineFlagWithLF.ts]
2+
var x=1;
3+
x=2;
4+
5+
6+
7+
//// [newLineFlagWithLF.js]
8+
var x = 1;
9+
x = 2;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
=== tests/cases/compiler/newLineFlagWithLF.ts ===
2+
var x=1;
3+
>x : Symbol(x, Decl(newLineFlagWithLF.ts, 0, 3))
4+
5+
x=2;
6+
>x : Symbol(x, Decl(newLineFlagWithLF.ts, 0, 3))
7+
8+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/compiler/newLineFlagWithLF.ts ===
2+
var x=1;
3+
>x : number
4+
>1 : number
5+
6+
x=2;
7+
>x=2 : number
8+
>x : number
9+
>2 : number
10+
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// @newline: CR
2+
var x=1;
3+
x=2;
4+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// @newline: CRLF
2+
var x=1;
3+
x=2;
4+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// @newline: LF
2+
var x=1;
3+
x=2;
4+

0 commit comments

Comments
 (0)