fix(claude-do): merge preview_merge_set: don't report a symbol as removed when the

ClaudeDo-Task: 4882c459-374c-4afe-a60d-2b25b8cce407
This commit is contained in:
mika kuns
2026-10-01 13:32:48 +02:00
2 changed files with 91 additions and 8 deletions
@@ -1359,6 +1359,47 @@ public sealed class MergeMcpToolsTests : IDisposable
Assert.Equal("Bar.cs", warning.ReferencedInFile);
}
private static List<MergeMcpTools.DiffLine> Diff(string file, params string[] lines)
=> lines.Select(l => new MergeMcpTools.DiffLine(file, l[0], l[1..])).ToList();
[Fact]
public void ExtractRemovedSymbols_AutoPropertyBecomesObservableField_NotReported()
{
var onOwnLine = Diff("Vm.cs",
"- public bool IsListHandler { get; set; }",
"+ [ObservableProperty]",
"+ private bool _isListHandler;");
var inline = Diff("Vm.cs",
"- public bool IsListHandler { get; set; }",
"+ [ObservableProperty] private bool isListHandler;");
Assert.Empty(MergeMcpTools.ExtractRemovedSymbols(onOwnLine));
Assert.Empty(MergeMcpTools.ExtractRemovedSymbols(inline));
}
[Fact]
public void ExtractRemovedSymbols_ChangedMethodSignatureInSameFile_NotReported()
{
var diff = Diff("Foo.cs",
"- public void Run(int a)",
"+ public void Run(int a, string b)");
Assert.Empty(MergeMcpTools.ExtractRemovedSymbols(diff));
}
[Fact]
public void ExtractRemovedSymbols_RealRemovalOrCrossFileMove_StillReported()
{
var diff = Diff("Foo.cs", "- private void Gone()", "- public void Moved()")
.Concat(Diff("Other.cs", "+ public void Moved()")).ToList();
var removed = MergeMcpTools.ExtractRemovedSymbols(diff);
Assert.Equal(2, removed.Count);
Assert.Contains(removed, s => s.Name == "Gone" && s.File == "Foo.cs");
Assert.Contains(removed, s => s.Name == "Moved" && s.File == "Foo.cs");
}
[Fact]
public async Task PreviewMergeSet_TwoTasksAddDifferentJsonKeys_ReportsNoOverlap()
{