Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,8 @@ jobs:
PROJECT_FILE_PATH: src/Exercism.Tests/Exercism.Tests.csproj
NUGET_KEY: ${{ secrets.NUGET_API_KEY }}
INCLUDE_SYMBOLS: true
- uses: rohith/publish-nuget@c12b8546b67672ee38ac87bea491ac94a587f7cc # 2.5.5
with:
PROJECT_FILE_PATH: src/Exercism.Tests.xunit.v3/Exercism.Tests.xunit.v3.csproj
NUGET_KEY: ${{ secrets.NUGET_API_KEY }}
INCLUDE_SYMBOLS: true
14 changes: 14 additions & 0 deletions Exercism.Tests.sln
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{14AF2F5A
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Exercism.Tests.Tests", "tests\Exercism.Tests.Tests\Exercism.Tests.Tests.csproj", "{900E6F72-8D50-466D-A6C4-DA9714F4048C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Exercism.Tests.xunit.v3", "src\Exercism.Tests.xunit.v3\Exercism.Tests.xunit.v3.csproj", "{90C6D541-8975-4176-A164-3C119CDE56C1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Exercism.Tests.xunit.v3.Tests", "tests\Exercism.Tests.xunit.v3.Tests\Exercism.Tests.xunit.v3.Tests.csproj", "{B3A9A059-8D28-4841-9CF8-323EFBFF41C9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -28,9 +32,19 @@ Global
{900E6F72-8D50-466D-A6C4-DA9714F4048C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{900E6F72-8D50-466D-A6C4-DA9714F4048C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{900E6F72-8D50-466D-A6C4-DA9714F4048C}.Release|Any CPU.Build.0 = Release|Any CPU
{90C6D541-8975-4176-A164-3C119CDE56C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{90C6D541-8975-4176-A164-3C119CDE56C1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90C6D541-8975-4176-A164-3C119CDE56C1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{90C6D541-8975-4176-A164-3C119CDE56C1}.Release|Any CPU.Build.0 = Release|Any CPU
{B3A9A059-8D28-4841-9CF8-323EFBFF41C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B3A9A059-8D28-4841-9CF8-323EFBFF41C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B3A9A059-8D28-4841-9CF8-323EFBFF41C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B3A9A059-8D28-4841-9CF8-323EFBFF41C9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{3FD7D5E5-05AC-4B9D-8062-63430962A4BE} = {2DA5F395-76DA-446D-99AC-4F56ED0AFE01}
{900E6F72-8D50-466D-A6C4-DA9714F4048C} = {14AF2F5A-6AB7-480D-9790-7A00C9A72C20}
{90C6D541-8975-4176-A164-3C119CDE56C1} = {2DA5F395-76DA-446D-99AC-4F56ED0AFE01}
{B3A9A059-8D28-4841-9CF8-323EFBFF41C9} = {14AF2F5A-6AB7-480D-9790-7A00C9A72C20}
EndGlobalSection
EndGlobal
10 changes: 10 additions & 0 deletions src/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<Project>
<PropertyGroup>
<Authors>Erik Schierboom</Authors>
<Company>Exercism</Company>
<PackageTags>Exercism;Testing</PackageTags>
<PackageLicenseExpression>AGPL-3.0-or-later</PackageLicenseExpression>
<PackageIcon>icon.png</PackageIcon>
<RepositoryUrl>https://github.com/exercism/dotnet-tests</RepositoryUrl>
</PropertyGroup>
</Project>
25 changes: 25 additions & 0 deletions src/Exercism.Tests.xunit.v3/Exercism.Tests.xunit.v3.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>Exercism.Tests</RootNamespace>
</PropertyGroup>

<PropertyGroup>
<PackageId>Exercism.Tests.xunit.v3</PackageId>
<Version>0.1.0-beta1</Version>
<Title>Exercism Testing using xUnit v3</Title>
<Description>This library adds Exercism-specific functionality related to testing solutions using xUnit v3.</Description>
</PropertyGroup>

<ItemGroup>
<None Include="images\icon.png" Pack="true" PackagePath="icon.png" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="xunit.v3.extensibility.core" Version="1.1.0" />
</ItemGroup>

</Project>
14 changes: 14 additions & 0 deletions src/Exercism.Tests.xunit.v3/TaskAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace Exercism.Tests;

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class TaskAttribute : Attribute
{
public int Number { get; }

public TaskAttribute(int number)
{
if (number <= 0) throw new ArgumentOutOfRangeException(nameof(number), number, "Number must be greater than zero");

Number = number;
}
}
51 changes: 51 additions & 0 deletions src/Exercism.Tests.xunit.v3/UseCultureAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
using System.Globalization;
using System.Reflection;
using Xunit.v3;

namespace Exercism.Tests;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class UseCultureAttribute : BeforeAfterTestAttribute
{
private readonly CultureInfo _culture;
private readonly CultureInfo _uiCulture;

private CultureInfo? _originalCulture;
private CultureInfo? _originalUiCulture;

public UseCultureAttribute()
: this(CultureInfo.InvariantCulture, CultureInfo.InvariantCulture)
{
}

public UseCultureAttribute(string culture)
: this(culture, culture)
{
}

public UseCultureAttribute(string culture, string uiCulture)
: this(new CultureInfo(culture, false), new CultureInfo(uiCulture, false))
{
}

public UseCultureAttribute(CultureInfo culture, CultureInfo uiCulture)
{
_culture = culture;
_uiCulture = uiCulture;
}

public override void Before(MethodInfo methodUnderTest, IXunitTest test)
{
_originalCulture = CultureInfo.CurrentCulture;
_originalUiCulture = CultureInfo.CurrentUICulture;

CultureInfo.CurrentCulture = _culture;
CultureInfo.CurrentUICulture = _uiCulture;
}

public override void After(MethodInfo methodUnderTest, IXunitTest test)
{
CultureInfo.CurrentCulture = _originalCulture!;
CultureInfo.CurrentUICulture = _originalUiCulture!;
}
}
Binary file added src/Exercism.Tests.xunit.v3/images/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
29 changes: 29 additions & 0 deletions src/Exercism.Tests.xunit.v3/packages.lock.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"version": 1,
"dependencies": {
"net6.0": {
"xunit.v3.extensibility.core": {
"type": "Direct",
"requested": "[1.1.0, )",
"resolved": "1.1.0",
"contentHash": "AeQbbYN001x0c+B9pqwml6jZPovHz8O/sOp7jmrjz90rUzz/QPal12SlHLKYszR44CMnW4MsDam3RYT5pkYUxw==",
"dependencies": {
"xunit.v3.common": "[1.1.0]"
}
},
"Microsoft.Bcl.AsyncInterfaces": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg=="
},
"xunit.v3.common": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "Cq55z8pC7fOkfj+3TB/YQ6OW96qWqxKiMd15CtkIl37VtV9EsiUL4B4HsR6VLJCzkk7cBiXQ1ABVIcp3TCm6HQ==",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "6.0.0"
}
}
}
}
}
8 changes: 1 addition & 7 deletions src/Exercism.Tests/Exercism.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,7 @@
<PackageId>Exercism.Tests</PackageId>
<Version>0.1.0-beta1</Version>
<Title>Exercism Testing</Title>
<Description>This library adds Exercism-specific functionality related to testing solutions.</Description>
<Authors>Erik Schierboom</Authors>
<Company>Exercism</Company>
<PackageTags>Exercism;Testing</PackageTags>
<PackageLicenseExpression>AGPL-3.0-or-later</PackageLicenseExpression>
<PackageIcon>icon.png</PackageIcon>
<RepositoryUrl>https://github.com/exercism/dotnet-tests</RepositoryUrl>
<Description>This library adds Exercism-specific functionality related to testing solutions.</Description>
</PropertyGroup>

<ItemGroup>
Expand Down
4 changes: 2 additions & 2 deletions tests/Exercism.Tests.Tests/UseCultureAttributeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ public void SpecifyCultureAndUiCulture()
[UseCulture]
public void DontSpecifyCulture()
{
Assert.Equal(CultureInfo.InvariantCulture, CultureInfo.CurrentCulture);
Assert.Equal(CultureInfo.InvariantCulture, CultureInfo.CurrentUICulture);
Assert.Equal(CultureInfo.InvariantCulture.Name, CultureInfo.CurrentCulture.Name);
Assert.Equal(CultureInfo.InvariantCulture.Name, CultureInfo.CurrentUICulture.Name);
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<OutputType>Exe</OutputType>
<RootNamespace>Exercism.Tests.xunit.v3.Tests</RootNamespace>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<Content Include="xunit.runner.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="xunit.v3" Version="1.1.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.2" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\Exercism.Tests.xunit.v3\Exercism.Tests.xunit.v3.csproj" />
</ItemGroup>

</Project>
27 changes: 27 additions & 0 deletions tests/Exercism.Tests.xunit.v3.Tests/TaskAttributeTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
namespace Exercism.Tests.xunit.v3.Tests;

public class TaskAttributeTests
{
[Fact]
public void CanBeUsedOnMethod()
{
[Task(1)]
string TestMethod() => "One";

Check warning on line 9 in tests/Exercism.Tests.xunit.v3.Tests/TaskAttributeTests.cs

View workflow job for this annotation

GitHub Actions / Run tests (ubuntu-20.04)

The local function 'TestMethod' is declared but never used

Check warning on line 9 in tests/Exercism.Tests.xunit.v3.Tests/TaskAttributeTests.cs

View workflow job for this annotation

GitHub Actions / Run tests (windows-2022)

The local function 'TestMethod' is declared but never used

Check warning on line 9 in tests/Exercism.Tests.xunit.v3.Tests/TaskAttributeTests.cs

View workflow job for this annotation

GitHub Actions / Run tests (macos-13)

The local function 'TestMethod' is declared but never used
}

[Fact]
public void ThrowsArgumentOutOfRangeExceptionWhenNumberIsZero()
{
Assert.Throws<ArgumentOutOfRangeException>(() => new TaskAttribute(0));
}

[Theory]
[InlineData(-1)]
[InlineData(-2)]
[InlineData(-82)]
[InlineData(-123_832_991)]
public void ThrowsArgumentOutOfRangeExceptionWhenNumberIsNegative(int number)
{
Assert.Throws<ArgumentOutOfRangeException>(() => new TaskAttribute(number));
}
}
39 changes: 39 additions & 0 deletions tests/Exercism.Tests.xunit.v3.Tests/UseCultureAttributeTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using System.Globalization;

namespace Exercism.Tests.xunit.v3.Tests;

// Uncomment once xUnit issue is fixed
// [UseCulture("en-US")]
public class UseCultureAttributeTests
{
[Fact]
[UseCulture("nl-NL")]
public void SpecifyCulture()
{
Assert.Equal("nl-NL", CultureInfo.CurrentCulture.Name);
Assert.Equal("nl-NL", CultureInfo.CurrentUICulture.Name);
}

[Fact]
[UseCulture("nl-NL", "nl-BE")]
public void SpecifyCultureAndUiCulture()
{
Assert.Equal("nl-NL", CultureInfo.CurrentCulture.Name);
Assert.Equal("nl-BE", CultureInfo.CurrentUICulture.Name);
}

[Fact]
[UseCulture]
public void DontSpecifyCulture()
{
Assert.Equal(CultureInfo.InvariantCulture.Name, CultureInfo.CurrentCulture.Name);
Assert.Equal(CultureInfo.InvariantCulture.Name, CultureInfo.CurrentUICulture.Name);
}

[Fact(Skip = "Unskip once xUnit issue is fixed")]
public void InheritCultureFromClass()
{
Assert.Equal("en-US", CultureInfo.CurrentCulture.Name);
Assert.Equal("en-US", CultureInfo.CurrentUICulture.Name);
}
}
Loading
Loading