Skip to content

Commit d9e3b59

Browse files
committed
Add DotNetMcp.Tests with unit tests; include in solution and update CI to build/test solution
1 parent 6a0f1bf commit d9e3b59

File tree

5 files changed

+285
-2
lines changed

5 files changed

+285
-2
lines changed

.github/workflows/build.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ jobs:
2121
dotnet-version: "10.0.x"
2222

2323
- name: Restore dependencies
24-
run: dotnet restore DotNetMcp/DotNetMcp.csproj
24+
run: dotnet restore DotNetMcp.slnx
2525

2626
- name: Build
27-
run: dotnet build DotNetMcp/DotNetMcp.csproj --no-restore --configuration Release
27+
run: dotnet build DotNetMcp.slnx --no-restore --configuration Release
28+
29+
- name: Test
30+
run: dotnet test DotNetMcp.slnx --no-build --configuration Release --verbosity normal
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net9.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
<IsPackable>false</IsPackable>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<PackageReference Include="coverlet.collector" Version="6.0.2" />
12+
<PackageReference Include="FluentAssertions" Version="8.8.0" />
13+
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.10" />
14+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
15+
<PackageReference Include="xunit" Version="2.9.2" />
16+
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
17+
</ItemGroup>
18+
19+
<ItemGroup>
20+
<Using Include="Xunit" />
21+
</ItemGroup>
22+
23+
<ItemGroup>
24+
<ProjectReference Include="..\DotNetMcp\DotNetMcp.csproj" />
25+
</ItemGroup>
26+
27+
</Project>
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
using DotNetMcp;
2+
using FluentAssertions;
3+
using Xunit;
4+
5+
namespace DotNetMcp.Tests;
6+
7+
public class DotNetSdkConstantsTests
8+
{
9+
[Fact]
10+
public void TargetFrameworks_ContainsModernNetVersions()
11+
{
12+
// Assert
13+
DotNetSdkConstants.TargetFrameworks.Net90.Should().Be("net9.0");
14+
DotNetSdkConstants.TargetFrameworks.Net80.Should().Be("net8.0");
15+
DotNetSdkConstants.TargetFrameworks.Net70.Should().Be("net7.0");
16+
DotNetSdkConstants.TargetFrameworks.Net60.Should().Be("net6.0");
17+
DotNetSdkConstants.TargetFrameworks.Net50.Should().Be("net5.0");
18+
}
19+
20+
[Fact]
21+
public void TargetFrameworks_ContainsNetCoreVersions()
22+
{
23+
// Assert
24+
DotNetSdkConstants.TargetFrameworks.NetCoreApp31.Should().Be("netcoreapp3.1");
25+
DotNetSdkConstants.TargetFrameworks.NetCoreApp21.Should().Be("netcoreapp2.1");
26+
}
27+
28+
[Fact]
29+
public void TargetFrameworks_ContainsNetStandardVersions()
30+
{
31+
// Assert
32+
DotNetSdkConstants.TargetFrameworks.NetStandard21.Should().Be("netstandard2.1");
33+
DotNetSdkConstants.TargetFrameworks.NetStandard20.Should().Be("netstandard2.0");
34+
}
35+
36+
[Fact]
37+
public void Configurations_ContainsDebugAndRelease()
38+
{
39+
// Assert
40+
DotNetSdkConstants.Configurations.Debug.Should().Be("Debug");
41+
DotNetSdkConstants.Configurations.Release.Should().Be("Release");
42+
}
43+
44+
[Fact]
45+
public void RuntimeIdentifiers_ContainsCommonPlatforms()
46+
{
47+
// Assert
48+
DotNetSdkConstants.RuntimeIdentifiers.WinX64.Should().Be("win-x64");
49+
DotNetSdkConstants.RuntimeIdentifiers.LinuxX64.Should().Be("linux-x64");
50+
DotNetSdkConstants.RuntimeIdentifiers.OsxArm64.Should().Be("osx-arm64");
51+
}
52+
53+
[Fact]
54+
public void Templates_ContainsCommonTemplates()
55+
{
56+
// Assert
57+
DotNetSdkConstants.Templates.Console.Should().Be("console");
58+
DotNetSdkConstants.Templates.WebApi.Should().Be("webapi");
59+
DotNetSdkConstants.Templates.Blazor.Should().Be("blazor");
60+
DotNetSdkConstants.Templates.XUnit.Should().Be("xunit");
61+
}
62+
63+
[Fact]
64+
public void CommonPackages_ContainsWellKnownPackages()
65+
{
66+
// Assert
67+
DotNetSdkConstants.CommonPackages.NewtonsoftJson.Should().Be("Newtonsoft.Json");
68+
DotNetSdkConstants.CommonPackages.EFCore.Should().Be("Microsoft.EntityFrameworkCore");
69+
DotNetSdkConstants.CommonPackages.XUnitCore.Should().Be("xunit");
70+
}
71+
72+
[Fact]
73+
public void VerbosityLevels_ContainsAllLevels()
74+
{
75+
// Assert
76+
DotNetSdkConstants.VerbosityLevels.Quiet.Should().Be("quiet");
77+
DotNetSdkConstants.VerbosityLevels.Minimal.Should().Be("minimal");
78+
DotNetSdkConstants.VerbosityLevels.Normal.Should().Be("normal");
79+
DotNetSdkConstants.VerbosityLevels.Detailed.Should().Be("detailed");
80+
DotNetSdkConstants.VerbosityLevels.Diagnostic.Should().Be("diagnostic");
81+
}
82+
}
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
using DotNetMcp;
2+
using FluentAssertions;
3+
using Xunit;
4+
5+
namespace DotNetMcp.Tests;
6+
7+
public class FrameworkHelperTests
8+
{
9+
[Theory]
10+
[InlineData("net9.0", true)]
11+
[InlineData("net8.0", true)]
12+
[InlineData("net7.0", true)]
13+
[InlineData("netcoreapp3.1", true)]
14+
[InlineData("netstandard2.0", true)]
15+
[InlineData("netstandard2.1", true)]
16+
[InlineData("invalid", false)]
17+
[InlineData("", false)]
18+
public void IsValidFramework_ValidatesCorrectly(string tfm, bool expected)
19+
{
20+
// Act
21+
var result = FrameworkHelper.IsValidFramework(tfm);
22+
23+
// Assert
24+
result.Should().Be(expected);
25+
}
26+
27+
[Theory]
28+
[InlineData("net8.0", true)]
29+
[InlineData("net6.0", true)]
30+
[InlineData("netcoreapp3.1", true)]
31+
[InlineData("netcoreapp2.1", true)]
32+
[InlineData("net9.0", false)]
33+
[InlineData("net7.0", false)]
34+
[InlineData("net5.0", false)]
35+
public void IsLtsFramework_IdentifiesLtsCorrectly(string tfm, bool expected)
36+
{
37+
// Act
38+
var result = FrameworkHelper.IsLtsFramework(tfm);
39+
40+
// Assert
41+
result.Should().Be(expected);
42+
}
43+
44+
[Theory]
45+
[InlineData("net9.0", ".NET 9.0")]
46+
[InlineData("net8.0", ".NET 8.0 (LTS)")]
47+
[InlineData("net6.0", ".NET 6.0 (LTS)")]
48+
[InlineData("netcoreapp3.1", ".NET Core 3.1 (LTS)")]
49+
[InlineData("netstandard2.0", ".NET Standard 2.0")]
50+
public void GetFrameworkDescription_ReturnsCorrectDescription(string tfm, string expected)
51+
{
52+
// Act
53+
var result = FrameworkHelper.GetFrameworkDescription(tfm);
54+
55+
// Assert
56+
result.Should().Be(expected);
57+
}
58+
59+
[Fact]
60+
public void GetLatestRecommendedFramework_ReturnsNet90()
61+
{
62+
// Act
63+
var result = FrameworkHelper.GetLatestRecommendedFramework();
64+
65+
// Assert
66+
result.Should().Be("net9.0");
67+
}
68+
69+
[Fact]
70+
public void GetLatestLtsFramework_ReturnsNet80()
71+
{
72+
// Act
73+
var result = FrameworkHelper.GetLatestLtsFramework();
74+
75+
// Assert
76+
result.Should().Be("net8.0");
77+
}
78+
79+
[Theory]
80+
[InlineData("net9.0", true)]
81+
[InlineData("net8.0", true)]
82+
[InlineData("net5.0", true)]
83+
[InlineData("netcoreapp3.1", false)]
84+
[InlineData("netstandard2.0", false)]
85+
[InlineData("net48", false)]
86+
public void IsModernNet_ClassifiesCorrectly(string tfm, bool expected)
87+
{
88+
// Act
89+
var result = FrameworkHelper.IsModernNet(tfm);
90+
91+
// Assert
92+
result.Should().Be(expected);
93+
}
94+
95+
[Theory]
96+
[InlineData("netcoreapp3.1", true)]
97+
[InlineData("netcoreapp2.1", true)]
98+
[InlineData("net9.0", false)]
99+
[InlineData("netstandard2.0", false)]
100+
public void IsNetCore_ClassifiesCorrectly(string tfm, bool expected)
101+
{
102+
// Act
103+
var result = FrameworkHelper.IsNetCore(tfm);
104+
105+
// Assert
106+
result.Should().Be(expected);
107+
}
108+
109+
[Theory]
110+
[InlineData("net48", true)]
111+
[InlineData("net472", true)]
112+
[InlineData("net9.0", false)]
113+
[InlineData("netcoreapp3.1", false)]
114+
public void IsNetFramework_ClassifiesCorrectly(string tfm, bool expected)
115+
{
116+
// Act
117+
var result = FrameworkHelper.IsNetFramework(tfm);
118+
119+
// Assert
120+
result.Should().Be(expected);
121+
}
122+
123+
[Theory]
124+
[InlineData("netstandard2.1", true)]
125+
[InlineData("netstandard2.0", true)]
126+
[InlineData("net9.0", false)]
127+
[InlineData("netcoreapp3.1", false)]
128+
public void IsNetStandard_ClassifiesCorrectly(string tfm, bool expected)
129+
{
130+
// Act
131+
var result = FrameworkHelper.IsNetStandard(tfm);
132+
133+
// Assert
134+
result.Should().Be(expected);
135+
}
136+
137+
[Fact]
138+
public void GetSupportedModernFrameworks_ReturnsExpectedCount()
139+
{
140+
// Act
141+
var result = FrameworkHelper.GetSupportedModernFrameworks();
142+
143+
// Assert
144+
result.Count.Should().BeGreaterThanOrEqualTo(5);
145+
result.Should().Contain("net9.0");
146+
result.Should().Contain("net8.0");
147+
}
148+
149+
[Fact]
150+
public void GetSupportedNetCoreFrameworks_ReturnsExpectedFrameworks()
151+
{
152+
// Act
153+
var result = FrameworkHelper.GetSupportedNetCoreFrameworks();
154+
155+
// Assert
156+
result.Should().Contain("netcoreapp3.1");
157+
result.Should().Contain("netcoreapp2.1");
158+
}
159+
160+
[Fact]
161+
public void GetSupportedNetStandardFrameworks_ReturnsExpectedFrameworks()
162+
{
163+
// Act
164+
var result = FrameworkHelper.GetSupportedNetStandardFrameworks();
165+
166+
// Assert
167+
result.Should().Contain("netstandard2.1");
168+
result.Should().Contain("netstandard2.0");
169+
}
170+
}

DotNetMcp.slnx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
<Solution>
22
<Project Path="DotNetMcp/DotNetMcp.csproj" />
3+
<Project Path="DotNetMcp.Tests/DotNetMcp.Tests.csproj" />
34
</Solution>

0 commit comments

Comments
 (0)