Forge
csharpdeeb25a2
1#nullable enable
2
3using CascadeIDE.Features.Chat;
4using Xunit;
5
6namespace CascadeIDE.Tests;
7
8public sealed class ChatBracketAutocompleteTests
9{
10 [Fact]
11 public void TryGetEditState_detects_unclosed_bracket_at_caret()
12 {
13 var text = "see [M:Ru";
14 Assert.True(ChatBracketAutocomplete.TryGetEditState(text, text.Length, out var state));
15 Assert.Equal(ChatBracketAutocomplete.Axis.Member, state.ActiveAxis);
16 Assert.Equal("Ru", state.AxisPrefix);
17 }
18
19 [Fact]
20 public void GetSuggestions_member_prefix_after_M_colon()
21 {
22 var dir = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), nameof(ChatBracketAutocompleteTests) + "_" + Guid.NewGuid().ToString("N"))).FullName;
23 var file = Path.Combine(dir, "Foo.cs");
24 File.WriteAllText(file, "class C { public void Run() { } }");
25
26 var rel = "Foo.cs";
27 var text = $"[{rel} M:R";
28 var suggestions = ChatBracketAutocomplete.GetSuggestions(
29 text,
30 text.Length,
31 file,
32 dir,
33 workspaceFiles: null);
34
35 Assert.Contains(suggestions, s => s.Display == "Run");
36 }
37
38 [Fact]
39 public void GetSuggestions_scope_after_S_colon()
40 {
41 var text = "[M:Run S:f";
42 var suggestions = ChatBracketAutocomplete.GetSuggestions(text, text.Length, null, null, null);
43 Assert.Contains(suggestions, s => s.Display.StartsWith("S:for:", StringComparison.Ordinal));
44 }
45}
46
View only · write via MCP/CIDE