diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..31d907a9 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @SonOfSardaar @MehdiK \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e34c57da..1d125497 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,7 +7,7 @@ on: runPublish: description: 'Publish Nuget ?' required: true - default: 'false' + default: false type: boolean jobs: @@ -34,8 +34,14 @@ jobs: id: gitversion - name: Format NuGet version - run: | - packageVersion="${{ steps.gitversion.outputs.majorMinorPatch }}.${{steps.gitversion.outputs.preReleaseNumber}}" + run: | + buildNumber="${{steps.gitversion.outputs.preReleaseNumber}}${{ steps.gitversion.outputs.buildMetaData }}" + + if [[ "${GITHUB_REF}" != "refs/heads/${{ github.event.repository.default_branch }}" ]]; then + buildNumber="${buildNumber}-beta" + fi + + packageVersion="${{ steps.gitversion.outputs.majorMinorPatch }}.${buildNumber}" echo "packageVersion=$packageVersion" >> $GITHUB_OUTPUT id: formatversion @@ -63,6 +69,8 @@ jobs: - name: Run tests with coverage working-directory: src + env: + DiffEngine_Disabled: 'true' run: >- dotnet test --configuration Release @@ -136,10 +144,41 @@ jobs: name: release-notes path: release-notes.md - - name: Create NuGet package + - name: Check for changes in project paths + id: changes + run: | + if git diff --quiet origin/main HEAD -- src/Samples/; then + echo "SamplesUpdated=false" >> $GITHUB_OUTPUT + else + echo "SamplesUpdated=true" >> $GITHUB_OUTPUT + fi + + if git diff --quiet origin/main HEAD -- src/TestStack.BDDfy/; then + echo "BddfyUpdated=false" >> $GITHUB_OUTPUT + else + echo "BddfyUpdated=true" >> $GITHUB_OUTPUT + fi + + - name: Print changed paths + run: | + echo "SamplesUpdated: ${{ steps.changes.outputs.SamplesUpdated }}" + echo "BddfyUpdated: ${{ steps.changes.outputs.BddfyUpdated }}" + + - name: Create Samples package working-directory: src + if: steps.changes.outputs.SamplesUpdated == 'true' run: >- - dotnet pack + dotnet pack ./Samples/TestStack.BDDfy.Samples/*.csproj + --configuration Release + --no-build + /p:PackageVersion=${{ steps.formatversion.outputs.packageVersion }} + --output ../packages + + - name: Create Bddfy package + working-directory: src + if: steps.changes.outputs.BddfyUpdated == 'true' + run: >- + dotnet pack ./TestStack.BDDfy/*.csproj --configuration Release --no-build /p:PackageVersion=${{ steps.formatversion.outputs.packageVersion }} @@ -160,7 +199,7 @@ jobs: publish-nuget: runs-on: ubuntu-latest needs: build - if: github.event.inputs.runPublish == 'true' && github.ref_name == github.event.repository.default_branch + if: github.event.inputs.runPublish == 'true' || github.ref_name == github.event.repository.default_branch environment: name: Publish url: https://www.nuget.org/packages/TestStack.BDDfy/ diff --git a/appveyor.deploy.yml b/appveyor.deploy.yml deleted file mode 100644 index b9766709..00000000 --- a/appveyor.deploy.yml +++ /dev/null @@ -1,14 +0,0 @@ -assembly_info: - patch: false - -platform: - - Any CPU - -configuration: - - Debug - -build_script: - - ps: ./deploy.ps1 - -test: off -skip_non_tags: true \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index aaaa0545..00000000 --- a/appveyor.yml +++ /dev/null @@ -1,17 +0,0 @@ -assembly_info: - patch: false - -platform: - - Any CPU - -configuration: - - Release - -build_script: - - powershell .\build.ps1 - -test: off -skip_tags: true - -cache: - - src\packages -> **\packages.config # preserve "packages" directory in the root of build folder but will reset it if packages.config is modified diff --git a/build.cake b/build.cake deleted file mode 100644 index 27e2811d..00000000 --- a/build.cake +++ /dev/null @@ -1,83 +0,0 @@ -#tool "nuget:?package=GitReleaseNotes" -#tool "nuget:?package=GitVersion.CommandLine" - -var target = Argument("target", "Default"); -var bddfyProj = "./src/TestStack.BDDfy/TestStack.BDDfy.csproj"; -var outputDir = "./artifacts/"; - -Task("Clean") - .Does(() => { - if (DirectoryExists(outputDir)) - { - DeleteDirectory(outputDir, recursive:true); - } - }); - -Task("Restore") - .Does(() => { - DotNetCoreRestore("src"); - }); - -GitVersion versionInfo = null; -Task("Version") - .Does(() => { - GitVersion(new GitVersionSettings{ - UpdateAssemblyInfo = true, - OutputType = GitVersionOutput.BuildServer - }); - versionInfo = GitVersion(new GitVersionSettings{ OutputType = GitVersionOutput.Json }); - }); - -Task("Build") - .IsDependentOn("Clean") - .IsDependentOn("Version") - .IsDependentOn("Restore") - .Does(() => { - MSBuild("./src/TestStack.BDDfy.sln"); - }); - -Task("Test") - .IsDependentOn("Build") - .Does(() => { - DotNetCoreTest("./src/TestStack.BDDfy.Tests"); - DotNetCoreTest("./src/Samples/TestStack.BDDfy.Samples"); - }); - -Task("Package") - .IsDependentOn("Test") - .Does(() => { - var settings = new DotNetCorePackSettings - { - ArgumentCustomization = args=> args.Append(" --include-symbols /p:PackageVersion=" + versionInfo.NuGetVersion), - OutputDirectory = outputDir, - NoBuild = true - }; - - DotNetCorePack(bddfyProj, settings); - - var releaseNotesExitCode = StartProcess( - @"tools\GitReleaseNotes\tools\gitreleasenotes.exe", - new ProcessSettings { Arguments = ". /o artifacts/releasenotes.md" }); - - if (string.IsNullOrEmpty(System.IO.File.ReadAllText("./artifacts/releasenotes.md"))) - System.IO.File.WriteAllText("./artifacts/releasenotes.md", "No issues closed since last release"); - - if (releaseNotesExitCode != 0) throw new Exception("Failed to generate release notes"); - - System.IO.File.WriteAllLines(outputDir + "artifacts", new[]{ - "nuget:TestStack.BDDfy." + versionInfo.NuGetVersion + ".nupkg", - "nugetSymbols:TestStack.BDDfy." + versionInfo.NuGetVersion + ".symbols.nupkg", - "releaseNotes:releasenotes.md" - }); - - if (AppVeyor.IsRunningOnAppVeyor) - { - foreach (var file in GetFiles(outputDir + "**/*")) - AppVeyor.UploadArtifact(file.FullPath); - } - }); - -Task("Default") - .IsDependentOn("Package"); - -RunTarget(target); \ No newline at end of file diff --git a/build.ps1 b/build.ps1 deleted file mode 100644 index 18b85605..00000000 --- a/build.ps1 +++ /dev/null @@ -1,145 +0,0 @@ -########################################################################## -# This is the Cake bootstrapper script for PowerShell. -# This file was downloaded from https://github.com/cake-build/resources -# Feel free to change this file to fit your needs. -########################################################################## - -<# - -.SYNOPSIS -This is a Powershell script to bootstrap a Cake build. - -.DESCRIPTION -This Powershell script will download NuGet if missing, restore NuGet tools (including Cake) -and execute your Cake build script with the parameters you provide. - -.PARAMETER Script -The build script to execute. -.PARAMETER Target -The build script target to run. -.PARAMETER Configuration -The build configuration to use. -.PARAMETER Verbosity -Specifies the amount of information to be displayed. -.PARAMETER Experimental -Tells Cake to use the latest Roslyn release. -.PARAMETER WhatIf -Performs a dry run of the build script. -No tasks will be executed. -.PARAMETER Mono -Tells Cake to use the Mono scripting engine. -.PARAMETER SkipToolPackageRestore -Skips restoring of packages. -.PARAMETER ScriptArgs -Remaining arguments are added here. - -.LINK -http://cakebuild.net - -#> - -[CmdletBinding()] -Param( - [string]$Script = "build.cake", - [string]$Target = "Default", - [string]$Configuration = "Release", - [ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")] - [string]$Verbosity = "Verbose", - [switch]$Experimental, - [Alias("DryRun","Noop")] - [switch]$WhatIf, - [switch]$Mono, - [switch]$SkipToolPackageRestore, - [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] - [string[]]$ScriptArgs -) - -Write-Host "Preparing to run build script..." - -$PSScriptRoot = split-path -parent $MyInvocation.MyCommand.Definition; -$TOOLS_DIR = Join-Path $PSScriptRoot "tools" -$NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe" -$NUGET_URL = "http://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -$CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe" -$PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config" - -# Should we use mono? -$UseMono = ""; -if($Mono.IsPresent) { - Write-Verbose -Message "Using the Mono based scripting engine." - $UseMono = "-mono" -} - -# Should we use the new Roslyn? -$UseExperimental = ""; -if($Experimental.IsPresent -and !($Mono.IsPresent)) { - Write-Verbose -Message "Using experimental version of Roslyn." - $UseExperimental = "-experimental" -} - -# Is this a dry run? -$UseDryRun = ""; -if($WhatIf.IsPresent) { - $UseDryRun = "-dryrun" -} - -# Make sure tools folder exists -if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) { - Write-Verbose -Message "Creating tools directory..." - New-Item -Path $TOOLS_DIR -Type directory | out-null -} - -# Make sure that packages.config exist. -if (!(Test-Path $PACKAGES_CONFIG)) { - Write-Verbose -Message "Downloading packages.config..." - try { Invoke-WebRequest -Uri http://cakebuild.net/download/bootstrapper/packages -OutFile $PACKAGES_CONFIG } catch { - Throw "Could not download packages.config." - } -} - -# Try find NuGet.exe in path if not exists -if (!(Test-Path $NUGET_EXE)) { - Write-Verbose -Message "Trying to find nuget.exe in PATH..." - $existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_) } - $NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1 - if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) { - Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)." - $NUGET_EXE = $NUGET_EXE_IN_PATH.FullName - } -} - -# Try download NuGet.exe if not exists -if (!(Test-Path $NUGET_EXE)) { - Write-Verbose -Message "Downloading NuGet.exe..." - try { - (New-Object System.Net.WebClient).DownloadFile($NUGET_URL, $NUGET_EXE) - } catch { - Throw "Could not download NuGet.exe." - } -} - -# Save nuget.exe path to environment to be available to child processed -$ENV:NUGET_EXE = $NUGET_EXE - -# Restore tools from NuGet? -if(-Not $SkipToolPackageRestore.IsPresent) { - Push-Location - Set-Location $TOOLS_DIR - Write-Verbose -Message "Restoring tools from NuGet..." - $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$TOOLS_DIR`"" - if ($LASTEXITCODE -ne 0) { - Throw "An error occured while restoring NuGet tools." - } - Write-Verbose -Message ($NuGetOutput | out-string) - Pop-Location -} - -# Make sure that Cake has been installed. -if (!(Test-Path $CAKE_EXE)) { - Throw "Could not find Cake.exe at $CAKE_EXE" -} - -# Start Cake -Write-Host "Running build script..." -Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs" -exit $LASTEXITCODE diff --git a/deploy.cake b/deploy.cake deleted file mode 100644 index f3718c66..00000000 --- a/deploy.cake +++ /dev/null @@ -1,89 +0,0 @@ -#addin "Cake.Json" - -using System.Net; -using System.Linq; - -var target = Argument("target", "Default"); - -string Get(string url) -{ - var assetsRequest = WebRequest.CreateHttp(url); - assetsRequest.Method = "GET"; - assetsRequest.Accept = "application/vnd.github.v3+json"; - assetsRequest.UserAgent = "BuildScript"; - - using (var assetsResponse = assetsRequest.GetResponse()) - { - var assetsStream = assetsResponse.GetResponseStream(); - var assetsReader = new StreamReader(assetsStream); - var assetsBody = assetsReader.ReadToEnd(); - return assetsBody; - } -} - -Task("EnsureRequirements") - .Does(() => - { - if (!AppVeyor.IsRunningOnAppVeyor) - throw new Exception("Deployment should happen via appveyor"); - - var isTag = - AppVeyor.Environment.Repository.Tag.IsTag && - !string.IsNullOrWhiteSpace(AppVeyor.Environment.Repository.Tag.Name); - if (!isTag) - throw new Exception("Deployment should happen from a published GitHub release"); - }); - -var tag = ""; - -Task("UpdateVersionInfo") - .IsDependentOn("EnsureRequirements") - .Does(() => - { - tag = AppVeyor.Environment.Repository.Tag.Name; - AppVeyor.UpdateBuildVersion(tag); - }); - -Task("DownloadGitHubReleaseArtifacts") - .IsDependentOn("UpdateVersionInfo") - .Does(() => - { - var assets_url = ParseJson(Get("https://api.github.com/repos/teststack/teststack.bddfy/releases/tags/" + tag)) - .GetValue("assets_url").Value(); - EnsureDirectoryExists("./releaseArtifacts"); - foreach(var asset in DeserializeJson(Get(assets_url))) - { - DownloadFile(asset.Value("browser_download_url"), "./releaseArtifacts/" + asset.Value("name")); - } - }); - -Task("DeployNuget") - .IsDependentOn("DownloadGitHubReleaseArtifacts") - .Does(() => - { - // Turns .artifacts file into a lookup - var fileLookup = System.IO.File - .ReadAllLines("./releaseArtifacts/artifacts") - .Select(l => l.Split(':')) - .ToDictionary(v => v[0], v => v[1]); - - NuGetPush( - "./releaseArtifacts/" + fileLookup["nuget"], - new NuGetPushSettings { - ApiKey = EnvironmentVariable("NuGetApiKey"), - Source = "https://www.nuget.org/api/v2/package" - }); - }); - -Task("Deploy") - .IsDependentOn("DeployNuget"); - -Task("Default") - .IsDependentOn("Deploy"); - -Task("Verify") - .Does(() => { - // Nothing, used to make sure the script compiles - }); - -RunTarget(target); \ No newline at end of file diff --git a/deploy.ps1 b/deploy.ps1 deleted file mode 100644 index eaf1d62d..00000000 --- a/deploy.ps1 +++ /dev/null @@ -1,145 +0,0 @@ -########################################################################## -# This is the Cake bootstrapper script for PowerShell. -# This file was downloaded from https://github.com/cake-build/resources -# Feel free to change this file to fit your needs. -########################################################################## - -<# - -.SYNOPSIS -This is a Powershell script to bootstrap a Cake build. - -.DESCRIPTION -This Powershell script will download NuGet if missing, restore NuGet tools (including Cake) -and execute your Cake build script with the parameters you provide. - -.PARAMETER Script -The build script to execute. -.PARAMETER Target -The build script target to run. -.PARAMETER Configuration -The build configuration to use. -.PARAMETER Verbosity -Specifies the amount of information to be displayed. -.PARAMETER Experimental -Tells Cake to use the latest Roslyn release. -.PARAMETER WhatIf -Performs a dry run of the build script. -No tasks will be executed. -.PARAMETER Mono -Tells Cake to use the Mono scripting engine. -.PARAMETER SkipToolPackageRestore -Skips restoring of packages. -.PARAMETER ScriptArgs -Remaining arguments are added here. - -.LINK -http://cakebuild.net - -#> - -[CmdletBinding()] -Param( - [string]$Script = "deploy.cake", - [string]$Target = "Default", - [string]$Configuration = "Release", - [ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")] - [string]$Verbosity = "Verbose", - [switch]$Experimental, - [Alias("DryRun","Noop")] - [switch]$WhatIf, - [switch]$Mono, - [switch]$SkipToolPackageRestore, - [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] - [string[]]$ScriptArgs -) - -Write-Host "Preparing to run build script..." - -$PSScriptRoot = split-path -parent $MyInvocation.MyCommand.Definition; -$TOOLS_DIR = Join-Path $PSScriptRoot "tools" -$NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe" -$NUGET_URL = "http://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -$CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe" -$PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config" - -# Should we use mono? -$UseMono = ""; -if($Mono.IsPresent) { - Write-Verbose -Message "Using the Mono based scripting engine." - $UseMono = "-mono" -} - -# Should we use the new Roslyn? -$UseExperimental = ""; -if($Experimental.IsPresent -and !($Mono.IsPresent)) { - Write-Verbose -Message "Using experimental version of Roslyn." - $UseExperimental = "-experimental" -} - -# Is this a dry run? -$UseDryRun = ""; -if($WhatIf.IsPresent) { - $UseDryRun = "-dryrun" -} - -# Make sure tools folder exists -if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) { - Write-Verbose -Message "Creating tools directory..." - New-Item -Path $TOOLS_DIR -Type directory | out-null -} - -# Make sure that packages.config exist. -if (!(Test-Path $PACKAGES_CONFIG)) { - Write-Verbose -Message "Downloading packages.config..." - try { Invoke-WebRequest -Uri http://cakebuild.net/download/bootstrapper/packages -OutFile $PACKAGES_CONFIG } catch { - Throw "Could not download packages.config." - } -} - -# Try find NuGet.exe in path if not exists -if (!(Test-Path $NUGET_EXE)) { - Write-Verbose -Message "Trying to find nuget.exe in PATH..." - $existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_) } - $NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1 - if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) { - Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)." - $NUGET_EXE = $NUGET_EXE_IN_PATH.FullName - } -} - -# Try download NuGet.exe if not exists -if (!(Test-Path $NUGET_EXE)) { - Write-Verbose -Message "Downloading NuGet.exe..." - try { - (New-Object System.Net.WebClient).DownloadFile($NUGET_URL, $NUGET_EXE) - } catch { - Throw "Could not download NuGet.exe." - } -} - -# Save nuget.exe path to environment to be available to child processed -$ENV:NUGET_EXE = $NUGET_EXE - -# Restore tools from NuGet? -if(-Not $SkipToolPackageRestore.IsPresent) { - Push-Location - Set-Location $TOOLS_DIR - Write-Verbose -Message "Restoring tools from NuGet..." - $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$TOOLS_DIR`"" - if ($LASTEXITCODE -ne 0) { - Throw "An error occured while restoring NuGet tools." - } - Write-Verbose -Message ($NuGetOutput | out-string) - Pop-Location -} - -# Make sure that Cake has been installed. -if (!(Test-Path $CAKE_EXE)) { - Throw "Could not find Cake.exe at $CAKE_EXE" -} - -# Start Cake -Write-Host "Running build script..." -Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs" -exit $LASTEXITCODE diff --git a/src/Samples/TestStack.BDDfy.Samples/AssemblySetupFixture.cs b/src/Samples/TestStack.BDDfy.Samples/AssemblySetupFixture.cs index 8c3c8d61..8d2aa259 100644 --- a/src/Samples/TestStack.BDDfy.Samples/AssemblySetupFixture.cs +++ b/src/Samples/TestStack.BDDfy.Samples/AssemblySetupFixture.cs @@ -45,7 +45,8 @@ protected override ITestFrameworkExecutor CreateExecutor(AssemblyName assemblyNa } public class XunitTestFrameworkExecutorWithAssemblyFixture(AssemblyName assemblyName, - ISourceInformationProvider sourceInformationProvider, IMessageSink diagnosticMessageSink): XunitTestFrameworkExecutor(assemblyName, sourceInformationProvider, diagnosticMessageSink) + ISourceInformationProvider sourceInformationProvider, IMessageSink diagnosticMessageSink): + XunitTestFrameworkExecutor(assemblyName, sourceInformationProvider, diagnosticMessageSink) { protected override async void RunTestCases(IEnumerable testCases, IMessageSink executionMessageSink, ITestFrameworkExecutionOptions executionOptions) @@ -60,7 +61,8 @@ public class XunitTestAssemblyRunnerWithAssemblyFixture(ITestAssembly testAssemb IEnumerable testCases, IMessageSink diagnosticMessageSink, IMessageSink executionMessageSink, - ITestFrameworkExecutionOptions executionOptions): XunitTestAssemblyRunner(testAssembly, testCases, diagnosticMessageSink, executionMessageSink, executionOptions) + ITestFrameworkExecutionOptions executionOptions): + XunitTestAssemblyRunner(testAssembly, testCases, diagnosticMessageSink, executionMessageSink, executionOptions) { readonly Dictionary assemblyFixtureMappings = new(); @@ -96,7 +98,15 @@ protected override Task RunTestCollectionAsync(IMessageBus messageBu ITestCollection testCollection, IEnumerable testCases, CancellationTokenSource cancellationTokenSource) - => new XunitTestCollectionRunnerWithAssemblyFixture(assemblyFixtureMappings, testCollection, testCases, DiagnosticMessageSink, messageBus, TestCaseOrderer, new ExceptionAggregator(Aggregator), cancellationTokenSource).RunAsync(); + => new XunitTestCollectionRunnerWithAssemblyFixture( + assemblyFixtureMappings, + testCollection, + testCases, + DiagnosticMessageSink, + messageBus, + TestCaseOrderer, + new ExceptionAggregator(Aggregator), + cancellationTokenSource).RunAsync(); } public class XunitTestCollectionRunnerWithAssemblyFixture(Dictionary assemblyFixtureMappings, @@ -106,7 +116,8 @@ public class XunitTestCollectionRunnerWithAssemblyFixture(Dictionary assemblyFixtureMappings = assemblyFixtureMappings; readonly IMessageSink diagnosticMessageSink = diagnosticMessageSink; @@ -120,7 +131,16 @@ protected override Task RunTestClassAsync(ITestClass testClass, IRef combinedFixtures[kvp.Key] = kvp.Value; // We've done everything we need, so let the built-in types do the rest of the heavy lifting - return new XunitTestClassRunner(testClass, @class, testCases, diagnosticMessageSink, MessageBus, TestCaseOrderer, new ExceptionAggregator(Aggregator), CancellationTokenSource, combinedFixtures).RunAsync(); + return new XunitTestClassRunner( + testClass, + @class, + testCases, + diagnosticMessageSink, + MessageBus, + TestCaseOrderer, + new ExceptionAggregator(Aggregator), + CancellationTokenSource, + combinedFixtures).RunAsync(); } }