From 0e01e48d0e1af1d46898c66cd1f59a5998ab3f7d Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sun, 14 Dec 2014 11:34:15 -0800 Subject: [PATCH] Always run all fourslash tests in high fidelity typing mode. We want to verify after every edit that our incremental data is correct. --- src/harness/fourslash.ts | 54 +------------------ tests/cases/fourslash/addMemberToInterface.ts | 1 - tests/cases/fourslash/addMemberToModule.ts | 28 +++++----- ...cellationWhenfindingAllRefsOnDefinition.ts | 3 -- tests/cases/fourslash/cloduleAsBaseClass.ts | 2 - tests/cases/fourslash/cloduleAsBaseClass2.ts | 1 - ...foreSemanticDiagnosticsInArrowFunction1.ts | 3 -- .../fourslash/completionEntryForPrimitive.ts | 1 - ...ariableDeclOfMergedVariableAndClassDecl.ts | 2 - .../fourslash/findAllRefsOnDefinition.ts | 2 - .../fourslash/findAllRefsOnDefinition2.ts | 2 - tests/cases/fourslash/fourslash.ts | 21 -------- .../fourslash/getCompletionEntryDetails.ts | 3 -- ...tionExpressionAboveInterfaceDeclaration.ts | 6 +-- tests/cases/fourslash/incrementalParsing1.ts | 2 - .../fourslash/incrementalResolveAccessor.ts | 6 +-- ...ncrementalResolveConstructorDeclaration.ts | 4 +- ...mentalResolveFunctionPropertyAssignment.ts | 7 +-- .../fourslash/quickInfoOnMergedInterfaces.ts | 4 +- ...oOnMergedInterfacesWithIncrementalEdits.ts | 2 - .../fourslash/quickInfoOnMergedModule.ts | 2 - ...nfoOnUnResolvedBaseConstructorSignature.ts | 1 - ...allOnFunctionDeclarationInMultipleFiles.ts | 11 ++-- ...ureHelpOnSuperWhenMembersAreNotResolved.ts | 1 - .../typeCheckAfterAddingGenericParameter.ts | 2 - .../cases/fourslash/typeCheckAfterResolve.ts | 45 ++++++++-------- 26 files changed, 48 insertions(+), 168 deletions(-) diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 5b55f731376..0eca1981292 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -96,19 +96,6 @@ module FourSlash { end: number; } - export enum IncrementalEditValidation { - None, - SyntacticOnly, - Complete - } - - export enum TypingFidelity { - /// Performs typing and formatting (if formatting is enabled) - Low, - /// Performs typing, checks completion lists, signature help, and formatting (if enabled) - High - } - var entityMap: ts.Map = { '&': '&', '"': '"', @@ -279,9 +266,6 @@ module FourSlash { public cancellationToken: TestCancellationToken; - public editValidation = IncrementalEditValidation.Complete; - public typingFidelity = TypingFidelity.Low; - private scenarioActions: string[] = []; private taoInvalidReason: string = null; @@ -1305,38 +1289,7 @@ module FourSlash { this.scenarioActions.push(''); } - if (this.typingFidelity === TypingFidelity.Low) { - return this.typeLowFidelity(text); - } else { - return this.typeHighFidelity(text); - } - } - - private typeLowFidelity(text: string) { - var offset = this.currentCaretPosition; - for (var i = 0; i < text.length; i++) { - // Make the edit - var ch = text.charAt(i); - this.languageServiceShimHost.editScript(this.activeFile.fileName, offset, offset, ch); - this.updateMarkersForEdit(this.activeFile.fileName, offset, offset, ch); - this.checkPostEditInvariants(); - offset++; - - // Handle post-keystroke formatting - if (this.enableFormatting) { - var edits = this.languageService.getFormattingEditsAfterKeystroke(this.activeFile.fileName, offset, ch, this.formatCodeOptions); - if (edits.length) { - offset += this.applyEdits(this.activeFile.fileName, edits, true); - this.checkPostEditInvariants(); - } - } - } - - // Move the caret to wherever we ended up - this.currentCaretPosition = offset; - - this.fixCaretPosition(); - this.checkPostEditInvariants(); + return this.typeHighFidelity(text); } // Enters lines of text at the current caret position, invoking @@ -1380,7 +1333,6 @@ module FourSlash { this.currentCaretPosition = offset; this.fixCaretPosition(); - this.checkPostEditInvariants(); } @@ -1410,10 +1362,6 @@ module FourSlash { } private checkPostEditInvariants() { - if (this.editValidation === IncrementalEditValidation.None) { - return; - } - var incrementalSourceFile = this.languageService.getSourceFile(this.activeFile.fileName); var incrementalSyntaxDiagnostics = JSON.stringify(Utils.convertDiagnostics(incrementalSourceFile.getSyntacticDiagnostics())); diff --git a/tests/cases/fourslash/addMemberToInterface.ts b/tests/cases/fourslash/addMemberToInterface.ts index e961c6a0cb3..cc0ecbdb361 100644 --- a/tests/cases/fourslash/addMemberToInterface.ts +++ b/tests/cases/fourslash/addMemberToInterface.ts @@ -9,7 +9,6 @@ //// } edit.disableFormatting(); -diagnostics.setEditValidation(IncrementalEditValidation.SyntacticOnly); goTo.marker('check'); verify.quickInfoIs('module Mod'); diff --git a/tests/cases/fourslash/addMemberToModule.ts b/tests/cases/fourslash/addMemberToModule.ts index 6b0e0d0eef5..b67d1827a41 100644 --- a/tests/cases/fourslash/addMemberToModule.ts +++ b/tests/cases/fourslash/addMemberToModule.ts @@ -1,20 +1,18 @@ -/// - +/// + ////module A { //// /*var*/ ////} ////module /*check*/A { //// var p; -////} - -diagnostics.setEditValidation(IncrementalEditValidation.SyntacticOnly); - -goTo.marker('check'); -verify.quickInfoExists(); - -goTo.marker('var'); -edit.insert('var o;'); - -goTo.marker('check'); -verify.quickInfoExists(); - +////} + +goTo.marker('check'); +verify.quickInfoExists(); + +goTo.marker('var'); +edit.insert('var o;'); + +goTo.marker('check'); +verify.quickInfoExists(); + diff --git a/tests/cases/fourslash/cancellationWhenfindingAllRefsOnDefinition.ts b/tests/cases/fourslash/cancellationWhenfindingAllRefsOnDefinition.ts index 0ec7c9bcf25..09f580bb965 100644 --- a/tests/cases/fourslash/cancellationWhenfindingAllRefsOnDefinition.ts +++ b/tests/cases/fourslash/cancellationWhenfindingAllRefsOnDefinition.ts @@ -23,8 +23,6 @@ ////second.start(); ////second.stop(); -diagnostics.setEditValidation(IncrementalEditValidation.None); - goTo.file("findAllRefsOnDefinition-import.ts"); goTo.marker("1"); @@ -38,4 +36,3 @@ verifyOperationIsCancelled(() => verify.referencesCountIs(0) ); cancellation.resetCancelled(); goTo.marker("1"); verify.referencesCountIs(2); - diff --git a/tests/cases/fourslash/cloduleAsBaseClass.ts b/tests/cases/fourslash/cloduleAsBaseClass.ts index c1ecc4aa44b..19bd3bb53e3 100644 --- a/tests/cases/fourslash/cloduleAsBaseClass.ts +++ b/tests/cases/fourslash/cloduleAsBaseClass.ts @@ -26,8 +26,6 @@ // this line triggers a semantic/syntactic error check, remove line when 788570 is fixed edit.insert(''); -diagnostics.setTypingFidelity(TypingFidelity.High); - goTo.marker('1'); verify.completionListContains('foo'); verify.completionListContains('foo2'); diff --git a/tests/cases/fourslash/cloduleAsBaseClass2.ts b/tests/cases/fourslash/cloduleAsBaseClass2.ts index 775b00939f3..be2072afc43 100644 --- a/tests/cases/fourslash/cloduleAsBaseClass2.ts +++ b/tests/cases/fourslash/cloduleAsBaseClass2.ts @@ -30,7 +30,6 @@ // this line triggers a semantic/syntactic error check, remove line when 788570 is fixed edit.insert(''); -diagnostics.setTypingFidelity(TypingFidelity.High); goTo.marker('1'); verify.completionListContains('foo'); diff --git a/tests/cases/fourslash/completionBeforeSemanticDiagnosticsInArrowFunction1.ts b/tests/cases/fourslash/completionBeforeSemanticDiagnosticsInArrowFunction1.ts index bc0aa713880..16d2efcd6d4 100644 --- a/tests/cases/fourslash/completionBeforeSemanticDiagnosticsInArrowFunction1.ts +++ b/tests/cases/fourslash/completionBeforeSemanticDiagnosticsInArrowFunction1.ts @@ -3,9 +3,6 @@ //// var f4 = (x: T/**/ ) => { //// } -// Turn off edit validation. We don't want semantic diagnostics to run until we explicit call it. -fs.diagnostics.setEditValidation(IncrementalEditValidation.None); - fs.goTo.marker(); // Replace the "T" type with the non-existent type 'V'. diff --git a/tests/cases/fourslash/completionEntryForPrimitive.ts b/tests/cases/fourslash/completionEntryForPrimitive.ts index c749379c862..9562e879266 100644 --- a/tests/cases/fourslash/completionEntryForPrimitive.ts +++ b/tests/cases/fourslash/completionEntryForPrimitive.ts @@ -2,7 +2,6 @@ ////var x = Object.create(/**/ -diagnostics.setEditValidation(IncrementalEditValidation.None); goTo.marker(); verify.not.completionListIsEmpty(); edit.insert("nu"); diff --git a/tests/cases/fourslash/errorsAfterResolvingVariableDeclOfMergedVariableAndClassDecl.ts b/tests/cases/fourslash/errorsAfterResolvingVariableDeclOfMergedVariableAndClassDecl.ts index 9287414584e..58cddff3dfb 100644 --- a/tests/cases/fourslash/errorsAfterResolvingVariableDeclOfMergedVariableAndClassDecl.ts +++ b/tests/cases/fourslash/errorsAfterResolvingVariableDeclOfMergedVariableAndClassDecl.ts @@ -10,8 +10,6 @@ //// } ////} -diagnostics.setEditValidation(IncrementalEditValidation.None); - verify.numberOfErrorsInCurrentFile(0); // Edit and bind and resolve only var decl diff --git a/tests/cases/fourslash/findAllRefsOnDefinition.ts b/tests/cases/fourslash/findAllRefsOnDefinition.ts index b1a7552c8d0..34144b74899 100644 --- a/tests/cases/fourslash/findAllRefsOnDefinition.ts +++ b/tests/cases/fourslash/findAllRefsOnDefinition.ts @@ -23,8 +23,6 @@ ////second.start(); ////second.stop(); -diagnostics.setEditValidation(IncrementalEditValidation.None); - goTo.file("findAllRefsOnDefinition-import.ts"); goTo.marker("1"); diff --git a/tests/cases/fourslash/findAllRefsOnDefinition2.ts b/tests/cases/fourslash/findAllRefsOnDefinition2.ts index 2b1d1668bb2..1c03d392e4d 100644 --- a/tests/cases/fourslash/findAllRefsOnDefinition2.ts +++ b/tests/cases/fourslash/findAllRefsOnDefinition2.ts @@ -14,8 +14,6 @@ ////var start: Second.Test.start; ////var stop: Second.Test.stop; -diagnostics.setEditValidation(IncrementalEditValidation.None); - goTo.file("findAllRefsOnDefinition2-import.ts"); goTo.marker("1"); diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index 85197dd3ccb..f5a582868e5 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -31,19 +31,6 @@ declare var FourSlash; -enum IncrementalEditValidation { - None = FourSlash.IncrementalEditValidation.None, - SyntacticOnly = FourSlash.IncrementalEditValidation.SyntacticOnly, - Complete = FourSlash.IncrementalEditValidation.Complete -} - -enum TypingFidelity { - /** Performs typing and formatting (if formatting is enabled) */ - Low = FourSlash.TypingFidelity.Low, - /** Performs typing, checks completion lists, signature help, and formatting (if enabled) */ - High = FourSlash.TypingFidelity.High -} - // Return code used by getEmitOutput function to indicate status of the function // It is a duplicate of the one in types.ts to expose it to testcases in fourslash enum EmitReturnStatus { @@ -101,14 +88,6 @@ module FourSlashInterface { public validateTypesAtPositions(...positions: number[]) { return FourSlash.currentTestState.verifyTypesAgainstFullCheckAtPositions(positions); } - - public setEditValidation(validation: IncrementalEditValidation) { - FourSlash.currentTestState.editValidation = validation; - } - - public setTypingFidelity(fidelity: TypingFidelity) { - FourSlash.currentTestState.typingFidelity = fidelity; - } } export class goTo { diff --git a/tests/cases/fourslash/getCompletionEntryDetails.ts b/tests/cases/fourslash/getCompletionEntryDetails.ts index 47465464576..078e84cf553 100644 --- a/tests/cases/fourslash/getCompletionEntryDetails.ts +++ b/tests/cases/fourslash/getCompletionEntryDetails.ts @@ -7,9 +7,6 @@ ////var bbb: string; /////*1*/ -// Disable test triggered type check -diagnostics.setEditValidation(IncrementalEditValidation.None); - goTo.marker("1"); verify.completionListContains("aaa"); verify.completionListContains("bbb"); diff --git a/tests/cases/fourslash/incrementalEditInvocationExpressionAboveInterfaceDeclaration.ts b/tests/cases/fourslash/incrementalEditInvocationExpressionAboveInterfaceDeclaration.ts index 8a06efbaa44..78152983dfd 100644 --- a/tests/cases/fourslash/incrementalEditInvocationExpressionAboveInterfaceDeclaration.ts +++ b/tests/cases/fourslash/incrementalEditInvocationExpressionAboveInterfaceDeclaration.ts @@ -4,9 +4,7 @@ /////*1*/ ////interface Foo { //// setISO8601(dString): Date; -////} - -diagnostics.setEditValidation(IncrementalEditValidation.None); +////} // Do resolve without typeCheck goTo.marker('1'); @@ -14,4 +12,4 @@ edit.insert("alert("); verify.currentSignatureHelpIs("alert(message?: any): void"); // TypeCheck -verify.errorExistsAfterMarker('1'); +verify.errorExistsAfterMarker('1'); \ No newline at end of file diff --git a/tests/cases/fourslash/incrementalParsing1.ts b/tests/cases/fourslash/incrementalParsing1.ts index 4d9078bf10c..e09e96c9e0d 100644 --- a/tests/cases/fourslash/incrementalParsing1.ts +++ b/tests/cases/fourslash/incrementalParsing1.ts @@ -20,7 +20,5 @@ // Force a syntax tree ot be created. verify.noMatchingBracePositionInCurrentFile(0); -// make sure we check the tree after every edit. -diagnostics.setTypingFidelity(TypingFidelity.High); goTo.marker('1'); edit.insert('Fo'); diff --git a/tests/cases/fourslash/incrementalResolveAccessor.ts b/tests/cases/fourslash/incrementalResolveAccessor.ts index 92c00f353c8..812146398f1 100644 --- a/tests/cases/fourslash/incrementalResolveAccessor.ts +++ b/tests/cases/fourslash/incrementalResolveAccessor.ts @@ -9,10 +9,8 @@ //// } ////} ////var val = new c1(); -////var b = val.p1; -/////*1*/b; - -diagnostics.setEditValidation(IncrementalEditValidation.None); +////var b = val.p1; +/////*1*/b; // Resolve without typeCheck goTo.marker('1'); diff --git a/tests/cases/fourslash/incrementalResolveConstructorDeclaration.ts b/tests/cases/fourslash/incrementalResolveConstructorDeclaration.ts index fd0c9efd8ab..3eb51631244 100644 --- a/tests/cases/fourslash/incrementalResolveConstructorDeclaration.ts +++ b/tests/cases/fourslash/incrementalResolveConstructorDeclaration.ts @@ -7,9 +7,7 @@ //// } ////} ////var val = new c1("hello"); -/////*1*/val; - -diagnostics.setEditValidation(IncrementalEditValidation.None); +/////*1*/val; // Do resolve without typeCheck goTo.marker('1'); diff --git a/tests/cases/fourslash/incrementalResolveFunctionPropertyAssignment.ts b/tests/cases/fourslash/incrementalResolveFunctionPropertyAssignment.ts index 0799279c6e7..c7a9c28c574 100644 --- a/tests/cases/fourslash/incrementalResolveFunctionPropertyAssignment.ts +++ b/tests/cases/fourslash/incrementalResolveFunctionPropertyAssignment.ts @@ -19,13 +19,10 @@ //// }); ////} ////var val = foo(["myString1", "myString2"]); -/////*1*/val; +/////*1*/val; -diagnostics.setEditValidation(IncrementalEditValidation.None); - -// Do resolve without typeCheck goTo.marker('1'); verify.quickInfoIs("(var) val: string"); // TypeCheck -verify.numberOfErrorsInCurrentFile(1); +verify.numberOfErrorsInCurrentFile(1); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoOnMergedInterfaces.ts b/tests/cases/fourslash/quickInfoOnMergedInterfaces.ts index 7d6e7ef3f2d..a8e6e292d44 100644 --- a/tests/cases/fourslash/quickInfoOnMergedInterfaces.ts +++ b/tests/cases/fourslash/quickInfoOnMergedInterfaces.ts @@ -16,7 +16,5 @@ //// var /*1*/r4 = a(1, true); ////} -diagnostics.setEditValidation(IncrementalEditValidation.None); - goTo.marker('1'); -verify.quickInfoIs("(var) r4: number"); +verify.quickInfoIs("(var) r4: number"); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoOnMergedInterfacesWithIncrementalEdits.ts b/tests/cases/fourslash/quickInfoOnMergedInterfacesWithIncrementalEdits.ts index 5f6b3483084..c08c16f1b66 100644 --- a/tests/cases/fourslash/quickInfoOnMergedInterfacesWithIncrementalEdits.ts +++ b/tests/cases/fourslash/quickInfoOnMergedInterfacesWithIncrementalEdits.ts @@ -12,8 +12,6 @@ //// var r/*2*/4 = b.b/*1*/ar; // string ////} -diagnostics.setEditValidation(IncrementalEditValidation.None); - goTo.marker('1'); verify.quickInfoIs("(property) B.bar: string", undefined); edit.deleteAtCaret(1); diff --git a/tests/cases/fourslash/quickInfoOnMergedModule.ts b/tests/cases/fourslash/quickInfoOnMergedModule.ts index abf12a65dbf..d9682832349 100644 --- a/tests/cases/fourslash/quickInfoOnMergedModule.ts +++ b/tests/cases/fourslash/quickInfoOnMergedModule.ts @@ -15,8 +15,6 @@ //// var r = a.fo/*1*/o + a.bar; ////} -diagnostics.setEditValidation(IncrementalEditValidation.None); - goTo.marker('1'); verify.quickInfoIs("(property) M2.A.foo: string", undefined); verify.numberOfErrorsInCurrentFile(0); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoOnUnResolvedBaseConstructorSignature.ts b/tests/cases/fourslash/quickInfoOnUnResolvedBaseConstructorSignature.ts index 224803110b0..d76f9906df5 100644 --- a/tests/cases/fourslash/quickInfoOnUnResolvedBaseConstructorSignature.ts +++ b/tests/cases/fourslash/quickInfoOnUnResolvedBaseConstructorSignature.ts @@ -10,6 +10,5 @@ ////} ////new class/*1*/InheritingSpecializedClass(); -diagnostics.setEditValidation(IncrementalEditValidation.None); goTo.marker('1'); verify.quickInfoExists(); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles.ts b/tests/cases/fourslash/signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles.ts index 2339af02529..846c2d5244a 100644 --- a/tests/cases/fourslash/signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles.ts +++ b/tests/cases/fourslash/signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles.ts @@ -2,13 +2,12 @@ // @Filename: signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles_file0.ts ////declare function fn(x: string, y: number); - + // @Filename: signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles_file1.ts ////declare function fn(x: string); - + // @Filename: signatureHelpInFunctionCallOnFunctionDeclarationInMultipleFiles_file2.ts -////fn(/*1*/ - -diagnostics.setEditValidation(IncrementalEditValidation.None); -goTo.marker('1'); +////fn(/*1*/ + +goTo.marker('1'); verify.signatureHelpCountIs(2); \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpOnSuperWhenMembersAreNotResolved.ts b/tests/cases/fourslash/signatureHelpOnSuperWhenMembersAreNotResolved.ts index 5613ca71a70..dcb14635101 100644 --- a/tests/cases/fourslash/signatureHelpOnSuperWhenMembersAreNotResolved.ts +++ b/tests/cases/fourslash/signatureHelpOnSuperWhenMembersAreNotResolved.ts @@ -8,7 +8,6 @@ //// } ////} -diagnostics.setEditValidation(IncrementalEditValidation.None); goTo.marker("1"); edit.insert("super("); verify.currentSignatureHelpIs("B(x: string): B"); \ No newline at end of file diff --git a/tests/cases/fourslash/typeCheckAfterAddingGenericParameter.ts b/tests/cases/fourslash/typeCheckAfterAddingGenericParameter.ts index 3ee2b00fe35..e2e978dd7ea 100644 --- a/tests/cases/fourslash/typeCheckAfterAddingGenericParameter.ts +++ b/tests/cases/fourslash/typeCheckAfterAddingGenericParameter.ts @@ -13,8 +13,6 @@ //// } //// -diagnostics.setEditValidation(IncrementalEditValidation.SyntacticOnly); - goTo.marker('addParam'); edit.insert(", X"); diff --git a/tests/cases/fourslash/typeCheckAfterResolve.ts b/tests/cases/fourslash/typeCheckAfterResolve.ts index 21ea8f88356..788721c072e 100644 --- a/tests/cases/fourslash/typeCheckAfterResolve.ts +++ b/tests/cases/fourslash/typeCheckAfterResolve.ts @@ -1,28 +1,25 @@ -/// - +/// + /////*start*/class Point implements /*IPointRef*/IPoint { //// getDist() { //// ssss; //// } -////}/*end*/ - -// make sure no typeCheck is triggered after edit -diagnostics.setEditValidation(IncrementalEditValidation.None); - -// Edit to invalidate the intial typeCheck state -goTo.eof(); -edit.insertLine(""); - -// Attempt to resolve a symbol -goTo.marker("IPointRef"); -verify.quickInfoIs(""); // not found - -// trigger typecheck after the partial resolve, we should see errors -verify.errorExistsAfterMarker("IPointRef"); - -goTo.eof(); -edit.insertLine(""); - -// one more time with full typecheck -verify.errorExistsAfterMarker("IPointRef"); - +////}/*end*/ + +// Edit to invalidate the intial typeCheck state +goTo.eof(); +edit.insertLine(""); + +// Attempt to resolve a symbol +goTo.marker("IPointRef"); +verify.quickInfoIs(""); // not found + +// trigger typecheck after the partial resolve, we should see errors +verify.errorExistsAfterMarker("IPointRef"); + +goTo.eof(); +edit.insertLine(""); + +// one more time with full typecheck +verify.errorExistsAfterMarker("IPointRef"); +