From 41044c46ad0fd5dbbf71d041397094c7513de934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Matou=C5=A1ek?= Date: Wed, 2 Aug 2023 10:01:50 -0700 Subject: [PATCH] Add a few missing tests (#69320) --- .../EditAndContinue/TopLevelEditingTests.cs | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/src/EditorFeatures/CSharpTest/EditAndContinue/TopLevelEditingTests.cs b/src/EditorFeatures/CSharpTest/EditAndContinue/TopLevelEditingTests.cs index ccb78abefad48..bcb9852da447d 100644 --- a/src/EditorFeatures/CSharpTest/EditAndContinue/TopLevelEditingTests.cs +++ b/src/EditorFeatures/CSharpTest/EditAndContinue/TopLevelEditingTests.cs @@ -2781,6 +2781,35 @@ public void Type_Move_MultiFile() #region Records + [Fact] + public void Record_Insert() + { + var src1 = ""; + var src2 = "record C;"; + + var edits = GetTopEdits(src1, src2); + + edits.VerifyEdits( + "Insert [record C;]@0"); + + edits.VerifySemantics( + new[] { SemanticEdit(SemanticEditKind.Insert, c => c.GetMember("C")) }, + capabilities: EditAndContinueCapabilities.NewTypeDefinition); + } + + [Fact] + public void Record_Insert_WithParameters() + { + var src1 = ""; + var src2 = "record C(int A);"; + + var edits = GetTopEdits(src1, src2); + + edits.VerifySemantics( + new[] { SemanticEdit(SemanticEditKind.Insert, c => c.GetMember("C")) }, + capabilities: EditAndContinueCapabilities.NewTypeDefinition); + } + [Fact] public void Record_Name_Update() { @@ -18090,6 +18119,78 @@ readonly struct S }); } + [Fact] + [WorkItem("https://github.com/dotnet/roslyn/issues/69317")] + public void Property_Rename_ShadowingPrimaryParameter() + { + var src1 = @" +class C(int A, int B) +{ + public int B { get; init; } + + public int F() => B; +} +"; + var src2 = @" +class C(int A, int B) +{ + public int D { get; init; } + + public int F() => B; +} +"; + var edits = GetTopEdits(src1, src2); + + // TODO: https://github.com/dotnet/roslyn/issues/69317 + // Update D getter/setter to use deleted B property + + edits.VerifySemantics( + new[] + { + SemanticEdit(SemanticEditKind.Delete, c => c.GetMember("C.get_B"), deletedSymbolContainerProvider: c => c.GetMember("C")), + SemanticEdit(SemanticEditKind.Delete, c => c.GetMember("C.set_B"), deletedSymbolContainerProvider: c => c.GetMember("C")), + SemanticEdit(SemanticEditKind.Insert, c => c.GetMember("C.D")), + }, + capabilities: EditAndContinueCapabilities.AddMethodToExistingType | EditAndContinueCapabilities.AddInstanceFieldToExistingType); + } + + [Fact] + [WorkItem("https://github.com/dotnet/roslyn/issues/69317")] + [WorkItem("https://github.com/dotnet/roslyn/issues/69216")] + public void Property_Rename_ShadowingPrimaryParameter_WithInitializer() + { + var src1 = @" +class C(int A, int B) +{ + public int B { get; init; } = B; + + public int F() => B; +} +"; + var src2 = @" +class C(int A, int B) +{ + public int D { get; init; } = B; + + public int F() => B; +} +"; + var edits = GetTopEdits(src1, src2); + + // TODO: https://github.com/dotnet/roslyn/issues/69317 + // Update D getter/setter to use deleted B property + + edits.VerifySemantics( + new[] + { + SemanticEdit(SemanticEditKind.Update, c => c.GetPrimaryConstructor("C"), preserveLocalVariables: true), + //SemanticEdit(SemanticEditKind.Delete, c => c.GetMember("C.get_B"), deletedSymbolContainerProvider: c => c.GetMember("C")), + //SemanticEdit(SemanticEditKind.Delete, c => c.GetMember("C.set_B"), deletedSymbolContainerProvider: c => c.GetMember("C")), + //SemanticEdit(SemanticEditKind.Insert, c => c.GetMember("C.D")), + }, + capabilities: EditAndContinueCapabilities.AddMethodToExistingType | EditAndContinueCapabilities.AddInstanceFieldToExistingType); + } + #endregion #region Indexers