Forge
csharpdeeb25a2
1using CascadeIDE.Models.Forge;
2using CascadeIDE.Features.Forge.Infrastructure;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class BracketForgeReferenceParserTests
8{
9 [Theory]
10 [InlineData("[FRG:pilot/issues/7]", "pilot", ForgeArtifactKind.Issue, 7)]
11 [InlineData("[FRG:cad-tools/mr/3]", "cad-tools", ForgeArtifactKind.MergeRequest, 3)]
12 public void Parses_issue_and_mr(string bracket, string repo, ForgeArtifactKind kind, int number)
13 {
14 Assert.True(BracketForgeReferenceParser.TryParse(bracket, out var artifact, out var error), error);
15 Assert.Equal(repo, artifact.Repo);
16 Assert.Equal(kind, artifact.Kind);
17 Assert.Equal(number, artifact.Number);
18 Assert.Null(artifact.CodeBracket);
19 }
20
21 [Fact]
22 public void Parses_compound_code_tail()
23 {
24 const string bracket = "[FRG:pilot/issues/7; F:src/Foo.cs; L:10]";
25 Assert.True(BracketForgeReferenceParser.TryParse(bracket, out var artifact, out var error), error);
26 Assert.Equal("pilot", artifact.Repo);
27 Assert.Equal(ForgeArtifactKind.Issue, artifact.Kind);
28 Assert.Equal(7, artifact.Number);
29 Assert.Contains("F:src/Foo.cs", artifact.CodeBracket, StringComparison.Ordinal);
30 }
31
32 [Fact]
33 public void Facade_discriminates_forge_vs_code()
34 {
35 Assert.True(BracketReferenceParser.TryParse("[FRG:pilot/issues/1]", out var kind, out var forge, out _, out _));
36 Assert.Equal(BracketReferenceKind.Forge, kind);
37 Assert.Equal("pilot", forge.Repo);
38
39 Assert.True(BracketReferenceParser.TryParse("[F:src/A.cs; L:1]", out kind, out _, out var code, out _));
40 Assert.Equal(BracketReferenceKind.Code, kind);
41 Assert.Equal("src/A.cs", code.File);
42 }
43}
44
View only · write via MCP/CIDE