mirror of
https://github.com/Smaug123/unofficial-nunit-runner
synced 2025-10-07 02:08:40 +00:00
Compare commits
19 Commits
WoofWare.N
...
1c4fc26a13
Author | SHA1 | Date | |
---|---|---|---|
|
1c4fc26a13 | ||
|
b38a3fcc02 | ||
|
73dc21e11f | ||
|
5b54bb256e | ||
|
b56e1b1542 | ||
|
ba46b1edb6 | ||
|
72674e1711 | ||
|
c4b862bdd8 | ||
|
4c629b1d64 | ||
|
e67820c56d | ||
|
31bff4cb03 | ||
|
d081cfaafb | ||
|
c237df3885 | ||
|
3b9b9eb4c8 | ||
|
12e3fc0e4f | ||
|
208b809096 | ||
|
b4e5baddcf | ||
|
5597b3f2f8 | ||
|
fcfdcef6cf |
@@ -9,7 +9,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"fsharp-analyzers": {
|
"fsharp-analyzers": {
|
||||||
"version": "0.32.0",
|
"version": "0.32.1",
|
||||||
"commands": [
|
"commands": [
|
||||||
"fsharp-analyzers"
|
"fsharp-analyzers"
|
||||||
]
|
]
|
||||||
|
22
.envrc
22
.envrc
@@ -1 +1,23 @@
|
|||||||
use flake
|
use flake
|
||||||
|
DOTNET_PATH=$(readlink "$(which dotnet)")
|
||||||
|
SETTINGS_FILE=$(find . -maxdepth 1 -type f -name '*.sln.DotSettings.user')
|
||||||
|
MSBUILD=$(realpath "$(find "$(dirname "$DOTNET_PATH")/../share/dotnet/sdk" -maxdepth 2 -type f -name MSBuild.dll)")
|
||||||
|
if [ -f "$SETTINGS_FILE" ] ; then
|
||||||
|
xmlstarlet ed --inplace \
|
||||||
|
-N wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" \
|
||||||
|
-N x="http://schemas.microsoft.com/winfx/2006/xaml" \
|
||||||
|
-N s="clr-namespace:System;assembly=mscorlib" \
|
||||||
|
-N ss="urn:shemas-jetbrains-com:settings-storage-xaml" \
|
||||||
|
--update "//s:String[@x:Key='/Default/Environment/Hierarchy/Build/BuildTool/DotNetCliExePath/@EntryValue']" \
|
||||||
|
--value "$(realpath "$(dirname "$DOTNET_PATH")/../share/dotnet/dotnet")" \
|
||||||
|
"$SETTINGS_FILE"
|
||||||
|
|
||||||
|
xmlstarlet ed --inplace \
|
||||||
|
-N wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" \
|
||||||
|
-N x="http://schemas.microsoft.com/winfx/2006/xaml" \
|
||||||
|
-N s="clr-namespace:System;assembly=mscorlib" \
|
||||||
|
-N ss="urn:shemas-jetbrains-com:settings-storage-xaml" \
|
||||||
|
--update "//s:String[@x:Key='/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue']" \
|
||||||
|
--value "$MSBUILD" \
|
||||||
|
"$SETTINGS_FILE"
|
||||||
|
fi
|
||||||
|
54
.github/workflows/dotnet.yaml
vendored
54
.github/workflows/dotnet.yaml
vendored
@@ -25,7 +25,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
@@ -39,12 +39,12 @@ jobs:
|
|||||||
run: 'nix develop --command dotnet build --no-restore --configuration ${{matrix.config}}'
|
run: 'nix develop --command dotnet build --no-restore --configuration ${{matrix.config}}'
|
||||||
- name: Test
|
- name: Test
|
||||||
run: |
|
run: |
|
||||||
nix develop --command dotnet test --no-build --verbosity normal --configuration ${{matrix.config}} --framework net8.0 --filter 'FullyQualifiedName !~ FailingConsumer'
|
nix develop --command dotnet test --no-build --verbosity normal --configuration ${{matrix.config}} --filter 'FullyQualifiedName !~ FailingConsumer'
|
||||||
|
|
||||||
selftest-intended-failures:
|
selftest-intended-failures:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
@@ -57,7 +57,7 @@ jobs:
|
|||||||
- name: Build
|
- name: Build
|
||||||
run: 'nix develop --command dotnet build --no-restore --configuration Release'
|
run: 'nix develop --command dotnet build --no-restore --configuration Release'
|
||||||
- name: Test using self
|
- name: Test using self
|
||||||
run: 'nix develop --command dotnet exec ./WoofWare.NUnitTestRunner/bin/Release/net6.0/WoofWare.NUnitTestRunner.dll ./FailingConsumer/bin/Release/net8.0/FailingConsumer.dll --trx TrxOut/out.trx || true'
|
run: 'nix develop --command dotnet exec ./WoofWare.NUnitTestRunner/bin/Release/net9.0/WoofWare.NUnitTestRunner.dll ./FailingConsumer/bin/Release/net9.0/FailingConsumer.dll --trx TrxOut/out.trx || true'
|
||||||
- name: Munge output
|
- name: Munge output
|
||||||
run: 'nix develop --command xmlstarlet sel -N x="http://microsoft.com/schemas/VisualStudio/TeamTest/2010" -t -m "//x:UnitTestResult" -v "@testName" -o ": " -v ".//x:ErrorInfo/x:Message" -n TrxOut/out.trx > snapshot.txt'
|
run: 'nix develop --command xmlstarlet sel -N x="http://microsoft.com/schemas/VisualStudio/TeamTest/2010" -t -m "//x:UnitTestResult" -v "@testName" -o ": " -v ".//x:ErrorInfo/x:Message" -n TrxOut/out.trx > snapshot.txt'
|
||||||
- name: Check output matches expected
|
- name: Check output matches expected
|
||||||
@@ -81,7 +81,7 @@ jobs:
|
|||||||
statuses: read
|
statuses: read
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
@@ -94,10 +94,10 @@ jobs:
|
|||||||
- name: Build
|
- name: Build
|
||||||
run: 'nix develop --command dotnet build --no-restore --configuration Release'
|
run: 'nix develop --command dotnet build --no-restore --configuration Release'
|
||||||
- name: Test using self
|
- name: Test using self
|
||||||
run: 'nix develop --command dotnet exec ./WoofWare.NUnitTestRunner/bin/Release/net6.0/WoofWare.NUnitTestRunner.dll ./Consumer/bin/Release/net8.0/Consumer.dll --trx TrxOut/out.trx'
|
run: 'nix develop --command dotnet exec ./WoofWare.NUnitTestRunner/bin/Release/net9.0/WoofWare.NUnitTestRunner.dll ./Consumer/bin/Release/net9.0/Consumer.dll --trx TrxOut/out.trx'
|
||||||
- name: Parse Trx files
|
- name: Parse Trx files
|
||||||
uses: NasAmin/trx-parser@v0.6.0
|
uses: NasAmin/trx-parser@v0.7.0
|
||||||
if: always()
|
if: always() && github.ref_name != 'main'
|
||||||
id: trx-parser
|
id: trx-parser
|
||||||
with:
|
with:
|
||||||
TRX_PATH: ${{ github.workspace }}/TrxOut
|
TRX_PATH: ${{ github.workspace }}/TrxOut
|
||||||
@@ -109,7 +109,7 @@ jobs:
|
|||||||
security-events: write
|
security-events: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
@@ -128,7 +128,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v31
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
@@ -143,7 +143,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v31
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
@@ -156,7 +156,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v31
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
@@ -194,7 +194,7 @@ jobs:
|
|||||||
nuget-pack:
|
nuget-pack:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
@@ -224,7 +224,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Download NuGet artifact (lib)
|
- name: Download NuGet artifact (lib)
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: nuget-package-lib
|
name: nuget-package-lib
|
||||||
path: packed-lib
|
path: packed-lib
|
||||||
@@ -232,7 +232,7 @@ jobs:
|
|||||||
# Verify that there is exactly one nupkg in the artifact that would be NuGet published
|
# Verify that there is exactly one nupkg in the artifact that would be NuGet published
|
||||||
run: if [[ $(find packed-lib -maxdepth 1 -name 'WoofWare.NUnitTestRunner.Lib.*.nupkg' -printf c | wc -c) -ne "1" ]]; then exit 1; fi
|
run: if [[ $(find packed-lib -maxdepth 1 -name 'WoofWare.NUnitTestRunner.Lib.*.nupkg' -printf c | wc -c) -ne "1" ]]; then exit 1; fi
|
||||||
- name: Download NuGet artifact (tool)
|
- name: Download NuGet artifact (tool)
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: nuget-package-tool
|
name: nuget-package-tool
|
||||||
path: packed-tool
|
path: packed-tool
|
||||||
@@ -259,12 +259,12 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- name: Download NuGet artifact
|
- name: Download NuGet artifact
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: nuget-package-lib
|
name: nuget-package-lib
|
||||||
path: packed
|
path: packed
|
||||||
- name: Attest Build Provenance
|
- name: Attest Build Provenance
|
||||||
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0
|
uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0
|
||||||
with:
|
with:
|
||||||
subject-path: "packed/*.nupkg"
|
subject-path: "packed/*.nupkg"
|
||||||
|
|
||||||
@@ -278,12 +278,12 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- name: Download NuGet artifact
|
- name: Download NuGet artifact
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: nuget-package-tool
|
name: nuget-package-tool
|
||||||
path: packed
|
path: packed
|
||||||
- name: Attest Build Provenance
|
- name: Attest Build Provenance
|
||||||
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0
|
uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0
|
||||||
with:
|
with:
|
||||||
subject-path: "packed/*.nupkg"
|
subject-path: "packed/*.nupkg"
|
||||||
|
|
||||||
@@ -297,14 +297,14 @@ jobs:
|
|||||||
attestations: write
|
attestations: write
|
||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v31
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
- name: Download NuGet artifact
|
- name: Download NuGet artifact
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: nuget-package-lib
|
name: nuget-package-lib
|
||||||
path: packed
|
path: packed
|
||||||
@@ -329,14 +329,14 @@ jobs:
|
|||||||
attestations: write
|
attestations: write
|
||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v31
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
- name: Download NuGet artifact
|
- name: Download NuGet artifact
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: nuget-package-tool
|
name: nuget-package-tool
|
||||||
path: packed
|
path: packed
|
||||||
@@ -360,9 +360,9 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [nuget-pack]
|
needs: [nuget-pack]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Download NuGet artifact (tool)
|
- name: Download NuGet artifact (tool)
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.artifact }}
|
name: ${{ matrix.artifact }}
|
||||||
- name: Compute package path
|
- name: Compute package path
|
||||||
@@ -396,9 +396,9 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Download NuGet artifact (tool)
|
- name: Download NuGet artifact (tool)
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.artifact }}
|
name: ${{ matrix.artifact }}
|
||||||
- name: Compute package path
|
- name: Compute package path
|
||||||
|
2
.github/workflows/flake_update.yaml
vendored
2
.github/workflows/flake_update.yaml
vendored
@@ -11,7 +11,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository
|
- name: Check out repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: DeterminateSystems/nix-installer-action@main
|
uses: DeterminateSystems/nix-installer-action@main
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net8.0</TargetFrameworks>
|
<TargetFrameworks>net9.0</TargetFrameworks>
|
||||||
<IsPackable>false</IsPackable>
|
<IsPackable>false</IsPackable>
|
||||||
<IsTestProject>true</IsTestProject>
|
<IsTestProject>true</IsTestProject>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -10,6 +10,7 @@
|
|||||||
<Compile Include="NoAttribute.fs" />
|
<Compile Include="NoAttribute.fs" />
|
||||||
<Compile Include="Inconclusive.fs" />
|
<Compile Include="Inconclusive.fs" />
|
||||||
<Compile Include="RunSubProcess.fs" />
|
<Compile Include="RunSubProcess.fs" />
|
||||||
|
<Compile Include="TestAsync.fs" />
|
||||||
<Compile Include="TestExplicit.fs" />
|
<Compile Include="TestExplicit.fs" />
|
||||||
<Compile Include="TestNonParallel.fs" />
|
<Compile Include="TestNonParallel.fs" />
|
||||||
<Compile Include="TestParallel.fs" />
|
<Compile Include="TestParallel.fs" />
|
||||||
|
23
Consumer/TestAsync.fs
Normal file
23
Consumer/TestAsync.fs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
namespace Consumer
|
||||||
|
|
||||||
|
open System
|
||||||
|
open System.Threading.Tasks
|
||||||
|
open FsUnitTyped
|
||||||
|
open NUnit.Framework
|
||||||
|
|
||||||
|
[<TestFixture>]
|
||||||
|
module TestAsync =
|
||||||
|
|
||||||
|
[<Test>]
|
||||||
|
let ``an async test`` () =
|
||||||
|
async {
|
||||||
|
do! Async.Sleep (TimeSpan.FromMilliseconds 20.0)
|
||||||
|
1 |> shouldEqual 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[<Test>]
|
||||||
|
let ``an async test, task-based`` () =
|
||||||
|
task {
|
||||||
|
do! Task.Delay (TimeSpan.FromMilliseconds 20.0)
|
||||||
|
1 |> shouldEqual 1
|
||||||
|
}
|
@@ -10,7 +10,7 @@
|
|||||||
<WarnOn>FS3388,FS3559</WarnOn>
|
<WarnOn>FS3388,FS3559</WarnOn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Nerdbank.GitVersioning" Version="3.8.38-alpha" PrivateAssets="all" />
|
<PackageReference Include="Nerdbank.GitVersioning" Version="3.8.118" PrivateAssets="all" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Condition="'$(GITHUB_ACTION)' != ''">
|
<PropertyGroup Condition="'$(GITHUB_ACTION)' != ''">
|
||||||
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
|
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<IsPackable>false</IsPackable>
|
<IsPackable>false</IsPackable>
|
||||||
<IsTestProject>true</IsTestProject>
|
<IsTestProject>true</IsTestProject>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@@ -76,105 +76,168 @@ module TestFixture =
|
|||||||
(test : MethodInfo)
|
(test : MethodInfo)
|
||||||
(containingObject : obj)
|
(containingObject : obj)
|
||||||
(args : obj[])
|
(args : obj[])
|
||||||
: Result<TestMemberSuccess, TestFailure list> * IndividualTestRunMetadata
|
: Async<Result<TestMemberSuccess, TestFailure list> * IndividualTestRunMetadata>
|
||||||
=
|
=
|
||||||
let rec runMethods
|
let rec runMethods
|
||||||
(wrap : UserMethodFailure -> TestFailure)
|
(wrap : UserMethodFailure -> TestFailure)
|
||||||
(toRun : MethodInfo list)
|
(toRun : MethodInfo list)
|
||||||
(args : obj[])
|
(args : obj[])
|
||||||
: Result<unit, _>
|
: Result<unit, TestFailure> Async
|
||||||
=
|
=
|
||||||
match toRun with
|
match toRun with
|
||||||
| [] -> Ok ()
|
| [] -> async.Return (Ok ())
|
||||||
| head :: rest ->
|
| head :: rest ->
|
||||||
let result =
|
async {
|
||||||
try
|
let result =
|
||||||
head.Invoke (containingObject, args) |> Ok
|
try
|
||||||
with
|
head.Invoke (containingObject, args) |> Ok
|
||||||
| :? TargetInvocationException as e -> Error (UserMethodFailure.Threw (head.Name, e.InnerException))
|
with
|
||||||
| :? TargetParameterCountException ->
|
| :? TargetInvocationException as e ->
|
||||||
UserMethodFailure.BadParameters (
|
Error (UserMethodFailure.Threw (head.Name, e.InnerException))
|
||||||
head.Name,
|
| :? TargetParameterCountException ->
|
||||||
head.GetParameters () |> Array.map (fun pm -> pm.ParameterType),
|
UserMethodFailure.BadParameters (
|
||||||
args
|
head.Name,
|
||||||
)
|
head.GetParameters () |> Array.map (fun pm -> pm.ParameterType),
|
||||||
|> Error
|
args
|
||||||
|
)
|
||||||
|
|> Error
|
||||||
|
|
||||||
match result with
|
let! ct = Async.CancellationToken
|
||||||
| Error e -> Error (wrap e)
|
|
||||||
| Ok result ->
|
|
||||||
match result with
|
|
||||||
| :? unit -> runMethods wrap rest args
|
|
||||||
| ret -> UserMethodFailure.ReturnedNonUnit (head.Name, ret) |> wrap |> Error
|
|
||||||
|
|
||||||
let start = DateTimeOffset.Now
|
let! result =
|
||||||
|
match result with
|
||||||
|
| Error e -> async.Return (Error (wrap e))
|
||||||
|
| Ok result ->
|
||||||
|
match result with
|
||||||
|
| :? unit -> runMethods wrap rest args
|
||||||
|
| :? Task as result ->
|
||||||
|
async {
|
||||||
|
let mutable exc = None
|
||||||
|
|
||||||
let sw = Stopwatch.StartNew ()
|
try
|
||||||
|
do! Async.AwaitTask result
|
||||||
|
with e ->
|
||||||
|
exc <- Some e
|
||||||
|
|
||||||
let metadata () =
|
match exc with
|
||||||
let name =
|
| None -> return! runMethods wrap rest args
|
||||||
if args.Length = 0 then
|
| Some e -> return Error (UserMethodFailure.Threw (head.Name, e) |> wrap)
|
||||||
test.Name
|
}
|
||||||
else
|
// We'd like to do this type-test:
|
||||||
let argsStr = args |> Seq.map string<obj> |> String.concat ","
|
// | :? Async<unit> as result ->
|
||||||
$"%s{test.Name}(%s{argsStr})"
|
// but instead we have to do all this reflective nonsense, because FSharpAsync is not part
|
||||||
|
// of the .NET runtime, so is instead in a different AssemblyLoadContext to us!
|
||||||
|
// It's in the user-code context, not ours.
|
||||||
|
| ret ->
|
||||||
|
let ty = ret.GetType ()
|
||||||
|
|
||||||
{
|
if ty.Namespace = "Microsoft.FSharp.Control" && ty.Name = "FSharpAsync`1" then
|
||||||
End = DateTimeOffset.Now
|
match ty.GenericTypeArguments |> Array.map (fun t -> t.FullName) with
|
||||||
Start = start
|
| [| "Microsoft.FSharp.Core.Unit" |] ->
|
||||||
Total = sw.Elapsed
|
let asyncModule = ty.Assembly.GetType ("Microsoft.FSharp.Control.FSharpAsync")
|
||||||
ComputerName = Environment.MachineName
|
// let catch = asyncModule.GetMethod("Catch").MakeGenericMethod [| ty.GenericTypeArguments.[0] |]
|
||||||
ExecutionId = Guid.NewGuid ()
|
// let caught = catch.Invoke ((null: obj), [| ret |])
|
||||||
TestId = testId
|
let startAsTask =
|
||||||
TestName = name
|
asyncModule.GetMethod("StartAsTask").MakeGenericMethod
|
||||||
ClassName = test.DeclaringType.FullName
|
[| ty.GenericTypeArguments.[0] |]
|
||||||
StdOut =
|
|
||||||
match contexts.DumpStdout outputId with
|
|
||||||
| "" -> None
|
|
||||||
| v -> Some v
|
|
||||||
StdErr =
|
|
||||||
match contexts.DumpStderr outputId with
|
|
||||||
| "" -> None
|
|
||||||
| v -> Some v
|
|
||||||
}
|
|
||||||
|
|
||||||
let setUpResult = runMethods TestFailure.SetUpFailed setUp [||]
|
let started =
|
||||||
sw.Stop ()
|
startAsTask.Invoke ((null : obj), [| ret ; (null : obj) ; (null : obj) |])
|
||||||
|
|> unbox<Task>
|
||||||
|
|
||||||
match setUpResult with
|
async {
|
||||||
| Error e -> Error [ e ], metadata ()
|
let! res = Async.AwaitTask started |> Async.Catch
|
||||||
| Ok () ->
|
|
||||||
|
|
||||||
sw.Start ()
|
match res with
|
||||||
|
| Choice1Of2 () -> return! runMethods wrap rest args
|
||||||
|
| Choice2Of2 e ->
|
||||||
|
return
|
||||||
|
Error (
|
||||||
|
UserMethodFailure.Threw (head.Name, started.Exception) |> wrap
|
||||||
|
)
|
||||||
|
}
|
||||||
|
| _ ->
|
||||||
|
UserMethodFailure.ReturnedNonUnit (head.Name, ret)
|
||||||
|
|> wrap
|
||||||
|
|> Error
|
||||||
|
|> async.Return
|
||||||
|
else
|
||||||
|
async.Return (UserMethodFailure.ReturnedNonUnit (head.Name, ret) |> wrap |> Error)
|
||||||
|
|
||||||
let result =
|
return result
|
||||||
let result = runMethods TestFailure.TestFailed [ test ] args
|
}
|
||||||
|
|
||||||
|
async {
|
||||||
|
let start = DateTimeOffset.Now
|
||||||
|
|
||||||
|
let sw = Stopwatch.StartNew ()
|
||||||
|
|
||||||
|
let metadata () =
|
||||||
|
let name =
|
||||||
|
if args.Length = 0 then
|
||||||
|
test.Name
|
||||||
|
else
|
||||||
|
let argsStr = args |> Seq.map string<obj> |> String.concat ","
|
||||||
|
$"%s{test.Name}(%s{argsStr})"
|
||||||
|
|
||||||
|
{
|
||||||
|
End = DateTimeOffset.Now
|
||||||
|
Start = start
|
||||||
|
Total = sw.Elapsed
|
||||||
|
ComputerName = Environment.MachineName
|
||||||
|
ExecutionId = Guid.NewGuid ()
|
||||||
|
TestId = testId
|
||||||
|
TestName = name
|
||||||
|
ClassName = test.DeclaringType.FullName
|
||||||
|
StdOut =
|
||||||
|
match contexts.DumpStdout outputId with
|
||||||
|
| "" -> None
|
||||||
|
| v -> Some v
|
||||||
|
StdErr =
|
||||||
|
match contexts.DumpStderr outputId with
|
||||||
|
| "" -> None
|
||||||
|
| v -> Some v
|
||||||
|
}
|
||||||
|
|
||||||
|
let! setUpResult = runMethods TestFailure.SetUpFailed setUp [||]
|
||||||
sw.Stop ()
|
sw.Stop ()
|
||||||
|
|
||||||
match result with
|
match setUpResult with
|
||||||
| Ok () -> Ok None
|
| Error e -> return Error [ e ], metadata ()
|
||||||
| Error (TestFailure.TestFailed (UserMethodFailure.Threw (_, exc)) as orig) ->
|
| Ok () ->
|
||||||
match exc.GetType().FullName with
|
|
||||||
| "NUnit.Framework.SuccessException" -> Ok None
|
|
||||||
| "NUnit.Framework.IgnoreException" -> Ok (Some (TestMemberSuccess.Ignored (Option.ofObj exc.Message)))
|
|
||||||
| "NUnit.Framework.InconclusiveException" ->
|
|
||||||
Ok (Some (TestMemberSuccess.Inconclusive (Option.ofObj exc.Message)))
|
|
||||||
| _ -> Error orig
|
|
||||||
| Error orig -> Error orig
|
|
||||||
|
|
||||||
// Unconditionally run TearDown after tests, even if tests failed.
|
sw.Start ()
|
||||||
sw.Start ()
|
let! result = runMethods TestFailure.TestFailed [ test ] args
|
||||||
let tearDownResult = runMethods TestFailure.TearDownFailed tearDown [||]
|
sw.Stop ()
|
||||||
sw.Stop ()
|
|
||||||
|
|
||||||
let metadata = metadata ()
|
let result =
|
||||||
|
match result with
|
||||||
|
| Ok () -> Ok None
|
||||||
|
| Error (TestFailure.TestFailed (UserMethodFailure.Threw (_, exc)) as orig) ->
|
||||||
|
match exc.GetType().FullName with
|
||||||
|
| "NUnit.Framework.SuccessException" -> Ok None
|
||||||
|
| "NUnit.Framework.IgnoreException" ->
|
||||||
|
Ok (Some (TestMemberSuccess.Ignored (Option.ofObj exc.Message)))
|
||||||
|
| "NUnit.Framework.InconclusiveException" ->
|
||||||
|
Ok (Some (TestMemberSuccess.Inconclusive (Option.ofObj exc.Message)))
|
||||||
|
| _ -> Error orig
|
||||||
|
| Error orig -> Error orig
|
||||||
|
|
||||||
match result, tearDownResult with
|
// Unconditionally run TearDown after tests, even if tests failed.
|
||||||
| Ok None, Ok () -> Ok TestMemberSuccess.Ok, metadata
|
sw.Start ()
|
||||||
| Ok (Some s), Ok () -> Ok s, metadata
|
let! tearDownResult = runMethods TestFailure.TearDownFailed tearDown [||]
|
||||||
| Error e, Ok ()
|
sw.Stop ()
|
||||||
| Ok _, Error e -> Error [ e ], metadata
|
|
||||||
| Error e1, Error e2 -> Error [ e1 ; e2 ], metadata
|
let metadata = metadata ()
|
||||||
|
|
||||||
|
return
|
||||||
|
match result, tearDownResult with
|
||||||
|
| Ok None, Ok () -> Ok TestMemberSuccess.Ok, metadata
|
||||||
|
| Ok (Some s), Ok () -> Ok s, metadata
|
||||||
|
| Error e, Ok ()
|
||||||
|
| Ok _, Error e -> Error [ e ], metadata
|
||||||
|
| Error e1, Error e2 -> Error [ e1 ; e2 ], metadata
|
||||||
|
}
|
||||||
|
|
||||||
let private getValues (test : SingleTestMethod) =
|
let private getValues (test : SingleTestMethod) =
|
||||||
let valuesAttrs =
|
let valuesAttrs =
|
||||||
@@ -395,20 +458,22 @@ module TestFixture =
|
|||||||
|> Seq.map (fun (testGuid, args) ->
|
|> Seq.map (fun (testGuid, args) ->
|
||||||
task {
|
task {
|
||||||
let runMe () =
|
let runMe () =
|
||||||
progress.OnTestMemberStart test.Name
|
async {
|
||||||
let oldValue = contexts.AsyncLocal.Value
|
progress.OnTestMemberStart test.Name
|
||||||
let outputId = contexts.NewOutputs ()
|
let oldValue = contexts.AsyncLocal.Value
|
||||||
contexts.AsyncLocal.Value <- outputId
|
let outputId = contexts.NewOutputs ()
|
||||||
|
contexts.AsyncLocal.Value <- outputId
|
||||||
|
|
||||||
let result, meta =
|
let! result, meta =
|
||||||
runOne outputId contexts setUp tearDown testGuid test.Method containingObject args
|
runOne outputId contexts setUp tearDown testGuid test.Method containingObject args
|
||||||
|
|
||||||
contexts.AsyncLocal.Value <- oldValue
|
contexts.AsyncLocal.Value <- oldValue
|
||||||
progress.OnTestMemberFinished test.Name
|
progress.OnTestMemberFinished test.Name
|
||||||
|
|
||||||
result, meta
|
return result, meta
|
||||||
|
}
|
||||||
|
|
||||||
let! results, summary = par.Run running test.Parallelize runMe
|
let! results, summary = par.RunAsync running test.Parallelize runMe
|
||||||
|
|
||||||
match results with
|
match results with
|
||||||
| Ok results -> return Ok results, summary
|
| Ok results -> return Ok results, summary
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<IsPackable>false</IsPackable>
|
<IsPackable>false</IsPackable>
|
||||||
<IsTestProject>true</IsTestProject>
|
<IsTestProject>true</IsTestProject>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ApiSurface" Version="4.1.22" />
|
<PackageReference Include="ApiSurface" Version="5.0.2" />
|
||||||
<PackageReference Include="FsCheck" Version="3.3.0" />
|
<PackageReference Include="FsCheck" Version="3.3.1" />
|
||||||
<PackageReference Include="FsUnit" Version="7.1.1" />
|
<PackageReference Include="FsUnit" Version="7.1.1" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||||
<PackageReference Include="NUnit" Version="4.3.2" />
|
<PackageReference Include="NUnit" Version="4.3.2" />
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<RollForward>Major</RollForward>
|
<RollForward>Major</RollForward>
|
||||||
<PackAsTool>true</PackAsTool>
|
<PackAsTool>true</PackAsTool>
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Spectre.Console" Version="0.50.0" />
|
<PackageReference Include="Spectre.Console" Version="0.51.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "0.2",
|
"version": "0.3",
|
||||||
"publicReleaseRefSpec": [
|
"publicReleaseRefSpec": [
|
||||||
"^refs/heads/main$"
|
"^refs/heads/main$"
|
||||||
],
|
],
|
||||||
|
6
flake.lock
generated
6
flake.lock
generated
@@ -20,11 +20,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753432016,
|
"lastModified": 1758262103,
|
||||||
"narHash": "sha256-cnL5WWn/xkZoyH/03NNUS7QgW5vI7D1i74g48qplCvg=",
|
"narHash": "sha256-aBGl3XEOsjWw6W3AHiKibN7FeoG73dutQQEqnd/etR8=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "6027c30c8e9810896b92429f0092f624f7b1aace",
|
"rev": "12bd230118a1901a4a5d393f9f56b6ad7e571d01",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@@ -14,8 +14,8 @@
|
|||||||
flake-utils.lib.eachDefaultSystem (system: let
|
flake-utils.lib.eachDefaultSystem (system: let
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
pname = "unofficial-nunit-runner";
|
pname = "unofficial-nunit-runner";
|
||||||
dotnet-sdk = pkgs.dotnetCorePackages.sdk_8_0;
|
dotnet-sdk = pkgs.dotnetCorePackages.sdk_9_0;
|
||||||
dotnet-runtime = pkgs.dotnetCorePackages.runtime_8_0;
|
dotnet-runtime = pkgs.dotnetCorePackages.runtime_9_0;
|
||||||
version = "0.1";
|
version = "0.1";
|
||||||
dotnetTool = dllOverride: toolName: toolVersion: hash:
|
dotnetTool = dllOverride: toolName: toolVersion: hash:
|
||||||
pkgs.stdenvNoCC.mkDerivation rec {
|
pkgs.stdenvNoCC.mkDerivation rec {
|
||||||
|
140
nix/deps.json
140
nix/deps.json
@@ -1,8 +1,8 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"pname": "ApiSurface",
|
"pname": "ApiSurface",
|
||||||
"version": "4.1.22",
|
"version": "5.0.1",
|
||||||
"hash": "sha256-voj9m3YmyJ95FAMLV4sWzQMod3Em0mTjzf0LBUUFOso="
|
"hash": "sha256-0GMXEMFgWbbE2OGxW+6h4zGgQHg+IZy1aI13Dn97xSU="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "fantomas",
|
"pname": "fantomas",
|
||||||
@@ -21,13 +21,18 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "FsCheck",
|
"pname": "FsCheck",
|
||||||
"version": "3.3.0",
|
"version": "3.3.1",
|
||||||
"hash": "sha256-TFDR/uAGv4OqrMX8/reQ4faaAhH9hxTHr1T/YkNPCCU="
|
"hash": "sha256-k65ksdOSOGz+meRUUND+yuqJtm5ChaKuaxmRIdKzx2Y="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "fsharp-analyzers",
|
"pname": "fsharp-analyzers",
|
||||||
"version": "0.32.0",
|
"version": "0.32.1",
|
||||||
"hash": "sha256-MnhsK5tOeexL6uQhsV4nTRz8CGbz2o8VyHwAK8x91pE="
|
"hash": "sha256-le6rPnAF7cKGBZ2w8H2u9glK+6rT2ZjiAVnrkH2IhrM="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "FSharp.Core",
|
||||||
|
"version": "4.3.4",
|
||||||
|
"hash": "sha256-styyo+6mJy+yxE0NZG/b1hxkAjPOnJfMgd9zWzCJ5uk="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "FSharp.Core",
|
"pname": "FSharp.Core",
|
||||||
@@ -36,8 +41,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "FSharp.Core",
|
"pname": "FSharp.Core",
|
||||||
"version": "8.0.403",
|
"version": "9.0.303",
|
||||||
"hash": "sha256-3XSQp7JUOU5T6gvSQXNfBF4t4gaX4J4xushH+cfM9mE="
|
"hash": "sha256-AxR6wqodeU23KOTgkUfIgbavgbcSuzD4UBP+tiFydgA="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "FsUnit",
|
"pname": "FsUnit",
|
||||||
@@ -54,26 +59,51 @@
|
|||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-9jDkWbjw/nd8yqdzVTagCuqr6owJ/DUMi4BlUZT4hWU="
|
"hash": "sha256-9jDkWbjw/nd8yqdzVTagCuqr6owJ/DUMi4BlUZT4hWU="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.AspNetCore.App.Ref",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-A6300qL9iP7iuY4wF9QkmOcuvoJFB0H64BAM5oGZF/4="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.AspNetCore.App.Runtime.linux-arm64",
|
"pname": "Microsoft.AspNetCore.App.Runtime.linux-arm64",
|
||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-JQULJyF0ivLoUU1JaFfK/HHg+/qzpN7V2RR2Cc+WlQ4="
|
"hash": "sha256-JQULJyF0ivLoUU1JaFfK/HHg+/qzpN7V2RR2Cc+WlQ4="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.AspNetCore.App.Runtime.linux-arm64",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-0nex3AN8BVoda2LgDGLWh0leL1/7rBV8skXr37crYPI="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.AspNetCore.App.Runtime.linux-x64",
|
"pname": "Microsoft.AspNetCore.App.Runtime.linux-x64",
|
||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-zUsVIpV481vMLAXaLEEUpEMA9/f1HGOnvaQnaWdzlyY="
|
"hash": "sha256-zUsVIpV481vMLAXaLEEUpEMA9/f1HGOnvaQnaWdzlyY="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.AspNetCore.App.Runtime.linux-x64",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-rToqTSs66gvIi2I69+0/qjhKAXk5/rRQUh0KetP3ZxE="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.AspNetCore.App.Runtime.osx-arm64",
|
"pname": "Microsoft.AspNetCore.App.Runtime.osx-arm64",
|
||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-2seqZcz0JeUjkzh3QcGa9TcJ4LUafpFjTRk+Nm8T6T0="
|
"hash": "sha256-2seqZcz0JeUjkzh3QcGa9TcJ4LUafpFjTRk+Nm8T6T0="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.AspNetCore.App.Runtime.osx-arm64",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-9Z/RcY2hwVb4W+sJaruvQIPlyb9Xqkgcv6t0GSQRmDE="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.AspNetCore.App.Runtime.osx-x64",
|
"pname": "Microsoft.AspNetCore.App.Runtime.osx-x64",
|
||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-yxLafxiBKkvfkDggPk0P9YZIHBkDJOsFTO7/V9mEHuU="
|
"hash": "sha256-yxLafxiBKkvfkDggPk0P9YZIHBkDJOsFTO7/V9mEHuU="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.AspNetCore.App.Runtime.osx-x64",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-7g/PKgz5M30BqIpHoY4r5KjAmst/eeMze+Ksy0HH0I0="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.CodeCoverage",
|
"pname": "Microsoft.CodeCoverage",
|
||||||
"version": "17.14.1",
|
"version": "17.14.1",
|
||||||
@@ -89,55 +119,105 @@
|
|||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-9lC/LYnthYhjkWWz2kkFCvlA5LJOv11jdt59SDnpdy0="
|
"hash": "sha256-9lC/LYnthYhjkWWz2kkFCvlA5LJOv11jdt59SDnpdy0="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Host.linux-arm64",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-N0zuC748wi+Offfe7ryhnwqUgYzXhYFhG0LgNktJolY="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NETCore.App.Host.linux-x64",
|
"pname": "Microsoft.NETCore.App.Host.linux-x64",
|
||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-VFRDzx7LJuvI5yzKdGmw/31NYVbwHWPKQvueQt5xc10="
|
"hash": "sha256-VFRDzx7LJuvI5yzKdGmw/31NYVbwHWPKQvueQt5xc10="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Host.linux-x64",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-NlwDtSJmxP+9oIqWEMKU12o96g9TzQAEt//votxI2PU="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NETCore.App.Host.osx-arm64",
|
"pname": "Microsoft.NETCore.App.Host.osx-arm64",
|
||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-DaSWwYACJGolEBuMhzDVCj/rQTdDt061xCVi+gyQnuo="
|
"hash": "sha256-DaSWwYACJGolEBuMhzDVCj/rQTdDt061xCVi+gyQnuo="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Host.osx-arm64",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-s8XRSsezmdxSo3QSyMTp9ixgY9Mi6hUiWH3i7wjIbzA="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NETCore.App.Host.osx-x64",
|
"pname": "Microsoft.NETCore.App.Host.osx-x64",
|
||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-FrRny9EI6HKCKQbu6mcLj5w4ooSRrODD4Vj2ZMGnMd4="
|
"hash": "sha256-FrRny9EI6HKCKQbu6mcLj5w4ooSRrODD4Vj2ZMGnMd4="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Host.osx-x64",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-gRMhTwxva9zSCahzCwWNzRsLhtXtPXuBi72TeSaZ8Uw="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NETCore.App.Ref",
|
"pname": "Microsoft.NETCore.App.Ref",
|
||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-9LZgVoIFF8qNyUu8kdJrYGLutMF/cL2K82HN2ywwlx8="
|
"hash": "sha256-9LZgVoIFF8qNyUu8kdJrYGLutMF/cL2K82HN2ywwlx8="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Ref",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-1YXXJaiMZOIbLduuWyFGSWt6hOxKa3URNsPDfiMrnDM="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NETCore.App.Runtime.linux-arm64",
|
"pname": "Microsoft.NETCore.App.Runtime.linux-arm64",
|
||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-k3rxvUhCEU0pVH8KgEMtkPiSOibn+nBh+0zT2xIfId8="
|
"hash": "sha256-k3rxvUhCEU0pVH8KgEMtkPiSOibn+nBh+0zT2xIfId8="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Runtime.linux-arm64",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-mWM6g5K63sGC/LevPeV1plNQBUgNpHeKZ9mz98ywo8M="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NETCore.App.Runtime.linux-x64",
|
"pname": "Microsoft.NETCore.App.Runtime.linux-x64",
|
||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-U8wJ2snSDFqeAgDVLXjnniidC7Cr5aJ1/h/BMSlyu0c="
|
"hash": "sha256-U8wJ2snSDFqeAgDVLXjnniidC7Cr5aJ1/h/BMSlyu0c="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Runtime.linux-x64",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-BkV2ZjBpQvLhijWFSwWDpr5m2ffNlCtYJA5TUTro6no="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NETCore.App.Runtime.osx-arm64",
|
"pname": "Microsoft.NETCore.App.Runtime.osx-arm64",
|
||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-UfLcrL2Gj/OLz0s92Oo+OCJeDpZFAcQLPLiSNND8D5Y="
|
"hash": "sha256-UfLcrL2Gj/OLz0s92Oo+OCJeDpZFAcQLPLiSNND8D5Y="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Runtime.osx-arm64",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-FrM1AKX+OZIJG7q2SlKq1n9N4sVvqMBNoXRNanB9AI4="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NETCore.App.Runtime.osx-x64",
|
"pname": "Microsoft.NETCore.App.Runtime.osx-x64",
|
||||||
"version": "6.0.36",
|
"version": "6.0.36",
|
||||||
"hash": "sha256-0xIJYFzxdMcnCj3wzkFRQZSnQcPHzPHMzePRIOA3oJs="
|
"hash": "sha256-0xIJYFzxdMcnCj3wzkFRQZSnQcPHzPHMzePRIOA3oJs="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Runtime.osx-x64",
|
||||||
|
"version": "8.0.20",
|
||||||
|
"hash": "sha256-HbyucVCFDD3uqVn5XoONKoZBn0TWT2FUw1fOhkkUS+E="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.Platforms",
|
||||||
|
"version": "1.1.0",
|
||||||
|
"hash": "sha256-FeM40ktcObQJk4nMYShB61H/E8B7tIKfl9ObJ0IOcCM="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NETCore.Platforms",
|
"pname": "Microsoft.NETCore.Platforms",
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"hash": "sha256-8hLiUKvy/YirCWlFwzdejD2Db3DaXhHxT7GSZx/znJg="
|
"hash": "sha256-8hLiUKvy/YirCWlFwzdejD2Db3DaXhHxT7GSZx/znJg="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NETCore.Platforms",
|
"pname": "Microsoft.NETCore.Targets",
|
||||||
"version": "2.0.0",
|
"version": "1.1.0",
|
||||||
"hash": "sha256-IEvBk6wUXSdyCnkj6tHahOJv290tVVT8tyemYcR0Yro="
|
"hash": "sha256-0AqQ2gMS8iNlYkrD+BxtIg7cXMnr9xZHtKAuN4bjfaQ="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NETCore.Targets",
|
"pname": "Microsoft.NETCore.Targets",
|
||||||
@@ -196,8 +276,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "Nerdbank.GitVersioning",
|
"pname": "Nerdbank.GitVersioning",
|
||||||
"version": "3.8.38-alpha",
|
"version": "3.8.118",
|
||||||
"hash": "sha256-gPMrVbjOZxXoofczF/pn6eVkLhjVSJIyQrLO2oljrDc="
|
"hash": "sha256-Hmyy0ZKOmwN4zIhI4+MqoN8geZNc1sd033aZJ6APrO8="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "Newtonsoft.Json",
|
"pname": "Newtonsoft.Json",
|
||||||
@@ -261,8 +341,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "Spectre.Console",
|
"pname": "Spectre.Console",
|
||||||
"version": "0.50.0",
|
"version": "0.51.1",
|
||||||
"hash": "sha256-3MNgumQSXzuXVGj7kLb5FMkTH/LoFohMvUjAZ7nyHfo="
|
"hash": "sha256-FQAK07dEwEsNYVI1T3S488LHv8AXJ+ZeA9N2hPpWBoo="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "System.Collections.Immutable",
|
"pname": "System.Collections.Immutable",
|
||||||
@@ -284,36 +364,16 @@
|
|||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
"hash": "sha256-KaMHgIRBF7Nf3VwOo+gJS1DcD+41cJDPWFh+TDQ8ee8="
|
"hash": "sha256-KaMHgIRBF7Nf3VwOo+gJS1DcD+41cJDPWFh+TDQ8ee8="
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"pname": "System.IO.Abstractions",
|
|
||||||
"version": "4.2.13",
|
|
||||||
"hash": "sha256-nkC/PiqE6+c1HJ2yTwg3x+qdBh844Z8n3ERWDW8k6Gg="
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pname": "System.IO.FileSystem.AccessControl",
|
|
||||||
"version": "4.5.0",
|
|
||||||
"hash": "sha256-ck44YBQ0M+2Im5dw0VjBgFD1s0XuY54cujrodjjSBL8="
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"pname": "System.Memory",
|
"pname": "System.Memory",
|
||||||
"version": "4.5.5",
|
"version": "4.5.5",
|
||||||
"hash": "sha256-EPQ9o1Kin7KzGI5O3U3PUQAZTItSbk9h/i4rViN3WiI="
|
"hash": "sha256-EPQ9o1Kin7KzGI5O3U3PUQAZTItSbk9h/i4rViN3WiI="
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"pname": "System.Memory",
|
|
||||||
"version": "4.6.3",
|
|
||||||
"hash": "sha256-JgeK63WMmumF6L+FH5cwJgYdpqXrSDcgTQwtIgTHKVU="
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"pname": "System.Private.Uri",
|
"pname": "System.Private.Uri",
|
||||||
"version": "4.3.0",
|
"version": "4.3.0",
|
||||||
"hash": "sha256-fVfgcoP4AVN1E5wHZbKBIOPYZ/xBeSIdsNF+bdukIRM="
|
"hash": "sha256-fVfgcoP4AVN1E5wHZbKBIOPYZ/xBeSIdsNF+bdukIRM="
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"pname": "System.Reflection.Metadata",
|
|
||||||
"version": "1.6.0",
|
|
||||||
"hash": "sha256-JJfgaPav7UfEh4yRAQdGhLZF1brr0tUWPl6qmfNWq/E="
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"pname": "System.Reflection.Metadata",
|
"pname": "System.Reflection.Metadata",
|
||||||
"version": "8.0.0",
|
"version": "8.0.0",
|
||||||
@@ -329,11 +389,6 @@
|
|||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
"hash": "sha256-bEG1PnDp7uKYz/OgLOWs3RWwQSVYm+AnPwVmAmcgp2I="
|
"hash": "sha256-bEG1PnDp7uKYz/OgLOWs3RWwQSVYm+AnPwVmAmcgp2I="
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"pname": "System.Security.AccessControl",
|
|
||||||
"version": "4.5.0",
|
|
||||||
"hash": "sha256-AFsKPb/nTk2/mqH/PYpaoI8PLsiKKimaXf+7Mb5VfPM="
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"pname": "System.Security.Cryptography.Pkcs",
|
"pname": "System.Security.Cryptography.Pkcs",
|
||||||
"version": "6.0.4",
|
"version": "6.0.4",
|
||||||
@@ -344,11 +399,6 @@
|
|||||||
"version": "4.4.0",
|
"version": "4.4.0",
|
||||||
"hash": "sha256-Ri53QmFX8I8UH0x4PikQ1ZA07ZSnBUXStd5rBfGWFOE="
|
"hash": "sha256-Ri53QmFX8I8UH0x4PikQ1ZA07ZSnBUXStd5rBfGWFOE="
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"pname": "System.Security.Principal.Windows",
|
|
||||||
"version": "4.5.0",
|
|
||||||
"hash": "sha256-BkUYNguz0e4NJp1kkW7aJBn3dyH9STwB5N8XqnlCsmY="
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"pname": "System.Text.Json",
|
"pname": "System.Text.Json",
|
||||||
"version": "8.0.5",
|
"version": "8.0.5",
|
||||||
|
Reference in New Issue
Block a user