| 1 | using CascadeIDE.Features.Chat; |
| 2 | using CascadeIDE.Services; |
| 3 | using Xunit; |
| 4 | |
| 5 | namespace CascadeIDE.Tests; |
| 6 | |
| 7 | /// <summary>Codegen trie из intent-catalog.toml совпадает с runtime-каталогом (ADR 0150).</summary> |
| 8 | public 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 | |