mirror of
https://github.com/Smaug123/unofficial-nunit-runner
synced 2025-10-05 17:38:40 +00:00
Compare commits
23 Commits
WoofWare.N
...
WoofWare.N
Author | SHA1 | Date | |
---|---|---|---|
|
cf482b677b | ||
|
db27a7acc8 | ||
|
99826df864 | ||
|
1c93b2c4b2 | ||
|
4369b35dd1 | ||
|
a183455f55 | ||
|
de5f5a64ef | ||
|
fdddbf828b | ||
|
67d9d71100 | ||
|
c39745280b | ||
|
26c29d63bc | ||
|
78f7f76074 | ||
|
c2401207c4 | ||
|
46e097a02e | ||
|
7c23c3bb1c | ||
|
ace1417de6 | ||
|
a694637958 | ||
|
8626cc1252 | ||
|
0287a6b7eb | ||
|
8579ee8f8b | ||
|
debda1a557 | ||
|
bf7d846f61 | ||
|
4690bf23ad |
@@ -3,13 +3,13 @@
|
||||
"isRoot": true,
|
||||
"tools": {
|
||||
"fantomas": {
|
||||
"version": "6.3.15",
|
||||
"version": "6.3.16",
|
||||
"commands": [
|
||||
"fantomas"
|
||||
]
|
||||
},
|
||||
"fsharp-analyzers": {
|
||||
"version": "0.27.0",
|
||||
"version": "0.28.0",
|
||||
"commands": [
|
||||
"fsharp-analyzers"
|
||||
]
|
||||
|
1
.fantomasignore
Normal file
1
.fantomasignore
Normal file
@@ -0,0 +1 @@
|
||||
.direnv/
|
73
.github/workflows/dotnet.yaml
vendored
73
.github/workflows/dotnet.yaml
vendored
@@ -38,7 +38,30 @@ jobs:
|
||||
- name: Build
|
||||
run: 'nix develop --command dotnet build --no-restore --configuration ${{matrix.config}}'
|
||||
- name: Test
|
||||
run: 'nix develop --command dotnet test --no-build --verbosity normal --configuration ${{matrix.config}} --framework net8.0'
|
||||
run: |
|
||||
nix develop --command dotnet test --no-build --verbosity normal --configuration ${{matrix.config}} --framework net8.0 --filter 'FullyQualifiedName !~ FailingConsumer'
|
||||
|
||||
selftest-intended-failures:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@v30
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Restore dependencies
|
||||
run: nix develop --command dotnet restore
|
||||
- name: Build
|
||||
run: 'nix develop --command dotnet build --no-restore --configuration Release'
|
||||
- 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'
|
||||
- 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'
|
||||
- name: Check output matches expected
|
||||
run: 'actual=$(cat snapshot.txt | sort) expected=$(cat FailingConsumer/expected.txt | sort) [ "$expected" == "$actual" ]'
|
||||
|
||||
selftest:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -80,48 +103,6 @@ jobs:
|
||||
TRX_PATH: ${{ github.workspace }}/TrxOut
|
||||
REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
selftest-net6:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: none
|
||||
checks: write
|
||||
contents: read
|
||||
deployments: none
|
||||
id-token: none
|
||||
issues: none
|
||||
discussions: none
|
||||
packages: none
|
||||
pages: none
|
||||
pull-requests: read
|
||||
repository-projects: none
|
||||
security-events: none
|
||||
statuses: read
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@v30
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Restore dependencies
|
||||
run: nix develop --command dotnet restore
|
||||
- name: Build runner
|
||||
run: 'nix develop --command dotnet build WoofWare.NUnitTestRunner --configuration Release'
|
||||
- name: Build target
|
||||
run: 'nix develop --command dotnet build Consumer --configuration Release'
|
||||
- name: Test using self
|
||||
run: 'nix develop .#net6 --command ./WoofWare.NUnitTestRunner/bin/Release/net6.0/WoofWare.NUnitTestRunner ./Consumer/bin/Release/net6.0/Consumer.dll --trx TrxOut/out.trx'
|
||||
- name: Parse Trx files
|
||||
uses: NasAmin/trx-parser@v0.6.0
|
||||
if: always()
|
||||
id: trx-parser
|
||||
with:
|
||||
TRX_PATH: ${{ github.workspace }}/TrxOut
|
||||
REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
analyzers:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
@@ -280,7 +261,7 @@ jobs:
|
||||
|
||||
all-required-checks-complete:
|
||||
if: ${{ always() }}
|
||||
needs: [check-dotnet-format, check-nix-format, build, build-nix, linkcheck, flake-check, analyzers, nuget-pack, expected-pack, github-release-tool-dry-run]
|
||||
needs: [check-dotnet-format, check-nix-format, build, build-nix, linkcheck, flake-check, analyzers, nuget-pack, expected-pack, github-release-tool-dry-run, selftest-intended-failures, selftest]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: G-Research/common-actions/check-required-lite@2b7dc49cb14f3344fbe6019c14a31165e258c059
|
||||
@@ -302,7 +283,7 @@ jobs:
|
||||
name: nuget-package-lib
|
||||
path: packed
|
||||
- name: Attest Build Provenance
|
||||
uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3
|
||||
uses: actions/attest-build-provenance@7668571508540a607bdfd90a87a560489fe372eb # v2.1.0
|
||||
with:
|
||||
subject-path: "packed/*.nupkg"
|
||||
|
||||
@@ -321,7 +302,7 @@ jobs:
|
||||
name: nuget-package-tool
|
||||
path: packed
|
||||
- name: Attest Build Provenance
|
||||
uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3
|
||||
uses: actions/attest-build-provenance@7668571508540a607bdfd90a87a560489fe372eb # v2.1.0
|
||||
with:
|
||||
subject-path: "packed/*.nupkg"
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net6.0;net8.0</TargetFrameworks>
|
||||
<TargetFrameworks>net8.0</TargetFrameworks>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
@@ -12,6 +12,7 @@
|
||||
<Compile Include="RunSubProcess.fs" />
|
||||
<Compile Include="TestNonParallel.fs" />
|
||||
<Compile Include="TestParallel.fs" />
|
||||
<Compile Include="TestParallelIndividualTest.fs" />
|
||||
<Compile Include="TestStdout.fs" />
|
||||
<Compile Include="TestParameterisedFixture.fs" />
|
||||
<Compile Include="TestSetUp.fs" />
|
||||
@@ -26,8 +27,8 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FsUnit" Version="6.0.1" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1"/>
|
||||
<PackageReference Include="NUnit" Version="4.2.2"/>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0"/>
|
||||
<PackageReference Include="NUnit" Version="4.3.0"/>
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0"/>
|
||||
</ItemGroup>
|
||||
|
||||
|
59
Consumer/TestParallelIndividualTest.fs
Normal file
59
Consumer/TestParallelIndividualTest.fs
Normal file
@@ -0,0 +1,59 @@
|
||||
namespace Consumer
|
||||
|
||||
open System
|
||||
open System.Collections.Concurrent
|
||||
open System.Threading
|
||||
open NUnit.Framework
|
||||
open FsUnitTyped
|
||||
|
||||
// These tests are flaky if the bug https://github.com/Smaug123/unofficial-nunit-runner/issues/168 is unfixed.
|
||||
[<TestFixture>]
|
||||
module TestParallelIndividualTest =
|
||||
|
||||
type private Transitions =
|
||||
| Started of int
|
||||
| LockAcquired of int
|
||||
| Exited of int
|
||||
|
||||
let locker = obj ()
|
||||
let private sequence = ConcurrentQueue<Transitions> ()
|
||||
|
||||
[<Test>]
|
||||
[<Parallelizable(ParallelScope.None)>]
|
||||
let ``does not run in parallel`` () =
|
||||
sequence.Enqueue (Transitions.Started 0)
|
||||
let entered = Monitor.TryEnter (locker, TimeSpan.Zero)
|
||||
|
||||
if entered then
|
||||
sequence.Enqueue (Transitions.LockAcquired 0)
|
||||
Monitor.Exit locker
|
||||
sequence.Enqueue (Transitions.Exited 0)
|
||||
else
|
||||
sequence.Enqueue (Transitions.Exited 0)
|
||||
failwith "failed to acquire the lock"
|
||||
|
||||
[<Test>]
|
||||
let ``unrestricted parallelism`` () =
|
||||
sequence.Enqueue (Transitions.Started 1)
|
||||
let entered = Monitor.TryEnter (locker, TimeSpan.Zero)
|
||||
|
||||
if entered then
|
||||
sequence.Enqueue (Transitions.LockAcquired 1)
|
||||
Monitor.Exit locker
|
||||
sequence.Enqueue (Transitions.Exited 1)
|
||||
else
|
||||
sequence.Enqueue (Transitions.Exited 1)
|
||||
failwith "failed to acquire the lock"
|
||||
|
||||
[<OneTimeTearDown>]
|
||||
let ``It worked`` () =
|
||||
let sequence = sequence |> Seq.toList
|
||||
|
||||
let allowed n =
|
||||
[ Transitions.Started n ; Transitions.LockAcquired n ; Transitions.Exited n ]
|
||||
|
||||
if sequence <> allowed 0 @ allowed 1 && sequence <> allowed 1 @ allowed 0 then
|
||||
let s = sequence |> Seq.map string<Transitions> |> String.concat "\n"
|
||||
failwith $"Unexpected sequence!\n%s{s}"
|
||||
|
||||
()
|
@@ -10,7 +10,7 @@
|
||||
<WarnOn>FS3388,FS3559</WarnOn>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Nerdbank.GitVersioning" Version="3.6.143" PrivateAssets="all"/>
|
||||
<PackageReference Include="Nerdbank.GitVersioning" Version="3.7.112" PrivateAssets="all"/>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Condition="'$(GITHUB_ACTION)' != ''">
|
||||
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
|
||||
|
20
FailingConsumer/FailingConsumer.fsproj
Normal file
20
FailingConsumer/FailingConsumer.fsproj
Normal file
@@ -0,0 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="TestInsufficientArgs.fs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FsUnit" Version="6.0.1" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0"/>
|
||||
<PackageReference Include="NUnit" Version="4.3.0"/>
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
9
FailingConsumer/TestInsufficientArgs.fs
Normal file
9
FailingConsumer/TestInsufficientArgs.fs
Normal file
@@ -0,0 +1,9 @@
|
||||
namespace FailingConsumer
|
||||
|
||||
open NUnit.Framework
|
||||
|
||||
[<TestFixture>]
|
||||
module TestInsufficientArgs =
|
||||
|
||||
[<Test>]
|
||||
let foo (_ : int) = ()
|
1
FailingConsumer/expected.txt
Normal file
1
FailingConsumer/expected.txt
Normal file
@@ -0,0 +1 @@
|
||||
foo: had parameter count mismatch: expected 1, actual 0
|
@@ -41,12 +41,16 @@ module AssemblyLevelAttributes =
|
||||
| [ v ] ->
|
||||
match v.Value with
|
||||
| :? int as v ->
|
||||
match v with
|
||||
| 512 -> levelPar, Some (Parallelizable.Yes AssemblyParallelScope.Fixtures)
|
||||
| 256 -> levelPar, Some (Parallelizable.Yes AssemblyParallelScope.Children)
|
||||
| 257 -> failwith "ParallelScope.All is invalid on assemblies; only Fixtures or Children"
|
||||
| 1 -> failwith "ParallelScope.Self is invalid on assemblies; only Fixtures or Children"
|
||||
| v -> failwith $"Could not recognise value %i{v} of parallel scope on assembly"
|
||||
match ParallelScope.ofInt v with
|
||||
| ParallelScope.Fixtures ->
|
||||
levelPar, Some (Parallelizable.Yes AssemblyParallelScope.Fixtures)
|
||||
| ParallelScope.Children ->
|
||||
levelPar, Some (Parallelizable.Yes AssemblyParallelScope.Children)
|
||||
| ParallelScope.None -> levelPar, Some Parallelizable.No
|
||||
| ParallelScope.All ->
|
||||
failwith "ParallelScope.All is invalid on assemblies; only Fixtures or Children"
|
||||
| ParallelScope.Self ->
|
||||
failwith "ParallelScope.Self is invalid on assemblies; only Fixtures or Children"
|
||||
| v -> failwith $"Unexpectedly non-int value %O{v} of parallel scope on assembly"
|
||||
| _ -> failwith "unexpectedly got multiple args to Parallelizable on assembly"
|
||||
| _ -> levelPar, par
|
||||
|
@@ -55,6 +55,7 @@ type private ThreadAwareWriter
|
||||
|> fun action -> ExecutionContext.Run (prev, action, ())
|
||||
|
||||
/// Wraps up the necessary context to intercept global state.
|
||||
[<NoEquality ; NoComparison>]
|
||||
type TestContexts =
|
||||
private
|
||||
{
|
||||
|
@@ -164,6 +164,18 @@ module BuildTrxReport =
|
||||
| Some s -> s
|
||||
|
||||
(Some stackTrace, message)
|
||||
| TestFailure.TestFailed (UserMethodFailure.BadParameters (_, expected, actual))
|
||||
| TestFailure.SetUpFailed (UserMethodFailure.BadParameters (_, expected, actual))
|
||||
| TestFailure.TearDownFailed (UserMethodFailure.BadParameters (_, expected, actual)) ->
|
||||
let newMessage =
|
||||
$"had parameter count mismatch: expected %i{expected.Length}, actual %i{actual.Length}"
|
||||
|
||||
let message =
|
||||
match message with
|
||||
| None -> newMessage
|
||||
| Some message -> $"%s{message}\n%s{newMessage}"
|
||||
|
||||
(stackTrace, Some message)
|
||||
| TestFailure.TestFailed (UserMethodFailure.ReturnedNonUnit (_, ret))
|
||||
| TestFailure.SetUpFailed (UserMethodFailure.ReturnedNonUnit (_, ret))
|
||||
| TestFailure.TearDownFailed (UserMethodFailure.ReturnedNonUnit (_, ret)) ->
|
||||
@@ -188,6 +200,14 @@ module BuildTrxReport =
|
||||
Message = None
|
||||
}
|
||||
|> Some
|
||||
| Choice3Of3 (UserMethodFailure.BadParameters (_, expected, actual)) ->
|
||||
{
|
||||
StackTrace = None
|
||||
Message =
|
||||
$"parameter count mismatch, expected %i{expected.Length}, actual %i{actual.Length}"
|
||||
|> Some
|
||||
}
|
||||
|> Some
|
||||
| Choice3Of3 (UserMethodFailure.ReturnedNonUnit (_, ret)) ->
|
||||
{
|
||||
Message = $"returned non-unit value %O{ret}" |> Some
|
||||
|
@@ -61,6 +61,24 @@ type Parallelizable<'scope> =
|
||||
/// This test must always be run on its own.
|
||||
| No
|
||||
|
||||
[<RequireQualifiedAccess>]
|
||||
module Parallelizable =
|
||||
/// Functorial map.
|
||||
let inline map<'a, 'b> ([<InlineIfLambda>] f : 'a -> 'b) (p : Parallelizable<'a>) : Parallelizable<'b> =
|
||||
match p with
|
||||
| Parallelizable.No -> Parallelizable.No
|
||||
| Parallelizable.Yes a -> Parallelizable.Yes (f a)
|
||||
|
||||
/// Functorial bind.
|
||||
let inline bind<'a, 'b>
|
||||
([<InlineIfLambda>] f : 'a -> Parallelizable<'b>)
|
||||
(p : Parallelizable<'a>)
|
||||
: Parallelizable<'b>
|
||||
=
|
||||
match p with
|
||||
| Parallelizable.No -> Parallelizable.No
|
||||
| Parallelizable.Yes a -> f a
|
||||
|
||||
/// A single method or member which holds some tests. (Often such a member will represent only one test, but e.g.
|
||||
/// if it has [<TestCaseSource>] then it represents multiple tests.)
|
||||
type SingleTestMethod =
|
||||
@@ -144,6 +162,8 @@ type UserMethodFailure =
|
||||
| ReturnedNonUnit of name : string * result : obj
|
||||
/// A method threw.
|
||||
| Threw of name : string * exn
|
||||
/// Parameter count mismatch.
|
||||
| BadParameters of name : string * expected : Type[] * actual : obj[]
|
||||
|
||||
/// Human-readable representation of the user failure.
|
||||
override this.ToString () =
|
||||
@@ -152,12 +172,22 @@ type UserMethodFailure =
|
||||
$"User-defined method '%s{method}' returned a non-unit: %O{ret}"
|
||||
| UserMethodFailure.Threw (method, exc) ->
|
||||
$"User-defined method '%s{method}' threw: %s{exc.Message}\n %s{exc.StackTrace}"
|
||||
| UserMethodFailure.BadParameters (method, expected, actual) ->
|
||||
let expectedStr = expected |> Seq.map (fun t -> t.Name) |> String.concat ", "
|
||||
|
||||
let actualStr =
|
||||
actual
|
||||
|> Seq.map (fun s -> if isNull s then "null" else s.ToString ())
|
||||
|> String.concat ", "
|
||||
|
||||
$"User-defined method '%s{method}' had parameter count mismatch. Expected: (%s{expectedStr}) (%i{expected.Length} params). Actual: (%s{actualStr}) (%i{actual.Length} params)"
|
||||
|
||||
/// Name (not fully-qualified) of the method which failed.
|
||||
member this.Name =
|
||||
match this with
|
||||
| UserMethodFailure.Threw (name, _)
|
||||
| UserMethodFailure.ReturnedNonUnit (name, _) -> name
|
||||
| UserMethodFailure.BadParameters (name, _, _) -> name
|
||||
|
||||
/// Represents the failure of a single run of one test. An error signalled this way is a user error: the unit under
|
||||
/// test has misbehaved.
|
||||
|
@@ -314,7 +314,7 @@ type ParallelQueue
|
||||
let t () =
|
||||
{ new ThunkEvaluator<_> with
|
||||
member _.Eval<'b> (t : unit -> 'b) rc =
|
||||
let tcs = TaskCompletionSource ()
|
||||
let tcs = TaskCompletionSource TaskCreationOptions.RunContinuationsAsynchronously
|
||||
use ec = ExecutionContext.Capture ()
|
||||
|
||||
fun () ->
|
||||
|
29
WoofWare.NUnitTestRunner.Lib/ParallelScope.fs
Normal file
29
WoofWare.NUnitTestRunner.Lib/ParallelScope.fs
Normal file
@@ -0,0 +1,29 @@
|
||||
namespace WoofWare.NUnitTestRunner
|
||||
|
||||
/// Our own strongly-typed rendering of the NUnit ParallelScope enum.
|
||||
/// This is more tightly modelled by ClassParallelScope and AssemblyParallelScope in our own domain; this type exists
|
||||
/// for the initial interop.
|
||||
[<RequireQualifiedAccess>]
|
||||
type ParallelScope =
|
||||
/// Corresponds to NUnit's ParallelScope.Fixtures.
|
||||
| Fixtures
|
||||
/// Corresponds to NUnit's ParallelScope.Children.
|
||||
| Children
|
||||
/// Corresponds to NUnit's ParallelScope.All.
|
||||
| All
|
||||
/// Corresponds to NUnit's ParallelScope.Self.
|
||||
| Self
|
||||
/// Corresponds to NUnit's ParallelScope.None.
|
||||
| None
|
||||
|
||||
[<RequireQualifiedAccess>]
|
||||
module ParallelScope =
|
||||
/// Convert the weakly-typed C# enum that is NUnit's `ParallelScope` to a strongly-typed representation.
|
||||
let ofInt (n : int) =
|
||||
match n with
|
||||
| 512 -> ParallelScope.Fixtures
|
||||
| 256 -> ParallelScope.Children
|
||||
| 257 -> ParallelScope.All
|
||||
| 1 -> ParallelScope.Self
|
||||
| 2 -> ParallelScope.None
|
||||
| _ -> failwith $"Unrecognised ParallelScope enum: %i{n}"
|
@@ -94,7 +94,27 @@ module SingleTestMethod =
|
||||
match par with
|
||||
| Some _ -> failwith $"Got multiple parallelization attributes on %s{method.Name}"
|
||||
| None ->
|
||||
(remaining, isTest, sources, hasData, mods, cats, repeat, comb, Some (Parallelizable.Yes ()))
|
||||
let arg =
|
||||
match Seq.toList attr.ConstructorArguments with
|
||||
| [] -> Parallelizable.Yes ()
|
||||
| [ x ] ->
|
||||
if x.ArgumentType.Name <> "ParallelScope" then
|
||||
failwith
|
||||
$"Got argument %O{x.Value} of unrecognised type %s{x.ArgumentType.Name} on [<Parallelizable>] attribute; expected ParallelScope"
|
||||
|
||||
match ParallelScope.ofInt (unbox<int> x.Value) with
|
||||
| ParallelScope.Children ->
|
||||
failwith
|
||||
$"Unexpected ParallelScope.Children on test %s{method.Name}; this is not valid on individual tests"
|
||||
| ParallelScope.Fixtures ->
|
||||
failwith
|
||||
$"Unexpected ParallelScope.Children on test %s{method.Name}; this is not valid on individual tests"
|
||||
| ParallelScope.All
|
||||
| ParallelScope.Self -> Parallelizable.Yes ()
|
||||
| ParallelScope.None -> Parallelizable.No
|
||||
| s -> failwith $"Got multiple arguments on a [<Parallelizable>] attribute: %O{s}"
|
||||
|
||||
(remaining, isTest, sources, hasData, mods, cats, repeat, comb, Some arg)
|
||||
| s when s.StartsWith ("NUnit.Framework", StringComparison.Ordinal) ->
|
||||
failwith $"Unrecognised attribute on function %s{method.Name}: %s{attr.AttributeType.FullName}"
|
||||
| _ -> (attr :: remaining, isTest, sources, hasData, mods, cats, repeat, comb, par)
|
||||
|
@@ -231,6 +231,9 @@ WoofWare.NUnitTestRunner.Modifier.IsIgnored [property]: [read-only] bool
|
||||
WoofWare.NUnitTestRunner.Modifier.NewExplicit [static method]: string option -> WoofWare.NUnitTestRunner.Modifier
|
||||
WoofWare.NUnitTestRunner.Modifier.NewIgnored [static method]: string option -> WoofWare.NUnitTestRunner.Modifier
|
||||
WoofWare.NUnitTestRunner.Modifier.Tag [property]: [read-only] int
|
||||
WoofWare.NUnitTestRunner.Parallelizable inherit obj
|
||||
WoofWare.NUnitTestRunner.Parallelizable.bind [static method]: ('a -> 'b WoofWare.NUnitTestRunner.Parallelizable) -> 'a WoofWare.NUnitTestRunner.Parallelizable -> 'b WoofWare.NUnitTestRunner.Parallelizable
|
||||
WoofWare.NUnitTestRunner.Parallelizable.map [static method]: ('a -> 'b) -> 'a WoofWare.NUnitTestRunner.Parallelizable -> 'b WoofWare.NUnitTestRunner.Parallelizable
|
||||
WoofWare.NUnitTestRunner.Parallelizable`1 inherit obj, implements 'scope WoofWare.NUnitTestRunner.Parallelizable System.IEquatable, System.Collections.IStructuralEquatable, 'scope WoofWare.NUnitTestRunner.Parallelizable System.IComparable, System.IComparable, System.Collections.IStructuralComparable - union type with 2 cases
|
||||
WoofWare.NUnitTestRunner.Parallelizable`1+Tags inherit obj
|
||||
WoofWare.NUnitTestRunner.Parallelizable`1+Tags.No [static field]: int = 1
|
||||
@@ -255,6 +258,38 @@ WoofWare.NUnitTestRunner.ParallelQueue.Run [method]: WoofWare.NUnitTestRunner.Te
|
||||
WoofWare.NUnitTestRunner.ParallelQueue.RunTestSetup [method]: WoofWare.NUnitTestRunner.TestFixtureRunningToken -> (unit -> 'a) -> ('a * WoofWare.NUnitTestRunner.TestFixtureSetupToken) System.Threading.Tasks.Task
|
||||
WoofWare.NUnitTestRunner.ParallelQueue.RunTestTearDown [method]: WoofWare.NUnitTestRunner.TestFixtureSetupToken -> (unit -> 'a) -> ('a * WoofWare.NUnitTestRunner.TestFixtureTearDownToken) System.Threading.Tasks.Task
|
||||
WoofWare.NUnitTestRunner.ParallelQueue.StartTestFixture [method]: WoofWare.NUnitTestRunner.TestFixture -> WoofWare.NUnitTestRunner.TestFixtureRunningToken System.Threading.Tasks.Task
|
||||
WoofWare.NUnitTestRunner.ParallelScope inherit obj, implements WoofWare.NUnitTestRunner.ParallelScope System.IEquatable, System.Collections.IStructuralEquatable, WoofWare.NUnitTestRunner.ParallelScope System.IComparable, System.IComparable, System.Collections.IStructuralComparable - union type with 5 cases
|
||||
WoofWare.NUnitTestRunner.ParallelScope+Tags inherit obj
|
||||
WoofWare.NUnitTestRunner.ParallelScope+Tags.All [static field]: int = 2
|
||||
WoofWare.NUnitTestRunner.ParallelScope+Tags.Children [static field]: int = 1
|
||||
WoofWare.NUnitTestRunner.ParallelScope+Tags.Fixtures [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.ParallelScope+Tags.None [static field]: int = 4
|
||||
WoofWare.NUnitTestRunner.ParallelScope+Tags.Self [static field]: int = 3
|
||||
WoofWare.NUnitTestRunner.ParallelScope.All [static property]: [read-only] WoofWare.NUnitTestRunner.ParallelScope
|
||||
WoofWare.NUnitTestRunner.ParallelScope.Children [static property]: [read-only] WoofWare.NUnitTestRunner.ParallelScope
|
||||
WoofWare.NUnitTestRunner.ParallelScope.Equals [method]: (WoofWare.NUnitTestRunner.ParallelScope, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.ParallelScope.Fixtures [static property]: [read-only] WoofWare.NUnitTestRunner.ParallelScope
|
||||
WoofWare.NUnitTestRunner.ParallelScope.get_All [static method]: unit -> WoofWare.NUnitTestRunner.ParallelScope
|
||||
WoofWare.NUnitTestRunner.ParallelScope.get_Children [static method]: unit -> WoofWare.NUnitTestRunner.ParallelScope
|
||||
WoofWare.NUnitTestRunner.ParallelScope.get_Fixtures [static method]: unit -> WoofWare.NUnitTestRunner.ParallelScope
|
||||
WoofWare.NUnitTestRunner.ParallelScope.get_IsAll [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.ParallelScope.get_IsChildren [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.ParallelScope.get_IsFixtures [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.ParallelScope.get_IsNone [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.ParallelScope.get_IsSelf [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.ParallelScope.get_None [static method]: unit -> WoofWare.NUnitTestRunner.ParallelScope
|
||||
WoofWare.NUnitTestRunner.ParallelScope.get_Self [static method]: unit -> WoofWare.NUnitTestRunner.ParallelScope
|
||||
WoofWare.NUnitTestRunner.ParallelScope.get_Tag [method]: unit -> int
|
||||
WoofWare.NUnitTestRunner.ParallelScope.IsAll [property]: [read-only] bool
|
||||
WoofWare.NUnitTestRunner.ParallelScope.IsChildren [property]: [read-only] bool
|
||||
WoofWare.NUnitTestRunner.ParallelScope.IsFixtures [property]: [read-only] bool
|
||||
WoofWare.NUnitTestRunner.ParallelScope.IsNone [property]: [read-only] bool
|
||||
WoofWare.NUnitTestRunner.ParallelScope.IsSelf [property]: [read-only] bool
|
||||
WoofWare.NUnitTestRunner.ParallelScope.None [static property]: [read-only] WoofWare.NUnitTestRunner.ParallelScope
|
||||
WoofWare.NUnitTestRunner.ParallelScope.Self [static property]: [read-only] WoofWare.NUnitTestRunner.ParallelScope
|
||||
WoofWare.NUnitTestRunner.ParallelScope.Tag [property]: [read-only] int
|
||||
WoofWare.NUnitTestRunner.ParallelScopeModule inherit obj
|
||||
WoofWare.NUnitTestRunner.ParallelScopeModule.ofInt [static method]: int -> WoofWare.NUnitTestRunner.ParallelScope
|
||||
WoofWare.NUnitTestRunner.SingleTestMethod inherit obj, implements WoofWare.NUnitTestRunner.SingleTestMethod System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.SingleTestMethod..ctor [constructor]: (System.Reflection.MethodInfo, WoofWare.NUnitTestRunner.TestKind, WoofWare.NUnitTestRunner.Modifier list, string list, int option, WoofWare.NUnitTestRunner.Combinatorial option, unit WoofWare.NUnitTestRunner.Parallelizable option)
|
||||
WoofWare.NUnitTestRunner.SingleTestMethod.Categories [property]: [read-only] string list
|
||||
@@ -276,7 +311,7 @@ WoofWare.NUnitTestRunner.SingleTestMethod.Parallelize [property]: [read-only] un
|
||||
WoofWare.NUnitTestRunner.SingleTestMethod.Repeat [property]: [read-only] int option
|
||||
WoofWare.NUnitTestRunner.SingleTestMethodModule inherit obj
|
||||
WoofWare.NUnitTestRunner.SingleTestMethodModule.parse [static method]: string list -> System.Reflection.MethodInfo -> System.Reflection.CustomAttributeData list -> (WoofWare.NUnitTestRunner.SingleTestMethod option * System.Reflection.CustomAttributeData list)
|
||||
WoofWare.NUnitTestRunner.TestContexts inherit obj, implements WoofWare.NUnitTestRunner.TestContexts System.IEquatable, System.Collections.IStructuralEquatable, IDisposable
|
||||
WoofWare.NUnitTestRunner.TestContexts inherit obj, implements IDisposable
|
||||
WoofWare.NUnitTestRunner.TestContexts.Empty [static method]: unit -> WoofWare.NUnitTestRunner.TestContexts
|
||||
WoofWare.NUnitTestRunner.TestContexts.get_Stderr [method]: unit -> System.IO.TextWriter
|
||||
WoofWare.NUnitTestRunner.TestContexts.get_Stdout [method]: unit -> System.IO.TextWriter
|
||||
@@ -668,13 +703,21 @@ WoofWare.NUnitTestRunner.TrxUnitTestResult.TestId [property]: [read-only] System
|
||||
WoofWare.NUnitTestRunner.TrxUnitTestResult.TestListId [property]: [read-only] System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxUnitTestResult.TestName [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.TrxUnitTestResult.TestType [property]: [read-only] System.Guid
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure inherit obj, implements WoofWare.NUnitTestRunner.UserMethodFailure System.IEquatable, System.Collections.IStructuralEquatable - union type with 2 cases
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure inherit obj, implements WoofWare.NUnitTestRunner.UserMethodFailure System.IEquatable, System.Collections.IStructuralEquatable - union type with 3 cases
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+BadParameters inherit WoofWare.NUnitTestRunner.UserMethodFailure
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+BadParameters.actual [property]: [read-only] obj []
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+BadParameters.expected [property]: [read-only] System.Type []
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+BadParameters.get_actual [method]: unit -> obj []
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+BadParameters.get_expected [method]: unit -> System.Type []
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+BadParameters.get_name [method]: unit -> string
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+BadParameters.name [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+ReturnedNonUnit inherit WoofWare.NUnitTestRunner.UserMethodFailure
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+ReturnedNonUnit.get_name [method]: unit -> string
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+ReturnedNonUnit.get_result [method]: unit -> obj
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+ReturnedNonUnit.name [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+ReturnedNonUnit.result [property]: [read-only] obj
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+Tags inherit obj
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+Tags.BadParameters [static field]: int = 2
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+Tags.ReturnedNonUnit [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+Tags.Threw [static field]: int = 1
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+Threw inherit WoofWare.NUnitTestRunner.UserMethodFailure
|
||||
@@ -683,13 +726,16 @@ WoofWare.NUnitTestRunner.UserMethodFailure+Threw.get_name [method]: unit -> stri
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+Threw.Item2 [property]: [read-only] System.Exception
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+Threw.name [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.Equals [method]: (WoofWare.NUnitTestRunner.UserMethodFailure, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.get_IsBadParameters [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.get_IsReturnedNonUnit [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.get_IsThrew [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.get_Name [method]: unit -> string
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.get_Tag [method]: unit -> int
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.IsBadParameters [property]: [read-only] bool
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.IsReturnedNonUnit [property]: [read-only] bool
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.IsThrew [property]: [read-only] bool
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.Name [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.NewBadParameters [static method]: (string, System.Type [], obj []) -> WoofWare.NUnitTestRunner.UserMethodFailure
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.NewReturnedNonUnit [static method]: (string, obj) -> WoofWare.NUnitTestRunner.UserMethodFailure
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.NewThrew [static method]: (string, System.Exception) -> WoofWare.NUnitTestRunner.UserMethodFailure
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure.Tag [property]: [read-only] int
|
@@ -90,8 +90,15 @@ module TestFixture =
|
||||
let result =
|
||||
try
|
||||
head.Invoke (containingObject, args) |> Ok
|
||||
with :? TargetInvocationException as e ->
|
||||
Error (UserMethodFailure.Threw (head.Name, e.InnerException))
|
||||
with
|
||||
| :? TargetInvocationException as e -> Error (UserMethodFailure.Threw (head.Name, e.InnerException))
|
||||
| :? TargetParameterCountException ->
|
||||
UserMethodFailure.BadParameters (
|
||||
head.Name,
|
||||
head.GetParameters () |> Array.map (fun pm -> pm.ParameterType),
|
||||
args
|
||||
)
|
||||
|> Error
|
||||
|
||||
match result with
|
||||
| Error e -> Error (wrap e)
|
||||
@@ -620,14 +627,16 @@ module TestFixture =
|
||||
| [ v ] ->
|
||||
match v.Value with
|
||||
| :? int as v ->
|
||||
match v with
|
||||
| 512 -> categories, args, Some (Parallelizable.Yes ClassParallelScope.Fixtures)
|
||||
| 256 -> categories, args, Some (Parallelizable.Yes ClassParallelScope.Children)
|
||||
| 257 -> categories, args, Some (Parallelizable.Yes ClassParallelScope.All)
|
||||
| 1 -> categories, args, Some (Parallelizable.Yes ClassParallelScope.Self)
|
||||
| v ->
|
||||
failwith
|
||||
$"Could not recognise value %i{v} of parallel scope in %s{parentType.FullName}"
|
||||
match ParallelScope.ofInt v with
|
||||
| ParallelScope.Fixtures ->
|
||||
categories, args, Some (Parallelizable.Yes ClassParallelScope.Fixtures)
|
||||
| ParallelScope.Children ->
|
||||
categories, args, Some (Parallelizable.Yes ClassParallelScope.Children)
|
||||
| ParallelScope.All ->
|
||||
categories, args, Some (Parallelizable.Yes ClassParallelScope.All)
|
||||
| ParallelScope.Self ->
|
||||
categories, args, Some (Parallelizable.Yes ClassParallelScope.Self)
|
||||
| ParallelScope.None -> categories, args, Some Parallelizable.No
|
||||
| v ->
|
||||
failwith
|
||||
$"Unexpectedly non-int value %O{v} of parallel scope in %s{parentType.FullName}"
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<PackageId>WoofWare.NUnitTestRunner.Lib</PackageId>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<WarnOn>FS3559</WarnOn>
|
||||
<WoofWareMyriadPluginVersion>4.0.5</WoofWareMyriadPluginVersion>
|
||||
<WoofWareMyriadPluginVersion>4.0.9</WoofWareMyriadPluginVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -23,6 +23,7 @@
|
||||
<Compile Include="GeneratedRuntimeConfig.fs">
|
||||
<MyriadFile>RuntimeConfig.fs</MyriadFile>
|
||||
</Compile>
|
||||
<Compile Include="ParallelScope.fs" />
|
||||
<Compile Include="DotnetRuntime.fs" />
|
||||
<Compile Include="Array.fs" />
|
||||
<Compile Include="List.fs" />
|
||||
@@ -47,10 +48,10 @@
|
||||
<EmbeddedResource Include="version.json" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="WoofWare.PrattParser" Version="0.2.2" />
|
||||
<PackageReference Include="WoofWare.PrattParser" Version="0.2.3" />
|
||||
<PackageReference Update="FSharp.Core" Version="6.0.1" />
|
||||
<PackageReference Include="WoofWare.DotnetRuntimeLocator" Version="0.1.9" />
|
||||
<PackageReference Include="WoofWare.Myriad.Plugins.Attributes" Version="3.6.3" />
|
||||
<PackageReference Include="WoofWare.DotnetRuntimeLocator" Version="0.1.11" />
|
||||
<PackageReference Include="WoofWare.Myriad.Plugins.Attributes" Version="3.6.6" />
|
||||
<PackageReference Include="Myriad.SDK" Version="0.8.3" PrivateAssets="all" />
|
||||
<PackageReference Include="WoofWare.Myriad.Plugins" Version="$(WoofWareMyriadPluginVersion)" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": "0.17",
|
||||
"version": "0.20",
|
||||
"publicReleaseRefSpec": [
|
||||
"^refs/heads/main$"
|
||||
],
|
||||
@@ -8,4 +8,4 @@
|
||||
":/Directory.Build.props",
|
||||
":/README.md"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@@ -12,6 +12,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WoofWare.NUnitTestRunner.St
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WoofWare.NUnitTestRunner.StartupHookLogic", "WoofWare.NUnitTestRunner.StartupHookLogic\WoofWare.NUnitTestRunner.StartupHookLogic.csproj", "{A70627C8-9D19-42C2-AFEB-CFBDDDCE045D}"
|
||||
EndProject
|
||||
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FailingConsumer", "FailingConsumer\FailingConsumer.fsproj", "{DA7160F5-4C3C-4D2E-918B-7DCBA3F4272E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -42,5 +44,9 @@ Global
|
||||
{A70627C8-9D19-42C2-AFEB-CFBDDDCE045D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A70627C8-9D19-42C2-AFEB-CFBDDDCE045D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A70627C8-9D19-42C2-AFEB-CFBDDDCE045D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DA7160F5-4C3C-4D2E-918B-7DCBA3F4272E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DA7160F5-4C3C-4D2E-918B-7DCBA3F4272E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DA7160F5-4C3C-4D2E-918B-7DCBA3F4272E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DA7160F5-4C3C-4D2E-918B-7DCBA3F4272E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
@@ -16,11 +16,11 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ApiSurface" Version="4.1.6" />
|
||||
<PackageReference Include="ApiSurface" Version="4.1.15" />
|
||||
<PackageReference Include="FsCheck" Version="3.0.0-rc3" />
|
||||
<PackageReference Include="FsUnit" Version="6.0.1" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
|
||||
<PackageReference Include="NUnit" Version="4.2.2" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
|
||||
<PackageReference Include="NUnit" Version="4.3.0" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0"/>
|
||||
</ItemGroup>
|
||||
|
||||
|
@@ -4,13 +4,13 @@
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsPublishable>false</IsPublishable>
|
||||
<RestorePackagesPath>../.analyzerpackages/</RestorePackagesPath>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<DisableImplicitNuGetFallbackFolder>true</DisableImplicitNuGetFallbackFolder>
|
||||
<AutomaticallyUseReferenceAssemblyPackages>false</AutomaticallyUseReferenceAssemblyPackages> <!-- We don't want to build this project, so we do not need the reference assemblies for the framework we chose.-->
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageDownload Include="G-Research.FSharp.Analyzers" Version="[0.11.0]" />
|
||||
<PackageDownload Include="G-Research.FSharp.Analyzers" Version="[0.12.0]" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
12
flake.lock
generated
12
flake.lock
generated
@@ -5,11 +5,11 @@
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1726560853,
|
||||
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -20,11 +20,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1728093190,
|
||||
"narHash": "sha256-CAZF2NRuHmqTtRTNAruWpHA43Gg2UvuCNEIzabP0l6M=",
|
||||
"lastModified": 1733935885,
|
||||
"narHash": "sha256-xyiHLs6KJ1fxeGmcCxKjJE4yJknVJxbC8Y/ZRYyC8WE=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e2f08f4d8b3ecb5cf5c9fd9cb2d53bb3c71807da",
|
||||
"rev": "5a48e3c2e435e95103d56590188cfed7b70e108c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
10
flake.nix
10
flake.nix
@@ -14,7 +14,7 @@
|
||||
flake-utils.lib.eachDefaultSystem (system: let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
pname = "unofficial-nunit-runner";
|
||||
dotnet-sdk = pkgs.dotnet-sdk_8;
|
||||
dotnet-sdk = pkgs.dotnetCorePackages.sdk_8_0;
|
||||
dotnet-runtime = pkgs.dotnetCorePackages.runtime_8_0;
|
||||
version = "0.1";
|
||||
dotnetTool = dllOverride: toolName: toolVersion: hash:
|
||||
@@ -26,7 +26,7 @@
|
||||
pname = name;
|
||||
version = version;
|
||||
hash = hash;
|
||||
installPhase = ''mkdir -p $out/bin && cp -r tools/net6.0/any/* $out/bin'';
|
||||
installPhase = ''mkdir -p $out/bin && cp -r tools/net*/any/* $out/bin'';
|
||||
};
|
||||
installPhase = let
|
||||
dll =
|
||||
@@ -63,11 +63,7 @@
|
||||
pkgs.alejandra
|
||||
pkgs.nodePackages.markdown-link-check
|
||||
pkgs.shellcheck
|
||||
];
|
||||
};
|
||||
net6 = pkgs.mkShell {
|
||||
packages = [
|
||||
pkgs.dotnetCorePackages.runtime_6_0
|
||||
pkgs.xmlstarlet
|
||||
];
|
||||
};
|
||||
};
|
||||
|
152
nix/deps.nix
152
nix/deps.nix
@@ -3,13 +3,13 @@
|
||||
{fetchNuGet}: [
|
||||
(fetchNuGet {
|
||||
pname = "ApiSurface";
|
||||
version = "4.1.6";
|
||||
hash = "sha256-9AphYmU9vkf5yA4uo1FXICUwlzCj4D3GdSn3RJvCNR0=";
|
||||
version = "4.1.15";
|
||||
hash = "sha256-E0J62c/viqvVBvBA5lBPG90BgPCrA6+cS/h4MZjKz+k=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "fantomas";
|
||||
version = "6.3.15";
|
||||
hash = "sha256-Gjw7MxjUNckMWSfnOye4UTe5fZWnor6RHCls3PNsuG8=";
|
||||
version = "6.3.16";
|
||||
hash = "sha256-4tRdYf+/Q1iedx+DDuIKVGlIWQdr6erM51VdKzZkhCs=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Fantomas.Core";
|
||||
@@ -28,8 +28,8 @@
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "fsharp-analyzers";
|
||||
version = "0.27.0";
|
||||
hash = "sha256-QhLi2veTY1wZlQKJLTyVPgx/ImkaZugQNjSN5VJCNEA=";
|
||||
version = "0.28.0";
|
||||
hash = "sha256-BqGk9MzHHA3oRPNfWuANcM1YELsdhzWI+kLF4mUDUx8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "FSharp.Core";
|
||||
@@ -38,8 +38,8 @@
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "FSharp.Core";
|
||||
version = "8.0.400";
|
||||
hash = "sha256-wlrcAjjvI5YtnHR7kFH8uRUA4GomJYmqr41K5LYjCGs=";
|
||||
version = "8.0.403";
|
||||
hash = "sha256-3XSQp7JUOU5T6gvSQXNfBF4t4gaX4J4xushH+cfM9mE=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "FsUnit";
|
||||
@@ -48,83 +48,83 @@
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.AspNetCore.App.Ref";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-GcPiO+iI0JsHYlqURAmzWjOnDX2jDCUY4jYaIwr8ojs=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-9jDkWbjw/nd8yqdzVTagCuqr6owJ/DUMi4BlUZT4hWU=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.AspNetCore.App.Runtime.linux-arm64";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-g5zbB1DnCSKuCOWtF09GEqGn1uJLdlTN6kqdnSCzRjQ=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-JQULJyF0ivLoUU1JaFfK/HHg+/qzpN7V2RR2Cc+WlQ4=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.AspNetCore.App.Runtime.linux-x64";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-ToaiqVy5qonomAVBg5PO1GgrPKL4Cc1BZTJ0z/2LquA=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-zUsVIpV481vMLAXaLEEUpEMA9/f1HGOnvaQnaWdzlyY=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.AspNetCore.App.Runtime.osx-arm64";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-OY/vdqAzZ99I4lEZbOOQw12TE0AIb5pXxKTvDxO2M2Q=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-2seqZcz0JeUjkzh3QcGa9TcJ4LUafpFjTRk+Nm8T6T0=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.AspNetCore.App.Runtime.osx-x64";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-53MAV3RO1kXzy5IpdZDZIOhoUzFqWHn7+A3aWwdTONQ=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-yxLafxiBKkvfkDggPk0P9YZIHBkDJOsFTO7/V9mEHuU=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.CodeCoverage";
|
||||
version = "17.11.1";
|
||||
hash = "sha256-1dLlK3NGh88PuFYZiYpT+izA96etxhU3BSgixDgdtGA=";
|
||||
version = "17.12.0";
|
||||
hash = "sha256-lGjifppD0OBMBp28pjUfPipaeXg739n8cPhtHWoo5RE=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NET.Test.Sdk";
|
||||
version = "17.11.1";
|
||||
hash = "sha256-0JUEucQ2lzaPgkrjm/NFLBTbqU1dfhvhN3Tl3moE6mI=";
|
||||
version = "17.12.0";
|
||||
hash = "sha256-DKFEbhh2wPzahNeHdEoFig8tZh/LEVrFc5+zpT43Btg=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Host.linux-arm64";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-rwWOpf2Pdg84c8bKIUcMYuDTI0kXUELL/nl9psSmX+E=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-9lC/LYnthYhjkWWz2kkFCvlA5LJOv11jdt59SDnpdy0=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Host.linux-x64";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-5iYNZATXOePDsLA9lI80o1Gjxw4E+B4bJbwdYJJHcZY=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-VFRDzx7LJuvI5yzKdGmw/31NYVbwHWPKQvueQt5xc10=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Host.osx-arm64";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-k3LenomOlacyzq4FlBY/TwV7+ClbK4U0A/O9r0pZHT4=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-DaSWwYACJGolEBuMhzDVCj/rQTdDt061xCVi+gyQnuo=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Host.osx-x64";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-tu72AwDH1+oAIXjOJcNbeyKm1s4pncYp0avbMSBrcJQ=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-FrRny9EI6HKCKQbu6mcLj5w4ooSRrODD4Vj2ZMGnMd4=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Ref";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-BiGUcXo1FQTlZdR6ndhUQ8lrYG3KaGXNXRVF+Fc3L28=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-9LZgVoIFF8qNyUu8kdJrYGLutMF/cL2K82HN2ywwlx8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Runtime.linux-arm64";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-obRKiJEVpZ5E3TE7q2oHaYwFYhI23rMiHwp+8ORkwXY=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-k3rxvUhCEU0pVH8KgEMtkPiSOibn+nBh+0zT2xIfId8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Runtime.linux-x64";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-2xdhvnKsFc8utDWN09zeXzZ5op+WUqkoWLuzdtQAkrA=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-U8wJ2snSDFqeAgDVLXjnniidC7Cr5aJ1/h/BMSlyu0c=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Runtime.osx-arm64";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-9KHubWicibZOcixiByzuBKPnJM2u5DSQC9jR3MAR1bI=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-UfLcrL2Gj/OLz0s92Oo+OCJeDpZFAcQLPLiSNND8D5Y=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Runtime.osx-x64";
|
||||
version = "6.0.33";
|
||||
hash = "sha256-smh6SiTtCAuFglqWrXiGGsoIDP9dhGuIKdYjmw+xCyY=";
|
||||
version = "6.0.36";
|
||||
hash = "sha256-0xIJYFzxdMcnCj3wzkFRQZSnQcPHzPHMzePRIOA3oJs=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.Platforms";
|
||||
@@ -143,13 +143,13 @@
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.TestPlatform.ObjectModel";
|
||||
version = "17.11.1";
|
||||
hash = "sha256-5vX+vCzFY3S7xfMVIv8OlMMFtdedW9UIJzc0WEc+vm4=";
|
||||
version = "17.12.0";
|
||||
hash = "sha256-3XBHBSuCxggAIlHXmKNQNlPqMqwFlM952Av6RrLw1/w=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.TestPlatform.TestHost";
|
||||
version = "17.11.1";
|
||||
hash = "sha256-wSkY0H1fQAq0H3LcKT4u7Y5RzhAAPa6yueVN84g8HxU=";
|
||||
version = "17.12.0";
|
||||
hash = "sha256-rf8Sh0fQq44Sneuvs64unkkIHg8kOjDGWE35j9iLx5I=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Myriad.Core";
|
||||
@@ -163,8 +163,8 @@
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Nerdbank.GitVersioning";
|
||||
version = "3.6.143";
|
||||
hash = "sha256-OhOtMzP+2obDIR+npR7SsoXo0KrmcsL+VCE8Z3t5gzQ=";
|
||||
version = "3.7.112";
|
||||
hash = "sha256-vrItlaH5MpBHa4MI1cQgI11NAe4W3XsxR9DizFE7fus=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Newtonsoft.Json";
|
||||
@@ -178,38 +178,38 @@
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NuGet.Common";
|
||||
version = "6.11.1";
|
||||
hash = "sha256-UyZtDyTuymC+sKSX+ripOI6MmJZn11loVapVs4uzaGo=";
|
||||
version = "6.12.1";
|
||||
hash = "sha256-k6JAFqHFinTakwNuW666aXYPhR7TpI/rb+KbHm1S2TM=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NuGet.Configuration";
|
||||
version = "6.11.1";
|
||||
hash = "sha256-JH2UCpjYg8pkqxQ4j4BrWiTKhGzgfn55NMr32wf6+FQ=";
|
||||
version = "6.12.1";
|
||||
hash = "sha256-e/4lvyl7o7g4aWTAtr9S2yiGgk7V0E9p6DXpsy7GgVw=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NuGet.Frameworks";
|
||||
version = "6.11.1";
|
||||
hash = "sha256-p25Oa7wJjwF+2puIhBkZZkKSuk4jGq7xikYSCdfp9Vc=";
|
||||
version = "6.12.1";
|
||||
hash = "sha256-GGpkbas+PNLx35vvr3nyAVz5lY/aeoMx6qjmT368Lpg=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NuGet.Packaging";
|
||||
version = "6.11.1";
|
||||
hash = "sha256-1yY3p5hQwbUgYCyHnBcuGWiiIib1ppPYt2ntxwXSJW0=";
|
||||
version = "6.12.1";
|
||||
hash = "sha256-3h8Nmjpt383+dCg9GJ1BJ26UirwEQsWCPcTiT0+wGeI=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NuGet.Protocol";
|
||||
version = "6.11.0";
|
||||
hash = "sha256-3vdB/8IiJ2LMHhFXLWOzf0H59Ow/zcoq6W4uCHbihCQ=";
|
||||
version = "6.12.1";
|
||||
hash = "sha256-l+CHnAcit6Y9OjBxereRP5JzOuWbuZZQYkFOKsUkdQ8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NuGet.Versioning";
|
||||
version = "6.11.1";
|
||||
hash = "sha256-fl8lyChMjV7Sp8keAP7CdXZh7ARN/mU39T3gG74jDWY=";
|
||||
version = "6.12.1";
|
||||
hash = "sha256-f/ejCuzCAwKs4N4Ec6yf2RovrhBT0nj0hRDP+03/Iy4=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NUnit";
|
||||
version = "4.2.2";
|
||||
hash = "sha256-+0OS67ITalmG9arYCgQF/+YbmPRnB3pIIykew0kvoCc=";
|
||||
version = "4.3.0";
|
||||
hash = "sha256-dL8+6yL7nwgQKZR3wo2hAOUt3d2EFN10GJH1LzY89I8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NUnit3TestAdapter";
|
||||
@@ -243,8 +243,8 @@
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.Formats.Asn1";
|
||||
version = "6.0.0";
|
||||
hash = "sha256-KaMHgIRBF7Nf3VwOo+gJS1DcD+41cJDPWFh+TDQ8ee8=";
|
||||
version = "8.0.1";
|
||||
hash = "sha256-may/Wg+esmm1N14kQTG4ESMBi+GQKPp0ZrrBo/o6OXM=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.IO.Abstractions";
|
||||
@@ -303,13 +303,13 @@
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.Text.Encodings.Web";
|
||||
version = "7.0.0";
|
||||
hash = "sha256-tF8qt9GZh/nPy0mEnj6nKLG4Lldpoi/D8xM5lv2CoYQ=";
|
||||
version = "8.0.0";
|
||||
hash = "sha256-IUQkQkV9po1LC0QsqrilqwNzPvnc+4eVvq+hCvq8fvE=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.Text.Json";
|
||||
version = "7.0.3";
|
||||
hash = "sha256-aSJZ17MjqaZNQkprfxm/09LaCoFtpdWmqU9BTROzWX4=";
|
||||
version = "8.0.4";
|
||||
hash = "sha256-g5oT7fbXxQ9Iah1nMCr4UUX/a2l+EVjJyTrw3FTbIaI=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "TypeEquality";
|
||||
@@ -318,27 +318,27 @@
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "WoofWare.DotnetRuntimeLocator";
|
||||
version = "0.1.9";
|
||||
hash = "sha256-0v8JQgGjS3tseA28OFmYZUcinYRArjs28BwVy3oczJM=";
|
||||
version = "0.1.11";
|
||||
hash = "sha256-btWYnXxZzAnEcAE3Ufvz+Z3cJqtW7EGXs5OZMEHIWr8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "WoofWare.Myriad.Plugins";
|
||||
version = "4.0.5";
|
||||
hash = "sha256-7WmEeSLZvVA5mT9jK8JvNTFwjfgZEBXL6N1fstbl0ZM=";
|
||||
version = "4.0.9";
|
||||
hash = "sha256-VWpStkuvdFZWsEs/tC0mjChneFgxWw+1YETH+3aCoz4=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "WoofWare.Myriad.Plugins.Attributes";
|
||||
version = "3.6.3";
|
||||
hash = "sha256-KcswaTwDnZ+cGtFNdnWKQMhAPBVvaWtAVR+3eQYv0Ko=";
|
||||
version = "3.6.6";
|
||||
hash = "sha256-68T5JQNp4V0DDad0I3snVh8BCe7rz11mLyvm60hxwaA=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "WoofWare.PrattParser";
|
||||
version = "0.2.2";
|
||||
hash = "sha256-OCsHlp/HYB/i1+h0ixq+0zxO1bXFQ6kpEWIONkOr+TE=";
|
||||
version = "0.2.3";
|
||||
hash = "sha256-PsfU33BFsaA8LwlZMkSwmoA4hLb7Vkm2gYm48MglqxY=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "WoofWare.Whippet.Fantomas";
|
||||
version = "0.2.1";
|
||||
hash = "sha256-38LPop5tQ14oqzi0dSzBp2m53fugIMyWed67xnZmJqk=";
|
||||
version = "0.3.1";
|
||||
hash = "sha256-i5oiqcrxzM90Ocuq5MIu2Ha5lV0aYu5nCvuwmFqp6NA=";
|
||||
})
|
||||
]
|
||||
|
Reference in New Issue
Block a user