| 1 | using System.Text.Json; |
| 2 | using CascadeIDE.Features.Workspace; |
| 3 | using CascadeIDE.Features.WorkspaceNavigation.Application; |
| 4 | using Xunit; |
| 5 | |
| 6 | namespace CascadeIDE.Tests; |
| 7 | |
| 8 | public sealed class WorkspaceCorrespondenceContextBuilderTests |
| 9 | { |
| 10 | [Fact] |
| 11 | public void BuildJson_includes_forward_docs_and_layers() |
| 12 | { |
| 13 | var root = Path.Combine(Path.GetTempPath(), "crs-ctx-" + Guid.NewGuid().ToString("N")); |
| 14 | Directory.CreateDirectory(root); |
| 15 | try |
| 16 | { |
| 17 | var cs = Path.Combine(root, "Features", "Nav", "Bar.cs"); |
| 18 | Directory.CreateDirectory(Path.GetDirectoryName(cs)!); |
| 19 | File.WriteAllText(cs, "//"); |
| 20 | |
| 21 | var tomlPath = Path.Combine(root, ".cascade"); |
| 22 | Directory.CreateDirectory(tomlPath); |
| 23 | File.WriteAllText( |
| 24 | Path.Combine(tomlPath, "workspace.toml"), |
| 25 | """ |
| 26 | [workspace.adr.map] |
| 27 | "Features/Nav/" = ["docs/adr/0001-test.md"] |
| 28 | |
| 29 | [[workspace.features.feature]] |
| 30 | id = "nav" |
| 31 | title = "Nav" |
| 32 | paths = ["Features/Nav/"] |
| 33 | docs = ["docs/adr/0001-test.md"] |
| 34 | """); |
| 35 | |
| 36 | var adr = Path.Combine(root, "docs", "adr", "0001-test.md"); |
| 37 | Directory.CreateDirectory(Path.GetDirectoryName(adr)!); |
| 38 | File.WriteAllText(adr, "# Test"); |
| 39 | |
| 40 | var json = WorkspaceCorrespondenceContextBuilder.BuildJson(root, cs); |
| 41 | using var doc = JsonDocument.Parse(json); |
| 42 | var rootEl = doc.RootElement; |
| 43 | Assert.Equal("Features/Nav/Bar.cs", rootEl.GetProperty("file").GetString()?.Replace('\\', '/')); |
| 44 | Assert.Contains("L1", rootEl.GetProperty("activeLayers").EnumerateArray().Select(e => e.GetString())); |
| 45 | Assert.True(rootEl.GetProperty("forwardDocs").GetArrayLength() >= 1); |
| 46 | } |
| 47 | finally |
| 48 | { |
| 49 | if (Directory.Exists(root)) |
| 50 | Directory.Delete(root, recursive: true); |
| 51 | } |
| 52 | } |
| 53 | } |
| 54 | |