fourslash diagnostics tests: use objects instead of strings (#22193)

This commit is contained in:
Andy 2018-02-26 14:55:26 -08:00 committed by GitHub
parent d15b098e70
commit 0b1e21794d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 226 additions and 212 deletions

View File

@ -1236,20 +1236,18 @@ Actual: ${stringify(fullActual)}`);
return this.languageService.findReferences(this.activeFile.fileName, this.currentCaretPosition);
}
public getSyntacticDiagnostics(expected: string) {
public getSyntacticDiagnostics(expected: ReadonlyArray<ts.RealizedDiagnostic>) {
const diagnostics = this.languageService.getSyntacticDiagnostics(this.activeFile.fileName);
this.testDiagnostics(expected, diagnostics);
}
public getSemanticDiagnostics(expected: string) {
public getSemanticDiagnostics(expected: ReadonlyArray<ts.RealizedDiagnostic>) {
const diagnostics = this.languageService.getSemanticDiagnostics(this.activeFile.fileName);
this.testDiagnostics(expected, diagnostics);
}
private testDiagnostics(expected: string, diagnostics: ReadonlyArray<ts.Diagnostic>) {
const realized = ts.realizeDiagnostics(diagnostics, "\r\n");
const actual = stringify(realized);
assert.equal(actual, expected);
private testDiagnostics(expected: ReadonlyArray<ts.RealizedDiagnostic>, diagnostics: ReadonlyArray<ts.Diagnostic>) {
assert.deepEqual(ts.realizeDiagnostics(diagnostics, ts.newLineCharacter), expected);
}
public verifyQuickInfoAt(markerName: string, expectedText: string, expectedDocumentation?: string) {
@ -4321,11 +4319,11 @@ namespace FourSlashInterface {
this.state.verifyQuickInfoDisplayParts(kind, kindModifiers, textSpan, displayParts, documentation, tags);
}
public getSyntacticDiagnostics(expected: string) {
public getSyntacticDiagnostics(expected: ReadonlyArray<ts.RealizedDiagnostic>) {
this.state.getSyntacticDiagnostics(expected);
}
public getSemanticDiagnostics(expected: string) {
public getSemanticDiagnostics(expected: ReadonlyArray<ts.RealizedDiagnostic>) {
this.state.getSemanticDiagnostics(expected);
}

View File

@ -581,7 +581,7 @@ namespace ts {
}
}
interface RealizedDiagnostic {
export interface RealizedDiagnostic {
message: string;
start: number;
length: number;

View File

@ -347,8 +347,8 @@ declare namespace FourSlashInterface {
start: number;
length: number;
}, displayParts: ts.SymbolDisplayPart[], documentation: ts.SymbolDisplayPart[], tags: ts.JSDocTagInfo[]): void;
getSyntacticDiagnostics(expected: string): void;
getSemanticDiagnostics(expected: string): void;
getSyntacticDiagnostics(expected: ReadonlyArray<RealizedDiagnostic>): void;
getSemanticDiagnostics(expected: ReadonlyArray<RealizedDiagnostic>): void;
ProjectInfo(expected: string[]): void;
allRangesAppearInImplementationList(markerName: string): void;
}
@ -520,6 +520,13 @@ declare namespace FourSlashInterface {
text: string;
range: Range;
}
interface RealizedDiagnostic {
message: string;
start: number;
length: number;
category: string;
code: number;
}
}
declare function verifyOperationIsCancelled(f: any): void;
declare var test: FourSlashInterface.test_;

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// import a = b;
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'import ... =' can only be used in a .ts file.",
"start": 0,
"length": 13,
"category": "error",
"code": 8002
message: "'import ... =' can only be used in a .ts file.",
start: 0,
length: 13,
category: "error",
code: 8002
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// function F<T>() { }
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'type parameter declarations' can only be used in a .ts file.",
"start": 11,
"length": 1,
"category": "error",
"code": 8004
message: "'type parameter declarations' can only be used in a .ts file.",
start: 11,
length: 1,
category: "error",
code: 8004
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// function F(): number { }
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'types' can only be used in a .ts file.",
"start": 14,
"length": 6,
"category": "error",
"code": 8010
message: "'types' can only be used in a .ts file.",
start: 14,
length: 6,
category: "error",
code: 8010
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// declare var v;
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'declare' can only be used in a .ts file.",
"start": 0,
"length": 7,
"category": "error",
"code": 8009
message: "'declare' can only be used in a .ts file.",
start: 0,
length: 7,
category: "error",
code: 8009
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// var v: () => number;
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'types' can only be used in a .ts file.",
"start": 7,
"length": 12,
"category": "error",
"code": 8010
message: "'types' can only be used in a .ts file.",
start: 7,
length: 12,
category: "error",
code: 8010
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// Foo<number>();
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'type arguments' can only be used in a .ts file.",
"start": 4,
"length": 6,
"category": "error",
"code": 8011
message: "'type arguments' can only be used in a .ts file.",
start: 4,
length: 6,
category: "error",
code: 8011
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// function F(public p) { }
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'parameter modifiers' can only be used in a .ts file.",
"start": 11,
"length": 6,
"category": "error",
"code": 8012
message: "'parameter modifiers' can only be used in a .ts file.",
start: 11,
length: 6,
category: "error",
code: 8012
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// function F(p?) { }
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'?' can only be used in a .ts file.",
"start": 12,
"length": 1,
"category": "error",
"code": 8009
message: "'?' can only be used in a .ts file.",
start: 12,
length: 1,
category: "error",
code: 8009
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// function F(a: number) { }
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'types' can only be used in a .ts file.",
"start": 14,
"length": 6,
"category": "error",
"code": 8010
message: "'types' can only be used in a .ts file.",
start: 14,
length: 6,
category: "error",
code: 8010
}
]`);
]);

View File

@ -9,15 +9,15 @@
////}
goTo.file("a.js");
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "\'public\' can only be used in a .ts file.",
"start": 93,
"length": 6,
"category": "error",
"code": 8009
message: "\'public\' can only be used in a .ts file.",
start: 93,
length: 6,
category: "error",
code: 8009
}
]`);
]);
// @Filename: b.js
////class C {
@ -25,12 +25,12 @@ verify.getSyntacticDiagnostics(`[
////}
goTo.file("b.js");
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'types' can only be used in a .ts file.",
"start": 17,
"length": 6,
"category": "error",
"code": 8010
message: "'types' can only be used in a .ts file.",
start: 17,
length: 6,
category: "error",
code: 8010
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// enum E { }
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'enum declarations' can only be used in a .ts file.",
"start": 5,
"length": 1,
"category": "error",
"code": 8015
message: "'enum declarations' can only be used in a .ts file.",
start: 5,
length: 1,
category: "error",
code: 8015
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// export = b;
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'export=' can only be used in a .ts file.",
"start": 0,
"length": 11,
"category": "error",
"code": 8003
message: "'export=' can only be used in a .ts file.",
start: 0,
length: 11,
category: "error",
code: 8003
}
]`);
]);

View File

@ -5,4 +5,4 @@
// @Filename: a.js
//// @internal class C {}
verify.getSemanticDiagnostics(`[]`);
verify.getSemanticDiagnostics([]);

View File

@ -4,4 +4,4 @@
// @Filename: a.js
//// function foo(...a) {}
verify.getSemanticDiagnostics(`[]`);
verify.getSemanticDiagnostics([]);

View File

@ -10,5 +10,5 @@
//// }
//// }
verify.getSyntacticDiagnostics(`[]`);
verify.getSemanticDiagnostics(`[]`);
verify.getSyntacticDiagnostics([]);
verify.getSemanticDiagnostics([]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// class C<T> { }
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'type parameter declarations' can only be used in a .ts file.",
"start": 8,
"length": 1,
"category": "error",
"code": 8004
message: "'type parameter declarations' can only be used in a .ts file.",
start: 8,
length: 1,
category: "error",
code: 8004
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// public class C { }
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'public' can only be used in a .ts file.",
"start": 0,
"length": 6,
"category": "error",
"code": 8009
message: "'public' can only be used in a .ts file.",
start: 0,
length: 6,
category: "error",
code: 8009
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// class C implements D { }
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'implements clauses' can only be used in a .ts file.",
"start": 8,
"length": 12,
"category": "error",
"code": 8005
message: "'implements clauses' can only be used in a .ts file.",
start: 8,
length: 12,
category: "error",
code: 8005
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// interface I { }
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'interface declarations' can only be used in a .ts file.",
"start": 10,
"length": 1,
"category": "error",
"code": 8006
message: "'interface declarations' can only be used in a .ts file.",
start: 10,
length: 1,
category: "error",
code: 8006
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// module M { }
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'module declarations' can only be used in a .ts file.",
"start": 7,
"length": 1,
"category": "error",
"code": 8007
message: "'module declarations' can only be used in a .ts file.",
start: 7,
length: 1,
category: "error",
code: 8007
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// type a = b;
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'type aliases' can only be used in a .ts file.",
"start": 5,
"length": 1,
"category": "error",
"code": 8008
message: "'type aliases' can only be used in a .ts file.",
start: 5,
length: 1,
category: "error",
code: 8008
}
]`);
]);

View File

@ -4,12 +4,12 @@
// @Filename: a.js
//// public function F() { }
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "'public' can only be used in a .ts file.",
"start": 0,
"length": 6,
"category": "error",
"code": 8009
message: "'public' can only be used in a .ts file.",
start: 0,
length: 6,
category: "error",
code: 8009
}
]`);
]);

View File

@ -25,13 +25,10 @@
goTo.marker();
verify.quickInfoIs("(local var) x: number");
verify.getSemanticDiagnostics(
`[
{
"message": "Class declarations cannot have more than one \`@augments\` or \`@extends\` tag.",
"start": 36,
"length": 24,
"category": "error",
"code": 8025
}
]`);
verify.getSemanticDiagnostics([{
message: "Class declarations cannot have more than one \`@augments\` or \`@extends\` tag.",
start: 36,
length: 24,
category: "error",
code: 8025
}]);

View File

@ -12,13 +12,25 @@
////function foo() { return 30; }/*2*/
goTo.marker("1");
verify.getSemanticDiagnostics('[]');
verify.getSemanticDiagnostics([]);
goTo.marker("2");
verify.getSemanticDiagnostics('[\n {\n "message": "Duplicate function implementation.",\n "start": 9,\n "length": 3,\n "category": "error",\n "code": 2393\n }\n]');
verify.getSemanticDiagnostics([{
message: "Duplicate function implementation.",
start: 9,
length: 3,
category: "error",
code: 2393
}]);
verify.verifyGetEmitOutputContentsForCurrentFile([
{ name: "out.js", text: "function foo() { return 10; }\r\nfunction foo() { return 30; }\r\n", writeByteOrderMark: false },
{ name: "out.d.ts", text: "", writeByteOrderMark: false }]);
goTo.marker("2");
verify.getSemanticDiagnostics('[\n {\n "message": "Duplicate function implementation.",\n "start": 9,\n "length": 3,\n "category": "error",\n "code": 2393\n }\n]');
verify.getSemanticDiagnostics([{
message: "Duplicate function implementation.",
start: 9,
length: 3,
category: "error",
code: 2393
}]);
goTo.marker("1");
verify.getSemanticDiagnostics('[]');
verify.getSemanticDiagnostics([]);

View File

@ -4,20 +4,20 @@
// @Filename: a.js
//// var ===;
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "Variable declaration expected.",
"start": 4,
"length": 3,
"category": "error",
"code": 1134
message: "Variable declaration expected.",
start: 4,
length: 3,
category: "error",
code: 1134
},
{
"message": "Expression expected.",
"start": 7,
"length": 1,
"category": "error",
"code": 1109
}
]`);
verify.getSemanticDiagnostics(`[]`);
message: "Expression expected.",
start: 7,
length: 1,
category: "error",
code: 1109
},
]);
verify.getSemanticDiagnostics([]);

View File

@ -7,41 +7,41 @@
//// function foo(): string { }
//// var var = "c";
verify.getSyntacticDiagnostics(`[
verify.getSyntacticDiagnostics([
{
"message": "\'types\' can only be used in a .ts file.",
"start": 20,
"length": 7,
"category": "error",
"code": 8010
message: "'types' can only be used in a .ts file.",
start: 20,
length: 7,
category: "error",
code: 8010
},
{
"message": "\'types\' can only be used in a .ts file.",
"start": 52,
"length": 6,
"category": "error",
"code": 8010
message: "\'types\' can only be used in a .ts file.",
start: 52,
length: 6,
category: "error",
code: 8010
},
{
"message": "Variable declaration expected.",
"start": 67,
"length": 3,
"category": "error",
"code": 1134
message: "Variable declaration expected.",
start: 67,
length: 3,
category: "error",
code: 1134
},
{
"message": "Variable declaration expected.",
"start": 71,
"length": 1,
"category": "error",
"code": 1134
message: "Variable declaration expected.",
start: 71,
length: 1,
category: "error",
code: 1134
},
{
"message": "Variable declaration expected.",
"start": 73,
"length": 3,
"category": "error",
"code": 1134
}
]`);
verify.getSemanticDiagnostics(`[]`);
message: "Variable declaration expected.",
start: 73,
length: 3,
category: "error",
code: 1134
},
]);
verify.getSemanticDiagnostics([]);