diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 5d483e2..db3da23 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -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
diff --git a/Exercism.Tests.sln b/Exercism.Tests.sln
index a06d260..b50abae 100644
--- a/Exercism.Tests.sln
+++ b/Exercism.Tests.sln
@@ -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
@@ -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
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
new file mode 100644
index 0000000..59e2887
--- /dev/null
+++ b/src/Directory.Build.props
@@ -0,0 +1,10 @@
+
+
+ Erik Schierboom
+ Exercism
+ Exercism;Testing
+ AGPL-3.0-or-later
+ icon.png
+ https://github.com/exercism/dotnet-tests
+
+
diff --git a/src/Exercism.Tests.xunit.v3/Exercism.Tests.xunit.v3.csproj b/src/Exercism.Tests.xunit.v3/Exercism.Tests.xunit.v3.csproj
new file mode 100644
index 0000000..e287baa
--- /dev/null
+++ b/src/Exercism.Tests.xunit.v3/Exercism.Tests.xunit.v3.csproj
@@ -0,0 +1,25 @@
+
+
+
+ net6.0
+ enable
+ enable
+ Exercism.Tests
+
+
+
+ Exercism.Tests.xunit.v3
+ 0.1.0-beta1
+ Exercism Testing using xUnit v3
+ This library adds Exercism-specific functionality related to testing solutions using xUnit v3.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Exercism.Tests.xunit.v3/TaskAttribute.cs b/src/Exercism.Tests.xunit.v3/TaskAttribute.cs
new file mode 100644
index 0000000..10073fd
--- /dev/null
+++ b/src/Exercism.Tests.xunit.v3/TaskAttribute.cs
@@ -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;
+ }
+}
diff --git a/src/Exercism.Tests.xunit.v3/UseCultureAttribute.cs b/src/Exercism.Tests.xunit.v3/UseCultureAttribute.cs
new file mode 100644
index 0000000..43d7d23
--- /dev/null
+++ b/src/Exercism.Tests.xunit.v3/UseCultureAttribute.cs
@@ -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!;
+ }
+}
\ No newline at end of file
diff --git a/src/Exercism.Tests.xunit.v3/images/icon.png b/src/Exercism.Tests.xunit.v3/images/icon.png
new file mode 100644
index 0000000..e72ba28
Binary files /dev/null and b/src/Exercism.Tests.xunit.v3/images/icon.png differ
diff --git a/src/Exercism.Tests.xunit.v3/packages.lock.json b/src/Exercism.Tests.xunit.v3/packages.lock.json
new file mode 100644
index 0000000..9bbdc85
--- /dev/null
+++ b/src/Exercism.Tests.xunit.v3/packages.lock.json
@@ -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"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Exercism.Tests/Exercism.Tests.csproj b/src/Exercism.Tests/Exercism.Tests.csproj
index b3836ff..3302925 100644
--- a/src/Exercism.Tests/Exercism.Tests.csproj
+++ b/src/Exercism.Tests/Exercism.Tests.csproj
@@ -5,13 +5,7 @@
Exercism.Tests
0.1.0-beta1
Exercism Testing
- This library adds Exercism-specific functionality related to testing solutions.
- Erik Schierboom
- Exercism
- Exercism;Testing
- AGPL-3.0-or-later
- icon.png
- https://github.com/exercism/dotnet-tests
+ This library adds Exercism-specific functionality related to testing solutions.
diff --git a/tests/Exercism.Tests.Tests/UseCultureAttributeTests.cs b/tests/Exercism.Tests.Tests/UseCultureAttributeTests.cs
index a92a2e2..5c33373 100644
--- a/tests/Exercism.Tests.Tests/UseCultureAttributeTests.cs
+++ b/tests/Exercism.Tests.Tests/UseCultureAttributeTests.cs
@@ -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]
diff --git a/tests/Exercism.Tests.xunit.v3.Tests/Exercism.Tests.xunit.v3.Tests.csproj b/tests/Exercism.Tests.xunit.v3.Tests/Exercism.Tests.xunit.v3.Tests.csproj
new file mode 100644
index 0000000..04d42b4
--- /dev/null
+++ b/tests/Exercism.Tests.xunit.v3.Tests/Exercism.Tests.xunit.v3.Tests.csproj
@@ -0,0 +1,29 @@
+
+
+
+ enable
+ enable
+ Exe
+ Exercism.Tests.xunit.v3.Tests
+ net6.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/Exercism.Tests.xunit.v3.Tests/TaskAttributeTests.cs b/tests/Exercism.Tests.xunit.v3.Tests/TaskAttributeTests.cs
new file mode 100644
index 0000000..a1b5844
--- /dev/null
+++ b/tests/Exercism.Tests.xunit.v3.Tests/TaskAttributeTests.cs
@@ -0,0 +1,27 @@
+namespace Exercism.Tests.xunit.v3.Tests;
+
+public class TaskAttributeTests
+{
+ [Fact]
+ public void CanBeUsedOnMethod()
+ {
+ [Task(1)]
+ string TestMethod() => "One";
+ }
+
+ [Fact]
+ public void ThrowsArgumentOutOfRangeExceptionWhenNumberIsZero()
+ {
+ Assert.Throws(() => new TaskAttribute(0));
+ }
+
+ [Theory]
+ [InlineData(-1)]
+ [InlineData(-2)]
+ [InlineData(-82)]
+ [InlineData(-123_832_991)]
+ public void ThrowsArgumentOutOfRangeExceptionWhenNumberIsNegative(int number)
+ {
+ Assert.Throws(() => new TaskAttribute(number));
+ }
+}
\ No newline at end of file
diff --git a/tests/Exercism.Tests.xunit.v3.Tests/UseCultureAttributeTests.cs b/tests/Exercism.Tests.xunit.v3.Tests/UseCultureAttributeTests.cs
new file mode 100644
index 0000000..84c4165
--- /dev/null
+++ b/tests/Exercism.Tests.xunit.v3.Tests/UseCultureAttributeTests.cs
@@ -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);
+ }
+}
\ No newline at end of file
diff --git a/tests/Exercism.Tests.xunit.v3.Tests/packages.lock.json b/tests/Exercism.Tests.xunit.v3.Tests/packages.lock.json
new file mode 100644
index 0000000..6c48094
--- /dev/null
+++ b/tests/Exercism.Tests.xunit.v3.Tests/packages.lock.json
@@ -0,0 +1,175 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net6.0": {
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[17.13.0, )",
+ "resolved": "17.13.0",
+ "contentHash": "W19wCPizaIC9Zh47w8wWI/yxuqR7/dtABwOrc8r2jX/8mUNxM2vw4fXDh+DJTeogxV+KzKwg5jNNGQVwf3LXyA==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "17.13.0",
+ "Microsoft.TestPlatform.TestHost": "17.13.0"
+ }
+ },
+ "xunit.runner.visualstudio": {
+ "type": "Direct",
+ "requested": "[3.0.2, )",
+ "resolved": "3.0.2",
+ "contentHash": "oXbusR6iPq0xlqoikjdLvzh+wQDkMv9If58myz9MEzldS4nIcp442Btgs2sWbYWV+caEluMe2pQCZ0hUZgPiow=="
+ },
+ "xunit.v3": {
+ "type": "Direct",
+ "requested": "[1.1.0, )",
+ "resolved": "1.1.0",
+ "contentHash": "1ckSz5GVswlM9TCk5bGdHOjnYwqAWjkeqxckoHawQIA8sTeuN+RCBUypCi5A/Um0XlczRx5TjAK5W6BbN0HLcQ==",
+ "dependencies": {
+ "xunit.analyzers": "1.20.0",
+ "xunit.v3.assert": "[1.1.0]",
+ "xunit.v3.core": "[1.1.0]"
+ }
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg=="
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "17.13.0",
+ "contentHash": "9LIUy0y+DvUmEPtbRDw6Bay3rzwqFV8P4efTrK4CZhQle3M/QwLPjISghfcolmEGAPWxuJi6m98ZEfk4VR4Lfg=="
+ },
+ "Microsoft.Testing.Extensions.TrxReport.Abstractions": {
+ "type": "Transitive",
+ "resolved": "1.5.3",
+ "contentHash": "h34zKNpGyni66VH738mRHeXSnf3klSShUdavUWNhSfWICUUi5aXeI0LBvoX/ad93N0+9xBDU3Fyi6WfxrwKQGw==",
+ "dependencies": {
+ "Microsoft.Testing.Platform": "1.5.3"
+ }
+ },
+ "Microsoft.Testing.Platform": {
+ "type": "Transitive",
+ "resolved": "1.5.3",
+ "contentHash": "WqJydnJ99dEKtquR9HwINz104ehWJKTXbQQrydGatlLRw14bmsx0pa8+E6KUXMYXZAimN0swWlDmcJGjjW4TIg=="
+ },
+ "Microsoft.Testing.Platform.MSBuild": {
+ "type": "Transitive",
+ "resolved": "1.5.3",
+ "contentHash": "bOtpRMSPeT5YLQo+NNY8EtdNTphAUcmALjW4ABU7P0rb6yR2XAZau3TzNieLmR3lRuwudguWzzBhgcLRXwZh0A==",
+ "dependencies": {
+ "Microsoft.Testing.Platform": "1.5.3"
+ }
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "17.13.0",
+ "contentHash": "bt0E0Dx+iqW97o4A59RCmUmz/5NarJ7LRL+jXbSHod72ibL5XdNm1Ke+UO5tFhBG4VwHLcSjqq9BUSblGNWamw==",
+ "dependencies": {
+ "System.Reflection.Metadata": "1.6.0"
+ }
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "17.13.0",
+ "contentHash": "9GGw08Dc3AXspjekdyTdZ/wYWFlxbgcF0s7BKxzVX+hzAwpifDOdxM+ceVaaJSQOwqt3jtuNlHn3XTpKUS9x9Q==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "17.13.0",
+ "Newtonsoft.Json": "13.0.1"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.1",
+ "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A=="
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.6.0",
+ "contentHash": "OEkbBQoklHngJ8UD8ez2AERSk2g+/qpAaSWWCBFbpH727HxDq5ydVkuncBaKcKfwRqXGWx64dS6G1SUScMsitg=="
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "1.6.0",
+ "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "xunit.analyzers": {
+ "type": "Transitive",
+ "resolved": "1.20.0",
+ "contentHash": "HElev2E9vFbPxwKRQtpCSSzLOu8M/N9EWBCB37v7SRx6z4Lbj19FxfLEig3v9jiI6s4b0l2uena91nEsTWl9jA=="
+ },
+ "xunit.v3.assert": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "4D+eM08ImfhA+zLbRzi8HA4qsT98zDxgaCD7vCg8yFesokKsgSsqWsAmImHFjVymGVhVS7WFGb19d6v1k9i0xQ==",
+ "dependencies": {
+ "System.Collections.Immutable": "8.0.0",
+ "System.Memory": "4.6.0"
+ }
+ },
+ "xunit.v3.common": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "Cq55z8pC7fOkfj+3TB/YQ6OW96qWqxKiMd15CtkIl37VtV9EsiUL4B4HsR6VLJCzkk7cBiXQ1ABVIcp3TCm6HQ==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "6.0.0"
+ }
+ },
+ "xunit.v3.core": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "kXP/1d3jnQ2m4skcdM3gSMmubI6P747D6KVswzeedysgFkLj2xJlfo7p7slsmtEnp8BZb8X6D92Hssd/UtVPMw==",
+ "dependencies": {
+ "Microsoft.Testing.Platform.MSBuild": "1.5.3",
+ "xunit.v3.extensibility.core": "[1.1.0]",
+ "xunit.v3.runner.inproc.console": "[1.1.0]"
+ }
+ },
+ "xunit.v3.extensibility.core": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "AeQbbYN001x0c+B9pqwml6jZPovHz8O/sOp7jmrjz90rUzz/QPal12SlHLKYszR44CMnW4MsDam3RYT5pkYUxw==",
+ "dependencies": {
+ "xunit.v3.common": "[1.1.0]"
+ }
+ },
+ "xunit.v3.runner.common": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "Q81J0VPuu8fpF+/1CIjThqKKUjnqh0TQrLlD0iORkF75KdsOV+iGWT8c3AVuY96kDoxXxkTf0ZvJsK6o9osc1A==",
+ "dependencies": {
+ "xunit.v3.common": "[1.1.0]"
+ }
+ },
+ "xunit.v3.runner.inproc.console": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "lX/4TwIJe9ysCd5dqLk/Doq8ieYaZGivgf95xR59wRuSV+nHzHnyhpjXfaPUp8nkncUH1rOmJ85o1KebipisXQ==",
+ "dependencies": {
+ "Microsoft.Testing.Extensions.TrxReport.Abstractions": "1.5.3",
+ "Microsoft.Testing.Platform": "1.5.3",
+ "xunit.v3.extensibility.core": "[1.1.0]",
+ "xunit.v3.runner.common": "[1.1.0]"
+ }
+ },
+ "exercism.tests.xunit.v3": {
+ "type": "Project",
+ "dependencies": {
+ "xunit.v3.extensibility.core": "[1.1.0, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/Exercism.Tests.xunit.v3.Tests/xunit.runner.json b/tests/Exercism.Tests.xunit.v3.Tests/xunit.runner.json
new file mode 100644
index 0000000..86c7ea0
--- /dev/null
+++ b/tests/Exercism.Tests.xunit.v3.Tests/xunit.runner.json
@@ -0,0 +1,3 @@
+{
+ "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json"
+}