public void RenameTrackingUndoTwiceRedoTwiceUndoStillWorks() { var code = @" class Cat$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("s"); state.AssertTag("Cat", "Cats", invokeAction: true); state.AssertNoTag(); // Resume rename tracking session state.Undo(2); state.AssertTag("Cat", "Cats"); state.Redo(2); state.AssertNoTag(); // Back to original state.Undo(); state.AssertNoTag(); // Resume rename tracking session state.Undo(); state.AssertTag("Cat", "Cats"); } }
public void RenameTrackingRedoAlwaysClearsState() { var code = @" class Cat$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("s"); state.AssertTag("Cat", "Cats", invokeAction: true); state.AssertNoTag(); // Resume rename tracking session state.Undo(2); state.AssertTag("Cat", "Cats"); state.Redo(); state.AssertNoTag(); state.Redo(); state.AssertNoTag(); } }
public async Task RenameTrackingHonorsThirdPartyRequestsForCancellationBeforeRename() { var code = @" class Cat$$ { public Cat() { } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp, onBeforeGlobalSymbolRenamedReturnValue: false)) { state.EditorOperations.InsertText("s"); await state.AssertTag("Cat", "Cats", invokeAction : true).ConfigureAwait(true); Assert.Equal(1, state.RefactorNotifyService.OnBeforeSymbolRenamedCount); // Make sure the rename didn't proceed Assert.Equal(0, state.RefactorNotifyService.OnAfterSymbolRenamedCount); await state.AssertNoTag().ConfigureAwait(true); var expectedCode = @" class Cat { public Cat() { } }"; Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText()); state.AssertNotificationMessage(); } }
public void RenameTracking_CannotRenameToVarInCSharp() { var code = @" class C { void M() { C$$ c; } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.Backspace(); state.EditorOperations.InsertText("va"); state.AssertTag("C", "va"); Assert.NotEmpty(state.GetDocumentDiagnostics()); state.EditorOperations.InsertText("r"); state.AssertNoTag(); Assert.Empty(state.GetDocumentDiagnostics()); state.EditorOperations.InsertText("p"); state.AssertTag("C", "varp"); Assert.NotEmpty(state.GetDocumentDiagnostics()); } }
public void RenameTracking_Nameof_FromMethodDefinition_NoOverloads() { var code = @" class C { void M$$() { nameof(M).ToString(); } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("at"); state.AssertTag("M", "Mat", invokeAction: true); // Make sure the rename completed var expectedCode = @" class C { void Mat() { nameof(Mat).ToString(); } }"; Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText()); state.AssertNoTag(); } }
public void RenameTrackingNotifiesThirdPartiesOfRenameOperation() { var code = @" class Cat$$ { public Cat() { } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("s"); state.AssertTag("Cat", "Cats", invokeAction: true); Assert.Equal(1, state.RefactorNotifyService.OnBeforeSymbolRenamedCount); Assert.Equal(1, state.RefactorNotifyService.OnAfterSymbolRenamedCount); var expectedCode = @" class Cats { public Cats() { } }"; Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText()); state.AssertNoNotificationMessage(); state.AssertNoTag(); } }
public async Task RenameTracking_CannotRenameToDynamicInCSharp() { var code = @" class C { void M() { C$$ c; } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.Backspace(); state.EditorOperations.InsertText("dynami"); await state.AssertTag("C", "dynami").ConfigureAwait(true); Assert.NotEmpty(state.GetDocumentDiagnostics()); state.EditorOperations.InsertText("c"); await state.AssertNoTag().ConfigureAwait(true); Assert.Empty(state.GetDocumentDiagnostics()); state.EditorOperations.InsertText("s"); await state.AssertTag("C", "dynamics").ConfigureAwait(true); Assert.NotEmpty(state.GetDocumentDiagnostics()); } }
public void RenameTrackingAlertsAboutThirdPartyRequestsForCancellationAfterRename() { var code = @" class Cat$$ { public Cat() { } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp, onAfterGlobalSymbolRenamedReturnValue: false)) { state.EditorOperations.InsertText("s"); state.AssertTag("Cat", "Cats", invokeAction: true); Assert.Equal(1, state.RefactorNotifyService.OnBeforeSymbolRenamedCount); Assert.Equal(1, state.RefactorNotifyService.OnAfterSymbolRenamedCount); state.AssertNotificationMessage(); // Make sure the rename completed var expectedCode = @" class Cats { public Cats() { } }"; Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText()); state.AssertNoTag(); } }
public void RenameTrackingNotOnSquareBracketsInCSharp() { var code = @" class $$C { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("["); state.AssertNoTag(); state.MoveCaret(1); state.EditorOperations.InsertText("]"); state.AssertNoTag(); } }
public void RenameTrackingNotWhenDeclaringEnumMembersEvenAfterCancellation() { var code = @" Enum E $$ End Enum"; using (var state = new RenameTrackingTestState(code, LanguageNames.VisualBasic)) { state.EditorOperations.InsertText(" a"); state.EditorOperations.InsertText("b"); state.AssertNoTag(); state.SendEscape(); state.EditorOperations.InsertText("c"); state.AssertNoTag(); } }
public async Task RenameTrackingNotOnSquareBracketsInCSharp() { var code = @" class $$C { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("["); await state.AssertNoTag().ConfigureAwait(true); state.MoveCaret(1); state.EditorOperations.InsertText("]"); await state.AssertNoTag().ConfigureAwait(true); } }
public void RenameTrackingNotInBlankFile() { var code = @"$$"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("d"); state.AssertNoTag(); } }
public async Task RenameTrackingNotInBlankFile() { var code = @"$$"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("d"); await state.AssertNoTag().ConfigureAwait(true); } }
public void RenameTrackingNotInBlankFile() { var code = @"$$"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("d"); state.AssertNoTag(); } }
public void RenameTrackingThroughKeyword() { var code = @" class i$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("n"); state.AssertNoTag(); state.EditorOperations.InsertText("t"); state.AssertNoTag(); state.EditorOperations.InsertText("s"); state.AssertTag("i", "ints"); } }
public async Task RenameTrackingNotInBlankFile() { var code = @"$$"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("d"); await state.AssertNoTag().ConfigureAwait(true); } }
public async Task RenameTrackingThroughKeyword() { var code = @" class i$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("n"); await state.AssertNoTag().ConfigureAwait(true); state.EditorOperations.InsertText("t"); await state.AssertNoTag().ConfigureAwait(true); state.EditorOperations.InsertText("s"); await state.AssertTag("i", "ints").ConfigureAwait(true); } }
public async Task RenameTrackingNotOnCreation() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { await state.AssertNoTag().ConfigureAwait(true); } }
public void RenameTrackingNotOnCreation() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.AssertNoTag(); } }
public void RenameTrackingNotAtMethodArgument() { var code = @" class ABCD { void Foo(int x) { int abc = 3; Foo($$ } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("a"); state.AssertNoTag(); state.EditorOperations.InsertText("b"); state.AssertNoTag(); } }
public void RenameTrackingNotOnCreation() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.AssertNoTag(); } }
public async Task RenameTrackingNotOnCreation() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { await state.AssertNoTag().ConfigureAwait(true); } }
public async Task RenameTrackingNotOnClassKeyword() { var code = @" class$$ ABCD { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("d"); await state.AssertNoTag().ConfigureAwait(true); } }
public void RenameTrackingNotOnClassKeyword() { var code = @" class$$ ABCD { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("d"); state.AssertNoTag(); } }
public void RenameTrackingUndoOnceAndStartNewSession() { var code = @" class Cat$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("abc"); state.AssertTag("Cat", "Catabc", invokeAction: true); state.AssertNoTag(); // Back to original state.Undo(); state.AssertNoTag(); state.EditorOperations.InsertText("xyz"); state.AssertTag("Cat", "Catxyz"); } }
public async Task RenameTrackingNotWhenDeclaringEnumMembers() { var code = @" Enum E $$ End Enum"; using (var state = new RenameTrackingTestState(code, LanguageNames.VisualBasic)) { state.EditorOperations.InsertText(" a"); state.EditorOperations.InsertText("b"); await state.AssertNoTag().ConfigureAwait(true); } }
public void CancelRenameTracking() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("at"); state.AssertTag("C", "Cat"); state.SendEscape(); state.AssertNoTag(); } }
public void RenameTrackingNotWhenStartedFromTextualWordInTrivia() { var code = @" Module Program Sub Main() Dim [x$$ = 1 End Sub End Module"; using (var state = new RenameTrackingTestState(code, LanguageNames.VisualBasic)) { state.EditorOperations.InsertText("]"); state.AssertNoTag(); } }
public void RenameTrackingNotAfterInvoke() { var code = @" class Cat$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("s"); state.AssertTag("Cat", "Cats", invokeAction: true); state.AssertNoTag(); } }
public async Task RenameTrackingThroughEmptyString() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.Backspace(); await state.AssertNoTag().ConfigureAwait(true); state.EditorOperations.InsertText("D"); await state.AssertTag("C", "D").ConfigureAwait(true); } }
public async Task CancelRenameTracking() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("at"); await state.AssertTag("C", "Cat").ConfigureAwait(true); state.SendEscape(); await state.AssertNoTag().ConfigureAwait(true); } }
public void RenameTrackingHandlesSquareBracketsAsVisualBasicEscape() { var code = @" Class $$C End Class"; using (var state = new RenameTrackingTestState(code, LanguageNames.VisualBasic)) { state.EditorOperations.InsertText("["); state.AssertNoTag(); state.MoveCaret(1); state.EditorOperations.InsertText("]"); state.AssertTag("C", "[C]"); } }
public void RenameTrackingThroughEmptyString() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.Backspace(); state.AssertNoTag(); state.EditorOperations.InsertText("D"); state.AssertTag("C", "D"); } }
public void RenameTrackingNotFromReferenceWithWrongNumberOfArguments() { var code = @" class C { void M(int x) { M$$(); } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("eow"); state.AssertNoTag(); } }
public void RenameTrackingInvokeAndChangeBackToOriginal() { var code = @" class Cat$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("s"); state.AssertTag("Cat", "Cats", invokeAction: true); state.AssertNoTag(); state.EditorOperations.Backspace(); state.AssertTag("Cats", "Cat"); } }
public void RenameTrackingNotThroughEmptyStringResumeOnDifferentSpace() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.Backspace(); // Move to previous space state.MoveCaret(-1); state.EditorOperations.InsertText("D"); state.AssertNoTag(); } }
public void RenameTrackingThroughEmptyStringWithCaretMove() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.Backspace(); state.MoveCaret(-4); state.MoveCaret(4); state.AssertNoTag(); state.EditorOperations.InsertText("D"); state.AssertTag("C", "D"); } }
public void RenameTrackingDoesNotProvideDiagnosticAfterCancellation() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("at"); state.AssertTag("C", "Cat"); Assert.NotEmpty(state.GetDocumentDiagnostics()); state.SendEscape(); state.AssertNoTag(); Assert.Empty(state.GetDocumentDiagnostics()); } }
public void RenameTrackingNotWhenStartedFromTextualWordInTrivia() { var code = @" Module Program Sub Main() Dim [x$$ = 1 End Sub End Module"; using (var state = new RenameTrackingTestState(code, LanguageNames.VisualBasic)) { state.EditorOperations.InsertText("]"); state.AssertNoTag(); } }
public void RenameTrackingNotifiesThirdPartiesOfRenameOperation() { var code = @" class Cat$$ { public Cat() { } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("s"); state.AssertTag("Cat", "Cats", invokeAction: true); Assert.Equal(1, state.RefactorNotifyService.OnBeforeSymbolRenamedCount); Assert.Equal(1, state.RefactorNotifyService.OnAfterSymbolRenamedCount); var expectedCode = @" class Cats { public Cats() { } }"; Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText()); state.AssertNoNotificationMessage(); state.AssertNoTag(); } }
public void RenameTrackingRedoAlwaysClearsState() { var code = @" class Cat$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("s"); state.AssertTag("Cat", "Cats", invokeAction: true); state.AssertNoTag(); // Resume rename tracking session state.Undo(2); state.AssertTag("Cat", "Cats"); state.Redo(); state.AssertNoTag(); state.Redo(); state.AssertNoTag(); } }
public void RenameTrackingNotOnSquareBracketsInCSharp() { var code = @" class $$C { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("["); state.AssertNoTag(); state.MoveCaret(1); state.EditorOperations.InsertText("]"); state.AssertNoTag(); } }
public void CancelRenameTracking() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("at"); state.AssertTag("C", "Cat"); state.SendEscape(); state.AssertNoTag(); } }
public void RenameTrackingNotWhenNewIdentifierReferenceBinds() { var code = @" Module Program Sub Main() $$[|main|]() End Sub Sub Foo() End Sub End Module"; using (var state = new RenameTrackingTestState(code, LanguageNames.VisualBasic)) { var textSpan = state.HostDocument.SelectedSpans.Single(); state.EditorOperations.ReplaceText(new Span(textSpan.Start, textSpan.Length), "Fo"); state.AssertTag("main", "Fo"); state.EditorOperations.InsertText("o"); state.AssertNoTag(); } }
public void RenameTrackingNotAtMethodArgument() { var code = @" class ABCD { void Foo(int x) { int abc = 3; Foo($$ } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("a"); state.AssertNoTag(); state.EditorOperations.InsertText("b"); state.AssertNoTag(); } }
public void RenameTrackingNotOnClassKeyword() { var code = @" class$$ ABCD { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("d"); state.AssertNoTag(); } }
public void RenameTracking_Nameof_FromMethodGroupReference() { var code = @" class C { void M() { nameof(M$$).ToString(); } void M(int x) { } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("at"); state.AssertTag("M", "Mat", invokeAction: true); // Make sure the rename completed var expectedCode = @" class C { void Mat() { nameof(Mat).ToString(); } void Mat(int x) { } }"; Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText()); state.AssertNoTag(); } }
public void RenameTrackingUndoOnceAndStartNewSession() { var code = @" class Cat$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("abc"); state.AssertTag("Cat", "Catabc", invokeAction: true); state.AssertNoTag(); // Back to original state.Undo(); state.AssertNoTag(); state.EditorOperations.InsertText("xyz"); state.AssertTag("Cat", "Catxyz"); } }
public void RenameTrackingUndoTwiceAndContinueSession() { var code = @" class Cat$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("abc"); state.AssertTag("Cat", "Catabc", invokeAction: true); state.AssertNoTag(); // Resume rename tracking session state.Undo(2); state.AssertTag("Cat", "Catabc"); state.EditorOperations.InsertText("xyz"); state.AssertTag("Cat", "Catabcxyz"); } }
public void RenameTrackingThroughKeyword() { var code = @" class i$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("n"); state.AssertNoTag(); state.EditorOperations.InsertText("t"); state.AssertNoTag(); state.EditorOperations.InsertText("s"); state.AssertTag("i", "ints"); } }
public void RenameTrackingUndoTwiceRedoTwiceUndoStillWorks() { var code = @" class Cat$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("s"); state.AssertTag("Cat", "Cats", invokeAction: true); state.AssertNoTag(); // Resume rename tracking session state.Undo(2); state.AssertTag("Cat", "Cats"); state.Redo(2); state.AssertNoTag(); // Back to original state.Undo(); state.AssertNoTag(); // Resume rename tracking session state.Undo(); state.AssertTag("Cat", "Cats"); } }
public void RenameTrackingThroughIllegalStartCharacter() { var code = @" class $$abc { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("9"); state.AssertNoTag(); state.MoveCaret(-1); state.EditorOperations.InsertText("t"); state.AssertTag("abc", "t9abc"); } }
public void RenameTrackingAlertsAboutThirdPartyRequestsForCancellationAfterRename() { var code = @" class Cat$$ { public Cat() { } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp, onAfterGlobalSymbolRenamedReturnValue: false)) { state.EditorOperations.InsertText("s"); state.AssertTag("Cat", "Cats", invokeAction: true); Assert.Equal(1, state.RefactorNotifyService.OnBeforeSymbolRenamedCount); Assert.Equal(1, state.RefactorNotifyService.OnAfterSymbolRenamedCount); state.AssertNotificationMessage(); // Make sure the rename completed var expectedCode = @" class Cats { public Cats() { } }"; Assert.Equal(expectedCode, state.HostDocument.TextBuffer.CurrentSnapshot.GetText()); state.AssertNoTag(); } }
public void RenameTrackingThroughSameIdentifier() { var code = @" class C$$ { }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("s"); state.AssertTag("C", "Cs"); state.EditorOperations.Backspace(); state.AssertNoTag(); state.EditorOperations.InsertText("s"); state.AssertTag("C", "Cs"); } }
public void RenameTrackingNotWhenCaseCorrectingReference() { var code = @" Module Program Sub Main() $$main() End Sub End Module"; using (var state = new RenameTrackingTestState(code, LanguageNames.VisualBasic)) { state.EditorOperations.Delete(); state.AssertTag("main", "ain"); state.EditorOperations.InsertText("M"); state.AssertNoTag(); } }
public void RenameTracking_NoTagWhenFirstEditChangesReferenceToAnotherSymbol() { var code = @" class C { void M() { int abc = 7; int ab = 8; int z = abc$$; } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.Backspace(); state.AssertNoTag(); } }
public void RenameTrackingNotFromReferenceWithWrongNumberOfArguments() { var code = @" class C { void M(int x) { M$$(); } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("eow"); state.AssertNoTag(); } }
public void RenameTrackingNotInString() { var code = @" class C { void Foo() { string s = ""abc$$"" } }"; using (var state = new RenameTrackingTestState(code, LanguageNames.CSharp)) { state.EditorOperations.InsertText("d"); state.AssertNoTag(); } }
public void RenameTrackingNotWhenDeclaringEnumMembersEvenAfterCancellation() { var code = @" Enum E $$ End Enum"; using (var state = new RenameTrackingTestState(code, LanguageNames.VisualBasic)) { state.EditorOperations.InsertText(" a"); state.EditorOperations.InsertText("b"); state.AssertNoTag(); state.SendEscape(); state.EditorOperations.InsertText("c"); state.AssertNoTag(); } }
public void RenameTrackingHandlesSquareBracketsAsVisualBasicEscape() { var code = @" Class $$C End Class"; using (var state = new RenameTrackingTestState(code, LanguageNames.VisualBasic)) { state.EditorOperations.InsertText("["); state.AssertNoTag(); state.MoveCaret(1); state.EditorOperations.InsertText("]"); state.AssertTag("C", "[C]"); } }