Forge
csharp551a3611
1using RoslynMcp.ServiceLayer;
2
3namespace RoslynMcp.Tests;
4
5/// <summary>Изолированные тесты <see cref="MoveMembersToPartialFile"/>: временный каталог и минимальный SDK-проект, без ссылок на репозитории приложений.</summary>
6public sealed class MoveMembersToPartialFileTests
7{
8 [Fact]
9 public async Task MoveAsync_single_const_field_matches_by_name_preview()
10 {
11 var dir = Path.Combine(Path.GetTempPath(), "roslyn-mcp-move-const-" + Guid.NewGuid().ToString("N"));
12 Directory.CreateDirectory(dir);
13 var csproj = Path.Combine(dir, "MoveConst.csproj");
14 var sourceCs = Path.Combine(dir, "ConstHolder.cs");
15 var outCs = Path.Combine(dir, "ConstHolder.Alpha.cs");
16
17 File.WriteAllText(csproj, """
18 <Project Sdk="Microsoft.NET.Sdk">
19 <PropertyGroup>
20 <TargetFramework>net10.0</TargetFramework>
21 <ImplicitUsings>enable</ImplicitUsings>
22 <Nullable>enable</Nullable>
23 <RootNamespace>MoveConst</RootNamespace>
24 </PropertyGroup>
25 </Project>
26 """);
27
28 File.WriteAllText(sourceCs, """
29 namespace MoveConst;
30
31 public static partial class ConstHolder
32 {
33 public const string Alpha = "a";
34 public const string Beta = "b";
35 }
36 """);
37
38 // Каретка на имени типа (строка с объявлением класса).
39 var result = await MoveMembersToPartialFile.MoveAsync(
40 csproj,
41 sourceCs,
42 line: 3,
43 column: 29,
44 memberNames: ["Alpha"],
45 outputFilePath: outCs,
46 apply: false,
47 addDependentUpon: false);
48
49 Assert.DoesNotContain("no members matched", result, StringComparison.OrdinalIgnoreCase);
50 Assert.Contains("# Members moved: 1", result, StringComparison.Ordinal);
51 Assert.Contains("Alpha", result, StringComparison.Ordinal);
52 Assert.Contains("## New file content", result, StringComparison.Ordinal);
53 }
54
55 [Fact]
56 public async Task MoveAsync_multi_variable_const_subset_returns_error()
57 {
58 var dir = Path.Combine(Path.GetTempPath(), "roslyn-mcp-move-const-" + Guid.NewGuid().ToString("N"));
59 Directory.CreateDirectory(dir);
60 var csproj = Path.Combine(dir, "MoveConst.csproj");
61 var sourceCs = Path.Combine(dir, "Multi.cs");
62 var outCs = Path.Combine(dir, "Multi.Out.cs");
63
64 File.WriteAllText(csproj, """
65 <Project Sdk="Microsoft.NET.Sdk">
66 <PropertyGroup>
67 <TargetFramework>net10.0</TargetFramework>
68 <ImplicitUsings>enable</ImplicitUsings>
69 <Nullable>enable</Nullable>
70 <RootNamespace>MoveConst</RootNamespace>
71 </PropertyGroup>
72 </Project>
73 """);
74
75 File.WriteAllText(sourceCs, """
76 namespace MoveConst;
77
78 public static partial class Multi
79 {
80 public const string X = "x", Y = "y";
81 }
82 """);
83
84 var result = await MoveMembersToPartialFile.MoveAsync(
85 csproj,
86 sourceCs,
87 line: 3,
88 column: 29,
89 memberNames: ["X"],
90 outputFilePath: outCs,
91 apply: false,
92 addDependentUpon: false);
93
94 Assert.Contains("cannot move a subset", result, StringComparison.OrdinalIgnoreCase);
95 }
96}
97
View only · write via MCP/CIDE