Forge
csharpdeeb25a2
1#nullable enable
2
3using CascadeIDE.Services.Intercom;
4using Xunit;
5
6namespace CascadeIDE.Tests;
7
8public sealed class AnchorDraftPreviewResolverTests
9{
10 [Fact]
11 public void TryResolve_MemberOnly_InfersFileFromSidecar()
12 {
13 var dir = createWorkspace();
14 seedMember(dir, "src/A.cs", "Foo.Bar", 10, 20);
15
16 Assert.True(
17 AnchorDraftPreviewResolver.TryResolve(
18 "[M:Foo.Bar]",
19 activeFilePath: null,
20 workspaceRoot: dir,
21 solutionPath: null,
22 indexDirectoryRelative: null,
23 out var preview,
24 out var error),
25 error);
26
27 Assert.Equal(Path.Combine(dir, "src", "A.cs").Replace('\\', '/'), preview.AbsoluteFilePath.Replace('\\', '/'));
28 Assert.Equal(10, preview.StartLine);
29 Assert.Equal(20, preview.EndLine);
30 }
31
32 private static void seedMember(string workspace, string relativePath, string memberKey, int lineStart, int lineEnd)
33 {
34 var cache = IntercomAttachResolveCacheContext.From(workspace, null, relativePath);
35 var absolute = Path.Combine(workspace, relativePath.Replace('/', Path.DirectorySeparatorChar));
36 Directory.CreateDirectory(Path.GetDirectoryName(absolute)!);
37 if (!File.Exists(absolute))
38 File.WriteAllText(absolute, "// stub\n");
39
40 var mtime = File.GetLastWriteTimeUtc(absolute).Ticks;
41 IntercomSymbolLineIndex.ReplaceFileSymbols(
42 cache,
43 relativePath,
44 mtime,
45 [new IntercomSymbolLineEntry("docid", memberKey, lineStart, lineEnd)]);
46 }
47
48 private static string createWorkspace()
49 {
50 var dir = Path.Combine(Path.GetTempPath(), nameof(AnchorDraftPreviewResolverTests) + "_" + Guid.NewGuid().ToString("N"));
51 Directory.CreateDirectory(dir);
52 return dir;
53 }
54}
55
View only · write via MCP/CIDE