Forge
csharpdeeb25a2
1using CascadeIDE.Features.Chat;
2using CascadeIDE.Services;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7/// <summary>Codegen trie из intent-catalog.toml совпадает с runtime-каталогом (ADR 0150).</summary>
8public sealed class SlashRouteCatalogCodegenSyncTests
9{
10 [Fact]
11 public void Generated_paths_match_runtime_slash_routes()
12 {
13 var runtime = IntentMelodyAliases.GetCatalogSnapshot().SlashRoutes.Keys
14 .Select(IntentSlashCatalog.NormalizeSlashPath)
15 .ToHashSet(StringComparer.OrdinalIgnoreCase);
16
17 var generated = SlashRouteCatalogPathsGenerated.PathsLongestFirst
18 .ToHashSet(StringComparer.OrdinalIgnoreCase);
19
20 Assert.Equal(runtime.Count, generated.Count);
21 foreach (var path in runtime)
22 Assert.Contains(path, generated);
23 }
24
25 [Fact]
26 public void Generated_arg_tail_kinds_match_runtime_index()
27 {
28 foreach (var path in SlashRouteCatalogPathsGenerated.PathsLongestFirst)
29 {
30 Assert.True(SlashRouteCatalogPathsGenerated.TryGetArgTailKind(path, out var gen));
31 var runtime = SlashRouteCatalogIndex.GetArgTailKind(path);
32 Assert.Equal(runtime, (SlashArgTailKind)gen);
33 }
34 }
35
36 [Fact]
37 public void Generated_trie_resolves_three_token_paths()
38 {
39 ChatSlashAutocomplete.ParseTypedBodyForResolver(
40 "map type file",
41 out var tokens,
42 out var endsWithSpace);
43
44 Assert.True(SlashRouteCatalogPathsGenerated.TryResolveLongestPrefix(
45 tokens,
46 endsWithSpace,
47 out var path,
48 out var tail,
49 out var exact,
50 out _));
51
52 Assert.Equal("/map type file", path);
53 Assert.Equal("", tail);
54 Assert.True(exact);
55 }
56}
57
View only · write via MCP/CIDE