Forge
csharpdeeb25a2
1using CascadeIDE.Features.Chat;
2using Xunit;
3
4namespace CascadeIDE.Tests;
5
6public sealed class ChatSlashIntercomMessageSelectTests
7{
8 [Theory]
9 [InlineData("/intercom message select 3", "3", "3")]
10 [InlineData("/intercom message select 3 5", "3 5", "3")]
11 [InlineData("/intercom message select 3:5", "3:5", "3")]
12 public void ResolveInput_MessageSelect_ArgTail(string line, string expectedArgs, string expectedStart)
13 {
14 Assert.True(SlashLineResolver.TryResolveSlashLine(line, out var resolved));
15 Assert.Equal("/intercom message select", resolved.CanonicalPath);
16 Assert.Equal(expectedArgs, resolved.ArgTail);
17 Assert.True(ChatSlashParametricArgsBuilder.TryParseLineRangeTail(resolved.ArgTail, out var start, out _, out _));
18 Assert.Equal(int.Parse(expectedStart), start);
19 ChatSlashCatalogTestSupport.AssertResolves(line, "/intercom message select");
20 }
21
22 [Fact]
23 public void TryParseLineRangeTail_RejectsThreeTokens()
24 {
25 Assert.False(ChatSlashParametricArgsBuilder.TryParseLineRangeTail("3 5 7", out _, out _, out var error));
26 Assert.Contains("Ожидается", error);
27 }
28
29 [Fact]
30 public void ResolveInput_MessageSelectClear()
31 {
32 ChatSlashCatalogTestSupport.AssertResolves("/intercom message select clear", "/intercom message select clear");
33 }
34
35 [Fact]
36 public void ResolveInput_BracketSegments_InMessageSelect()
37 {
38 const string line = "/intercom message select [3;5] [8;15] [20]";
39 Assert.True(SlashLineResolver.TryResolveSlashLine(line, out var resolved));
40 Assert.Equal("[3;5] [8;15] [20]", resolved.ArgTail);
41 Assert.True(ParametricSegmentListParser.TryParse(resolved.ArgTail, out var segments, out _));
42 Assert.Equal(3, segments.Count);
43 ChatSlashCatalogTestSupport.AssertResolves(line, "/intercom message select");
44 }
45}
46
View only · write via MCP/CIDE