Forge
csharpdeeb25a2
1using CascadeIDE.Features.Search.Application;
2using Xunit;
3
4namespace CascadeIDE.Tests;
5
6/// <summary>Порядок разбора: <c>c:</c> → go-to → каталог (ADR 0112).</summary>
7public sealed class CommandPaletteParsedQueryParserTests
8{
9 [Theory]
10 [InlineData("c:gs", "gs")]
11 [InlineData(" c:br ", "br")]
12 public void Parse_After_c_colon_IsMelody(string raw, string expectedTail)
13 {
14 var q = CommandPaletteParsedQueryParser.Parse(raw);
15 var m = Assert.IsType<CommandPaletteParsedQuery.Melody>(q);
16 Assert.Equal(expectedTail, m.TailNormalized);
17 }
18
19 [Fact]
20 public void Parse_f_colon_IsGoTo()
21 {
22 var q = CommandPaletteParsedQueryParser.Parse(" f: Foo ");
23 var g = Assert.IsType<CommandPaletteParsedQuery.GoTo>(q);
24 Assert.Equal('f', g.Query.Prefix);
25 Assert.Equal("Foo ", g.Query.Term);
26 }
27
28 [Theory]
29 [InlineData("hello")]
30 [InlineData("")]
31 [InlineData(" ")]
32 public void Parse_WithoutRecognizedPrefix_IsCatalog(string raw)
33 {
34 var q = CommandPaletteParsedQueryParser.Parse(raw);
35 var c = Assert.IsType<CommandPaletteParsedQuery.Catalog>(q);
36 Assert.Equal(raw.Trim(), c.TrimmedRaw);
37 }
38
39 [Fact]
40 public void Parse_f_colon_WithNoTerm_IsGoTo_emptyTerm()
41 {
42 var q = CommandPaletteParsedQueryParser.Parse("f:");
43 var g = Assert.IsType<CommandPaletteParsedQuery.GoTo>(q);
44 Assert.Equal('f', g.Query.Prefix);
45 Assert.Equal("", g.Query.Term);
46 }
47
48 [Theory]
49 [InlineData('t', "Newtonsoft")]
50 [InlineData('m', "Dispose")]
51 [InlineData('x', "TODO")]
52 public void Parse_go_toPrefixes_PrefixAndTerm(char expectedPrefix, string term)
53 {
54 var raw = $"{expectedPrefix}:{term}";
55 var q = CommandPaletteParsedQueryParser.Parse(raw);
56 var g = Assert.IsType<CommandPaletteParsedQuery.GoTo>(q);
57 Assert.Equal(expectedPrefix, g.Query.Prefix);
58 Assert.Equal(term, g.Query.Term);
59 }
60
61 /// <summary><c>c:</c> только в начале строки после trim — иначе каталог.</summary>
62 [Fact]
63 public void Parse_c_insidePlainText_IsCatalog()
64 {
65 var q = CommandPaletteParsedQueryParser.Parse("search c:gits");
66 var c = Assert.IsType<CommandPaletteParsedQuery.Catalog>(q);
67 Assert.Equal("search c:gits", c.TrimmedRaw);
68 }
69}
70
View only · write via MCP/CIDE