Forge
csharpdeeb25a2
1#nullable enable
2
3using CascadeIDE.Models.Intercom;
4using CascadeIDE.Services;
5using CascadeIDE.Services.Intercom;
6using Xunit;
7
8namespace CascadeIDE.Tests;
9
10public sealed class IntercomAttachmentAnchorRefresherTests
11{
12 [Fact]
13 public void NeedsRefresh_member_not_found_true()
14 {
15 var anchor = new AttachmentAnchor
16 {
17 File = "Foo.cs",
18 MemberKey = "Run",
19 ResolveOutcome = IntercomAttachmentRevealPlan.OutcomeMemberNotFound,
20 };
21 Assert.True(IntercomAttachmentAnchorRefresher.NeedsRefresh(anchor));
22 }
23
24 [Fact]
25 public void NeedsRefresh_resolved_false()
26 {
27 var anchor = new AttachmentAnchor
28 {
29 File = "Foo.cs",
30 MemberKey = "Run",
31 ResolveOutcome = IntercomAttachmentRevealPlan.OutcomeResolved,
32 };
33 Assert.False(IntercomAttachmentAnchorRefresher.NeedsRefresh(anchor));
34 }
35
36 [Fact]
37 public void Refresh_updates_outcome_when_member_resolves()
38 {
39 var dir = Path.Combine(Path.GetTempPath(), "cascade-ide-attach-refresh-" + Guid.NewGuid().ToString("N"));
40 Directory.CreateDirectory(dir);
41 try
42 {
43 var file = Path.Combine(dir, "Worker.cs");
44 File.WriteAllText(
45 file,
46 """
47 namespace Sample;
48 public class Worker {
49 public void Run() { }
50 }
51 """);
52
53 var anchor = new AttachmentAnchor
54 {
55 File = "Worker.cs",
56 MemberKey = "Run",
57 ResolveOutcome = IntercomAttachmentRevealPlan.OutcomeMemberNotFound,
58 };
59
60 var refreshed = IntercomAttachmentAnchorRefresher.Refresh(anchor, dir, null);
61 Assert.Equal(IntercomAttachmentRevealPlan.OutcomeResolved, refreshed.ResolveOutcome);
62 Assert.Equal(3, refreshed.LineStart);
63 Assert.Equal(3, refreshed.LineEnd);
64 }
65 finally
66 {
67 try
68 {
69 Directory.Delete(dir, recursive: true);
70 }
71 catch
72 {
73 // best-effort cleanup
74 }
75 }
76 }
77}
78
View only · write via MCP/CIDE