Forge
csharpdeeb25a2
1using CascadeIDE.Features.UiChrome;
2using CascadeIDE.Features.Workspace;
3using CascadeIDE.Services;
4using Xunit;
5
6namespace CascadeIDE.Tests;
7
8public sealed class WorkspaceAdrMapResolverTests
9{
10 [Fact]
11 public void ResolveAdrDocPaths_longest_prefix_wins_over_star()
12 {
13 var w = new RepositoryWorkspaceToml
14 {
15 Workspace = new RepositoryWorkspaceSectionToml
16 {
17 Adr = new RepositoryAdrToml
18 {
19 Map = new Dictionary<string, object>
20 {
21 ["*"] = "docs/adr/0006-presentation-layers-and-feature-slices.md",
22 ["Features/UiChrome/"] = "docs/adr/0010-ui-mode-catalog.md",
23 ["Features/UiChrome/UiModeCatalog.cs"] = "docs/adr/0010-ui-mode-catalog.md",
24 }
25 }
26 }
27 };
28
29 var r = WorkspaceAdrMapResolver.ResolveAdrDocPathsFromWorkspaceToml(
30 w,
31 repositoryRootDirectory: "D:/w",
32 absoluteFilePath: "D:/w/Features/UiChrome/UiModeCatalog.cs");
33
34 Assert.Single(r);
35 Assert.Equal("docs/adr/0010-ui-mode-catalog.md", r[0]);
36 Assert.Equal("ADR: ADR 0010", WorkspaceAdrMapResolver.BuildAdrIndicatorLine(r));
37 }
38
39 [Fact]
40 public void ResolveAdrDocPaths_array_values_are_supported()
41 {
42 var w = new RepositoryWorkspaceToml
43 {
44 Workspace = new RepositoryWorkspaceSectionToml
45 {
46 Adr = new RepositoryAdrToml
47 {
48 Map = new Dictionary<string, object>
49 {
50 ["src/ui/"] = new object[]
51 {
52 "docs/adr/0055-skia-instrument-composition-pipeline.md",
53 "docs/adr/0049-skia-surface-rollout-over-avalonia-host.md",
54 }
55 }
56 }
57 }
58 };
59
60 var r = WorkspaceAdrMapResolver.ResolveAdrDocPathsFromWorkspaceToml(
61 w,
62 repositoryRootDirectory: "D:/w",
63 absoluteFilePath: "D:/w/src/ui/skia/Graph.cs");
64
65 Assert.Equal(2, r.Count);
66 Assert.Contains("docs/adr/0055-skia-instrument-composition-pipeline.md", r);
67 Assert.Contains("docs/adr/0049-skia-surface-rollout-over-avalonia-host.md", r);
68 }
69
70 [Fact]
71 public void ExtractLinkedAdrDocPathsFromMarkdown_supports_relative_and_docs_adr_links()
72 {
73 var md = """
74 # ADR 9999
75
76 See [ADR 0061](0061-context-aware-adr-map-pfd-knowledge-indicator.md) and
77 [ADR 0155](../adr/0155-documentation-code-correspondence-and-architectural-drift.md).
78 Ignore [web](https://example.com/a.md) and [non-adr](../design/feature-archetype-v1.md).
79 """;
80
81 var linked = WorkspaceAdrMapResolver.ExtractLinkedAdrDocPathsFromMarkdown(
82 md,
83 currentDocRepoRelativePath: "docs/adr/9999-sample.md");
84
85 Assert.Contains("docs/adr/0061-context-aware-adr-map-pfd-knowledge-indicator.md", linked);
86 Assert.Contains("docs/adr/0155-documentation-code-correspondence-and-architectural-drift.md", linked);
87 Assert.DoesNotContain(linked, x => x.Contains("feature-archetype", StringComparison.OrdinalIgnoreCase));
88 }
89}
90
91
View only · write via MCP/CIDE