Skip to content

Commit f4e920e

Browse files
author
Kanchalai Tanglertsampan
committed
Add unittest for testing convert compiler-options and typing-options
1 parent 157b8e7 commit f4e920e

File tree

4 files changed

+131
-18
lines changed

4 files changed

+131
-18
lines changed

Jakefile.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,14 @@ var harnessSources = harnessCoreSources.concat([
146146
"session.ts",
147147
"versionCache.ts",
148148
"convertToBase64.ts",
149-
"transpile.ts",
149+
"transpile.ts",
150150
"reuseProgramStructure.ts",
151151
"cachingInServerLSHost.ts",
152152
"moduleResolution.ts",
153153
"tsconfigParsing.ts",
154-
"commandLineParsing.ts"
154+
"commandLineParsing.ts",
155+
"convertCompilerOptionsFromJson.ts",
156+
"convertTypingOptionsFromJson.ts"
155157
].map(function (f) {
156158
return path.join(unittestsDirectory, f);
157159
})).concat([

src/compiler/commandLineParser.ts

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ namespace ts {
656656
function getFileNames(errors: Diagnostic[]): string[] {
657657
let fileNames: string[] = [];
658658
if (hasProperty(json, "files")) {
659-
if (json["files"] instanceof Array) {
659+
if (isArray(json["files"])) {
660660
fileNames = map(<string[]>json["files"], s => combinePaths(basePath, s));
661661
}
662662
else {
@@ -667,7 +667,7 @@ namespace ts {
667667
const filesSeen: Map<boolean> = {};
668668

669669
let exclude: string[] = [];
670-
if (json["exclude"] instanceof Array) {
670+
if (isArray(json["exclude"])) {
671671
exclude = json["exclude"];
672672
}
673673
else {
@@ -716,18 +716,8 @@ namespace ts {
716716
}
717717
}
718718

719-
export function convertCompilerOptionsFromJson(jsonOptions: any, basePath: string, configFileName?: string): { options: CompilerOptions, errors: Diagnostic[] } {
720-
const errors: Diagnostic[] = [];
721-
const options = convertOptionsFromJson<CompilerOptions>(optionDeclarations, jsonOptions, basePath, configFileName, errors);
722-
723-
if (configFileName && getBaseFileName(configFileName) === "jsconfig.json" && typeof options.allowJs === "undefined") {
724-
options.allowJs = true;
725-
}
726-
727-
return { options, errors };
728-
}
729-
730-
function convertOptionsFromJson<T extends CompilerOptions | TypingOptions>(optionDeclarations: CommandLineOption[], jsonOptions: any, basePath: string, configFileName: string, errors: Diagnostic[]): T {
719+
/* @internal */
720+
export function convertOptionsFromJson<T extends CompilerOptions | TypingOptions>(optionDeclarations: CommandLineOption[], jsonOptions: any, basePath: string, configFileName: string, errors: Diagnostic[]): T {
731721
const options = {} as T;
732722

733723
if (!jsonOptions) {
@@ -781,11 +771,10 @@ namespace ts {
781771
}
782772
else {
783773
errors.push(createCompilerDiagnostic(opt.error));
784-
return 0;
785774
}
786775
}
787776

788777
function convertJsonOptionOfListType(option: CommandLineOptionOfListType, values: any[], basePath: string, errors: Diagnostic[]): any[] {
789-
return ts.map(values, v => convertJsonOption(option.element, v, basePath, errors));
778+
return ts.map(values, v => convertJsonOption(option.element, v, basePath, errors)).filter(v => { return v != undefined; });
790779
}
791780
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/// <reference path="..\..\..\src\harness\harness.ts" />
2+
/// <reference path="..\..\..\src\compiler\commandLineParser.ts" />
3+
4+
namespace ts {
5+
describe('convertCompilerOptionsFromJson', () => {
6+
function assertCompilerOptions(json: any, expectedResult: { compilerOptions: CompilerOptions, errors: Diagnostic[] }) {
7+
const actualErrors: Diagnostic[] = [];
8+
const actualCompilerOptions = convertOptionsFromJson<CompilerOptions>(optionDeclarations, json["compilerOptions"], "/apath/", "tsconfig.json", actualErrors);
9+
10+
const parsedCompilerOptions = JSON.stringify(actualCompilerOptions);
11+
const expectedCompilerOptions = JSON.stringify(expectedResult.compilerOptions);
12+
assert.equal(parsedCompilerOptions, expectedCompilerOptions);
13+
14+
const expectedErrors = expectedResult.errors;
15+
assert.isTrue(expectedResult.errors.length === actualErrors.length, `Expected error: ${JSON.stringify(expectedResult.errors)}. Actual error: ${JSON.stringify(actualErrors)}.`);
16+
for (let i = 0; i < actualErrors.length; ++i) {
17+
const actualError = actualErrors[i];
18+
const expectedError = expectedErrors[i];
19+
assert.equal(actualError.code, expectedError.code, `Expected error-code: ${JSON.stringify(expectedError.code)}. Actual error-code: ${JSON.stringify(actualError.code)}.`);
20+
assert.equal(actualError.category, expectedError.category, `Expected error-category: ${JSON.stringify(expectedError.category)}. Actual error-category: ${JSON.stringify(actualError.category)}.`);
21+
}
22+
}
23+
24+
const correctFormatOptions = {
25+
"compilerOptions": {
26+
"module": "commonjs",
27+
"target": "es5",
28+
"noImplicitAny": false,
29+
"sourceMap": false,
30+
"lib": ["es5", "es6.array", "es6.symbol"]
31+
}
32+
}
33+
34+
const incorrectLibOption = {
35+
"compilerOptions": {
36+
"module": "commonjs",
37+
"target": "es5",
38+
"noImplicitAny": false,
39+
"sourceMap": false,
40+
"lib": ["es5", "es6.array", "es8"]
41+
}
42+
}
43+
44+
it("Convert correctly format JSON to compiler-options ", () => {
45+
assertCompilerOptions(correctFormatOptions, {
46+
compilerOptions: <CompilerOptions>{
47+
module: ModuleKind.CommonJS,
48+
target: ScriptTarget.ES5,
49+
noImplicitAny: false,
50+
sourceMap: false,
51+
lib: ["lib.es5.d.ts", "lib.es6.array.d.ts", "lib.es6.symbol.d.ts"]
52+
},
53+
errors: <Diagnostic[]>[]
54+
});
55+
});
56+
57+
it("Convert incorrectly option of libs to compiler-options ", () => {
58+
debugger;
59+
assertCompilerOptions(incorrectLibOption, {
60+
compilerOptions: <CompilerOptions>{
61+
module: ModuleKind.CommonJS,
62+
target: ScriptTarget.ES5,
63+
noImplicitAny: false,
64+
sourceMap: false,
65+
lib: ["lib.es5.d.ts", "lib.es6.array.d.ts"]
66+
},
67+
errors: [{
68+
file: undefined,
69+
start: 0,
70+
length: 0,
71+
messageText: "",
72+
code: Diagnostics.Arguments_for_library_option_must_be_Colon_0.code,
73+
category: Diagnostics.Arguments_for_library_option_must_be_Colon_0.category
74+
}]
75+
});
76+
});
77+
});
78+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/// <reference path="..\..\..\src\harness\harness.ts" />
2+
/// <reference path="..\..\..\src\compiler\commandLineParser.ts" />
3+
4+
namespace ts {
5+
describe('convertTypingOptionsFromJson', () => {
6+
function assertTypingOptions(json: any, expectedResult: { typingOptions: TypingOptions, errors: Diagnostic[] }) {
7+
const actualErrors: Diagnostic[] = [];
8+
const actualTypingOptions = convertOptionsFromJson<TypingOptions>(typingOptionDeclarations, json["typingOptions"], "/apath/", "tsconfig.json", actualErrors);
9+
10+
const parsedTypingOptions = JSON.stringify(actualTypingOptions);
11+
const expectedTypingOptions = JSON.stringify(expectedResult.typingOptions);
12+
assert.equal(parsedTypingOptions, parsedTypingOptions);
13+
14+
const expectedErrors = expectedResult.errors;
15+
assert.isTrue(expectedResult.errors.length === actualErrors.length, `Expected error: ${JSON.stringify(expectedResult.errors)}. Actual error: ${JSON.stringify(actualErrors)}.`);
16+
for (let i = 0; i < actualErrors.length; ++i) {
17+
const actualError = actualErrors[i];
18+
const expectedError = expectedErrors[i];
19+
assert.equal(actualError.code, expectedError.code, `Expected error-code: ${JSON.stringify(expectedError.code)}. Actual error-code: ${JSON.stringify(actualError.code)}.`);
20+
assert.equal(actualError.category, expectedError.category, `Expected error-category: ${JSON.stringify(expectedError.category)}. Actual error-category: ${JSON.stringify(actualError.category)}.`);
21+
}
22+
}
23+
24+
const correctFormatOptions = {
25+
"typingOptions": {
26+
"enableAutoDiscovery": true,
27+
"include": ["0.d.ts", "1.d.ts"],
28+
"exclude": ["0.js", "1.js"]
29+
}
30+
}
31+
32+
it("Convert correctly format JSON to compiler-options ", () => {
33+
debugger;
34+
assertTypingOptions(correctFormatOptions, {
35+
typingOptions: <TypingOptions>{
36+
enableAutoDiscovery: true,
37+
include: ["/apath/0.d.ts", "/apath/1.d.ts"],
38+
exclude: ["/apath/0.js", "/apath/1.js"]
39+
},
40+
errors: <Diagnostic[]>[]
41+
});
42+
});
43+
});
44+
}

0 commit comments

Comments
 (0)