mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-07 23:08:20 -06:00
fourslash diagnostics tests: use objects instead of strings (#22193)
This commit is contained in:
parent
d15b098e70
commit
0b1e21794d
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -581,7 +581,7 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
interface RealizedDiagnostic {
|
||||
export interface RealizedDiagnostic {
|
||||
message: string;
|
||||
start: number;
|
||||
length: number;
|
||||
|
||||
@ -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_;
|
||||
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -5,4 +5,4 @@
|
||||
// @Filename: a.js
|
||||
//// @internal class C {}
|
||||
|
||||
verify.getSemanticDiagnostics(`[]`);
|
||||
verify.getSemanticDiagnostics([]);
|
||||
|
||||
@ -4,4 +4,4 @@
|
||||
// @Filename: a.js
|
||||
//// function foo(...a) {}
|
||||
|
||||
verify.getSemanticDiagnostics(`[]`);
|
||||
verify.getSemanticDiagnostics([]);
|
||||
|
||||
@ -10,5 +10,5 @@
|
||||
//// }
|
||||
//// }
|
||||
|
||||
verify.getSyntacticDiagnostics(`[]`);
|
||||
verify.getSemanticDiagnostics(`[]`);
|
||||
verify.getSyntacticDiagnostics([]);
|
||||
verify.getSemanticDiagnostics([]);
|
||||
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}
|
||||
]`);
|
||||
]);
|
||||
@ -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
|
||||
}]);
|
||||
|
||||
@ -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([]);
|
||||
|
||||
@ -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([]);
|
||||
|
||||
@ -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([]);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user