diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c782b131d..bc33a26ac 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -50,15 +50,12 @@ jobs:
build_params: ${{ steps.versions.outputs.build_params }}
test_params: ${{ steps.versions.outputs.test_params }}
specs_filter: ${{ steps.versions.outputs.specs_filter }}
+ gh_logger_settings: ${{ steps.versions.outputs.gh_logger_settings }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- - name: Setup .NET
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: 8.0.x
- id: versions
name: Calculate versions
shell: pwsh
@@ -115,22 +112,26 @@ jobs:
}
Write-Output "main_build_params=$mainBuildParams" >> $env:GITHUB_OUTPUT
-
- $testParams = "--no-build --verbosity normal -c $productConfig"
+ $gitHubActionsLoggerSettings = '"GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true;annotations.titleFormat=[@traits.Category] @test;annotations.messageFormat=@error\n@trace"'
+ $testParams = "--no-build --verbosity normal -c $productConfig --logger $gitHubActionsLoggerSettings -- RunConfiguration.CollectSourceInformation=true"
Write-Output "test_params=$testParams" >> $env:GITHUB_OUTPUT
Write-Output "Test Params: $testParams"
+
- name: Restore dependencies
run: dotnet restore
+ - name: Install Test Report Dependencies
+ run: |
+ dotnet add ./Tests/Reqnroll.RuntimeTests/Reqnroll.RuntimeTests.csproj package GitHubActionsTestLogger
+ dotnet add ./Tests/Reqnroll.PluginTests/Reqnroll.PluginTests.csproj package GitHubActionsTestLogger
+ dotnet add ./Tests/Reqnroll.GeneratorTests/Reqnroll.GeneratorTests.csproj package GitHubActionsTestLogger
- name: Build
run: dotnet build --no-restore ${{ steps.versions.outputs.main_build_params }}
- name: Runtime Tests
- run: dotnet test ./Tests/Reqnroll.RuntimeTests/Reqnroll.RuntimeTests.csproj ${{ steps.versions.outputs.test_params }} -f net6.0
- - name: Plugin Tests
- run: dotnet test ./Tests/Reqnroll.PluginTests/Reqnroll.PluginTests.csproj ${{ steps.versions.outputs.test_params }} -f net6.0
+ run: dotnet test ./Tests/Reqnroll.RuntimeTests/Reqnroll.RuntimeTests.csproj --logger "trx;LogFileName=runtimetests-results.trx" ${{ steps.versions.outputs.test_params }}
- name: Generator Tests
- run: dotnet test ./Tests/Reqnroll.GeneratorTests/Reqnroll.GeneratorTests.csproj ${{ steps.versions.outputs.test_params }} -f net6.0
- - name: ExternalData Plugin Tests
- run: dotnet test ./Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests.csproj ${{ steps.versions.outputs.test_params }} -f net6.0
+ run: dotnet test ./Tests/Reqnroll.GeneratorTests/Reqnroll.GeneratorTests.csproj --logger "trx;LogFileName=generatortests-results.trx" ${{ steps.versions.outputs.test_params }}
+ - name: Plugin Tests
+ run: dotnet test ./Tests/Reqnroll.PluginTests/Reqnroll.PluginTests.csproj --logger "trx;LogFileName=plugintests-results.trx" ${{ steps.versions.outputs.test_params }}
- name: Upload packages
uses: actions/upload-artifact@v4
with:
@@ -143,43 +144,7 @@ jobs:
name: build-trx
path: "**/*.trx"
- specs-xunit:
- runs-on: ubuntu-latest
- needs: build
-
- steps:
- - uses: actions/checkout@v4
- with:
- fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- - name: Setup .NET
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: |
- 6.0.x
- - name: Restore dependencies
- run: dotnet restore
- - name: Build
- run: dotnet build --no-restore ${{ needs.build.outputs.build_params }}
- - name: Set .NET 6 SDK
- run: dotnet new globaljson --sdk-version 6.0.418
- - name: xUnit Specs
- shell: pwsh
- run: dotnet test ./Tests/Reqnroll.Specs/Reqnroll.Specs.csproj ${{ needs.build.outputs.test_params }} -f net6.0 --filter "Category=xUnit&Category=Net60&Category!=requiresMsBuild${{ needs.build.outputs.specs_filter }}" --logger "trx;LogFileName=specs-xunit-results.trx"
- - name: Publish xUnit Test Results
- uses: EnricoMi/publish-unit-test-result-action@v2
- if: always()
- with:
- check_name: xUnit Specs
- files: "**/specs-xunit-results.trx"
- comment_mode: off
- - name: Upload TRX files
- uses: actions/upload-artifact@v4
- if: always()
- with:
- name: specs-xunit-trx
- path: "**/specs-xunit-results.trx"
-
- specs-nunit:
+ specs:
runs-on: ubuntu-latest
needs: build
@@ -187,69 +152,22 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- - name: Setup .NET
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: |
- 6.0.x
- - name: Restore dependencies
- run: dotnet restore
- - name: Build
- run: dotnet build --no-restore ${{ needs.build.outputs.build_params }}
- - name: Set .NET 6 SDK
- run: dotnet new globaljson --sdk-version 6.0.418
- - name: NUnit Specs
- shell: pwsh
- run: dotnet test ./Tests/Reqnroll.Specs/Reqnroll.Specs.csproj ${{ needs.build.outputs.test_params }} -f net6.0 --filter "Category=NUnit3&Category=Net60&Category!=requiresMsBuild${{ needs.build.outputs.specs_filter }}" --logger "trx;LogFileName=specs-nunit-results.trx"
- - name: Publish NUnit Test Results
- uses: EnricoMi/publish-unit-test-result-action@v2
- if: always()
- with:
- check_name: NUnit Specs
- files: "**/specs-nunit-results.trx"
- comment_mode: off
- - name: Upload TRX files
- uses: actions/upload-artifact@v4
- if: always()
- with:
- name: specs-nunit-trx
- path: "**/specs-nunit-results.trx"
-
- specs-mstest:
- runs-on: ubuntu-latest
- needs: build
-
- steps:
- - uses: actions/checkout@v4
- with:
- fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- - name: Setup .NET
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: |
- 6.0.x
- name: Restore dependencies
run: dotnet restore
+ - name: Install Test Report Dependencies
+ run: |
+ dotnet add ./Tests/Reqnroll.Specs/Reqnroll.Specs.csproj package GitHubActionsTestLogger
- name: Build
run: dotnet build --no-restore ${{ needs.build.outputs.build_params }}
- - name: Set .NET 6 SDK
- run: dotnet new globaljson --sdk-version 6.0.418
- - name: MsTest Specs
+ - name: Specs
shell: pwsh
- run: dotnet test ./Tests/Reqnroll.Specs/Reqnroll.Specs.csproj ${{ needs.build.outputs.test_params }} -f net6.0 --filter "Category=MsTest&Category=Net60&Category!=requiresMsBuild${{ needs.build.outputs.specs_filter }}" --logger "trx;LogFileName=specs-mstest-results.trx"
- - name: Publish MSTest Test Results
- uses: EnricoMi/publish-unit-test-result-action@v2
- if: always()
- with:
- check_name: MSTest Specs
- files: "**/specs-mstest-results.trx"
- comment_mode: off
+ run: dotnet test ./Tests/Reqnroll.Specs/Reqnroll.Specs.csproj --filter "Category!=quarantaine{{ needs.build.outputs.specs_filter }}" --logger "trx;LogFileName=specs-results.trx" ${{ needs.build.outputs.test_params }}
- name: Upload TRX files
uses: actions/upload-artifact@v4
if: always()
with:
- name: specs-mstest-trx
- path: "**/specs-mstest-results.trx"
+ name: specs-trx
+ path: "**/specs-results.trx"
system-tests-windows:
runs-on: windows-latest
@@ -272,9 +190,7 @@ jobs:
run: dotnet build --no-restore ${{ needs.build.outputs.build_params }}
- name: System Tests
shell: pwsh
- run: |
- $gitHubActionsLoggerSettings = '"GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true;annotations.titleFormat=[@traits.Category] @test;annotations.messageFormat=@error\n@trace"'
- dotnet test ./Tests/Reqnroll.SystemTests/Reqnroll.SystemTests.csproj ${{ needs.build.outputs.test_params }} --logger "trx;LogFileName=systemtests-windows-results.trx" --logger $gitHubActionsLoggerSettings -- RunConfiguration.CollectSourceInformation=true
+ run: dotnet test ./Tests/Reqnroll.SystemTests/Reqnroll.SystemTests.csproj --logger "trx;LogFileName=systemtests-windows-results.trx" ${{ needs.build.outputs.test_params }}
- name: Upload Test Result TRX Files
uses: actions/upload-artifact@v4
if: always()
@@ -304,9 +220,7 @@ jobs:
run: dotnet build --no-restore ${{ needs.build.outputs.build_params }}
- name: System Tests
shell: pwsh
- run: |
- $gitHubActionsLoggerSettings = '"GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true;annotations.titleFormat=[@traits.Category] @test;annotations.messageFormat=@error\n@trace"'
- dotnet test ./Tests/Reqnroll.SystemTests/Reqnroll.SystemTests.csproj ${{ needs.build.outputs.test_params }} --filter "TestCategory!=MsBuild&TestCategory!=Net481" --logger "trx;LogFileName=systemtests-linux-results.trx" --logger $gitHubActionsLoggerSettings -- RunConfiguration.CollectSourceInformation=true
+ run: dotnet test ./Tests/Reqnroll.SystemTests/Reqnroll.SystemTests.csproj --filter "TestCategory!=MsBuild&TestCategory!=Net481" --logger "trx;LogFileName=systemtests-linux-results.trx" ${{ needs.build.outputs.test_params }}
- name: Upload Test Result TRX Files
uses: actions/upload-artifact@v4
if: always()
diff --git a/.gitignore b/.gitignore
index 9b65f193d..c42377080 100644
--- a/.gitignore
+++ b/.gitignore
@@ -385,3 +385,4 @@ docs/_build/*
/docs/Lib/
/docs/Scripts/
/docs/pyvenv.cfg
+nCrunchTemp*.csproj
diff --git a/.ncrunch/Reqnroll.Autofac.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.Autofac.ReqnrollPlugin.v3.ncrunchproject
index 6c4b990aa..95a483b43 100644
--- a/.ncrunch/Reqnroll.Autofac.ReqnrollPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.Autofac.ReqnrollPlugin.v3.ncrunchproject
@@ -1,8 +1,3 @@
-
-
- TargetFrameworks = net6.0
-
- True
-
+
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.CustomPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.CustomPlugin.v3.ncrunchproject
index 6c4b990aa..319cd523c 100644
--- a/.ncrunch/Reqnroll.CustomPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.CustomPlugin.v3.ncrunchproject
@@ -1,8 +1,5 @@
-
- TargetFrameworks = net6.0
-
True
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.TestProjectGenerator.Tests.net48.v3.ncrunchproject b/.ncrunch/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest.v3.ncrunchproject
similarity index 100%
rename from .ncrunch/Reqnroll.TestProjectGenerator.Tests.net48.v3.ncrunchproject
rename to .ncrunch/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest.v3.ncrunchproject
diff --git a/.ncrunch/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests.v3.ncrunchproject b/.ncrunch/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests.v3.ncrunchproject
deleted file mode 100644
index 6c4b990aa..000000000
--- a/.ncrunch/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests.v3.ncrunchproject
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
- TargetFrameworks = net6.0
-
- True
-
-
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.ExternalData.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.ExternalData.ReqnrollPlugin.v3.ncrunchproject
index 6c4b990aa..95a483b43 100644
--- a/.ncrunch/Reqnroll.ExternalData.ReqnrollPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.ExternalData.ReqnrollPlugin.v3.ncrunchproject
@@ -1,8 +1,3 @@
-
-
- TargetFrameworks = net6.0
-
- True
-
+
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.Generator.v3.ncrunchproject b/.ncrunch/Reqnroll.Generator.v3.ncrunchproject
index 5448450ce..95a483b43 100644
--- a/.ncrunch/Reqnroll.Generator.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.Generator.v3.ncrunchproject
@@ -1,8 +1,3 @@
-
-
- TargetFrameworks = net6.0
-
- False
-
+
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.GeneratorTests.v3.ncrunchproject b/.ncrunch/Reqnroll.GeneratorTests.v3.ncrunchproject
index 40d7f9349..5e6d62816 100644
--- a/.ncrunch/Reqnroll.GeneratorTests.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.GeneratorTests.v3.ncrunchproject
@@ -1,9 +1,5 @@
-
- TargetFrameworks = net6.0
-
True
- False
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.MSTest.Generator.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.MSTest.Generator.ReqnrollPlugin.v3.ncrunchproject
index 5448450ce..e586040f3 100644
--- a/.ncrunch/Reqnroll.MSTest.Generator.ReqnrollPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.MSTest.Generator.ReqnrollPlugin.v3.ncrunchproject
@@ -1,8 +1,7 @@
- TargetFrameworks = net6.0
+ TargetFrameworks = netstandard2.0
- False
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.MSTest.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.MSTest.ReqnrollPlugin.v3.ncrunchproject
index 5448450ce..0bcc569d0 100644
--- a/.ncrunch/Reqnroll.MSTest.ReqnrollPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.MSTest.ReqnrollPlugin.v3.ncrunchproject
@@ -1,8 +1,5 @@
-
- TargetFrameworks = net6.0
-
False
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.MsBuildNetSdk.IntegrationTests.v3.ncrunchproject b/.ncrunch/Reqnroll.MsBuildNetSdk.IntegrationTests.v3.ncrunchproject
deleted file mode 100644
index 6c4b990aa..000000000
--- a/.ncrunch/Reqnroll.MsBuildNetSdk.IntegrationTests.v3.ncrunchproject
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
- TargetFrameworks = net6.0
-
- True
-
-
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.NUnit.Generator.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.NUnit.Generator.ReqnrollPlugin.v3.ncrunchproject
index 5448450ce..e9934c101 100644
--- a/.ncrunch/Reqnroll.NUnit.Generator.ReqnrollPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.NUnit.Generator.ReqnrollPlugin.v3.ncrunchproject
@@ -1,8 +1,5 @@
-
- TargetFrameworks = net6.0
-
- False
+ False
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.NUnit.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.NUnit.ReqnrollPlugin.v3.ncrunchproject
index 5448450ce..e9934c101 100644
--- a/.ncrunch/Reqnroll.NUnit.ReqnrollPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.NUnit.ReqnrollPlugin.v3.ncrunchproject
@@ -1,8 +1,5 @@
-
- TargetFrameworks = net6.0
-
- False
+ False
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.PluginTests.v3.ncrunchproject b/.ncrunch/Reqnroll.PluginTests.v3.ncrunchproject
index 6c4b990aa..79ff1b6af 100644
--- a/.ncrunch/Reqnroll.PluginTests.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.PluginTests.v3.ncrunchproject
@@ -1,8 +1,15 @@
-
- TargetFrameworks = net6.0
-
- True
+
+ ExternalData\SampleFiles\**.*
+
+
+
+ Reqnroll.PluginTests.Generator.GeneratorPluginLoaderTests.LoadPlugin_LoadXUnitSuccessfully
+
+
+ Reqnroll.PluginTests.Infrastructure.WindsorPluginTests.Can_load_Windsor_plugin
+
+
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.RuntimeTests.v3.ncrunchproject b/.ncrunch/Reqnroll.RuntimeTests.v3.ncrunchproject
index 40d7f9349..9a0eea7aa 100644
--- a/.ncrunch/Reqnroll.RuntimeTests.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.RuntimeTests.v3.ncrunchproject
@@ -1,8 +1,5 @@
-
- TargetFrameworks = net6.0
-
True
False
diff --git a/.ncrunch/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin.v3.ncrunchproject
index 6c4b990aa..e586040f3 100644
--- a/.ncrunch/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin.v3.ncrunchproject
@@ -1,8 +1,7 @@
- TargetFrameworks = net6.0
+ TargetFrameworks = netstandard2.0
- True
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.SpecFlowCompatibility.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.SpecFlowCompatibility.ReqnrollPlugin.v3.ncrunchproject
index 6c4b990aa..e586040f3 100644
--- a/.ncrunch/Reqnroll.SpecFlowCompatibility.ReqnrollPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.SpecFlowCompatibility.ReqnrollPlugin.v3.ncrunchproject
@@ -1,8 +1,7 @@
- TargetFrameworks = net6.0
+ TargetFrameworks = netstandard2.0
- True
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.Specs.Generator.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.Specs.Generator.ReqnrollPlugin.v3.ncrunchproject
deleted file mode 100644
index 6c4b990aa..000000000
--- a/.ncrunch/Reqnroll.Specs.Generator.ReqnrollPlugin.v3.ncrunchproject
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
- TargetFrameworks = net6.0
-
- True
-
-
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.Specs.v3.ncrunchproject b/.ncrunch/Reqnroll.Specs.v3.ncrunchproject
index 6c4b990aa..319cd523c 100644
--- a/.ncrunch/Reqnroll.Specs.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.Specs.v3.ncrunchproject
@@ -1,8 +1,5 @@
-
- TargetFrameworks = net6.0
-
True
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.Templates.DotNet.v3.ncrunchproject b/.ncrunch/Reqnroll.Templates.DotNet.v3.ncrunchproject
index 6c4b990aa..319cd523c 100644
--- a/.ncrunch/Reqnroll.Templates.DotNet.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.Templates.DotNet.v3.ncrunchproject
@@ -1,8 +1,5 @@
-
- TargetFrameworks = net6.0
-
True
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.TestProjectGenerator.Cli.v3.ncrunchproject b/.ncrunch/Reqnroll.TestProjectGenerator.Cli.v3.ncrunchproject
index 8cffa5048..d3fdf31e4 100644
--- a/.ncrunch/Reqnroll.TestProjectGenerator.Cli.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.TestProjectGenerator.Cli.v3.ncrunchproject
@@ -1,7 +1,4 @@
-
- TargetFrameworks = net6.0
-
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.TestProjectGenerator.Tests.net60.v3.ncrunchproject b/.ncrunch/Reqnroll.TestProjectGenerator.Tests.net60.v3.ncrunchproject
deleted file mode 100644
index 319cd523c..000000000
--- a/.ncrunch/Reqnroll.TestProjectGenerator.Tests.net60.v3.ncrunchproject
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- True
-
-
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.TestProjectGenerator.net471.v3.ncrunchproject b/.ncrunch/Reqnroll.TestProjectGenerator.net471.v3.ncrunchproject
deleted file mode 100644
index 319cd523c..000000000
--- a/.ncrunch/Reqnroll.TestProjectGenerator.net471.v3.ncrunchproject
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- True
-
-
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.TestProjectGenerator.net60.v3.ncrunchproject b/.ncrunch/Reqnroll.TestProjectGenerator.net60.v3.ncrunchproject
deleted file mode 100644
index 319cd523c..000000000
--- a/.ncrunch/Reqnroll.TestProjectGenerator.net60.v3.ncrunchproject
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- True
-
-
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.Tools.MsBuild.Generation.v3.ncrunchproject b/.ncrunch/Reqnroll.Tools.MsBuild.Generation.v3.ncrunchproject
index 5448450ce..e586040f3 100644
--- a/.ncrunch/Reqnroll.Tools.MsBuild.Generation.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.Tools.MsBuild.Generation.v3.ncrunchproject
@@ -1,8 +1,7 @@
- TargetFrameworks = net6.0
+ TargetFrameworks = netstandard2.0
- False
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest.v3.ncrunchproject b/.ncrunch/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest.v3.ncrunchproject
index 6c4b990aa..319cd523c 100644
--- a/.ncrunch/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest.v3.ncrunchproject
@@ -1,8 +1,5 @@
-
- TargetFrameworks = net6.0
-
True
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.Verify.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.Verify.ReqnrollPlugin.v3.ncrunchproject
index 6c4b990aa..e586040f3 100644
--- a/.ncrunch/Reqnroll.Verify.ReqnrollPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.Verify.ReqnrollPlugin.v3.ncrunchproject
@@ -1,8 +1,7 @@
- TargetFrameworks = net6.0
+ TargetFrameworks = netstandard2.0
- True
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.Windsor.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.Windsor.ReqnrollPlugin.v3.ncrunchproject
index 6c4b990aa..95a483b43 100644
--- a/.ncrunch/Reqnroll.Windsor.ReqnrollPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.Windsor.ReqnrollPlugin.v3.ncrunchproject
@@ -1,8 +1,3 @@
-
-
- TargetFrameworks = net6.0
-
- True
-
+
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.v3.ncrunchproject b/.ncrunch/Reqnroll.v3.ncrunchproject
index e586040f3..95a483b43 100644
--- a/.ncrunch/Reqnroll.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.v3.ncrunchproject
@@ -1,7 +1,3 @@
-
-
- TargetFrameworks = netstandard2.0
-
-
+
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.xUnit.Generator.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.xUnit.Generator.ReqnrollPlugin.v3.ncrunchproject
index 5448450ce..cff5044ed 100644
--- a/.ncrunch/Reqnroll.xUnit.Generator.ReqnrollPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.xUnit.Generator.ReqnrollPlugin.v3.ncrunchproject
@@ -1,8 +1,5 @@
-
- TargetFrameworks = net6.0
-
- False
+ False
\ No newline at end of file
diff --git a/.ncrunch/Reqnroll.xUnit.ReqnrollPlugin.v3.ncrunchproject b/.ncrunch/Reqnroll.xUnit.ReqnrollPlugin.v3.ncrunchproject
index 5448450ce..cff5044ed 100644
--- a/.ncrunch/Reqnroll.xUnit.ReqnrollPlugin.v3.ncrunchproject
+++ b/.ncrunch/Reqnroll.xUnit.ReqnrollPlugin.v3.ncrunchproject
@@ -1,8 +1,5 @@
-
- TargetFrameworks = net6.0
-
- False
+ False
\ No newline at end of file
diff --git a/.ncrunch/Specs.v3.ncrunchproject b/.ncrunch/Specs.v3.ncrunchproject
deleted file mode 100644
index 6c4b990aa..000000000
--- a/.ncrunch/Specs.v3.ncrunchproject
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
- TargetFrameworks = net6.0
-
- True
-
-
\ No newline at end of file
diff --git a/Build/Versioning.targets b/Build/Versioning.targets
deleted file mode 100644
index ed47888b5..000000000
--- a/Build/Versioning.targets
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- 3.5.0
-
-
-
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 56adc0b8b..78d557aa3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,16 @@
test run (global) context instead of the test thread context.
* Support for PriorityAttribute in MsTest adapter
* Support for Scenario Outline / DataRowAttribute in MsTest adapter
+* Fix for #81 in which Cucumber Expressions fail when two enums or two custom types with the same short name (differing namespaces) are used as parameters
+* Fix: Adding @ignore to an Examples block generates invalid code for NUnit v3+ (#103)
+* Fix: #111 @ignore attribute is not inherited to the scenarios from Rule
+* Support for JSON files added to SpecFlow.ExternalData
+* Fix: #120 Capture ExecutionContext after every binding invoke
+* Allow creating single target (netstandard2.0) plugins
+* MsTest: Use ClassCleanupBehavior.EndOfClass instead of custom implementation (preparation for MsTest v4.0)
+* Fix: #71 StackOverflowException when using [StepArgumentTransformation] with same input and output type (for example string)
+* Fix: Autofac without hook does not run GlobalDependencies (#127)
+* Fix: Reqnroll.Autofac shows wrongly ambiguous step definition (#56)
# v1.0.1 - 2024-02-16
diff --git a/Directory.Build.props b/Directory.Build.props
index 3d9127a80..0395695cd 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -36,32 +36,9 @@
- net462
-
- net6.0
-
-
- $(Reqnroll_FullFramework_TFM)
- netstandard2.0
-
- $(Reqnroll_FullFramework_TFM)
- netcoreapp3.1
-
- $(Reqnroll_FullFramework_TFM)
- netcoreapp3.1;net6.0
-
- $(Reqnroll_FullFramework_TFM)
- $(Reqnroll_Net6_TFM)
-
- $(Reqnroll_FullFramework_TFM)
- netcoreapp3.1
- $(Reqnroll_Net6_TFM)
-
- $(Reqnroll_FullFramework_Runtime_TFM);$(Reqnroll_Core_Runtime_TFM);$(Reqnroll_Net6_TFM)
- $(Reqnroll_FullFramework_Generator_TFM);$(Reqnroll_Core_Generator_TFM);$(Reqnroll_Net6_TFM)
- $(Reqnroll_FullFramework_Test_TFM);$(Reqnroll_Core_Test_TFM)
- $(Reqnroll_Net6_Specs_TFM)
- $(Reqnroll_FullFramework_Tools_TFM);$(Reqnroll_Core_Tools_TFM);$(Reqnroll_Net6_Tools_TFM)
+
+ net462
+ netstandard2.0
true
diff --git a/Directory.Build.targets b/Directory.Build.targets
index c01395040..4d2d2a4c0 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -8,16 +8,8 @@
$(NuspecProperties);author=$(Reqnroll_Authors)
$(NuspecProperties);owner=$(Reqnroll_Owners)
- $(NuspecProperties);Reqnroll_Net6_TFM=$(Reqnroll_Net6_TFM)
-
- $(NuspecProperties);Reqnroll_FullFramework_Runtime_TFM=$(Reqnroll_FullFramework_Runtime_TFM)
- $(NuspecProperties);Reqnroll_Core_Runtime_TFM=$(Reqnroll_Core_Runtime_TFM)
-
- $(NuspecProperties);Reqnroll_FullFramework_Generator_TFM=$(Reqnroll_FullFramework_Generator_TFM)
- $(NuspecProperties);Reqnroll_Core_Generator_TFM=$(Reqnroll_Core_Generator_TFM)
-
+ $(NuspecProperties);Reqnroll_FullFramework_Tools_TFM=$(Reqnroll_FullFramework_Tools_TFM)
$(NuspecProperties);Reqnroll_Core_Tools_TFM=$(Reqnroll_Core_Tools_TFM)
- $(NuspecProperties);Reqnroll_Net6_Tools_TFM=$(Reqnroll_Net6_Tools_TFM)
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index ddc00ccbc..000000000
--- a/Dockerfile
+++ /dev/null
@@ -1,32 +0,0 @@
-FROM mcr.microsoft.com/dotnet/core/sdk:3.1.100-buster
-
-RUN apt update \
- && apt install -y git mono-complete \
- && dotnet tool install --global PowerShell
-
-RUN wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb \
- && dpkg -i packages-microsoft-prod.deb \
- && apt update \
- && apt install apt-transport-https -y \
- && apt update
-RUN apt install dotnet-sdk-3.1 -y
-
-# RUN git clone --recurse-submodules--single-branch --branch updateLinuxBuild -j8 https://github.com/reqnroll/Reqnroll.git /src \
-# && ls -la
-
-WORKDIR /src
-
-COPY . .
-
-RUN git clean -fdx
-
-# build project
-# RUN pwsh /src/build.ps1
-
-RUN pwsh /src/build.ps1
-
-#CMD /bin/sh
-# CMD dotnet test /src/*.sln -v n --no-build --logger "trx;LogFileName=TestResults.trx"
-# CMD dotnet test ./Tests/Reqnroll.Specs/Reqnroll.Specs.csproj -v n --no-build --logger "trx;LogFileName=TestResults.trx" --filter "BasicScenarioExecutionFeature_MSTest"
-# CMD dotnet test Reqnroll.sln -v n --no-build --logger "trx;LogFileName=TestResults.trx" --filter "BasicScenarioExecutionFeature_MSTest" && /bin/sh
-CMD /bin/sh
diff --git a/Installer/Reqnroll.CustomPlugin/Reqnroll.CustomPlugin.csproj b/Installer/Reqnroll.CustomPlugin/Reqnroll.CustomPlugin.csproj
index 497cd9a02..bc4b0f3d0 100644
--- a/Installer/Reqnroll.CustomPlugin/Reqnroll.CustomPlugin.csproj
+++ b/Installer/Reqnroll.CustomPlugin/Reqnroll.CustomPlugin.csproj
@@ -1,7 +1,7 @@
- $(Reqnroll_Generator_TFM)
+ netstandard2.0
$(MSBuildThisFileDirectory)Reqnroll.CustomPlugin.nuspec
true
diff --git a/Installer/Reqnroll.CustomPlugin/Reqnroll.CustomPlugin.nuspec b/Installer/Reqnroll.CustomPlugin/Reqnroll.CustomPlugin.nuspec
index 2b424d2c9..d37fd9818 100644
--- a/Installer/Reqnroll.CustomPlugin/Reqnroll.CustomPlugin.nuspec
+++ b/Installer/Reqnroll.CustomPlugin/Reqnroll.CustomPlugin.nuspec
@@ -17,33 +17,15 @@
$copyright$
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
diff --git a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/AutofacPlugin.cs b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/AutofacPlugin.cs
index f78c88cee..eeb13ea9c 100644
--- a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/AutofacPlugin.cs
+++ b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/AutofacPlugin.cs
@@ -1,183 +1,183 @@
using System;
using Autofac;
+using Reqnroll.BoDi;
using Reqnroll.Autofac;
-using Reqnroll;
using Reqnroll.Infrastructure;
using Reqnroll.Plugins;
using Reqnroll.UnitTestProvider;
[assembly: RuntimePlugin(typeof(AutofacPlugin))]
-namespace Reqnroll.Autofac
-{
- using Reqnroll.BoDi;
+namespace Reqnroll.Autofac;
- using Reqnroll;
+public class AutofacPlugin : IRuntimePlugin
+{
+ private static readonly object _registrationLock = new();
- public class AutofacPlugin : IRuntimePlugin
+ public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters, UnitTestProviderConfiguration unitTestProviderConfiguration)
{
- private static readonly Object _registrationLock = new Object();
-
- public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters, UnitTestProviderConfiguration unitTestProviderConfiguration)
+ runtimePluginEvents.CustomizeGlobalDependencies += (_, args) =>
{
- runtimePluginEvents.CustomizeGlobalDependencies += (sender, args) =>
+ // temporary fix for CustomizeGlobalDependencies called multiple times
+ // see https://github.com/SpecFlowOSS/SpecFlow/issues/948
+ if (!args.ObjectContainer.IsRegistered())
{
- // temporary fix for CustomizeGlobalDependencies called multiple times
- // see https://github.com/reqnroll/Reqnroll/issues/948
- if (!args.ObjectContainer.IsRegistered())
+ // an extra lock to ensure that there are not two fast threads re-registering the same stuff
+ lock (_registrationLock)
{
- // an extra lock to ensure that there are not two super fast threads re-registering the same stuff
- lock (_registrationLock)
+ if (!args.ObjectContainer.IsRegistered())
{
- if (!args.ObjectContainer.IsRegistered())
+ var testRunContainer = args.ObjectContainer;
+ RegisterTestRunPluginTypes(testRunContainer);
+
+ var containerBuilderFinder = args.ObjectContainer.Resolve();
+ var configureGlobalContainer = containerBuilderFinder.GetConfigureGlobalContainer();
+ if (configureGlobalContainer != null)
{
- args.ObjectContainer.RegisterTypeAs();
- args.ObjectContainer.RegisterTypeAs();
-
- var containerBuilderFinder = args.ObjectContainer.Resolve();
- var configureGlobalContainer = containerBuilderFinder.GetConfigureGlobalContainer();
- if (configureGlobalContainer != null)
- {
- var containerBuilder = configureGlobalContainer(new global::Autofac.ContainerBuilder());
- args.ObjectContainer.RegisterFactoryAs(() => containerBuilder.Build());
- }
+ var containerBuilder = configureGlobalContainer(new global::Autofac.ContainerBuilder());
+ args.ObjectContainer.RegisterFactoryAs(() => containerBuilder.Build());
}
}
-
- // workaround for parallel execution issue - this should be rather a feature in BoDi?
- args.ObjectContainer.Resolve();
}
- };
- runtimePluginEvents.CustomizeTestThreadDependencies += (sender, args) =>
- {
- if (args.ObjectContainer.BaseContainer.IsRegistered())
- {
- var container = args.ObjectContainer.BaseContainer.Resolve();
- args.ObjectContainer.RegisterFactoryAs(() => container.BeginLifetimeScope(nameof(TestThreadContext)));
- }
- };
+ // workaround for parallel execution issue - this should be rather a feature in BoDi?
+ args.ObjectContainer.Resolve();
+ }
+ };
- runtimePluginEvents.CustomizeFeatureDependencies += (sender, args) =>
+ runtimePluginEvents.CustomizeTestThreadDependencies += (_, args) =>
+ {
+ if (args.ObjectContainer.BaseContainer.IsRegistered())
{
- var containerBuilderFinder = args.ObjectContainer.Resolve();
+ var container = args.ObjectContainer.BaseContainer.Resolve();
+ args.ObjectContainer.RegisterFactoryAs(() => container.BeginLifetimeScope(nameof(TestThreadContext)));
+ }
+ };
- var featureScopeFinder = containerBuilderFinder.GetFeatureLifetimeScope();
+ runtimePluginEvents.CustomizeFeatureDependencies += (_, args) =>
+ {
+ var containerBuilderFinder = args.ObjectContainer.Resolve();
- ILifetimeScope featureScope = null;
+ var featureScopeFinder = containerBuilderFinder.GetFeatureLifetimeScope();
- if (featureScopeFinder != null)
- {
- featureScope = featureScopeFinder();
- }
- else if (args.ObjectContainer.BaseContainer.IsRegistered())
- {
- var testThreadScope = args.ObjectContainer.BaseContainer.Resolve();
+ ILifetimeScope featureScope = null;
- featureScope = testThreadScope.BeginLifetimeScope(nameof(FeatureContext));
- }
+ if (featureScopeFinder != null)
+ {
+ // if the user provided a feature scope creation method, we use that
+ featureScope = featureScopeFinder();
+ }
+ else if (args.ObjectContainer.BaseContainer.IsRegistered())
+ {
+ // if the TestThread container has a lifetime scope, we make a child scope for the feature
+ var testThreadScope = args.ObjectContainer.BaseContainer.Resolve();
+ featureScope = testThreadScope.BeginLifetimeScope(nameof(FeatureContext));
+ }
- if (featureScope != null)
- {
- args.ObjectContainer.RegisterInstanceAs(featureScope);
- }
- };
+ if (featureScope != null)
+ {
+ args.ObjectContainer.RegisterInstanceAs(featureScope);
+ }
+ };
- runtimePluginEvents.CustomizeScenarioDependencies += (sender, args) =>
+ runtimePluginEvents.CustomizeScenarioDependencies += (_, args) =>
+ {
+ args.ObjectContainer.RegisterFactoryAs(() =>
{
- args.ObjectContainer.RegisterFactoryAs(() =>
- {
- var containerBuilderFinder = args.ObjectContainer.Resolve();
+ var containerBuilderFinder = args.ObjectContainer.Resolve();
- var featureScope = GetFeatureScope(args.ObjectContainer, containerBuilderFinder);
+ var featureScope = GetFeatureScope(args.ObjectContainer, containerBuilderFinder);
- if (featureScope != null)
+ if (featureScope != null)
+ {
+ return featureScope.BeginLifetimeScope(nameof(ScenarioContext), containerBuilder =>
{
- return featureScope.BeginLifetimeScope(nameof(ScenarioContext), containerBuilder =>
+ var configureScenarioContainer = containerBuilderFinder.GetConfigureScenarioContainer();
+
+ if (configureScenarioContainer != null)
{
- var configureScenarioContainer = containerBuilderFinder.GetConfigureScenarioContainer();
+ containerBuilder = configureScenarioContainer(containerBuilder);
+ }
- if (configureScenarioContainer != null)
- {
- containerBuilder = configureScenarioContainer(containerBuilder);
- }
+ RegisterReqnrollDependencies(args.ObjectContainer, containerBuilder);
+ });
+ }
- RegisterReqnrollDependecies(args.ObjectContainer, containerBuilder);
- });
- }
+ var legacyCreateScenarioContainerBuilder = containerBuilderFinder.GetLegacyCreateScenarioContainerBuilder();
+ if (legacyCreateScenarioContainerBuilder == null)
+ {
+ throw new Exception("Unable to find scenario dependencies! Mark a static method that has a ContainerBuilder parameter and returns void with [ScenarioDependencies]!");
+ }
- var createScenarioContainerBuilder = containerBuilderFinder.GetCreateScenarioContainerBuilder();
- if (createScenarioContainerBuilder == null)
- {
- throw new Exception("Unable to find scenario dependencies! Mark a static method that has a ContainerBuilder parameter and returns void with [ScenarioDependencies]!");
- }
+ var containerBuilder = legacyCreateScenarioContainerBuilder(null);
+ RegisterReqnrollDependencies(args.ObjectContainer, containerBuilder);
+ args.ObjectContainer.RegisterFactoryAs(() => containerBuilder.Build());
+ return args.ObjectContainer.Resolve().BeginLifetimeScope(nameof(ScenarioContext));
+ });
+ };
+ }
- var containerBuilder = createScenarioContainerBuilder(null);
- RegisterReqnrollDependecies(args.ObjectContainer, containerBuilder);
- args.ObjectContainer.RegisterFactoryAs(() => containerBuilder.Build());
- return args.ObjectContainer.Resolve().BeginLifetimeScope(nameof(ScenarioContext));
- });
- };
- }
+ protected virtual void RegisterTestRunPluginTypes(ObjectContainer testRunContainer)
+ {
+ testRunContainer.RegisterTypeAs();
+ testRunContainer.RegisterTypeAs();
+ testRunContainer.RegisterTypeAs();
+ }
- private static ILifetimeScope GetFeatureScope(ObjectContainer objectContainer, IContainerBuilderFinder containerBuilderFinder)
+ private static ILifetimeScope GetFeatureScope(ObjectContainer objectContainer, IContainerBuilderFinder containerBuilderFinder)
+ {
+ if (objectContainer.BaseContainer.IsRegistered())
{
- if (objectContainer.BaseContainer.IsRegistered())
- {
- return objectContainer.BaseContainer.Resolve();
- }
-
- var configureScenarioContainer = containerBuilderFinder.GetConfigureScenarioContainer();
-
- if (configureScenarioContainer != null)
- {
- var containerBuilder = new global::Autofac.ContainerBuilder();
- objectContainer.RegisterFactoryAs(() => containerBuilder.Build());
- return objectContainer.Resolve();
- }
-
- return null;
+ return objectContainer.BaseContainer.Resolve();
}
+ var configureScenarioContainer = containerBuilderFinder.GetConfigureScenarioContainer();
- ///
- /// Fix for https://github.com/gasparnagy/Reqnroll.Autofac/issues/11 Cannot resolve ScenarioInfo
- /// Extracted from
- /// https://github.com/reqnroll/Reqnroll/blob/master/Reqnroll/Infrastructure/ITestObjectResolver.cs
- /// The test objects might be dependent on particular Reqnroll infrastructure, therefore the implemented
- /// resolution logic should support resolving the following objects (from the provided Reqnroll container):
- /// , , and
- /// (to be able to resolve any other Reqnroll infrastucture). So basically
- /// the resolution of these classes has to be forwarded to the original container.
- ///
- /// Reqnroll DI container.
- /// Autofac ContainerBuilder.
- private void RegisterReqnrollDependecies(
- IObjectContainer objectContainer,
- global::Autofac.ContainerBuilder containerBuilder)
+ if (configureScenarioContainer != null)
{
- containerBuilder.Register(ctx => objectContainer).As();
- containerBuilder.Register(
- ctx =>
- {
- var reqnrollContainer = ctx.Resolve();
- var scenarioContext = reqnrollContainer.Resolve();
- return scenarioContext;
- }).As();
- containerBuilder.Register(
- ctx =>
- {
- var reqnrollContainer = ctx.Resolve();
- var scenarioContext = reqnrollContainer.Resolve();
- return scenarioContext;
- }).As();
- containerBuilder.Register(
- ctx =>
- {
- var reqnrollContainer = ctx.Resolve();
- var scenarioContext = reqnrollContainer.Resolve();
- return scenarioContext;
- }).As();
+ var containerBuilder = new global::Autofac.ContainerBuilder();
+ objectContainer.RegisterFactoryAs(() => containerBuilder.Build());
+ return objectContainer.Resolve();
}
+
+ return null;
+ }
+
+
+ ///
+ /// The test objects might be dependent on particular Reqnroll infrastructure, therefore the implemented
+ /// resolution logic should support resolving the following objects (from the provided Reqnroll container):
+ /// , , and
+ /// (to be able to resolve any other Reqnroll infrastructure). So basically
+ /// the resolution of these classes has to be forwarded to the original container.
+ ///
+ /// Reqnroll DI container.
+ /// Autofac ContainerBuilder.
+ private void RegisterReqnrollDependencies(
+ IObjectContainer objectContainer,
+ global::Autofac.ContainerBuilder containerBuilder)
+ {
+ containerBuilder.Register(_ => objectContainer).As();
+ containerBuilder.Register(
+ ctx =>
+ {
+ var reqnrollContainer = ctx.Resolve();
+ var scenarioContext = reqnrollContainer.Resolve();
+ return scenarioContext;
+ }).As();
+ containerBuilder.Register(
+ ctx =>
+ {
+ var reqnrollContainer = ctx.Resolve();
+ var scenarioContext = reqnrollContainer.Resolve();
+ return scenarioContext;
+ }).As();
+ containerBuilder.Register(
+ ctx =>
+ {
+ var reqnrollContainer = ctx.Resolve();
+ var scenarioContext = reqnrollContainer.Resolve();
+ return scenarioContext;
+ }).As();
}
-}
+}
\ No newline at end of file
diff --git a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/ConfigurationMethodsProvider.cs b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/ConfigurationMethodsProvider.cs
new file mode 100644
index 000000000..5272c893a
--- /dev/null
+++ b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/ConfigurationMethodsProvider.cs
@@ -0,0 +1,15 @@
+using Reqnroll.Bindings;
+using Reqnroll.Infrastructure;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+
+namespace Reqnroll.Autofac;
+public class ConfigurationMethodsProvider(ITestAssemblyProvider _testAssemblyProvider) : IConfigurationMethodsProvider
+{
+ public IEnumerable GetConfigurationMethods()
+ {
+ return _testAssemblyProvider.TestAssembly.GetTypes()
+ .SelectMany(t => t.GetMethods(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public));
+ }
+}
diff --git a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/ContainerBuilderExtensions.cs b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/ContainerBuilderExtensions.cs
index b03f9f0de..e66c734f3 100644
--- a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/ContainerBuilderExtensions.cs
+++ b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/ContainerBuilderExtensions.cs
@@ -1,7 +1,6 @@
using System;
-using System.Linq;
+using System.Reflection;
using Autofac;
-using Reqnroll;
namespace Reqnroll.Autofac.ReqnrollPlugin
{
@@ -13,7 +12,7 @@ public static class ContainerBuilderExtensions
///
/// Add Reqnroll binding for classes in the assembly where typeof TAssemblyType resides.
///
- /// The type in an assembly to search for bindings.
+ /// Any type in an assembly to search for bindings.
/// The builder.
/// The builder.
public static ContainerBuilder AddReqnrollBindings(this ContainerBuilder builder) => builder.AddReqnrollBindings(typeof(TAssemblyType));
@@ -22,12 +21,20 @@ public static class ContainerBuilderExtensions
/// Add Reqnroll binding for classes in the assembly where the type resides.
///
/// The builder.
- /// The type in an assembly to search for bindings.
+ /// Any type in an assembly to search for bindings.
/// The builder.
- public static ContainerBuilder AddReqnrollBindings(this ContainerBuilder builder, Type type)
+ public static ContainerBuilder AddReqnrollBindings(this ContainerBuilder builder, Type type) => builder.AddReqnrollBindings(type.Assembly);
+
+ ///
+ /// Add Reqnroll binding for classes in an assembly.
+ ///
+ /// The builder.
+ /// The assembly to search for bindings.
+ /// The builder.
+ public static ContainerBuilder AddReqnrollBindings(this ContainerBuilder builder, Assembly assembly)
{
builder
- .RegisterAssemblyTypes(type.Assembly)
+ .RegisterAssemblyTypes(assembly)
.Where(t => Attribute.IsDefined(t, typeof(BindingAttribute)))
.SingleInstance();
return builder;
diff --git a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/ContainerBuilderFinder.cs b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/ContainerBuilderFinder.cs
index 42b80db27..c9834f5ee 100644
--- a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/ContainerBuilderFinder.cs
+++ b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/ContainerBuilderFinder.cs
@@ -3,85 +3,77 @@
using System.Reflection;
using Autofac;
using Reqnroll.Autofac.ReqnrollPlugin;
-using Reqnroll.Bindings;
-using Reqnroll.Bindings.Discovery;
-using Reqnroll.Infrastructure;
using ContainerBuilder = Autofac.ContainerBuilder;
-namespace Reqnroll.Autofac
+namespace Reqnroll.Autofac;
+
+public class ContainerBuilderFinder : IContainerBuilderFinder
{
- public class ContainerBuilderFinder : IContainerBuilderFinder
+ private readonly IConfigurationMethodsProvider _configurationMethodsProvider;
+ private readonly Lazy> _createConfigureGlobalContainer;
+ private readonly Lazy> _createConfigureScenarioContainer;
+ private readonly Lazy> _legacyCreateScenarioContainerBuilder;
+ private readonly Lazy> _getFeatureLifetimeScope;
+
+ public ContainerBuilderFinder(IConfigurationMethodsProvider configurationMethodsProvider)
{
- private readonly IBindingRegistry bindingRegistry;
- private readonly IRuntimeBindingRegistryBuilder bindingRegistryBuilder;
- private readonly ITestAssemblyProvider testAssemblyProvider;
- private readonly Lazy> createConfigureGlobalContainer;
- private readonly Lazy> createConfigureScenarioContainer;
- private readonly Lazy> createScenarioContainerBuilder;
- private readonly Lazy> getFeatureLifetimeScope;
+ _configurationMethodsProvider = configurationMethodsProvider;
- public ContainerBuilderFinder(IBindingRegistry bindingRegistry, IRuntimeBindingRegistryBuilder bindingRegistryBuilder, ITestAssemblyProvider testAssemblyProvider)
+ static ContainerBuilder InvokeVoidAndReturnBuilder(ContainerBuilder containerBuilder, MethodInfo methodInfo)
{
- this.bindingRegistry = bindingRegistry;
- this.bindingRegistryBuilder = bindingRegistryBuilder;
- this.testAssemblyProvider = testAssemblyProvider;
- static ContainerBuilder invokeVoidAndReturnBuilder(ContainerBuilder containerBuilder, MethodInfo methodInfo)
- {
- methodInfo.Invoke(null, new[] { containerBuilder });
- return containerBuilder;
- }
- createConfigureGlobalContainer = new Lazy>(() => FindCreateScenarioContainerBuilder(typeof(GlobalDependenciesAttribute), typeof(void), invokeVoidAndReturnBuilder), true);
- createConfigureScenarioContainer = new Lazy>(() => FindCreateScenarioContainerBuilder(typeof(ScenarioDependenciesAttribute), typeof(void), invokeVoidAndReturnBuilder), true);
- createScenarioContainerBuilder = new Lazy>(() => FindCreateScenarioContainerBuilder(typeof(ScenarioDependenciesAttribute), typeof(ContainerBuilder), (c, m) => (ContainerBuilder)m.Invoke(null, null)), true);
- getFeatureLifetimeScope = new Lazy>(() => FindLifetimeScope(typeof(FeatureDependenciesAttribute), typeof(ILifetimeScope), m => (ILifetimeScope)m.Invoke(null, null)));
+ methodInfo.Invoke(null, [ containerBuilder ]);
+ return containerBuilder;
}
+ _createConfigureGlobalContainer = new Lazy>(() => FindCreateScenarioContainerBuilder(typeof(GlobalDependenciesAttribute), typeof(void), InvokeVoidAndReturnBuilder), true);
+ _createConfigureScenarioContainer = new Lazy>(() => FindCreateScenarioContainerBuilder(typeof(ScenarioDependenciesAttribute), typeof(void), InvokeVoidAndReturnBuilder), true);
+ _legacyCreateScenarioContainerBuilder = new Lazy>(() => FindCreateScenarioContainerBuilder(typeof(ScenarioDependenciesAttribute), typeof(ContainerBuilder), (_, m) => (ContainerBuilder)m.Invoke(null, null)), true);
+ _getFeatureLifetimeScope = new Lazy>(() => FindLifetimeScope(typeof(FeatureDependenciesAttribute), typeof(ILifetimeScope), m => (ILifetimeScope)m.Invoke(null, null)));
+ }
- public Func GetConfigureGlobalContainer()
- {
- bindingRegistryBuilder.BuildBindingsFromAssembly(testAssemblyProvider.TestAssembly);
- return createConfigureGlobalContainer.Value;
- }
+ public Func GetConfigureGlobalContainer()
+ {
+ return _createConfigureGlobalContainer.Value;
+ }
- public Func GetConfigureScenarioContainer()
- {
- return createConfigureScenarioContainer.Value;
- }
+ public Func GetConfigureScenarioContainer()
+ {
+ return _createConfigureScenarioContainer.Value;
+ }
- public Func GetCreateScenarioContainerBuilder()
- {
- return createScenarioContainerBuilder.Value;
- }
+ // For legacy support: configuration methods that return a container builder.
+ // It is recommended to use the void methods that get a container builder as a parameter
+ public Func GetLegacyCreateScenarioContainerBuilder()
+ {
+ return _legacyCreateScenarioContainerBuilder.Value;
+ }
- public Func GetFeatureLifetimeScope()
- {
- return getFeatureLifetimeScope.Value;
- }
+ public Func GetFeatureLifetimeScope()
+ {
+ return _getFeatureLifetimeScope.Value;
+ }
- protected virtual Func FindLifetimeScope(Type attributeType, Type returnType, Func invoke)
- {
- var method = GetMethod(attributeType, returnType);
+ protected virtual Func FindLifetimeScope(Type attributeType, Type returnType, Func invoke)
+ {
+ var method = GetMethod(attributeType, returnType);
- return method == null
- ? null
- : () => invoke(method);
- }
+ return method == null
+ ? null
+ : () => invoke(method);
+ }
- protected virtual Func FindCreateScenarioContainerBuilder(Type attributeType, Type returnType, Func invoke)
- {
- var method = GetMethod(attributeType, returnType);
+ protected virtual Func FindCreateScenarioContainerBuilder(Type attributeType, Type returnType, Func invoke)
+ {
+ var method = GetMethod(attributeType, returnType);
- return method == null
- ? null
- : containerBuilder => invoke(containerBuilder, method);
- }
+ return method == null
+ ? null
+ : containerBuilder => invoke(containerBuilder, method);
+ }
- private MethodInfo GetMethod(Type attributeType, Type returnType)
- {
- return bindingRegistry.GetBindingAssemblies()
- .SelectMany(x => x.GetTypes())
- .SelectMany(x => x.GetMethods(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public))
- .Where(x => x.ReturnType == returnType)
- .FirstOrDefault(x => Attribute.IsDefined(x, attributeType));
- }
+ private MethodInfo GetMethod(Type attributeType, Type returnType)
+ {
+ return _configurationMethodsProvider.GetConfigurationMethods()
+ .Where(x => x.ReturnType == returnType)
+ .FirstOrDefault(x => Attribute.IsDefined(x, attributeType));
}
}
\ No newline at end of file
diff --git a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/IConfigurationMethodsProvider.cs b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/IConfigurationMethodsProvider.cs
new file mode 100644
index 000000000..92a5d3848
--- /dev/null
+++ b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/IConfigurationMethodsProvider.cs
@@ -0,0 +1,9 @@
+using System.Collections.Generic;
+using System.Reflection;
+
+namespace Reqnroll.Autofac;
+
+public interface IConfigurationMethodsProvider
+{
+ IEnumerable GetConfigurationMethods();
+}
diff --git a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/IContainerBuilderFinder.cs b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/IContainerBuilderFinder.cs
index c321b2d30..04e5d046a 100644
--- a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/IContainerBuilderFinder.cs
+++ b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/IContainerBuilderFinder.cs
@@ -9,7 +9,7 @@ public interface IContainerBuilderFinder
Func GetConfigureGlobalContainer();
- Func GetCreateScenarioContainerBuilder();
+ Func GetLegacyCreateScenarioContainerBuilder();
Func GetFeatureLifetimeScope();
}
diff --git a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/Reqnroll.Autofac.ReqnrollPlugin.csproj b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/Reqnroll.Autofac.ReqnrollPlugin.csproj
index 486be9ecb..c46ff72dc 100644
--- a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/Reqnroll.Autofac.ReqnrollPlugin.csproj
+++ b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/Reqnroll.Autofac.ReqnrollPlugin.csproj
@@ -1,6 +1,6 @@
- $(Reqnroll_Runtime_TFM)
+ netstandard2.0
$(Reqnroll_KeyFile)
$(Reqnroll_EnableStrongNameSigning)
$(Reqnroll_PublicSign)
@@ -11,6 +11,8 @@
true
true
$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb
+
+ Reqnroll.Autofac
diff --git a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/Reqnroll.Autofac.nuspec b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/Reqnroll.Autofac.nuspec
index 7b6bd05d4..20aaf3f77 100644
--- a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/Reqnroll.Autofac.nuspec
+++ b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/Reqnroll.Autofac.nuspec
@@ -16,29 +16,17 @@
LICENSE
reqnroll autofac di dependency injection
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/build/Reqnroll.Autofac.targets b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/build/Reqnroll.Autofac.targets
index c1700e37d..1ff367c1d 100644
--- a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/build/Reqnroll.Autofac.targets
+++ b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/build/Reqnroll.Autofac.targets
@@ -1,8 +1,7 @@
- <_Reqnroll_AutofacPluginFramework Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' ">netstandard2.0
- <_Reqnroll_AutofacPluginFramework Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' ">net462
+ <_Reqnroll_AutofacPluginFramework>netstandard2.0
<_Reqnroll_AutofacPluginPath>$(MSBuildThisFileDirectory)\..\lib\$(_Reqnroll_AutofacPluginFramework)\Reqnroll.Autofac.ReqnrollPlugin.dll
diff --git a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/AssemblyHooks.cs b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/AssemblyHooks.cs
similarity index 92%
rename from Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/AssemblyHooks.cs
rename to Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/AssemblyHooks.cs
index f3878e27f..6e3f1895a 100644
--- a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/AssemblyHooks.cs
+++ b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/AssemblyHooks.cs
@@ -1,8 +1,7 @@
using System.Threading.Tasks;
using NUnit.Framework;
-using Reqnroll;
-namespace Specs
+namespace Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest
{
// This class is only required because in this sample application the generator
// is not loaded from NuGet package. In a usual Reqnroll project it is not needed.
diff --git a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Features/ExternalDataFromCSV.feature b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/ExternalDataFromCSV.feature
similarity index 100%
rename from Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Features/ExternalDataFromCSV.feature
rename to Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/ExternalDataFromCSV.feature
diff --git a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Features/ExternalDataFromExcel-HU.feature b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/ExternalDataFromExcel-HU.feature
similarity index 100%
rename from Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Features/ExternalDataFromExcel-HU.feature
rename to Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/ExternalDataFromExcel-HU.feature
diff --git a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Features/ExternalDataFromExcel.feature b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/ExternalDataFromExcel.feature
similarity index 100%
rename from Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Features/ExternalDataFromExcel.feature
rename to Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/ExternalDataFromExcel.feature
diff --git a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/ExternalDataFromJson.feature b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/ExternalDataFromJson.feature
new file mode 100644
index 000000000..2c67ec647
--- /dev/null
+++ b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/ExternalDataFromJson.feature
@@ -0,0 +1,38 @@
+Feature: External Data from Json file
+
+@DataSource:products.json
+Scenario: The basket price is calculated correctly
+ The scenario will be treated as a scenario outline with the examples from the json file.
+ The first object array is used by default from the json file.
+ Given the price of is €
+ And the customer has put 1 pcs of to the basket
+ When the basket price is calculated
+ Then the basket price should be €
+
+@DataSource:products.json @DataSet:other_products
+Scenario: The basket price is calculated correctly for other products
+ The scenario will be treated as a scenario outline with the examples from the json file.
+ The "other_products" object array is used from the json file.
+ Given the price of is €
+ And the customer has put 1 pcs of to the basket
+ When the basket price is calculated
+ Then the basket price should be €
+
+
+@DataSource:products-nested-dataset.json
+Scenario: The basket price is calculated correctly for products in nested products json
+ The scenario will be treated as a scenario outline with the examples from the json file.
+ The first object array is used by default from the json file.
+ Given the price of is €
+ And the customer has put 1 pcs of to the basket
+ When the basket price is calculated
+ Then the basket price should be €
+
+@DataSource:products-nested-dataset.json @DataSet:products.varieties
+Scenario: The basket price is calculated correctly for products.varieties in nested products json
+ The scenario will be treated as a scenario outline with the examples from the json file.
+ The products.varieties is used from the json file.
+ Given the price of is €
+ And the customer has put 1 pcs of to the basket
+ When the basket price is calculated
+ Then the basket price should be €
diff --git a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/products-nested-dataset.json b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/products-nested-dataset.json
new file mode 100644
index 000000000..79afec351
--- /dev/null
+++ b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/products-nested-dataset.json
@@ -0,0 +1,53 @@
+{
+ "products":
+ [
+ {
+ "product": "Chocolate",
+ "color": "brown",
+ "total price": "3.15",
+ "varieties":
+ [
+ {
+ "name": "Dark Chocolate",
+ "price": "1.6"
+ },
+ {
+ "name": "Milk Chocolate",
+ "price": "1.55"
+ }
+ ]
+ },
+ {
+ "product": "Apple",
+ "color": "red",
+ "total price": "2.5",
+ "varieties":
+ [
+ {
+ "name": "Pink Lady",
+ "price": "1.0"
+ },
+ {
+ "name": "Fuji",
+ "price": "1.5"
+ }
+ ]
+ },
+ {
+ "product": "Orange",
+ "color": "orange",
+ "total price": "2.9",
+ "varieties":
+ [
+ {
+ "name": "Seville Orange",
+ "price": "1.3"
+ },
+ {
+ "name": "Tangerine",
+ "price": "1.6"
+ }
+ ]
+ }
+ ]
+}
diff --git a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests/SampleFiles/products.csv b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/products.csv
similarity index 100%
rename from Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests/SampleFiles/products.csv
rename to Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/products.csv
diff --git a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/products.json b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/products.json
new file mode 100644
index 000000000..7abf4b3f2
--- /dev/null
+++ b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/products.json
@@ -0,0 +1,33 @@
+{
+ "products":
+ [
+ {
+ "product": "Chocolate",
+ "price": "2.5",
+ "color": "brown"
+ },
+ {
+ "product": "Apple",
+ "price": "1.0",
+ "color": "red"
+ },
+ {
+ "product": "Orange",
+ "price": "1.2",
+ "color": "orange"
+ }
+ ],
+ "other products":
+ [
+ {
+ "product": "Cookie",
+ "price": "2.5",
+ "color": "brown"
+ },
+ {
+ "product": "Bananas",
+ "price": "1.0",
+ "color": "yellow"
+ }
+ ]
+}
diff --git a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Features/products.xlsx b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/products.xlsx
similarity index 100%
rename from Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Features/products.xlsx
rename to Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Features/products.xlsx
diff --git a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest.csproj b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest.csproj
new file mode 100644
index 000000000..abf210a9a
--- /dev/null
+++ b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest.csproj
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+ net8.0
+
+ XReqnroll.ExternalData.ReqnrollPlugin.IntegrationTest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_Reqnroll_Needed_MSBuildGenerator Condition=" '$(MSBuildRuntimeType)' == 'Core'">$(Reqnroll_Core_Tools_TFM)
+ <_Reqnroll_Needed_MSBuildGenerator Condition=" '$(MSBuildRuntimeType)' != 'Core'">$(Reqnroll_FullFramework_Tools_TFM)
+
+
+
+
+
+
+
+
+
+
+
+
+ <_Reqnroll_TaskAssembly>..\..\Reqnroll.Tools.MsBuild.Generation\bin\$(Configuration)\$(_Reqnroll_Needed_MSBuildGenerator)\tasks\Reqnroll.Tools.MsBuild.Generation.dll
+
+
+
+
+
+
+ PreBuild;
+ $(BuildDependsOn)
+
+
+ PreBuild;
+ $(RebuildDependsOn)
+
+
+
\ No newline at end of file
diff --git a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Specs.sln b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Specs.sln
similarity index 100%
rename from Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Specs.sln
rename to Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/Specs.sln
diff --git a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/StepDefinitions/PricingStepDefinitions.cs b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/StepDefinitions/PricingStepDefinitions.cs
similarity index 97%
rename from Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/StepDefinitions/PricingStepDefinitions.cs
rename to Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/StepDefinitions/PricingStepDefinitions.cs
index e2e0a0215..928c9b061 100644
--- a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/StepDefinitions/PricingStepDefinitions.cs
+++ b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/StepDefinitions/PricingStepDefinitions.cs
@@ -2,9 +2,8 @@
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
-using Reqnroll;
-namespace Specs.StepDefinitions
+namespace Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest.StepDefinitions
{
[Binding]
public class PricingStepDefinitions
diff --git a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/testdata.json b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/testdata.json
similarity index 100%
rename from Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/testdata.json
rename to Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.IntegrationTest/testdata.json
diff --git a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests.csproj b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests.csproj
deleted file mode 100644
index 8d9941699..000000000
--- a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests.csproj
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
- $(Reqnroll_Test_TFM)
- $(Reqnroll_KeyFile)
- $(Reqnroll_EnableStrongNameSigning)
- $(Reqnroll_PublicSign)
- false
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
-
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
-
-
-
diff --git a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/ExternalDataGeneratorPlugin.cs b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/ExternalDataGeneratorPlugin.cs
index d22470efc..a39da3c18 100644
--- a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/ExternalDataGeneratorPlugin.cs
+++ b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/ExternalDataGeneratorPlugin.cs
@@ -23,6 +23,7 @@ public void Initialize(GeneratorPluginEvents generatorPluginEvents, GeneratorPlu
args.ObjectContainer.RegisterTypeAs();
args.ObjectContainer.RegisterTypeAs("CSV");
args.ObjectContainer.RegisterTypeAs("Excel");
+ args.ObjectContainer.RegisterTypeAs("JSON");
};
}
}
diff --git a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Loaders/JsonDataTableGenerator.cs b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Loaders/JsonDataTableGenerator.cs
new file mode 100644
index 000000000..e3baed6a4
--- /dev/null
+++ b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Loaders/JsonDataTableGenerator.cs
@@ -0,0 +1,102 @@
+using System.Collections.Generic;
+using System.Linq;
+using Newtonsoft.Json.Linq;
+using Reqnroll.ExternalData.ReqnrollPlugin.DataSources;
+
+namespace Reqnroll.ExternalData.ReqnrollPlugin.Loaders
+{
+
+ public class JsonDataTableGenerator
+ {
+ public DataSources.DataTable FlattenDataSetToDataTable(JObject originalJson, string[] objectPath)
+ {
+ var header = GenerateHeader(originalJson, objectPath);
+ var dataTable = new DataSources.DataTable(header.ToArray());
+ var records = GenerateRecordsFromNestedObjects(originalJson, objectPath, new List());
+ foreach (var record in records) dataTable.Items.Add(record);
+
+ return dataTable;
+ }
+
+ private static List GenerateHeader(JObject originalJson, string[] objectPath)
+ {
+ var currentObject = originalJson;
+
+ List header = new();
+ while (objectPath.Length > 0)
+ {
+ var currentObjectArray = currentObject[objectPath.First()]?.ToObject();
+
+ if (currentObjectArray == null)
+ throw new ExternalDataPluginException($"Expected {objectPath.First()} to be in json object");
+
+ objectPath = objectPath.Skip(1).ToArray();
+
+ if (currentObjectArray.First == null)
+ throw new ExternalDataPluginException("Empty object arrays are not supported");
+
+ currentObject = currentObjectArray.First.ToObject();
+ header.AddRange(GetPropertiesExcludingToBeFlattenedArrayObject(currentObject, objectPath).Select(p => p.Name));
+ }
+
+ return header;
+ }
+
+ private List GenerateRecordsFromNestedObjects(
+ JObject currentObject,
+ string[] dataSetObjectPath,
+ List currentRecords)
+ {
+ if (dataSetObjectPath.Length == 0)
+ return currentRecords;
+
+ var objectArrayPropertyName = dataSetObjectPath.First();
+ var remainingObjectArrays = dataSetObjectPath.Skip(1).ToArray();
+
+ var objectArray = currentObject[objectArrayPropertyName]?.ToObject();
+ if (objectArray == null)
+ throw new ExternalDataPluginException($"Expected object array property {objectArrayPropertyName} inside {currentObject}");
+
+ var result = new List();
+ foreach (var jObject in objectArray.Select(i => i.ToObject()))
+ {
+
+ var objectProperties = GetPropertiesExcludingToBeFlattenedArrayObject(jObject, remainingObjectArrays);
+
+ var objectRecord = new DataRecord();
+ foreach (var property in objectProperties)
+ objectRecord.Fields[property.Name] = new DataValue(property.Value);
+
+ List intermediateResult;
+ if (currentRecords.Any())
+ intermediateResult = AppendFieldsToCurrentDataRecords(currentRecords, objectRecord);
+ else
+ intermediateResult = new List { objectRecord };
+
+ result.AddRange(GenerateRecordsFromNestedObjects(jObject, remainingObjectArrays, intermediateResult));
+ }
+
+ return result;
+ }
+
+ private static List AppendFieldsToCurrentDataRecords(List currentRecords, DataRecord objectRecord)
+ {
+ var result = new List();
+ foreach (var record in currentRecords)
+ {
+ var updatedRecord = new DataRecord(record.Fields);
+ objectRecord.Fields.ToList().ForEach(x => updatedRecord.Fields.Add(x.Key, x.Value));
+ result.Add(updatedRecord);
+ }
+
+ return result;
+ }
+
+ private static List GetPropertiesExcludingToBeFlattenedArrayObject(
+ JObject childJson,
+ string[] remainingDataSets)
+ {
+ return childJson.Properties().Where(p => p.Name != remainingDataSets.FirstOrDefault()).ToList();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Loaders/JsonLoader.cs b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Loaders/JsonLoader.cs
new file mode 100644
index 000000000..023b51e21
--- /dev/null
+++ b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Loaders/JsonLoader.cs
@@ -0,0 +1,81 @@
+using System.Linq;
+using System.Collections.Generic;
+using Newtonsoft.Json.Linq;
+using Reqnroll.ExternalData.ReqnrollPlugin.DataSources;
+using Newtonsoft.Json;
+
+namespace Reqnroll.ExternalData.ReqnrollPlugin.Loaders
+{
+ public class JsonLoader : FileBasedLoader
+ {
+ public JsonLoader() : base("Json", ".json")
+ {
+
+ }
+
+ protected override DataSource LoadDataSourceFromFilePath(string filePath, string sourceFilePath)
+ {
+ var fileContent = ReadTextFileContent(filePath);
+
+ return LoadJsonDataSource(fileContent, sourceFilePath);
+ }
+
+ private List DetermineDataSets(JObject jsonObject, string dataSetPrepend)
+ {
+ var dataSets = new List();
+ foreach (var array in GetArraysFromObject(jsonObject))
+ {
+ var firstArrayEntry = array.Children().FirstOrDefault();
+
+ if (firstArrayEntry == null || firstArrayEntry.Type != JTokenType.Object)
+ continue;
+
+ var firstArrayObject = firstArrayEntry.ToObject();
+
+ var dataSetPath = string.IsNullOrWhiteSpace(dataSetPrepend) ? ((JProperty)array.Parent!).Name : $"{dataSetPrepend}.{array.Path}";
+
+ dataSets.Add(dataSetPath);
+
+ foreach (var nestedDataSetPath in DetermineDataSets(firstArrayObject, dataSetPath))
+ dataSets.Add(nestedDataSetPath);
+ }
+
+ return dataSets;
+ }
+
+ private static IEnumerable GetArraysFromObject(JObject jsonObject)
+ {
+ return jsonObject.Properties().Where(p => p.Value.Type == JTokenType.Array).Select(a => a.Value);
+ }
+
+ private DataSource LoadJsonDataSource(string fileContent, string sourceFilePath)
+ {
+ JObject fileJson = ParseJson(fileContent, sourceFilePath);
+ var dataSets = DetermineDataSets(fileJson, "");
+ var dataSetsRecord = new DataRecord();
+ var jsonDataTableGenerator = new JsonDataTableGenerator();
+ foreach (var dataSetPath in dataSets)
+ {
+ var dataTable = jsonDataTableGenerator.FlattenDataSetToDataTable(fileJson, dataSetPath.Split('.'));
+ dataSetsRecord.Fields[dataSetPath] = new DataValue(dataTable);
+ }
+
+ return new DataSource(dataSetsRecord, dataSets.First());
+ }
+
+ private static JObject ParseJson(string fileContent, string sourceFilePath)
+ {
+ JObject fileJson;
+ try
+ {
+ fileJson = JObject.Parse(fileContent);
+ }
+ catch (JsonReaderException jsonReaderException)
+ {
+ throw new ExternalDataPluginException($"Failed to parse json file {sourceFilePath}", jsonReaderException);
+ }
+
+ return fileJson;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Reqnroll.ExternalData.ReqnrollPlugin.csproj b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Reqnroll.ExternalData.ReqnrollPlugin.csproj
index 11c077ab3..37ba8799a 100644
--- a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Reqnroll.ExternalData.ReqnrollPlugin.csproj
+++ b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Reqnroll.ExternalData.ReqnrollPlugin.csproj
@@ -1,6 +1,6 @@
- $(Reqnroll_Generator_TFM)
+ netstandard2.0
$(MSBuildThisFileDirectory)Reqnroll.ExternalData.nuspec
$(Reqnroll_KeyFile)
$(Reqnroll_EnableStrongNameSigning)
@@ -15,6 +15,7 @@
+
diff --git a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Reqnroll.ExternalData.nuspec b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Reqnroll.ExternalData.nuspec
index ba9370439..51ee2bd2b 100644
--- a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Reqnroll.ExternalData.nuspec
+++ b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/Reqnroll.ExternalData.nuspec
@@ -21,9 +21,7 @@
-
-
-
+
diff --git a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/build/Reqnroll.ExternalData.targets b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/build/Reqnroll.ExternalData.targets
index e2525b081..887d91c64 100644
--- a/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/build/Reqnroll.ExternalData.targets
+++ b/Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin/build/Reqnroll.ExternalData.targets
@@ -1,9 +1,7 @@
- <_ExternalDataGeneratorPluginFramework Condition=" '$(MSBuildRuntimeType)' == 'Core'">netcoreapp3.1
- <_ExternalDataGeneratorPluginFramework Condition=" '$(MSBuildRuntimeType)' != 'Core'">net462
+ <_ExternalDataGeneratorPluginFramework>netstandard2.0
<_ExternalDataGeneratorPluginPath>$(MSBuildThisFileDirectory)$(_ExternalDataGeneratorPluginFramework)\Reqnroll.ExternalData.ReqnrollPlugin.dll
-
\ No newline at end of file
diff --git a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Specs.csproj b/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Specs.csproj
deleted file mode 100644
index b51b3fb20..000000000
--- a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Specs.csproj
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
- net6.0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <_Reqnroll_Needed_MSBuildGenerator Condition=" '$(MSBuildRuntimeType)' == 'Core'">$(Reqnroll_Core_Generator_TFM)
- <_Reqnroll_Needed_MSBuildGenerator Condition=" '$(MSBuildRuntimeType)' != 'Core'">$(Reqnroll_FullFramework_Generator_TFM)
-
-
-
-
-
-
-
-
-
-
-
-
- <_Reqnroll_TaskAssembly>..\..\Reqnroll.Tools.MsBuild.Generation\bin\$(Configuration)\$(_Reqnroll_Needed_MSBuildGenerator)\Reqnroll.Tools.MsBuild.Generation.dll
-
-
-
-
-
-
- PreBuild;
- $(BuildDependsOn)
-
-
- PreBuild;
- $(RebuildDependsOn)
-
-
-
\ No newline at end of file
diff --git a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Steps/CommentBindings.cs b/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Steps/CommentBindings.cs
deleted file mode 100644
index 4a28b5f11..000000000
--- a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Steps/CommentBindings.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using Reqnroll;
-using Reqnroll.Infrastructure;
-
-namespace Specs.Steps
-{
- [Binding]
- public class CommentBindings
- {
- private readonly ScenarioContext _scenarioContext;
-
- public CommentBindings(ScenarioContext scenarioContext)
- {
- _scenarioContext = scenarioContext;
- }
-
- [Given(@"a comment with text (.*)")]
- public void GivenACommentWithText(string text)
- {
- }
-
- [Given(@"the screen height of (.*)px")]
- public void GivenTheScreenHeightOfPx(int height)
- {
- }
-
- [When(@"the comment box is shown")]
- public void WhenTheCommentBoxIsShown()
- {
- }
-
- [Then(@"the the comment size should not exceed (.*) lines")]
- public void ThenTheTheCommentSizeShouldNotExceedLines(int lines)
- {
- }
- }
-}
\ No newline at end of file
diff --git a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Steps/RegistrationBindings.cs b/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Steps/RegistrationBindings.cs
deleted file mode 100644
index 90eb31be6..000000000
--- a/Plugins/Reqnroll.ExternalData/sample/ExternalDataSample/Steps/RegistrationBindings.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using NUnit.Framework;
-using Reqnroll;
-
-namespace Specs.Steps
-{
- [Binding]
- public class RegistrationBindings
- {
- private readonly ScenarioContext _scenarioContext;
-
- private string _name;
- private string _email;
- private string _errorMessage = "";
-
- public RegistrationBindings(ScenarioContext scenarioContext)
- {
- _scenarioContext = scenarioContext;
- }
- [Given(@"a visitor registering as ""(.*)"" with email (.*)")]
- public void GivenAVisitorRegisteringAsWithEmail(string name, string email)
- {
- this._email = email;
- this._name = name;
- }
-
- [When(@"the registration completes")]
- public void WhenTheRegistrationCompletes()
- {
- //Simulate some email validation
- if (!_email.Contains("@"))
- {
- _email = null;
- _errorMessage = "Invalid Email";
- }
- }
-
- [Then(@"the account system should record (.*) related to user ""(.*)""")]
- public void ThenTheAccountSystemShouldRecordEmailToUser(string email, string name)
- {
- Assert.AreEqual(name, _name);
- Assert.AreEqual(email, _email);
- }
-
- [Then(@"the account system should not record (.*)")]
- public void ThenTheAccountSystemShouldNotRecord(string p0)
- {
- Assert.IsNull(_email);
- }
-
- [Then(@"the error response should be ""(.*)""")]
- public void ThenTheErrorResponseShouldBe(string expectedErrorMessage)
- {
- Assert.AreEqual(expectedErrorMessage, _errorMessage);
- }
-
- }
-}
\ No newline at end of file
diff --git a/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/Reqnroll.MSTest.Generator.ReqnrollPlugin.csproj b/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/Reqnroll.MSTest.Generator.ReqnrollPlugin.csproj
index 8b415f5d0..216d841d0 100644
--- a/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/Reqnroll.MSTest.Generator.ReqnrollPlugin.csproj
+++ b/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/Reqnroll.MSTest.Generator.ReqnrollPlugin.csproj
@@ -1,6 +1,6 @@
- $(Reqnroll_Generator_TFM)
+ netstandard2.0
$(MSBuildThisFileDirectory)Reqnroll.MSTest.nuspec
$(Reqnroll_KeyFile)
$(Reqnroll_EnableStrongNameSigning)
diff --git a/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/Reqnroll.MSTest.nuspec b/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/Reqnroll.MSTest.nuspec
index 63360359a..accdf6f86 100644
--- a/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/Reqnroll.MSTest.nuspec
+++ b/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/Reqnroll.MSTest.nuspec
@@ -16,35 +16,20 @@
reqnroll mstest
$copyright$
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
+
-
-
-
-
+
+
diff --git a/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/build/MSTest.AssemblyHooks.template.cs b/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/build/MSTest.AssemblyHooks.template.cs
index c67a9d7e7..93076d137 100644
--- a/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/build/MSTest.AssemblyHooks.template.cs
+++ b/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/build/MSTest.AssemblyHooks.template.cs
@@ -20,7 +20,15 @@ public static async Task AssemblyInitializeAsync(TestContext testContext)
var currentAssembly = typeof(PROJECT_ROOT_NAMESPACE_MSTestAssemblyHooks).Assembly;
var containerBuilder = new MsTestContainerBuilder(testContext);
- await global::Reqnroll.TestRunnerManager.OnTestRunStartAsync(currentAssembly, containerBuilder: containerBuilder);
+ try
+ {
+ await global::Reqnroll.TestRunnerManager.OnTestRunStartAsync(currentAssembly, containerBuilder: containerBuilder);
+ }
+ catch (System.Exception ex)
+ {
+ // wrap the exception because MsTest swallows the outer exception
+ throw new System.AggregateException(ex);
+ }
}
[AssemblyCleanup]
diff --git a/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/build/Reqnroll.MsTest.targets b/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/build/Reqnroll.MsTest.targets
index b0e411f8c..7be4cb065 100644
--- a/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/build/Reqnroll.MsTest.targets
+++ b/Plugins/Reqnroll.MSTest.Generator.ReqnrollPlugin/build/Reqnroll.MsTest.targets
@@ -17,12 +17,10 @@
- <_Reqnroll_MsTestGeneratorPlugin Condition=" '$(MSBuildRuntimeType)' == 'Core'">netcoreapp3.1
- <_Reqnroll_MsTestGeneratorPlugin Condition=" '$(MSBuildRuntimeType)' != 'Core'">net462
+ <_Reqnroll_MsTestGeneratorPlugin>netstandard2.0
<_Reqnroll_MsTestGeneratorPluginPath>$(MSBuildThisFileDirectory)\$(_Reqnroll_MsTestGeneratorPlugin)\Reqnroll.MSTest.Generator.ReqnrollPlugin.dll
- <_Reqnroll_MsTestRuntimePlugin Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' ">netstandard2.0
- <_Reqnroll_MsTestRuntimePlugin Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' ">net462
+ <_Reqnroll_MsTestRuntimePlugin>netstandard2.0
<_Reqnroll_MsTestRuntimePluginPath>$(MSBuildThisFileDirectory)\..\lib\$(_Reqnroll_MsTestRuntimePlugin)\Reqnroll.MSTest.ReqnrollPlugin.dll
$(MSBuildThisFileDirectory)MSTest.AssemblyHooks$(DefaultLanguageSourceExtension)
diff --git a/Plugins/Reqnroll.MSTest.ReqnrollPlugin/MsTestRuntimeProvider.cs b/Plugins/Reqnroll.MSTest.ReqnrollPlugin/MsTestRuntimeProvider.cs
index ee8be201d..b6db73f7d 100644
--- a/Plugins/Reqnroll.MSTest.ReqnrollPlugin/MsTestRuntimeProvider.cs
+++ b/Plugins/Reqnroll.MSTest.ReqnrollPlugin/MsTestRuntimeProvider.cs
@@ -19,7 +19,5 @@ public void TestIgnore(string message)
{
TestInconclusive(message); // there is no dynamic "Ignore" in mstest
}
-
- public bool DelayedFixtureTearDown => true;
}
}
\ No newline at end of file
diff --git a/Plugins/Reqnroll.MSTest.ReqnrollPlugin/Reqnroll.MSTest.ReqnrollPlugin.csproj b/Plugins/Reqnroll.MSTest.ReqnrollPlugin/Reqnroll.MSTest.ReqnrollPlugin.csproj
index 1de872a2c..928684ecc 100644
--- a/Plugins/Reqnroll.MSTest.ReqnrollPlugin/Reqnroll.MSTest.ReqnrollPlugin.csproj
+++ b/Plugins/Reqnroll.MSTest.ReqnrollPlugin/Reqnroll.MSTest.ReqnrollPlugin.csproj
@@ -1,6 +1,6 @@
- $(Reqnroll_Runtime_TFM)
+ netstandard2.0
$(Reqnroll_KeyFile)
$(Reqnroll_EnableStrongNameSigning)
$(Reqnroll_PublicSign)
@@ -15,7 +15,6 @@
all
runtime; build; native; contentfiles; analyzers
-
diff --git a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/Reqnroll.NUnit.Generator.ReqnrollPlugin.csproj b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/Reqnroll.NUnit.Generator.ReqnrollPlugin.csproj
index 5cb39fec0..243b1dec7 100644
--- a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/Reqnroll.NUnit.Generator.ReqnrollPlugin.csproj
+++ b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/Reqnroll.NUnit.Generator.ReqnrollPlugin.csproj
@@ -1,6 +1,6 @@
- $(Reqnroll_Generator_TFM)
+ netstandard2.0
$(MSBuildThisFileDirectory)Reqnroll.NUnit.nuspec
$(Reqnroll_KeyFile)
$(Reqnroll_EnableStrongNameSigning)
diff --git a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/Reqnroll.NUnit.nuspec b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/Reqnroll.NUnit.nuspec
index 5618ab73b..dc12ee964 100644
--- a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/Reqnroll.NUnit.nuspec
+++ b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/Reqnroll.NUnit.nuspec
@@ -16,35 +16,20 @@
reqnroll nunit
$copyright$
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
+
+
diff --git a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/Reqnroll.NUnit.targets b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/Reqnroll.NUnit.targets
index c9273cf1d..30c4f4456 100644
--- a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/Reqnroll.NUnit.targets
+++ b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/Reqnroll.NUnit.targets
@@ -17,12 +17,10 @@
- <_Reqnroll_NUnitGeneratorPlugin Condition=" '$(MSBuildRuntimeType)' == 'Core'">netcoreapp3.1
- <_Reqnroll_NUnitGeneratorPlugin Condition=" '$(MSBuildRuntimeType)' != 'Core'">net462
+ <_Reqnroll_NUnitGeneratorPlugin>netstandard2.0
<_Reqnroll_NUnitGeneratorPluginPath>$(MSBuildThisFileDirectory)\$(_Reqnroll_NUnitGeneratorPlugin)\Reqnroll.NUnit.Generator.ReqnrollPlugin.dll
- <_Reqnroll_NUnitRuntimePlugin Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' ">netstandard2.0
- <_Reqnroll_NUnitRuntimePlugin Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' ">net462
+ <_Reqnroll_NUnitRuntimePlugin>netstandard2.0
<_Reqnroll_NUnitRuntimePluginPath>$(MSBuildThisFileDirectory)\..\lib\$(_Reqnroll_NUnitRuntimePlugin)\Reqnroll.NUnit.ReqnrollPlugin.dll
$(MSBuildThisFileDirectory)NUnit.AssemblyHooks$(DefaultLanguageSourceExtension)
diff --git a/Plugins/Reqnroll.NUnit.ReqnrollPlugin/NUnitRuntimeProvider.cs b/Plugins/Reqnroll.NUnit.ReqnrollPlugin/NUnitRuntimeProvider.cs
index 081fe7439..a54df615e 100644
--- a/Plugins/Reqnroll.NUnit.ReqnrollPlugin/NUnitRuntimeProvider.cs
+++ b/Plugins/Reqnroll.NUnit.ReqnrollPlugin/NUnitRuntimeProvider.cs
@@ -19,7 +19,5 @@ public void TestIgnore(string message)
{
Assert.Ignore(message);
}
-
- public bool DelayedFixtureTearDown => false;
}
}
\ No newline at end of file
diff --git a/Plugins/Reqnroll.NUnit.ReqnrollPlugin/Reqnroll.NUnit.ReqnrollPlugin.csproj b/Plugins/Reqnroll.NUnit.ReqnrollPlugin/Reqnroll.NUnit.ReqnrollPlugin.csproj
index 6842cfb26..9eb93ad40 100644
--- a/Plugins/Reqnroll.NUnit.ReqnrollPlugin/Reqnroll.NUnit.ReqnrollPlugin.csproj
+++ b/Plugins/Reqnroll.NUnit.ReqnrollPlugin/Reqnroll.NUnit.ReqnrollPlugin.csproj
@@ -1,9 +1,6 @@
- $(Reqnroll_Runtime_TFM)
- $(Reqnroll_KeyFile)
- $(Reqnroll_EnableStrongNameSigning)
- $(Reqnroll_PublicSign)
+ netstandard2.0
$(Reqnroll_KeyFile)
$(Reqnroll_EnableStrongNameSigning)
$(Reqnroll_PublicSign)
@@ -18,7 +15,6 @@
all
runtime; build; native; contentfiles; analyzers
-
diff --git a/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/GeneratorPlugin.cs b/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/GeneratorPlugin.cs
index 4887e2234..b724beca8 100644
--- a/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/GeneratorPlugin.cs
+++ b/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/GeneratorPlugin.cs
@@ -13,7 +13,6 @@ public class GeneratorPlugin : IGeneratorPlugin
{
public void Initialize(GeneratorPluginEvents generatorPluginEvents, GeneratorPluginParameters generatorPluginParameters, UnitTestProviderConfiguration unitTestProviderConfiguration)
{
-#if NETFRAMEWORK
generatorPluginEvents.ConfigurationDefaults += (_, args) =>
{
var configuration = args.ReqnrollProjectConfiguration.ReqnrollConfiguration;
@@ -24,6 +23,5 @@ public void Initialize(GeneratorPluginEvents generatorPluginEvents, GeneratorPlu
loader.UpdateFromAppConfig(configuration, configSection);
}
};
-#endif
}
}
\ No newline at end of file
diff --git a/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin.csproj b/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin.csproj
index 440c2abbd..3d871baa8 100644
--- a/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin.csproj
+++ b/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin.csproj
@@ -1,6 +1,6 @@
- $(Reqnroll_Generator_TFM)
+ netstandard2.0;net462
$(MSBuildThisFileDirectory)Reqnroll.SpecFlowCompatibility.nuspec
$(Reqnroll_KeyFile)
$(Reqnroll_EnableStrongNameSigning)
@@ -17,22 +17,12 @@
all
runtime; build; native; contentfiles; analyzers
-
-
- false
-
-
-
-
-
-
- AppConfig\%(RecursiveDir)%(Filename)%(Extension)
-
+
diff --git a/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/Reqnroll.SpecFlowCompatibility.nuspec b/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/Reqnroll.SpecFlowCompatibility.nuspec
index d6b91b9bc..ee051fbd3 100644
--- a/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/Reqnroll.SpecFlowCompatibility.nuspec
+++ b/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/Reqnroll.SpecFlowCompatibility.nuspec
@@ -22,23 +22,17 @@
-
-
-
-
-
-
-
+
+
+
-
-
-
-
+
+
diff --git a/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/build/Reqnroll.SpecFlowCompatibility.targets b/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/build/Reqnroll.SpecFlowCompatibility.targets
index 76b58aad8..77cfcf43e 100644
--- a/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/build/Reqnroll.SpecFlowCompatibility.targets
+++ b/Plugins/Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin/build/Reqnroll.SpecFlowCompatibility.targets
@@ -2,7 +2,7 @@
- <_Reqnroll_SpecFlowCompatibilityGeneratorPlugin Condition=" '$(MSBuildRuntimeType)' == 'Core'">netcoreapp3.1
+ <_Reqnroll_SpecFlowCompatibilityGeneratorPlugin Condition=" '$(MSBuildRuntimeType)' == 'Core'">netstandard2.0
<_Reqnroll_SpecFlowCompatibilityGeneratorPlugin Condition=" '$(MSBuildRuntimeType)' != 'Core'">net462
<_Reqnroll_SpecFlowCompatibilityGeneratorPluginPath>$(MSBuildThisFileDirectory)\$(_Reqnroll_SpecFlowCompatibilityGeneratorPlugin)\Reqnroll.SpecFlowCompatibility.Generator.ReqnrollPlugin.dll
diff --git a/Plugins/Reqnroll.SpecFlowCompatibility.ReqnrollPlugin/Reqnroll.SpecFlowCompatibility.ReqnrollPlugin.csproj b/Plugins/Reqnroll.SpecFlowCompatibility.ReqnrollPlugin/Reqnroll.SpecFlowCompatibility.ReqnrollPlugin.csproj
index 45e89d292..f36633d45 100644
--- a/Plugins/Reqnroll.SpecFlowCompatibility.ReqnrollPlugin/Reqnroll.SpecFlowCompatibility.ReqnrollPlugin.csproj
+++ b/Plugins/Reqnroll.SpecFlowCompatibility.ReqnrollPlugin/Reqnroll.SpecFlowCompatibility.ReqnrollPlugin.csproj
@@ -1,6 +1,6 @@
- $(Reqnroll_Runtime_TFM)
+ netstandard2.0;net462
$(Reqnroll_KeyFile)
$(Reqnroll_EnableStrongNameSigning)
$(Reqnroll_PublicSign)
@@ -18,15 +18,11 @@
-
-
-
-
-
+
-
-
+
+
\ No newline at end of file
diff --git a/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest.csproj b/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest.csproj
index 8977b5fcb..fb0f900c3 100644
--- a/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest.csproj
+++ b/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest.csproj
@@ -1,10 +1,10 @@
-
+
- net6.0
+ net8.0
true
@@ -30,28 +30,30 @@
- <_Reqnroll_Needed_MSBuildGenerator Condition=" '$(MSBuildRuntimeType)' == 'Core'">$(Reqnroll_Core_Generator_TFM)
- <_Reqnroll_Needed_MSBuildGenerator Condition=" '$(MSBuildRuntimeType)' != 'Core'">$(Reqnroll_FullFramework_Generator_TFM)
+ <_Reqnroll_Needed_MSBuildGenerator Condition=" '$(MSBuildRuntimeType)' == 'Core'">$(Reqnroll_Core_Tools_TFM)
+ <_Reqnroll_Needed_MSBuildGenerator Condition=" '$(MSBuildRuntimeType)' != 'Core'">$(Reqnroll_FullFramework_Tools_TFM)
+
+ <_VerifyGeneratorPluginFramework Condition=" '$(MSBuildRuntimeType)' == 'Core'">netstandard2.0
+ <_VerifyGeneratorPluginFramework Condition=" '$(MSBuildRuntimeType)' != 'Core'">net462
-
-
+
+
-
-
+
+
-
- <_Reqnroll_TaskAssembly>..\..\Reqnroll.Tools.MsBuild.Generation\bin\$(Configuration)\$(_Reqnroll_Needed_MSBuildGenerator)\Reqnroll.Tools.MsBuild.Generation.dll
+ <_Reqnroll_TaskAssembly>..\..\Reqnroll.Tools.MsBuild.Generation\bin\$(Configuration)\$(_Reqnroll_Needed_MSBuildGenerator)\tasks\Reqnroll.Tools.MsBuild.Generation.dll
diff --git a/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest/Steps/Steps.cs b/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest/StepDefinitions/StepDefinitions.cs
similarity index 79%
rename from Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest/Steps/Steps.cs
rename to Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest/StepDefinitions/StepDefinitions.cs
index 492023486..f5f56e96e 100644
--- a/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest/Steps/Steps.cs
+++ b/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin.IntegrationTest/StepDefinitions/StepDefinitions.cs
@@ -1,9 +1,7 @@
-using Reqnroll;
-
-namespace Reqnroll.Verify.ReqnrollPlugin.IntegrationTest.Steps;
+namespace Reqnroll.Verify.ReqnrollPlugin.IntegrationTest.StepDefinitions;
[Binding]
-internal class Steps
+internal class StepDefinitions
{
[When("I try Verify with Reqnroll")]
public async Task ITryVerifyWithReqnroll()
diff --git a/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin/Reqnroll.Verify.ReqnrollPlugin.csproj b/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin/Reqnroll.Verify.ReqnrollPlugin.csproj
index 58723e760..a6aec9b9e 100644
--- a/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin/Reqnroll.Verify.ReqnrollPlugin.csproj
+++ b/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin/Reqnroll.Verify.ReqnrollPlugin.csproj
@@ -1,6 +1,6 @@
-
+
- $(Reqnroll_Generator_TFM)
+ net462;netstandard2.0
$(MSBuildThisFileDirectory)Reqnroll.Verify.nuspec
$(Reqnroll_KeyFile)
$(Reqnroll_EnableStrongNameSigning)
diff --git a/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin/Reqnroll.Verify.nuspec b/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin/Reqnroll.Verify.nuspec
index bf72de566..fb893ba03 100644
--- a/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin/Reqnroll.Verify.nuspec
+++ b/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin/Reqnroll.Verify.nuspec
@@ -20,11 +20,7 @@
-
-
-
-
-
+
@@ -35,11 +31,10 @@
-
+
-
-
+
diff --git a/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin/build/Reqnroll.Verify.targets b/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin/build/Reqnroll.Verify.targets
index ebf38b7c2..1b5945aaf 100644
--- a/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin/build/Reqnroll.Verify.targets
+++ b/Plugins/Reqnroll.Verify/Reqnroll.Verify.ReqnrollPlugin/build/Reqnroll.Verify.targets
@@ -1,9 +1,9 @@
- <_VerifyGeneratorPluginFramework Condition=" '$(MSBuildRuntimeType)' == 'Core'">netcoreapp2.1
+ <_VerifyGeneratorPluginFramework Condition=" '$(MSBuildRuntimeType)' == 'Core'">netstandard2.0
<_VerifyGeneratorPluginFramework Condition=" '$(MSBuildRuntimeType)' != 'Core'">net462
<_VerifyGeneratorPluginPath>$(MSBuildThisFileDirectory)$(_VerifyGeneratorPluginFramework)\Reqnroll.Verify.ReqnrollPlugin.dll
-
\ No newline at end of file
+
diff --git a/Plugins/Reqnroll.Windsor.ReqnrollPlugin/Reqnroll.Windsor.ReqnrollPlugin.csproj b/Plugins/Reqnroll.Windsor.ReqnrollPlugin/Reqnroll.Windsor.ReqnrollPlugin.csproj
index 9ce8dfaf1..b9e35ec99 100644
--- a/Plugins/Reqnroll.Windsor.ReqnrollPlugin/Reqnroll.Windsor.ReqnrollPlugin.csproj
+++ b/Plugins/Reqnroll.Windsor.ReqnrollPlugin/Reqnroll.Windsor.ReqnrollPlugin.csproj
@@ -1,6 +1,6 @@
- $(Reqnroll_Runtime_TFM)
+ netstandard2.0
$(Reqnroll_KeyFile)
$(Reqnroll_EnableStrongNameSigning)
$(Reqnroll_PublicSign)
diff --git a/Plugins/Reqnroll.Windsor.ReqnrollPlugin/Reqnroll.Windsor.nuspec b/Plugins/Reqnroll.Windsor.ReqnrollPlugin/Reqnroll.Windsor.nuspec
index feb4de67a..bc9501d40 100644
--- a/Plugins/Reqnroll.Windsor.ReqnrollPlugin/Reqnroll.Windsor.nuspec
+++ b/Plugins/Reqnroll.Windsor.ReqnrollPlugin/Reqnroll.Windsor.nuspec
@@ -16,28 +16,17 @@
LICENSE
reqnroll castle windsor di dependency injection
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/Plugins/Reqnroll.Windsor.ReqnrollPlugin/build/Reqnroll.Windsor.targets b/Plugins/Reqnroll.Windsor.ReqnrollPlugin/build/Reqnroll.Windsor.targets
index 47de52b31..3f351247c 100644
--- a/Plugins/Reqnroll.Windsor.ReqnrollPlugin/build/Reqnroll.Windsor.targets
+++ b/Plugins/Reqnroll.Windsor.ReqnrollPlugin/build/Reqnroll.Windsor.targets
@@ -1,8 +1,6 @@
-
- <_Reqnroll_WindsorPluginFramework Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' ">netstandard2.0
- <_Reqnroll_WindsorPluginFramework Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' ">net462
+ <_Reqnroll_WindsorPluginFramework>netstandard2.0
<_Reqnroll_WindsorPluginPath>$(MSBuildThisFileDirectory)\..\lib\$(_Reqnroll_WindsorPluginFramework)\Reqnroll.Windsor.ReqnrollPlugin.dll
diff --git a/Plugins/Reqnroll.xUnit.Generator.ReqnrollPlugin/Reqnroll.xUnit.Generator.ReqnrollPlugin.csproj b/Plugins/Reqnroll.xUnit.Generator.ReqnrollPlugin/Reqnroll.xUnit.Generator.ReqnrollPlugin.csproj
index 66e6500e1..8a0e69ddb 100644
--- a/Plugins/Reqnroll.xUnit.Generator.ReqnrollPlugin/Reqnroll.xUnit.Generator.ReqnrollPlugin.csproj
+++ b/Plugins/Reqnroll.xUnit.Generator.ReqnrollPlugin/Reqnroll.xUnit.Generator.ReqnrollPlugin.csproj
@@ -1,6 +1,6 @@
- $(Reqnroll_Generator_TFM)
+ netstandard2.0
$(MSBuildThisFileDirectory)Reqnroll.xUnit.nuspec
$(Reqnroll_KeyFile)
$(Reqnroll_EnableStrongNameSigning)
diff --git a/Plugins/Reqnroll.xUnit.Generator.ReqnrollPlugin/Reqnroll.xUnit.nuspec b/Plugins/Reqnroll.xUnit.Generator.ReqnrollPlugin/Reqnroll.xUnit.nuspec
index 421d0d21e..1aa3e7975 100644
--- a/Plugins/Reqnroll.xUnit.Generator.ReqnrollPlugin/Reqnroll.xUnit.nuspec
+++ b/Plugins/Reqnroll.xUnit.Generator.ReqnrollPlugin/Reqnroll.xUnit.nuspec
@@ -16,39 +16,21 @@
reqnroll xUnit
$copyright$
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
+
+
diff --git a/Plugins/Reqnroll.xUnit.Generator.ReqnrollPlugin/build/Reqnroll.xUnit.targets b/Plugins/Reqnroll.xUnit.Generator.ReqnrollPlugin/build/Reqnroll.xUnit.targets
index 0a47457ae..60ad81ef6 100644
--- a/Plugins/Reqnroll.xUnit.Generator.ReqnrollPlugin/build/Reqnroll.xUnit.targets
+++ b/Plugins/Reqnroll.xUnit.Generator.ReqnrollPlugin/build/Reqnroll.xUnit.targets
@@ -16,12 +16,10 @@
- <_Reqnroll_xUnitGeneratorPlugin Condition=" '$(MSBuildRuntimeType)' == 'Core'" >netcoreapp3.1
- <_Reqnroll_xUnitGeneratorPlugin Condition=" '$(MSBuildRuntimeType)' != 'Core'" >net462
+ <_Reqnroll_xUnitGeneratorPlugin>netstandard2.0
<_Reqnroll_xUnitGeneratorPluginPath>$(MSBuildThisFileDirectory)\$(_Reqnroll_xUnitGeneratorPlugin)\Reqnroll.xUnit.Generator.ReqnrollPlugin.dll
- <_Reqnroll_xUnitRuntimePlugin Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' ">netstandard2.0
- <_Reqnroll_xUnitRuntimePlugin Condition=" '$(TargetFrameworkIdentifier)' == '.NETFramework' ">net462
+ <_Reqnroll_xUnitRuntimePlugin>netstandard2.0
<_Reqnroll_xUnitRuntimePluginPath>$(MSBuildThisFileDirectory)\..\lib\$(_Reqnroll_xUnitRuntimePlugin)\Reqnroll.xUnit.ReqnrollPlugin.dll
$(MSBuildThisFileDirectory)xUnit.AssemblyHooks$(DefaultLanguageSourceExtension)
diff --git a/Plugins/Reqnroll.xUnit.ReqnrollPlugin/Reqnroll.xUnit.ReqnrollPlugin.csproj b/Plugins/Reqnroll.xUnit.ReqnrollPlugin/Reqnroll.xUnit.ReqnrollPlugin.csproj
index 0056c313d..386177533 100644
--- a/Plugins/Reqnroll.xUnit.ReqnrollPlugin/Reqnroll.xUnit.ReqnrollPlugin.csproj
+++ b/Plugins/Reqnroll.xUnit.ReqnrollPlugin/Reqnroll.xUnit.ReqnrollPlugin.csproj
@@ -1,6 +1,6 @@
- $(Reqnroll_Runtime_TFM)
+ netstandard2.0
$(Reqnroll_KeyFile)
$(Reqnroll_EnableStrongNameSigning)
$(Reqnroll_PublicSign)
@@ -15,7 +15,9 @@
all
runtime; build; native; contentfiles; analyzers
+
+
diff --git a/Plugins/Reqnroll.xUnit.ReqnrollPlugin/XUnitRuntimeProvider.cs b/Plugins/Reqnroll.xUnit.ReqnrollPlugin/XUnitRuntimeProvider.cs
index c84221bb0..99efacd30 100644
--- a/Plugins/Reqnroll.xUnit.ReqnrollPlugin/XUnitRuntimeProvider.cs
+++ b/Plugins/Reqnroll.xUnit.ReqnrollPlugin/XUnitRuntimeProvider.cs
@@ -19,7 +19,5 @@ public void TestIgnore(string message)
{
Skip.If(true, message);
}
-
- public bool DelayedFixtureTearDown => false;
}
}
\ No newline at end of file
diff --git a/README.md b/README.md
index 99329e310..224de1f8c 100644
--- a/README.md
+++ b/README.md
@@ -17,6 +17,7 @@ Reqnroll works on all major operating systems (Windows, Linux, macOS), on all co
* [Quickstart guide](https://go.reqnroll.net/quickstart)
* [Reqnroll website](https://reqnroll.net/)
* [Reqnroll documentation](https://docs.reqnroll.net/)
+* [Migrating from SpecFlow](https://docs.reqnroll.net/latest/guides/migrating-from-specflow.html)
* [Release notes](https://go.reqnroll.net/release-notes)
* [IDE setup instructions for Reqnroll](https://go.reqnroll.net/doc-setup-ide)
@@ -34,4 +35,4 @@ Reqnroll for VisualStudio is licensed under the [BSD 3-Clause License](LICENSE).
Copyright (c) 2024 Reqnroll
-This project is based on the [SpecFlow](https://github.com/SpecFlowOSS/SpecFlow) framework.
\ No newline at end of file
+This project is based on the [SpecFlow](https://github.com/SpecFlowOSS/SpecFlow) framework.
diff --git a/Reqnroll.BoDi/BoDi.cs b/Reqnroll.BoDi/BoDi.cs
deleted file mode 100644
index ba657a233..000000000
--- a/Reqnroll.BoDi/BoDi.cs
+++ /dev/null
@@ -1,920 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Reflection;
-using System.Runtime.Serialization;
-using System.Threading;
-
-namespace Reqnroll.BoDi
-{
- [Serializable]
- public class ObjectContainerException : Exception
- {
- public ObjectContainerException(string message, Type[] resolutionPath) : base(GetMessage(message, resolutionPath))
- {
- }
-
- protected ObjectContainerException(
- SerializationInfo info,
- StreamingContext context) : base(info, context)
- {
- }
-
- static private string GetMessage(string message, Type[] resolutionPath)
- {
- if (resolutionPath == null || resolutionPath.Length == 0)
- return message;
-
- return string.Format("{0} (resolution path: {1})", message, string.Join("->", resolutionPath.Select(t => t.FullName).ToArray()));
- }
- }
-
- public interface IObjectContainer : IDisposable
- {
- ///
- /// Fired when a new object is created directly by the container. It is not invoked for resolving instance and factory registrations.
- ///
- event Action