mirror of
https://github.com/Smaug123/unofficial-nunit-runner
synced 2025-10-05 17:38:40 +00:00
Compare commits
120 Commits
WoofWare.N
...
WoofWare.N
Author | SHA1 | Date | |
---|---|---|---|
|
eeada219f6 | ||
|
99e0fdff08 | ||
|
fda4e7ba60 | ||
|
dfdfa84733 | ||
|
c218110749 | ||
|
309968721c | ||
|
876ca9e625 | ||
|
59f9789cdc | ||
|
c8c28b9a32 | ||
|
6d87610017 | ||
|
9f28334b7f | ||
|
5cf2261d7f | ||
|
c3589820c3 | ||
|
5d0c205f21 | ||
|
16135fbd56 | ||
|
cbc51cde14 | ||
|
6a4b900aa9 | ||
|
4169289ded | ||
|
7df58d5309 | ||
|
ac4c8c245e | ||
|
3e79e79978 | ||
|
c16e7dd1ee | ||
|
cd66617ce7 | ||
|
144f71a417 | ||
|
3673fc56ee | ||
|
5f74b41825 | ||
|
2068007da0 | ||
|
6fd824c065 | ||
|
0480d5c151 | ||
|
9107b1b502 | ||
|
6583b9e025 | ||
|
48f7302391 | ||
|
d1fa66a2e8 | ||
|
e75c584a43 | ||
|
d7bdd38253 | ||
|
b7d87459d9 | ||
|
992679d8ca | ||
|
011a5129cc | ||
|
46a13d1583 | ||
|
1a291a2ac7 | ||
|
fd34215461 | ||
|
eda120332a | ||
|
799e5c8c3a | ||
|
172865b2a1 | ||
|
f264fca446 | ||
|
8dd18603d6 | ||
|
012b4a6e03 | ||
|
51918f6d35 | ||
|
225b2645b0 | ||
|
5c05d29917 | ||
|
33aa337598 | ||
|
daa53a84a5 | ||
|
4c9568819a | ||
|
6ab8316b2b | ||
|
600772a81f | ||
|
c6b735816e | ||
|
29c3c17bc0 | ||
|
512b41d7c1 | ||
|
f920e597bd | ||
|
226da02b1b | ||
|
e9b9366b90 | ||
|
e7c31b5366 | ||
|
9d26610384 | ||
|
61fbb5f55b | ||
|
d9938d96a3 | ||
|
874a367ce3 | ||
|
4300fbe6b8 | ||
|
402b98f85c | ||
|
a795d6222c | ||
|
cf482b677b | ||
|
db27a7acc8 | ||
|
99826df864 | ||
|
1c93b2c4b2 | ||
|
4369b35dd1 | ||
|
a183455f55 | ||
|
de5f5a64ef | ||
|
fdddbf828b | ||
|
67d9d71100 | ||
|
c39745280b | ||
|
26c29d63bc | ||
|
78f7f76074 | ||
|
c2401207c4 | ||
|
46e097a02e | ||
|
7c23c3bb1c | ||
|
ace1417de6 | ||
|
a694637958 | ||
|
8626cc1252 | ||
|
0287a6b7eb | ||
|
8579ee8f8b | ||
|
debda1a557 | ||
|
bf7d846f61 | ||
|
4690bf23ad | ||
|
04283ee961 | ||
|
6c61c2cbf1 | ||
|
2a0cabd3a9 | ||
|
111e019a83 | ||
|
16d353e8df | ||
|
8528da77aa | ||
|
b74ae980d7 | ||
|
318ba70608 | ||
|
1ee38136a1 | ||
|
3d8bb8d0ca | ||
|
2f64191348 | ||
|
86b8c0ec64 | ||
|
e088d2b420 | ||
|
3ea9d94861 | ||
|
e003ef0934 | ||
|
50948e629c | ||
|
b14e5ede40 | ||
|
f256eb7b29 | ||
|
ec7d9187c5 | ||
|
62eb3c5a66 | ||
|
97e7a87e6a | ||
|
14d91840b2 | ||
|
2859a5f6e6 | ||
|
64649b76ce | ||
|
c9f013891b | ||
|
a7660d1c38 | ||
|
d49d36206e | ||
|
881d5227e7 |
@@ -3,13 +3,13 @@
|
||||
"isRoot": true,
|
||||
"tools": {
|
||||
"fantomas": {
|
||||
"version": "6.3.10",
|
||||
"version": "7.0.3",
|
||||
"commands": [
|
||||
"fantomas"
|
||||
]
|
||||
},
|
||||
"fsharp-analyzers": {
|
||||
"version": "0.26.0",
|
||||
"version": "0.32.0",
|
||||
"commands": [
|
||||
"fsharp-analyzers"
|
||||
]
|
||||
|
1
.fantomasignore
Normal file
1
.fantomasignore
Normal file
@@ -0,0 +1 @@
|
||||
.direnv/
|
14
.github/workflows/assert-contents.sh
vendored
14
.github/workflows/assert-contents.sh
vendored
@@ -1,14 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Unzipping version from NuGet"
|
||||
ls from-nuget.nupkg
|
||||
mkdir from-nuget && cp from-nuget.nupkg from-nuget/zip.zip && cd from-nuget && unzip zip.zip && rm zip.zip && cd - || exit 1
|
||||
|
||||
echo "Unzipping version from local build"
|
||||
ls packed/
|
||||
mkdir from-local && cp packed/*.nupkg from-local/zip.zip && cd from-local && unzip zip.zip && rm zip.zip && cd - || exit 1
|
||||
|
||||
cd from-local && find . -type f -exec sha256sum {} \; | sort > ../from-local.txt && cd .. || exit 1
|
||||
cd from-nuget && find . -type f -and -not -name '.signature.p7s' -exec sha256sum {} \; | sort > ../from-nuget.txt && cd .. || exit 1
|
||||
|
||||
diff from-local.txt from-nuget.txt
|
235
.github/workflows/dotnet.yaml
vendored
235
.github/workflows/dotnet.yaml
vendored
@@ -29,7 +29,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@V27
|
||||
uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -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@v31
|
||||
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
|
||||
@@ -62,7 +85,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@V27
|
||||
uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -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@V27
|
||||
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:
|
||||
@@ -132,7 +113,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@V27
|
||||
uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -149,7 +130,7 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@V27
|
||||
uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -164,7 +145,7 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@V27
|
||||
uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -177,7 +158,7 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@V27
|
||||
uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -190,7 +171,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@V27
|
||||
uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -203,7 +184,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@V27
|
||||
uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -217,7 +198,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@V27
|
||||
uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -259,31 +240,12 @@ jobs:
|
||||
# Verify that there is exactly one nupkg in the artifact that would be NuGet published
|
||||
run: if [[ $(find packed-tool -maxdepth 1 -name 'WoofWare.NUnitTestRunner.*.nupkg' -printf c | wc -c) -ne "1" ]]; then exit 1; fi
|
||||
|
||||
github-release-tool-dry-run:
|
||||
needs: [nuget-pack]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Download NuGet artifact (lib)
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: nuget-package-lib
|
||||
- name: Download NuGet artifact (tool)
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: nuget-package-tool
|
||||
- name: Tag and release tool
|
||||
env:
|
||||
DRY_RUN: 1
|
||||
GITHUB_TOKEN: mock-token
|
||||
run: sh .github/workflows/tag.sh
|
||||
|
||||
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: [github-release-dry-run, check-dotnet-format, check-nix-format, build, build-nix, linkcheck, flake-check, analyzers, nuget-pack, expected-pack, selftest-intended-failures, selftest]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: Smaug123/all-required-checks-complete-action@05b40a8c47ef0b175ea326e9abb09802cb67b44e
|
||||
- uses: G-Research/common-actions/check-required-lite@2b7dc49cb14f3344fbe6019c14a31165e258c059
|
||||
with:
|
||||
needs-context: ${{ toJSON(needs) }}
|
||||
|
||||
@@ -302,7 +264,7 @@ jobs:
|
||||
name: nuget-package-lib
|
||||
path: packed
|
||||
- name: Attest Build Provenance
|
||||
uses: actions/attest-build-provenance@5e9cb68e95676991667494a6a4e59b8a2f13e1d0 # v1.3.3
|
||||
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0
|
||||
with:
|
||||
subject-path: "packed/*.nupkg"
|
||||
|
||||
@@ -321,7 +283,7 @@ jobs:
|
||||
name: nuget-package-tool
|
||||
path: packed
|
||||
- name: Attest Build Provenance
|
||||
uses: actions/attest-build-provenance@5e9cb68e95676991667494a6a4e59b8a2f13e1d0 # v1.3.3
|
||||
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0
|
||||
with:
|
||||
subject-path: "packed/*.nupkg"
|
||||
|
||||
@@ -337,7 +299,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@V27
|
||||
uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -346,26 +308,16 @@ jobs:
|
||||
with:
|
||||
name: nuget-package-lib
|
||||
path: packed
|
||||
- name: Publish to NuGet
|
||||
id: publish-success
|
||||
env:
|
||||
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
|
||||
run: 'nix develop --command bash ./.github/workflows/nuget-push.sh "packed/WoofWare.NUnitTestRunner.Lib.*.nupkg"'
|
||||
- name: Wait for availability
|
||||
if: steps.publish-success.outputs.result == 'published'
|
||||
env:
|
||||
PACKAGE_VERSION: ${{ steps.publish-success.outputs.version }}
|
||||
run: 'echo "$PACKAGE_VERSION" && while ! curl -L --fail -o from-nuget.nupkg "https://www.nuget.org/api/v2/package/WoofWare.NUnitTestRunner.Lib/$PACKAGE_VERSION" ; do sleep 10; done'
|
||||
# Astonishingly, NuGet.org considers it to be "more secure" to tamper with my package after upload (https://devblogs.microsoft.com/nuget/introducing-repository-signatures/).
|
||||
# So we have to *re-attest* it after it's uploaded. Mind-blowing.
|
||||
- name: Assert package contents
|
||||
if: steps.publish-success.outputs.result == 'published'
|
||||
run: 'bash ./.github/workflows/assert-contents.sh'
|
||||
- name: Attest Build Provenance
|
||||
if: steps.publish-success.outputs.result == 'published'
|
||||
uses: actions/attest-build-provenance@5e9cb68e95676991667494a6a4e59b8a2f13e1d0 # v1.3.3
|
||||
- name: Identify .NET
|
||||
id: identify-dotnet
|
||||
run: nix develop --command bash -c "echo dotnet=$(which dotnet) >> $GITHUB_OUTPUT"
|
||||
- name: Publish NuGet package
|
||||
uses: G-Research/common-actions/publish-nuget@2b7dc49cb14f3344fbe6019c14a31165e258c059
|
||||
with:
|
||||
subject-path: "from-nuget.nupkg"
|
||||
package-name: WoofWare.NUnitTestRunner.Lib
|
||||
nuget-key: ${{ secrets.NUGET_API_KEY }}
|
||||
nupkg-dir: packed/
|
||||
dotnet: ${{ steps.identify-dotnet.outputs.dotnet }}
|
||||
|
||||
nuget-publish-tool:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -379,7 +331,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@V27
|
||||
uses: cachix/install-nix-action@v31
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -388,28 +340,55 @@ jobs:
|
||||
with:
|
||||
name: nuget-package-tool
|
||||
path: packed
|
||||
- name: Publish to NuGet
|
||||
id: publish-success
|
||||
env:
|
||||
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
|
||||
run: 'nix develop --command bash ./.github/workflows/nuget-push.sh "packed/WoofWare.NUnitTestRunner.*.nupkg"'
|
||||
- name: Wait for availability
|
||||
if: steps.publish-success.outputs.result == 'published'
|
||||
env:
|
||||
PACKAGE_VERSION: ${{ steps.publish-success.outputs.version }}
|
||||
run: 'echo "$PACKAGE_VERSION" && while ! curl -L --fail -o from-nuget.nupkg "https://www.nuget.org/api/v2/package/WoofWare.NUnitTestRunner/$PACKAGE_VERSION" ; do sleep 10; done'
|
||||
# Astonishingly, NuGet.org considers it to be "more secure" to tamper with my package after upload (https://devblogs.microsoft.com/nuget/introducing-repository-signatures/).
|
||||
# So we have to *re-attest* it after it's uploaded. Mind-blowing.
|
||||
- name: Assert package contents
|
||||
if: steps.publish-success.outputs.result == 'published'
|
||||
run: 'bash ./.github/workflows/assert-contents.sh'
|
||||
- name: Attest Build Provenance
|
||||
if: steps.publish-success.outputs.result == 'published'
|
||||
uses: actions/attest-build-provenance@5e9cb68e95676991667494a6a4e59b8a2f13e1d0 # v1.3.3
|
||||
- name: Identify .NET
|
||||
id: identify-dotnet
|
||||
run: nix develop --command bash -c "echo dotnet=$(which dotnet) >> $GITHUB_OUTPUT"
|
||||
- name: Publish NuGet package
|
||||
uses: G-Research/common-actions/publish-nuget@2b7dc49cb14f3344fbe6019c14a31165e258c059
|
||||
with:
|
||||
subject-path: "from-nuget.nupkg"
|
||||
package-name: WoofWare.NUnitTestRunner
|
||||
nuget-key: ${{ secrets.NUGET_API_KEY }}
|
||||
nupkg-dir: packed/
|
||||
dotnet: ${{ steps.identify-dotnet.outputs.dotnet }}
|
||||
|
||||
github-release-tool:
|
||||
github-release-dry-run:
|
||||
strategy:
|
||||
matrix:
|
||||
artifact:
|
||||
- nuget-package-tool
|
||||
- nuget-package-lib
|
||||
runs-on: ubuntu-latest
|
||||
needs: [nuget-pack]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Download NuGet artifact (tool)
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.artifact }}
|
||||
- name: Compute package path
|
||||
id: compute-path
|
||||
run: |
|
||||
find . -maxdepth 1 -type f -name 'WoofWare.NUnitTestRunner.*.nupkg' -exec sh -c 'echo "output=$(basename "$1")" >> $GITHUB_OUTPUT' shell {} \;
|
||||
- name: Compute tag name
|
||||
id: compute-tag
|
||||
env:
|
||||
NUPKG_PATH: ${{ steps.compute-path.outputs.output }}
|
||||
run: echo "output=$(basename "$NUPKG_PATH" .nupkg)" >> $GITHUB_OUTPUT
|
||||
- name: Tag and release
|
||||
uses: G-Research/common-actions/github-release@19d7281a0f9f83e13c78f99a610dbc80fc59ba3b
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
target-commitish: ${{ github.sha }}
|
||||
tag: ${{ steps.compute-tag.outputs.output }}
|
||||
binary-contents: ${{ steps.compute-path.outputs.output }}
|
||||
dry-run: true
|
||||
|
||||
github-release:
|
||||
strategy:
|
||||
matrix:
|
||||
artifact:
|
||||
- nuget-package-tool
|
||||
- nuget-package-lib
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ !github.event.repository.fork && github.ref == 'refs/heads/main' }}
|
||||
needs: [all-required-checks-complete]
|
||||
@@ -421,12 +400,20 @@ jobs:
|
||||
- name: Download NuGet artifact (tool)
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: nuget-package-tool
|
||||
- name: Download NuGet artifact (lib)
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: nuget-package-lib
|
||||
- name: Tag and release plugin
|
||||
name: ${{ matrix.artifact }}
|
||||
- name: Compute package path
|
||||
id: compute-path
|
||||
run: |
|
||||
find . -maxdepth 1 -type f -name 'WoofWare.NUnitTestRunner.*.nupkg' -exec sh -c 'echo "output=$(basename "$1")" >> $GITHUB_OUTPUT' shell {} \;
|
||||
- name: Compute tag name
|
||||
id: compute-tag
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: sh .github/workflows/tag.sh
|
||||
NUPKG_PATH: ${{ steps.compute-path.outputs.output }}
|
||||
run: echo "output=$(basename "$NUPKG_PATH" .nupkg)" >> $GITHUB_OUTPUT
|
||||
- name: Tag and release
|
||||
uses: G-Research/common-actions/github-release@19d7281a0f9f83e13c78f99a610dbc80fc59ba3b
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
target-commitish: ${{ github.sha }}
|
||||
tag: ${{ steps.compute-tag.outputs.output }}
|
||||
binary-contents: ${{ steps.compute-path.outputs.output }}
|
||||
|
13
.github/workflows/flake_update.yaml
vendored
13
.github/workflows/flake_update.yaml
vendored
@@ -21,21 +21,18 @@ jobs:
|
||||
- name: Update Nix flake
|
||||
run: 'nix flake update'
|
||||
|
||||
- name: Build passthru
|
||||
run: 'nix build ".#default.passthru.fetch-deps"'
|
||||
- name: Build fetch-deps
|
||||
run: 'nix build ".#default.fetch-deps"'
|
||||
|
||||
- name: Run passthru
|
||||
run: |
|
||||
set -o pipefail
|
||||
./result | tee /tmp/passthru.txt
|
||||
cp /"$(cat /tmp/passthru.txt | grep " wrote lockfile to " | cut -d / -f 2-)" nix/deps.nix
|
||||
- name: Run fetch-deps
|
||||
run: ./result nix/deps.json
|
||||
|
||||
- name: Format
|
||||
run: 'nix develop --command alejandra .'
|
||||
|
||||
- name: Create token
|
||||
id: generate-token
|
||||
uses: actions/create-github-app-token@v1
|
||||
uses: actions/create-github-app-token@v2
|
||||
with:
|
||||
# https://github.com/actions/create-github-app-token/issues/136
|
||||
app-id: ${{ secrets.APP_ID }}
|
||||
|
24
.github/workflows/nuget-push.sh
vendored
24
.github/workflows/nuget-push.sh
vendored
@@ -1,24 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
SOURCE_NUPKG=$(find . -type f -name '*.nupkg')
|
||||
|
||||
PACKAGE_VERSION=$(basename "$SOURCE_NUPKG" | rev | cut -d '.' -f 2-4 | rev)
|
||||
|
||||
echo "version=$PACKAGE_VERSION" >> "$GITHUB_OUTPUT"
|
||||
|
||||
tmp=$(mktemp)
|
||||
|
||||
if ! dotnet nuget push "$SOURCE_NUPKG" --api-key "$NUGET_API_KEY" --source https://api.nuget.org/v3/index.json > "$tmp" ; then
|
||||
cat "$tmp"
|
||||
if grep 'already exists and cannot be modified' "$tmp" ; then
|
||||
echo "result=skipped" >> "$GITHUB_OUTPUT"
|
||||
exit 0
|
||||
else
|
||||
echo "Unexpected failure to upload"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
cat "$tmp"
|
||||
|
||||
echo "result=published" >> "$GITHUB_OUTPUT"
|
124
.github/workflows/tag.sh
vendored
124
.github/workflows/tag.sh
vendored
@@ -1,124 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Dry-run? $DRY_RUN!"
|
||||
|
||||
find . -maxdepth 1 -type f ! -name "$(printf "*\n*")" -name '*.nupkg' | while IFS= read -r file
|
||||
do
|
||||
tag=$(basename "$file" .nupkg)
|
||||
git tag "$tag"
|
||||
${DRY_RUN:+echo} git push origin "$tag"
|
||||
done
|
||||
|
||||
export TAG
|
||||
TAG=$(find . -maxdepth 1 -type f -name 'WoofWare.NUnitTestRunner.*.nupkg' -exec sh -c 'basename "$1" .nupkg' shell {} \; | grep -v Lib)
|
||||
|
||||
case "$TAG" in
|
||||
*"
|
||||
"*)
|
||||
echo "Error: TAG contains a newline; multiple tools found."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# target_commitish empty indicates the repo default branch
|
||||
IS_PRERELEASE="false"
|
||||
if [ "${TAG#*prerelease}" != "$TAG" ]; then
|
||||
IS_PRERELEASE="true"
|
||||
fi
|
||||
curl_body='{"tag_name":"'"$TAG"'","target_commitish":"","name":"'"$TAG"'","draft":false,"prerelease":'"$IS_PRERELEASE"',"generate_release_notes":false}'
|
||||
|
||||
echo "cURL body: $curl_body"
|
||||
|
||||
failed_output=$(cat <<'EOF'
|
||||
{
|
||||
"message": "Validation Failed",
|
||||
"errors": [
|
||||
{
|
||||
"resource": "Release",
|
||||
"code": "already_exists",
|
||||
"field": "tag_name"
|
||||
}
|
||||
],
|
||||
"documentation_url": "https://docs.github.com/rest/releases/releases#create-a-release"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
success_output=$(cat <<'EOF'
|
||||
{
|
||||
"url": "https://api.github.com/repos/Smaug123/unofficial-nunit-runner/releases/158152116",
|
||||
"assets_url": "https://api.github.com/repos/Smaug123/unofficial-nunit-runner/releases/158152116/assets",
|
||||
"upload_url": "https://uploads.github.com/repos/Smaug123/unofficial-nunit-runner/releases/158152116/assets{?name,label}",
|
||||
"html_url": "https://github.com/Smaug123/unofficial-nunit-runner/releases/tag/WoofWare.NUnitTestRunner.2.1.30",
|
||||
"id": 158152116,
|
||||
"author": {
|
||||
"login": "github-actions[bot]",
|
||||
"id": 41898282,
|
||||
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
||||
"gravatar_id": "",
|
||||
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
||||
"html_url": "https://github.com/apps/github-actions",
|
||||
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
||||
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
||||
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
||||
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
||||
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
||||
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
||||
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
||||
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
||||
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
||||
"type": "Bot",
|
||||
"site_admin": false
|
||||
},
|
||||
"node_id": "RE_kwDOJfksgc4JbTW0",
|
||||
"tag_name": "WoofWare.NUnitTestRunner.2.1.30",
|
||||
"target_commitish": "main",
|
||||
"name": "WoofWare.NUnitTestRunner.2.1.30",
|
||||
"draft": false,
|
||||
"prerelease": false,
|
||||
"created_at": "2024-05-30T11:00:55Z",
|
||||
"published_at": "2024-05-30T11:03:02Z",
|
||||
"assets": [
|
||||
|
||||
],
|
||||
"tarball_url": "https://api.github.com/repos/Smaug123/unofficial-nunit-runner/tarball/WoofWare.NUnitTestRunner.2.1.30",
|
||||
"zipball_url": "https://api.github.com/repos/Smaug123/unofficial-nunit-runner/zipball/WoofWare.NUnitTestRunner.2.1.30",
|
||||
"body": null
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
HANDLE_OUTPUT=''
|
||||
handle_error() {
|
||||
ERROR_OUTPUT="$1"
|
||||
exit_message=$(echo "$ERROR_OUTPUT" | jq -r --exit-status 'if .errors | length == 1 then .errors[0].code else null end')
|
||||
if [ "$exit_message" = "already_exists" ] ; then
|
||||
HANDLE_OUTPUT="Did not create GitHub release because it already exists at this version."
|
||||
else
|
||||
echo "Unexpected error output from curl: $(cat curl_output.json)"
|
||||
echo "JQ output: $(exit_message)"
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
run_tests() {
|
||||
handle_error "$failed_output"
|
||||
if [ "$HANDLE_OUTPUT" != "Did not create GitHub release because it already exists at this version." ]; then
|
||||
echo "Bad output from handler: $HANDLE_OUTPUT"
|
||||
exit 3
|
||||
fi
|
||||
HANDLE_OUTPUT=''
|
||||
echo "Tests passed."
|
||||
}
|
||||
|
||||
run_tests
|
||||
|
||||
if [ "$DRY_RUN" != 1 ] ; then
|
||||
if curl --fail-with-body -L -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer $GITHUB_TOKEN" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/Smaug123/unofficial-nunit-runner/releases -d "$curl_body" > curl_output.json; then
|
||||
echo "Curl succeeded."
|
||||
else
|
||||
handle_error "$(cat curl_output.json)"
|
||||
echo "$HANDLE_OUTPUT"
|
||||
fi
|
||||
fi
|
@@ -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>
|
||||
@@ -10,8 +10,10 @@
|
||||
<Compile Include="NoAttribute.fs" />
|
||||
<Compile Include="Inconclusive.fs" />
|
||||
<Compile Include="RunSubProcess.fs" />
|
||||
<Compile Include="TestExplicit.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" />
|
||||
@@ -25,10 +27,10 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FsUnit" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0"/>
|
||||
<PackageReference Include="NUnit" Version="4.1.0"/>
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0"/>
|
||||
<PackageReference Include="FsUnit" Version="7.1.1" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1"/>
|
||||
<PackageReference Include="NUnit" Version="4.3.2"/>
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
24
Consumer/TestExplicit.fs
Normal file
24
Consumer/TestExplicit.fs
Normal file
@@ -0,0 +1,24 @@
|
||||
namespace Consumer
|
||||
|
||||
open NUnit.Framework
|
||||
|
||||
[<TestFixture>]
|
||||
module TestExplicitIndividual =
|
||||
|
||||
[<Explicit>]
|
||||
[<Test>]
|
||||
let ``This test should not be run`` () = failwith<unit> "should not call"
|
||||
|
||||
[<Explicit>]
|
||||
[<TestFixture>]
|
||||
module TestExplicitModule =
|
||||
|
||||
[<OneTimeSetUp>]
|
||||
let setUp () = failwith<unit> "should not call: setup"
|
||||
|
||||
[<OneTimeTearDown>]
|
||||
let tearDown () =
|
||||
failwith<unit> "should not call: teardown"
|
||||
|
||||
[<Test>]
|
||||
let ``This test should not be run because its module is explicit`` () = failwith<unit> "should not call: test"
|
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.139" PrivateAssets="all"/>
|
||||
<PackageReference Include="Nerdbank.GitVersioning" Version="3.8.38-alpha" 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="7.1.1" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1"/>
|
||||
<PackageReference Include="NUnit" Version="4.3.2"/>
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="5.0.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
|
@@ -12,5 +12,4 @@ However, we would recommend phrasing some of them differently, for maximum peace
|
||||
## Parallelism
|
||||
|
||||
WoofWare.NUnitTestRunner has *limited* support for parallelism.
|
||||
By default, we run tests serially; we may or may not respect the NUnit parallelism attributes to any given extent (but we will never incorrectly run tests in parallel).
|
||||
For example, as of this writing, we do not run any tests in parallel (but the internal infrastructure is set up so that we will be able to do this soon).
|
||||
By default, we run tests in parallel, taking half the available processors; we may or may not respect the NUnit parallelism attributes to any given extent that they tell us to be *more* parallel (but we will never incorrectly run tests in parallel).
|
||||
|
@@ -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
|
||||
|
@@ -10,20 +10,14 @@ open System.Threading
|
||||
|
||||
type internal OutputStreamId = | OutputStreamId of Guid
|
||||
|
||||
type private ThreadAwareWriter
|
||||
(
|
||||
local : AsyncLocal<OutputStreamId>,
|
||||
underlying : Dictionary<OutputStreamId, TextWriter>,
|
||||
mem : Dictionary<OutputStreamId, MemoryStream>
|
||||
)
|
||||
type private ThreadAwareWriter (local : AsyncLocal<OutputStreamId>, underlying : Dictionary<OutputStreamId, TextWriter>)
|
||||
=
|
||||
inherit TextWriter ()
|
||||
override _.get_Encoding () = Encoding.Default
|
||||
|
||||
override this.Write (v : char) : unit =
|
||||
use prev = ExecutionContext.Capture ()
|
||||
|
||||
(fun _ ->
|
||||
lock
|
||||
underlying
|
||||
(fun () ->
|
||||
match underlying.TryGetValue local.Value with
|
||||
| true, output -> output.Write v
|
||||
@@ -31,16 +25,12 @@ type private ThreadAwareWriter
|
||||
let wanted =
|
||||
underlying |> Seq.map (fun (KeyValue (a, b)) -> $"%O{a}") |> String.concat "\n"
|
||||
|
||||
failwith $"no such context: %O{local.Value}\nwanted:\n"
|
||||
failwith $"no such context: %O{local.Value}\nwanted:\n{wanted}"
|
||||
)
|
||||
|> lock underlying
|
||||
)
|
||||
|> fun action -> ExecutionContext.Run (prev, action, ())
|
||||
|
||||
override this.WriteLine (v : string) : unit =
|
||||
use prev = ExecutionContext.Capture ()
|
||||
|
||||
(fun _ ->
|
||||
lock
|
||||
underlying
|
||||
(fun () ->
|
||||
match underlying.TryGetValue local.Value with
|
||||
| true, output -> output.WriteLine v
|
||||
@@ -48,15 +38,13 @@ type private ThreadAwareWriter
|
||||
let wanted =
|
||||
underlying |> Seq.map (fun (KeyValue (a, b)) -> $"%O{a}") |> String.concat "\n"
|
||||
|
||||
failwith $"no such context: %O{local.Value}\nwanted:\n"
|
||||
failwith $"no such context: %O{local.Value}\nwanted:\n{wanted}"
|
||||
)
|
||||
|> lock underlying
|
||||
)
|
||||
|> fun action -> ExecutionContext.Run (prev, action, ())
|
||||
|
||||
/// Wraps up the necessary context to intercept global state.
|
||||
[<NoEquality ; NoComparison>]
|
||||
type TestContexts =
|
||||
private
|
||||
internal
|
||||
{
|
||||
/// Accesses to this must be locked on StdOutWriters.
|
||||
StdOuts : Dictionary<OutputStreamId, MemoryStream>
|
||||
@@ -76,8 +64,8 @@ type TestContexts =
|
||||
let stdoutWriters = Dictionary ()
|
||||
let stderrWriters = Dictionary ()
|
||||
let local = AsyncLocal ()
|
||||
let stdoutWriter = new ThreadAwareWriter (local, stdoutWriters, stdouts)
|
||||
let stderrWriter = new ThreadAwareWriter (local, stderrWriters, stderrs)
|
||||
let stdoutWriter = new ThreadAwareWriter (local, stdoutWriters)
|
||||
let stderrWriter = new ThreadAwareWriter (local, stderrWriters)
|
||||
|
||||
{
|
||||
StdOuts = stdouts
|
||||
|
@@ -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 =
|
||||
@@ -120,10 +138,17 @@ type TestFixture =
|
||||
Tests : SingleTestMethod list
|
||||
/// If this fixture has declared a parallelisability, that goes here.
|
||||
Parallelize : Parallelizable<ClassParallelScope> option
|
||||
/// It is possible to mark a fixture as "Explicit" or "Ignored", for example.
|
||||
Modifiers : Modifier list
|
||||
}
|
||||
|
||||
/// A test fixture about which we know nothing. No tests, no setup/teardown.
|
||||
static member Empty (ty : Type) (par : Parallelizable<ClassParallelScope> option) (args : obj list list) =
|
||||
static member Empty
|
||||
(ty : Type)
|
||||
(par : Parallelizable<ClassParallelScope> option)
|
||||
(modifiers : Modifier list)
|
||||
(args : obj list list)
|
||||
=
|
||||
{
|
||||
ContainingAssembly = ty.Assembly
|
||||
Type = ty
|
||||
@@ -135,6 +160,7 @@ type TestFixture =
|
||||
Parameters = args
|
||||
Tests = []
|
||||
Parallelize = par
|
||||
Modifiers = modifiers
|
||||
}
|
||||
|
||||
/// User code in the unit under test has failed somehow.
|
||||
@@ -144,6 +170,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 +180,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.
|
||||
|
10
WoofWare.NUnitTestRunner.Lib/Exception.fs
Normal file
10
WoofWare.NUnitTestRunner.Lib/Exception.fs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace WoofWare.NUnitTestRunner
|
||||
|
||||
open System.Runtime.ExceptionServices
|
||||
|
||||
[<RequireQualifiedAccess>]
|
||||
module internal Exception =
|
||||
let reraiseWithOriginalStackTrace<'a> (e : exn) : 'a =
|
||||
let edi = ExceptionDispatchInfo.Capture e
|
||||
edi.Throw ()
|
||||
failwith "unreachable"
|
@@ -155,9 +155,7 @@ module internal Lexer =
|
||||
[<RequireQualifiedAccess>]
|
||||
module internal ParsedFilter =
|
||||
let private unescape (s : string) : string =
|
||||
System.Xml.XmlReader
|
||||
.Create(new StringReader ("<r>" + s + "</r>"))
|
||||
.ReadElementString ()
|
||||
System.Xml.XmlReader.Create(new StringReader ("<r>" + s + "</r>")).ReadElementString ()
|
||||
|
||||
let private atom (inputString : string) (token : Token) : ParsedFilter option =
|
||||
let start, len = token.Trivia
|
||||
|
@@ -4,16 +4,16 @@ open System
|
||||
open System.Threading
|
||||
open System.Threading.Tasks
|
||||
|
||||
type private ThunkEvaluator<'ret> =
|
||||
abstract Eval<'a> : (unit -> 'a) -> AsyncReplyChannel<'a> -> 'ret
|
||||
type private AsyncThunkEvaluator<'ret> =
|
||||
abstract Eval<'a> : (unit -> Async<'a>) -> AsyncReplyChannel<Result<'a, exn>> -> 'ret
|
||||
|
||||
type private ThunkCrate =
|
||||
abstract Apply<'ret> : ThunkEvaluator<'ret> -> 'ret
|
||||
type private AsyncThunkCrate =
|
||||
abstract Apply<'ret> : AsyncThunkEvaluator<'ret> -> 'ret
|
||||
|
||||
[<RequireQualifiedAccess>]
|
||||
module private ThunkCrate =
|
||||
let make<'a> (t : unit -> 'a) (rc : AsyncReplyChannel<'a>) : ThunkCrate =
|
||||
{ new ThunkCrate with
|
||||
module private AsyncThunkCrate =
|
||||
let make<'a> (t : unit -> Async<'a>) (rc : AsyncReplyChannel<Result<'a, exn>>) : AsyncThunkCrate =
|
||||
{ new AsyncThunkCrate with
|
||||
member _.Apply e = e.Eval t rc
|
||||
}
|
||||
|
||||
@@ -41,7 +41,11 @@ type private MailboxMessage =
|
||||
| Quit of AsyncReplyChannel<unit>
|
||||
/// Check current state, see if we need to start more tests, etc.
|
||||
| Reconcile
|
||||
| RunTest of within : TestFixture * Parallelizable<unit> option * test : ThunkCrate
|
||||
| RunTestAsync of
|
||||
within : TestFixture *
|
||||
Parallelizable<unit> option *
|
||||
test : AsyncThunkCrate *
|
||||
context : ExecutionContext
|
||||
| BeginTestFixture of TestFixture * AsyncReplyChannel<TestFixtureRunningToken>
|
||||
| EndTestFixture of TestFixtureTearDownToken * AsyncReplyChannel<unit>
|
||||
|
||||
@@ -310,21 +314,31 @@ type ParallelQueue
|
||||
rc.Reply ()
|
||||
m.Post MailboxMessage.Reconcile
|
||||
return! processTask (Running state) m
|
||||
| MailboxMessage.RunTest (withinFixture, par, message) ->
|
||||
| MailboxMessage.RunTestAsync (withinFixture, par, message, capturedContext) ->
|
||||
let t () =
|
||||
{ new ThunkEvaluator<_> with
|
||||
member _.Eval<'b> (t : unit -> 'b) rc =
|
||||
let tcs = TaskCompletionSource ()
|
||||
use ec = ExecutionContext.Capture ()
|
||||
{ new AsyncThunkEvaluator<_> with
|
||||
member _.Eval<'b> (t : unit -> Async<'b>) rc =
|
||||
let tcs = TaskCompletionSource TaskCreationOptions.RunContinuationsAsynchronously
|
||||
|
||||
fun () ->
|
||||
ExecutionContext.Run (
|
||||
ec,
|
||||
capturedContext,
|
||||
(fun _ ->
|
||||
let result = t ()
|
||||
tcs.SetResult ()
|
||||
m.Post MailboxMessage.Reconcile
|
||||
rc.Reply result
|
||||
async {
|
||||
let! result =
|
||||
async {
|
||||
try
|
||||
let! r = t ()
|
||||
return Ok r
|
||||
with e ->
|
||||
return Error e
|
||||
}
|
||||
|
||||
tcs.SetResult ()
|
||||
m.Post MailboxMessage.Reconcile
|
||||
rc.Reply result
|
||||
}
|
||||
|> Async.StartImmediate
|
||||
),
|
||||
()
|
||||
)
|
||||
@@ -348,17 +362,36 @@ type ParallelQueue
|
||||
let mb = new MailboxProcessor<_> (processTask MailboxState.Idle)
|
||||
do mb.Start ()
|
||||
|
||||
/// Request to run the given async action, freely in parallel with other running tests.
|
||||
/// The resulting Task will return when the action has completed.
|
||||
member _.RunAsync<'a>
|
||||
(TestFixtureSetupToken parent)
|
||||
(scope : Parallelizable<unit> option)
|
||||
(action : unit -> Async<'a>)
|
||||
: 'a Task
|
||||
=
|
||||
let ec = ExecutionContext.Capture ()
|
||||
|
||||
task {
|
||||
let! result =
|
||||
(fun rc -> MailboxMessage.RunTestAsync (parent, scope, AsyncThunkCrate.make action rc, ec))
|
||||
|> mb.PostAndAsyncReply
|
||||
|> Async.StartAsTask
|
||||
|
||||
match result with
|
||||
| Ok o -> return o
|
||||
| Error e -> return Exception.reraiseWithOriginalStackTrace e
|
||||
}
|
||||
|
||||
/// Request to run the given action, freely in parallel with other running tests.
|
||||
/// The resulting Task will return when the action has completed.
|
||||
member _.Run<'a>
|
||||
(TestFixtureSetupToken parent)
|
||||
member this.Run<'a>
|
||||
(parent : TestFixtureSetupToken)
|
||||
(scope : Parallelizable<unit> option)
|
||||
(action : unit -> 'a)
|
||||
: 'a Task
|
||||
=
|
||||
(fun rc -> MailboxMessage.RunTest (parent, scope, ThunkCrate.make action rc))
|
||||
|> mb.PostAndAsyncReply
|
||||
|> Async.StartAsTask
|
||||
this.RunAsync parent scope (fun () -> async.Return (action ()))
|
||||
|
||||
/// Declare that we wish to start the given test fixture. The resulting Task will return
|
||||
/// when you are allowed to start running tests from that fixture.
|
||||
@@ -379,11 +412,22 @@ type ParallelQueue
|
||||
| Parallelizable.Yes _ -> Parallelizable.Yes ()
|
||||
)
|
||||
|
||||
let ec = ExecutionContext.Capture ()
|
||||
|
||||
let! response =
|
||||
(fun rc -> MailboxMessage.RunTest (parent, par, ThunkCrate.make action rc))
|
||||
(fun rc ->
|
||||
MailboxMessage.RunTestAsync (
|
||||
parent,
|
||||
par,
|
||||
AsyncThunkCrate.make (fun () -> async.Return (action ())) rc,
|
||||
ec
|
||||
)
|
||||
)
|
||||
|> mb.PostAndAsyncReply
|
||||
|
||||
return response, TestFixtureSetupToken parent
|
||||
match response with
|
||||
| Ok response -> return response, TestFixtureSetupToken parent
|
||||
| Error e -> return Exception.reraiseWithOriginalStackTrace e
|
||||
}
|
||||
|
||||
/// Run the given one-time tear-down for the test fixture.
|
||||
@@ -401,11 +445,22 @@ type ParallelQueue
|
||||
| Parallelizable.Yes _ -> Parallelizable.Yes ()
|
||||
)
|
||||
|
||||
let ec = ExecutionContext.Capture ()
|
||||
|
||||
let! response =
|
||||
(fun rc -> MailboxMessage.RunTest (parent, par, ThunkCrate.make action rc))
|
||||
(fun rc ->
|
||||
MailboxMessage.RunTestAsync (
|
||||
parent,
|
||||
par,
|
||||
AsyncThunkCrate.make (fun () -> async.Return (action ())) rc,
|
||||
ec
|
||||
)
|
||||
)
|
||||
|> mb.PostAndAsyncReply
|
||||
|
||||
return response, TestFixtureTearDownToken parent
|
||||
match response with
|
||||
| Ok response -> return response, TestFixtureTearDownToken parent
|
||||
| Error e -> return Exception.reraiseWithOriginalStackTrace e
|
||||
}
|
||||
|
||||
/// Declare that we have finished submitting requests to run in the given test fixture.
|
||||
|
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}"
|
@@ -1,16 +1,15 @@
|
||||
namespace WoofWare.NUnitTestRunner
|
||||
|
||||
open System
|
||||
open WoofWare.Myriad.Plugins
|
||||
|
||||
[<JsonParse>]
|
||||
// Myriad runs the JsonParse generator on this
|
||||
type internal FrameworkDescription =
|
||||
{
|
||||
Name : string
|
||||
Version : string
|
||||
}
|
||||
|
||||
[<JsonParse>]
|
||||
// Myriad runs the JsonParse generator on this
|
||||
type internal RuntimeOptions =
|
||||
{
|
||||
Tfm : string
|
||||
@@ -21,7 +20,7 @@ type internal RuntimeOptions =
|
||||
RollForward : string option
|
||||
}
|
||||
|
||||
[<JsonParse>]
|
||||
// Myriad runs the JsonParse generator on this
|
||||
type internal RuntimeConfig =
|
||||
{
|
||||
RuntimeOptions : RuntimeOptions
|
||||
|
@@ -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)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
WoofWare.NUnitTestRunner.Args inherit obj, implements WoofWare.NUnitTestRunner.Args System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.Args..ctor [constructor]: (System.IO.FileInfo, System.IO.FileInfo option, (string * WoofWare.NUnitTestRunner.Filter) option, WoofWare.NUnitTestRunner.LogLevel, int option, System.TimeSpan option)
|
||||
WoofWare.NUnitTestRunner.Args.Dll [property]: [read-only] System.IO.FileInfo
|
||||
WoofWare.NUnitTestRunner.Args.Equals [method]: (WoofWare.NUnitTestRunner.Args, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.Args.Filter [property]: [read-only] (string * WoofWare.NUnitTestRunner.Filter) option
|
||||
WoofWare.NUnitTestRunner.Args.get_Dll [method]: unit -> System.IO.FileInfo
|
||||
WoofWare.NUnitTestRunner.Args.get_Filter [method]: unit -> (string * WoofWare.NUnitTestRunner.Filter) option
|
||||
@@ -15,6 +16,7 @@ WoofWare.NUnitTestRunner.Args.Timeout [property]: [read-only] System.TimeSpan op
|
||||
WoofWare.NUnitTestRunner.Args.Trx [property]: [read-only] System.IO.FileInfo option
|
||||
WoofWare.NUnitTestRunner.AssemblyLevelAttributes inherit obj, implements WoofWare.NUnitTestRunner.AssemblyLevelAttributes System.IEquatable, System.Collections.IStructuralEquatable, WoofWare.NUnitTestRunner.AssemblyLevelAttributes System.IComparable, System.IComparable, System.Collections.IStructuralComparable
|
||||
WoofWare.NUnitTestRunner.AssemblyLevelAttributes..ctor [constructor]: (int option, WoofWare.NUnitTestRunner.AssemblyParallelScope WoofWare.NUnitTestRunner.Parallelizable option)
|
||||
WoofWare.NUnitTestRunner.AssemblyLevelAttributes.Equals [method]: (WoofWare.NUnitTestRunner.AssemblyLevelAttributes, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.AssemblyLevelAttributes.get_Parallelism [method]: unit -> int option
|
||||
WoofWare.NUnitTestRunner.AssemblyLevelAttributes.get_Parallelizable [method]: unit -> WoofWare.NUnitTestRunner.AssemblyParallelScope WoofWare.NUnitTestRunner.Parallelizable option
|
||||
WoofWare.NUnitTestRunner.AssemblyLevelAttributes.Parallelism [property]: [read-only] int option
|
||||
@@ -26,6 +28,7 @@ WoofWare.NUnitTestRunner.AssemblyParallelScope+Tags inherit obj
|
||||
WoofWare.NUnitTestRunner.AssemblyParallelScope+Tags.Children [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.AssemblyParallelScope+Tags.Fixtures [static field]: int = 1
|
||||
WoofWare.NUnitTestRunner.AssemblyParallelScope.Children [static property]: [read-only] WoofWare.NUnitTestRunner.AssemblyParallelScope
|
||||
WoofWare.NUnitTestRunner.AssemblyParallelScope.Equals [method]: (WoofWare.NUnitTestRunner.AssemblyParallelScope, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.AssemblyParallelScope.Fixtures [static property]: [read-only] WoofWare.NUnitTestRunner.AssemblyParallelScope
|
||||
WoofWare.NUnitTestRunner.AssemblyParallelScope.get_Children [static method]: unit -> WoofWare.NUnitTestRunner.AssemblyParallelScope
|
||||
WoofWare.NUnitTestRunner.AssemblyParallelScope.get_Fixtures [static method]: unit -> WoofWare.NUnitTestRunner.AssemblyParallelScope
|
||||
@@ -45,6 +48,7 @@ WoofWare.NUnitTestRunner.ClassParallelScope+Tags.Fixtures [static field]: int =
|
||||
WoofWare.NUnitTestRunner.ClassParallelScope+Tags.Self [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.ClassParallelScope.All [static property]: [read-only] WoofWare.NUnitTestRunner.ClassParallelScope
|
||||
WoofWare.NUnitTestRunner.ClassParallelScope.Children [static property]: [read-only] WoofWare.NUnitTestRunner.ClassParallelScope
|
||||
WoofWare.NUnitTestRunner.ClassParallelScope.Equals [method]: (WoofWare.NUnitTestRunner.ClassParallelScope, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.ClassParallelScope.Fixtures [static property]: [read-only] WoofWare.NUnitTestRunner.ClassParallelScope
|
||||
WoofWare.NUnitTestRunner.ClassParallelScope.get_All [static method]: unit -> WoofWare.NUnitTestRunner.ClassParallelScope
|
||||
WoofWare.NUnitTestRunner.ClassParallelScope.get_Children [static method]: unit -> WoofWare.NUnitTestRunner.ClassParallelScope
|
||||
@@ -66,6 +70,7 @@ WoofWare.NUnitTestRunner.Combinatorial+Tags inherit obj
|
||||
WoofWare.NUnitTestRunner.Combinatorial+Tags.Combinatorial [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.Combinatorial+Tags.Sequential [static field]: int = 1
|
||||
WoofWare.NUnitTestRunner.Combinatorial.Combinatorial [static property]: [read-only] WoofWare.NUnitTestRunner.Combinatorial
|
||||
WoofWare.NUnitTestRunner.Combinatorial.Equals [method]: (WoofWare.NUnitTestRunner.Combinatorial, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.Combinatorial.get_Combinatorial [static method]: unit -> WoofWare.NUnitTestRunner.Combinatorial
|
||||
WoofWare.NUnitTestRunner.Combinatorial.get_IsCombinatorial [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.Combinatorial.get_IsSequential [method]: unit -> bool
|
||||
@@ -107,6 +112,7 @@ WoofWare.NUnitTestRunner.Filter+Tags.TestCategory [static field]: int = 2
|
||||
WoofWare.NUnitTestRunner.Filter+TestCategory inherit WoofWare.NUnitTestRunner.Filter
|
||||
WoofWare.NUnitTestRunner.Filter+TestCategory.get_Item [method]: unit -> WoofWare.NUnitTestRunner.Match
|
||||
WoofWare.NUnitTestRunner.Filter+TestCategory.Item [property]: [read-only] WoofWare.NUnitTestRunner.Match
|
||||
WoofWare.NUnitTestRunner.Filter.Equals [method]: (WoofWare.NUnitTestRunner.Filter, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.Filter.get_IsAnd [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.Filter.get_IsFullyQualifiedName [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.Filter.get_IsName [method]: unit -> bool
|
||||
@@ -132,6 +138,7 @@ WoofWare.NUnitTestRunner.FilterModule.parse [static method]: string -> WoofWare.
|
||||
WoofWare.NUnitTestRunner.FilterModule.shouldRun [static method]: WoofWare.NUnitTestRunner.Filter -> (WoofWare.NUnitTestRunner.TestFixture -> WoofWare.NUnitTestRunner.SingleTestMethod -> bool)
|
||||
WoofWare.NUnitTestRunner.FixtureRunResults inherit obj, implements WoofWare.NUnitTestRunner.FixtureRunResults System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.FixtureRunResults..ctor [constructor]: ((WoofWare.NUnitTestRunner.TestMemberFailure * WoofWare.NUnitTestRunner.IndividualTestRunMetadata) list, (WoofWare.NUnitTestRunner.SingleTestMethod * WoofWare.NUnitTestRunner.TestMemberSuccess * WoofWare.NUnitTestRunner.IndividualTestRunMetadata) list, (WoofWare.NUnitTestRunner.UserMethodFailure * WoofWare.NUnitTestRunner.IndividualTestRunMetadata) list)
|
||||
WoofWare.NUnitTestRunner.FixtureRunResults.Equals [method]: (WoofWare.NUnitTestRunner.FixtureRunResults, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.FixtureRunResults.Failed [property]: [read-only] (WoofWare.NUnitTestRunner.TestMemberFailure * WoofWare.NUnitTestRunner.IndividualTestRunMetadata) list
|
||||
WoofWare.NUnitTestRunner.FixtureRunResults.get_Failed [method]: unit -> (WoofWare.NUnitTestRunner.TestMemberFailure * WoofWare.NUnitTestRunner.IndividualTestRunMetadata) list
|
||||
WoofWare.NUnitTestRunner.FixtureRunResults.get_IndividualTestRunMetadata [method]: unit -> (WoofWare.NUnitTestRunner.IndividualTestRunMetadata * Microsoft.FSharp.Core.FSharpChoice<WoofWare.NUnitTestRunner.TestMemberFailure, WoofWare.NUnitTestRunner.TestMemberSuccess, WoofWare.NUnitTestRunner.UserMethodFailure>) list
|
||||
@@ -145,6 +152,7 @@ WoofWare.NUnitTestRunner.IndividualTestRunMetadata..ctor [constructor]: (System.
|
||||
WoofWare.NUnitTestRunner.IndividualTestRunMetadata.ClassName [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.IndividualTestRunMetadata.ComputerName [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.IndividualTestRunMetadata.End [property]: [read-only] System.DateTimeOffset
|
||||
WoofWare.NUnitTestRunner.IndividualTestRunMetadata.Equals [method]: (WoofWare.NUnitTestRunner.IndividualTestRunMetadata, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.IndividualTestRunMetadata.ExecutionId [property]: [read-only] System.Guid
|
||||
WoofWare.NUnitTestRunner.IndividualTestRunMetadata.get_ClassName [method]: unit -> string
|
||||
WoofWare.NUnitTestRunner.IndividualTestRunMetadata.get_ComputerName [method]: unit -> string
|
||||
@@ -162,8 +170,9 @@ WoofWare.NUnitTestRunner.IndividualTestRunMetadata.StdOut [property]: [read-only
|
||||
WoofWare.NUnitTestRunner.IndividualTestRunMetadata.TestId [property]: [read-only] System.Guid
|
||||
WoofWare.NUnitTestRunner.IndividualTestRunMetadata.TestName [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.IndividualTestRunMetadata.Total [property]: [read-only] System.TimeSpan
|
||||
WoofWare.NUnitTestRunner.ITestProgress - interface with 5 member(s)
|
||||
WoofWare.NUnitTestRunner.ITestProgress - interface with 6 member(s)
|
||||
WoofWare.NUnitTestRunner.ITestProgress.OnTestFailed [method]: string -> WoofWare.NUnitTestRunner.TestMemberFailure -> unit
|
||||
WoofWare.NUnitTestRunner.ITestProgress.OnTestFixtureSkipped [method]: string -> string -> unit
|
||||
WoofWare.NUnitTestRunner.ITestProgress.OnTestFixtureStart [method]: string -> int -> unit
|
||||
WoofWare.NUnitTestRunner.ITestProgress.OnTestMemberFinished [method]: string -> unit
|
||||
WoofWare.NUnitTestRunner.ITestProgress.OnTestMemberSkipped [method]: string -> unit
|
||||
@@ -174,6 +183,7 @@ WoofWare.NUnitTestRunner.LogLevel inherit obj, implements WoofWare.NUnitTestRunn
|
||||
WoofWare.NUnitTestRunner.LogLevel+Tags inherit obj
|
||||
WoofWare.NUnitTestRunner.LogLevel+Tags.Nothing [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.LogLevel+Tags.Verbose [static field]: int = 1
|
||||
WoofWare.NUnitTestRunner.LogLevel.Equals [method]: (WoofWare.NUnitTestRunner.LogLevel, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.LogLevel.get_IsNothing [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.LogLevel.get_IsVerbose [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.LogLevel.get_Nothing [static method]: unit -> WoofWare.NUnitTestRunner.LogLevel
|
||||
@@ -194,6 +204,7 @@ WoofWare.NUnitTestRunner.Match+Exact.Item [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.Match+Tags inherit obj
|
||||
WoofWare.NUnitTestRunner.Match+Tags.Contains [static field]: int = 1
|
||||
WoofWare.NUnitTestRunner.Match+Tags.Exact [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.Match.Equals [method]: (WoofWare.NUnitTestRunner.Match, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.Match.get_IsContains [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.Match.get_IsExact [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.Match.get_Tag [method]: unit -> int
|
||||
@@ -212,6 +223,7 @@ WoofWare.NUnitTestRunner.Modifier+Ignored.reason [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.Modifier+Tags inherit obj
|
||||
WoofWare.NUnitTestRunner.Modifier+Tags.Explicit [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.Modifier+Tags.Ignored [static field]: int = 1
|
||||
WoofWare.NUnitTestRunner.Modifier.Equals [method]: (WoofWare.NUnitTestRunner.Modifier, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.Modifier.get_IsExplicit [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.Modifier.get_IsIgnored [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.Modifier.get_Tag [method]: unit -> int
|
||||
@@ -220,6 +232,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
|
||||
@@ -227,6 +242,7 @@ WoofWare.NUnitTestRunner.Parallelizable`1+Tags.Yes [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.Parallelizable`1+Yes inherit 'scope WoofWare.NUnitTestRunner.Parallelizable
|
||||
WoofWare.NUnitTestRunner.Parallelizable`1+Yes.get_Item [method]: unit -> 'scope
|
||||
WoofWare.NUnitTestRunner.Parallelizable`1+Yes.Item [property]: [read-only] 'scope
|
||||
WoofWare.NUnitTestRunner.Parallelizable`1.Equals [method]: ('scope WoofWare.NUnitTestRunner.Parallelizable, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.Parallelizable`1.get_IsNo [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.Parallelizable`1.get_IsYes [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.Parallelizable`1.get_No [static method]: unit -> 'scope WoofWare.NUnitTestRunner.Parallelizable
|
||||
@@ -240,13 +256,47 @@ WoofWare.NUnitTestRunner.ParallelQueue inherit obj, implements IDisposable
|
||||
WoofWare.NUnitTestRunner.ParallelQueue..ctor [constructor]: (int option, WoofWare.NUnitTestRunner.AssemblyParallelScope WoofWare.NUnitTestRunner.Parallelizable option, System.Threading.CancellationToken option)
|
||||
WoofWare.NUnitTestRunner.ParallelQueue.EndTestFixture [method]: WoofWare.NUnitTestRunner.TestFixtureTearDownToken -> unit System.Threading.Tasks.Task
|
||||
WoofWare.NUnitTestRunner.ParallelQueue.Run [method]: WoofWare.NUnitTestRunner.TestFixtureSetupToken -> unit WoofWare.NUnitTestRunner.Parallelizable option -> (unit -> 'a) -> 'a System.Threading.Tasks.Task
|
||||
WoofWare.NUnitTestRunner.ParallelQueue.RunAsync [method]: WoofWare.NUnitTestRunner.TestFixtureSetupToken -> unit WoofWare.NUnitTestRunner.Parallelizable option -> (unit -> 'a Microsoft.FSharp.Control.FSharpAsync) -> 'a System.Threading.Tasks.Task
|
||||
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
|
||||
WoofWare.NUnitTestRunner.SingleTestMethod.Combinatorial [property]: [read-only] WoofWare.NUnitTestRunner.Combinatorial option
|
||||
WoofWare.NUnitTestRunner.SingleTestMethod.Equals [method]: (WoofWare.NUnitTestRunner.SingleTestMethod, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.SingleTestMethod.get_Categories [method]: unit -> string list
|
||||
WoofWare.NUnitTestRunner.SingleTestMethod.get_Combinatorial [method]: unit -> WoofWare.NUnitTestRunner.Combinatorial option
|
||||
WoofWare.NUnitTestRunner.SingleTestMethod.get_Kind [method]: unit -> WoofWare.NUnitTestRunner.TestKind
|
||||
@@ -263,7 +313,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
|
||||
@@ -283,6 +333,7 @@ WoofWare.NUnitTestRunner.TestFailure+TearDownFailed.Item [property]: [read-only]
|
||||
WoofWare.NUnitTestRunner.TestFailure+TestFailed inherit WoofWare.NUnitTestRunner.TestFailure
|
||||
WoofWare.NUnitTestRunner.TestFailure+TestFailed.get_Item [method]: unit -> WoofWare.NUnitTestRunner.UserMethodFailure
|
||||
WoofWare.NUnitTestRunner.TestFailure+TestFailed.Item [property]: [read-only] WoofWare.NUnitTestRunner.UserMethodFailure
|
||||
WoofWare.NUnitTestRunner.TestFailure.Equals [method]: (WoofWare.NUnitTestRunner.TestFailure, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TestFailure.get_IsSetUpFailed [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.TestFailure.get_IsTearDownFailed [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.TestFailure.get_IsTestFailed [method]: unit -> bool
|
||||
@@ -297,10 +348,12 @@ WoofWare.NUnitTestRunner.TestFailure.NewTearDownFailed [static method]: WoofWare
|
||||
WoofWare.NUnitTestRunner.TestFailure.NewTestFailed [static method]: WoofWare.NUnitTestRunner.UserMethodFailure -> WoofWare.NUnitTestRunner.TestFailure
|
||||
WoofWare.NUnitTestRunner.TestFailure.Tag [property]: [read-only] int
|
||||
WoofWare.NUnitTestRunner.TestFixture inherit obj, implements WoofWare.NUnitTestRunner.TestFixture System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TestFixture..ctor [constructor]: (System.Reflection.Assembly, string, System.Type, System.Reflection.MethodInfo option, System.Reflection.MethodInfo option, System.Reflection.MethodInfo list, System.Reflection.MethodInfo list, obj list list, WoofWare.NUnitTestRunner.SingleTestMethod list, WoofWare.NUnitTestRunner.ClassParallelScope WoofWare.NUnitTestRunner.Parallelizable option)
|
||||
WoofWare.NUnitTestRunner.TestFixture..ctor [constructor]: (System.Reflection.Assembly, string, System.Type, System.Reflection.MethodInfo option, System.Reflection.MethodInfo option, System.Reflection.MethodInfo list, System.Reflection.MethodInfo list, obj list list, WoofWare.NUnitTestRunner.SingleTestMethod list, WoofWare.NUnitTestRunner.ClassParallelScope WoofWare.NUnitTestRunner.Parallelizable option, WoofWare.NUnitTestRunner.Modifier list)
|
||||
WoofWare.NUnitTestRunner.TestFixture.ContainingAssembly [property]: [read-only] System.Reflection.Assembly
|
||||
WoofWare.NUnitTestRunner.TestFixture.Empty [static method]: System.Type -> WoofWare.NUnitTestRunner.ClassParallelScope WoofWare.NUnitTestRunner.Parallelizable option -> obj list list -> WoofWare.NUnitTestRunner.TestFixture
|
||||
WoofWare.NUnitTestRunner.TestFixture.Empty [static method]: System.Type -> WoofWare.NUnitTestRunner.ClassParallelScope WoofWare.NUnitTestRunner.Parallelizable option -> WoofWare.NUnitTestRunner.Modifier list -> obj list list -> WoofWare.NUnitTestRunner.TestFixture
|
||||
WoofWare.NUnitTestRunner.TestFixture.Equals [method]: (WoofWare.NUnitTestRunner.TestFixture, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TestFixture.get_ContainingAssembly [method]: unit -> System.Reflection.Assembly
|
||||
WoofWare.NUnitTestRunner.TestFixture.get_Modifiers [method]: unit -> WoofWare.NUnitTestRunner.Modifier list
|
||||
WoofWare.NUnitTestRunner.TestFixture.get_Name [method]: unit -> string
|
||||
WoofWare.NUnitTestRunner.TestFixture.get_OneTimeSetUp [method]: unit -> System.Reflection.MethodInfo option
|
||||
WoofWare.NUnitTestRunner.TestFixture.get_OneTimeTearDown [method]: unit -> System.Reflection.MethodInfo option
|
||||
@@ -310,6 +363,7 @@ WoofWare.NUnitTestRunner.TestFixture.get_SetUp [method]: unit -> System.Reflecti
|
||||
WoofWare.NUnitTestRunner.TestFixture.get_TearDown [method]: unit -> System.Reflection.MethodInfo list
|
||||
WoofWare.NUnitTestRunner.TestFixture.get_Tests [method]: unit -> WoofWare.NUnitTestRunner.SingleTestMethod list
|
||||
WoofWare.NUnitTestRunner.TestFixture.get_Type [method]: unit -> System.Type
|
||||
WoofWare.NUnitTestRunner.TestFixture.Modifiers [property]: [read-only] WoofWare.NUnitTestRunner.Modifier list
|
||||
WoofWare.NUnitTestRunner.TestFixture.Name [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.TestFixture.OneTimeSetUp [property]: [read-only] System.Reflection.MethodInfo option
|
||||
WoofWare.NUnitTestRunner.TestFixture.OneTimeTearDown [property]: [read-only] System.Reflection.MethodInfo option
|
||||
@@ -324,8 +378,11 @@ WoofWare.NUnitTestRunner.TestFixtureModule.parse [static method]: System.Type ->
|
||||
WoofWare.NUnitTestRunner.TestFixtureModule.run [static method]: WoofWare.NUnitTestRunner.TestContexts -> WoofWare.NUnitTestRunner.ParallelQueue -> WoofWare.NUnitTestRunner.ITestProgress -> (WoofWare.NUnitTestRunner.TestFixture -> WoofWare.NUnitTestRunner.SingleTestMethod -> bool) -> WoofWare.NUnitTestRunner.TestFixture -> WoofWare.NUnitTestRunner.FixtureRunResults list System.Threading.Tasks.Task
|
||||
WoofWare.NUnitTestRunner.TestFixtureModule.runOneFixture [static method]: WoofWare.NUnitTestRunner.TestContexts -> WoofWare.NUnitTestRunner.ParallelQueue -> WoofWare.NUnitTestRunner.ITestProgress -> (WoofWare.NUnitTestRunner.TestFixture -> WoofWare.NUnitTestRunner.SingleTestMethod -> bool) -> string -> obj -> WoofWare.NUnitTestRunner.TestFixture -> WoofWare.NUnitTestRunner.FixtureRunResults System.Threading.Tasks.Task
|
||||
WoofWare.NUnitTestRunner.TestFixtureRunningToken inherit obj, implements WoofWare.NUnitTestRunner.TestFixtureRunningToken System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TestFixtureRunningToken.Equals [method]: (WoofWare.NUnitTestRunner.TestFixtureRunningToken, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TestFixtureSetupToken inherit obj, implements WoofWare.NUnitTestRunner.TestFixtureSetupToken System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TestFixtureSetupToken.Equals [method]: (WoofWare.NUnitTestRunner.TestFixtureSetupToken, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TestFixtureTearDownToken inherit obj, implements WoofWare.NUnitTestRunner.TestFixtureTearDownToken System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TestFixtureTearDownToken.Equals [method]: (WoofWare.NUnitTestRunner.TestFixtureTearDownToken, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TestKind inherit obj, implements WoofWare.NUnitTestRunner.TestKind System.IEquatable, System.Collections.IStructuralEquatable - union type with 3 cases
|
||||
WoofWare.NUnitTestRunner.TestKind+Data inherit WoofWare.NUnitTestRunner.TestKind
|
||||
WoofWare.NUnitTestRunner.TestKind+Data.get_Item [method]: unit -> obj list list
|
||||
@@ -337,6 +394,7 @@ WoofWare.NUnitTestRunner.TestKind+Tags inherit obj
|
||||
WoofWare.NUnitTestRunner.TestKind+Tags.Data [static field]: int = 2
|
||||
WoofWare.NUnitTestRunner.TestKind+Tags.Single [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.TestKind+Tags.Source [static field]: int = 1
|
||||
WoofWare.NUnitTestRunner.TestKind.Equals [method]: (WoofWare.NUnitTestRunner.TestKind, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TestKind.get_IsData [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.TestKind.get_IsSingle [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.TestKind.get_IsSource [method]: unit -> bool
|
||||
@@ -359,6 +417,7 @@ WoofWare.NUnitTestRunner.TestMemberFailure+Malformed.reasons [property]: [read-o
|
||||
WoofWare.NUnitTestRunner.TestMemberFailure+Tags inherit obj
|
||||
WoofWare.NUnitTestRunner.TestMemberFailure+Tags.Failed [static field]: int = 1
|
||||
WoofWare.NUnitTestRunner.TestMemberFailure+Tags.Malformed [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.TestMemberFailure.Equals [method]: (WoofWare.NUnitTestRunner.TestMemberFailure, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TestMemberFailure.get_IsFailed [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.TestMemberFailure.get_IsMalformed [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.TestMemberFailure.get_Tag [method]: unit -> int
|
||||
@@ -382,6 +441,7 @@ WoofWare.NUnitTestRunner.TestMemberSuccess+Tags.Explicit [static field]: int = 2
|
||||
WoofWare.NUnitTestRunner.TestMemberSuccess+Tags.Ignored [static field]: int = 1
|
||||
WoofWare.NUnitTestRunner.TestMemberSuccess+Tags.Inconclusive [static field]: int = 3
|
||||
WoofWare.NUnitTestRunner.TestMemberSuccess+Tags.Ok [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.TestMemberSuccess.Equals [method]: (WoofWare.NUnitTestRunner.TestMemberSuccess, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TestMemberSuccess.get_IsExplicit [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.TestMemberSuccess.get_IsIgnored [method]: unit -> bool
|
||||
WoofWare.NUnitTestRunner.TestMemberSuccess.get_IsInconclusive [method]: unit -> bool
|
||||
@@ -409,6 +469,7 @@ WoofWare.NUnitTestRunner.TrxCounters.AddNotExecuted [method]: unit -> WoofWare.N
|
||||
WoofWare.NUnitTestRunner.TrxCounters.AddPassed [method]: unit -> WoofWare.NUnitTestRunner.TrxCounters
|
||||
WoofWare.NUnitTestRunner.TrxCounters.Completed [property]: [read-only] System.UInt32
|
||||
WoofWare.NUnitTestRunner.TrxCounters.Disconnected [property]: [read-only] System.UInt32
|
||||
WoofWare.NUnitTestRunner.TrxCounters.Equals [method]: (WoofWare.NUnitTestRunner.TrxCounters, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxCounters.Errors [property]: [read-only] System.UInt32
|
||||
WoofWare.NUnitTestRunner.TrxCounters.Executed [property]: [read-only] System.UInt32
|
||||
WoofWare.NUnitTestRunner.TrxCounters.Failed [property]: [read-only] System.UInt32
|
||||
@@ -442,16 +503,19 @@ WoofWare.NUnitTestRunner.TrxCounters.Warning [property]: [read-only] System.UInt
|
||||
WoofWare.NUnitTestRunner.TrxCounters.Zero [static property]: [read-only] WoofWare.NUnitTestRunner.TrxCounters
|
||||
WoofWare.NUnitTestRunner.TrxDeployment inherit obj, implements WoofWare.NUnitTestRunner.TrxDeployment System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TrxDeployment..ctor [constructor]: string
|
||||
WoofWare.NUnitTestRunner.TrxDeployment.Equals [method]: (WoofWare.NUnitTestRunner.TrxDeployment, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxDeployment.get_RunDeploymentRoot [method]: unit -> string
|
||||
WoofWare.NUnitTestRunner.TrxDeployment.RunDeploymentRoot [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.TrxErrorInfo inherit obj, implements WoofWare.NUnitTestRunner.TrxErrorInfo System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TrxErrorInfo..ctor [constructor]: (string option, string option)
|
||||
WoofWare.NUnitTestRunner.TrxErrorInfo.Equals [method]: (WoofWare.NUnitTestRunner.TrxErrorInfo, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxErrorInfo.get_Message [method]: unit -> string option
|
||||
WoofWare.NUnitTestRunner.TrxErrorInfo.get_StackTrace [method]: unit -> string option
|
||||
WoofWare.NUnitTestRunner.TrxErrorInfo.Message [property]: [read-only] string option
|
||||
WoofWare.NUnitTestRunner.TrxErrorInfo.StackTrace [property]: [read-only] string option
|
||||
WoofWare.NUnitTestRunner.TrxExecution inherit obj, implements WoofWare.NUnitTestRunner.TrxExecution System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TrxExecution..ctor [constructor]: System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxExecution.Equals [method]: (WoofWare.NUnitTestRunner.TrxExecution, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxExecution.get_Id [method]: unit -> System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxExecution.Id [property]: [read-only] System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxOutcome inherit obj, implements WoofWare.NUnitTestRunner.TrxOutcome System.IEquatable, System.Collections.IStructuralEquatable - union type with 3 cases
|
||||
@@ -460,6 +524,7 @@ WoofWare.NUnitTestRunner.TrxOutcome+Tags.Completed [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.TrxOutcome+Tags.Failed [static field]: int = 2
|
||||
WoofWare.NUnitTestRunner.TrxOutcome+Tags.Warning [static field]: int = 1
|
||||
WoofWare.NUnitTestRunner.TrxOutcome.Completed [static property]: [read-only] WoofWare.NUnitTestRunner.TrxOutcome
|
||||
WoofWare.NUnitTestRunner.TrxOutcome.Equals [method]: (WoofWare.NUnitTestRunner.TrxOutcome, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxOutcome.Failed [static property]: [read-only] WoofWare.NUnitTestRunner.TrxOutcome
|
||||
WoofWare.NUnitTestRunner.TrxOutcome.get_Completed [static method]: unit -> WoofWare.NUnitTestRunner.TrxOutcome
|
||||
WoofWare.NUnitTestRunner.TrxOutcome.get_Failed [static method]: unit -> WoofWare.NUnitTestRunner.TrxOutcome
|
||||
@@ -476,6 +541,7 @@ WoofWare.NUnitTestRunner.TrxOutcome.Tag [property]: [read-only] int
|
||||
WoofWare.NUnitTestRunner.TrxOutcome.Warning [static property]: [read-only] WoofWare.NUnitTestRunner.TrxOutcome
|
||||
WoofWare.NUnitTestRunner.TrxOutput inherit obj, implements WoofWare.NUnitTestRunner.TrxOutput System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TrxOutput..ctor [constructor]: (string option, string option, WoofWare.NUnitTestRunner.TrxErrorInfo option)
|
||||
WoofWare.NUnitTestRunner.TrxOutput.Equals [method]: (WoofWare.NUnitTestRunner.TrxOutput, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxOutput.ErrorInfo [property]: [read-only] WoofWare.NUnitTestRunner.TrxErrorInfo option
|
||||
WoofWare.NUnitTestRunner.TrxOutput.get_ErrorInfo [method]: unit -> WoofWare.NUnitTestRunner.TrxErrorInfo option
|
||||
WoofWare.NUnitTestRunner.TrxOutput.get_StdErr [method]: unit -> string option
|
||||
@@ -484,6 +550,7 @@ WoofWare.NUnitTestRunner.TrxOutput.StdErr [property]: [read-only] string option
|
||||
WoofWare.NUnitTestRunner.TrxOutput.StdOut [property]: [read-only] string option
|
||||
WoofWare.NUnitTestRunner.TrxReport inherit obj, implements WoofWare.NUnitTestRunner.TrxReport System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TrxReport..ctor [constructor]: (System.Guid, string, WoofWare.NUnitTestRunner.TrxReportTimes, WoofWare.NUnitTestRunner.TrxTestSettings, WoofWare.NUnitTestRunner.TrxUnitTestResult list, WoofWare.NUnitTestRunner.TrxUnitTest list, WoofWare.NUnitTestRunner.TrxTestEntry list, WoofWare.NUnitTestRunner.TrxTestListEntry list, WoofWare.NUnitTestRunner.TrxResultsSummary)
|
||||
WoofWare.NUnitTestRunner.TrxReport.Equals [method]: (WoofWare.NUnitTestRunner.TrxReport, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxReport.get_Id [method]: unit -> System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxReport.get_Name [method]: unit -> string
|
||||
WoofWare.NUnitTestRunner.TrxReport.get_Results [method]: unit -> WoofWare.NUnitTestRunner.TrxUnitTestResult list
|
||||
@@ -508,6 +575,7 @@ WoofWare.NUnitTestRunner.TrxReportModule.toXml [static method]: WoofWare.NUnitTe
|
||||
WoofWare.NUnitTestRunner.TrxReportTimes inherit obj, implements WoofWare.NUnitTestRunner.TrxReportTimes System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TrxReportTimes..ctor [constructor]: (System.DateTimeOffset, System.DateTimeOffset, System.DateTimeOffset, System.DateTimeOffset)
|
||||
WoofWare.NUnitTestRunner.TrxReportTimes.Creation [property]: [read-only] System.DateTimeOffset
|
||||
WoofWare.NUnitTestRunner.TrxReportTimes.Equals [method]: (WoofWare.NUnitTestRunner.TrxReportTimes, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxReportTimes.Finish [property]: [read-only] System.DateTimeOffset
|
||||
WoofWare.NUnitTestRunner.TrxReportTimes.get_Creation [method]: unit -> System.DateTimeOffset
|
||||
WoofWare.NUnitTestRunner.TrxReportTimes.get_Finish [method]: unit -> System.DateTimeOffset
|
||||
@@ -518,6 +586,7 @@ WoofWare.NUnitTestRunner.TrxReportTimes.Start [property]: [read-only] System.Dat
|
||||
WoofWare.NUnitTestRunner.TrxResultsSummary inherit obj, implements WoofWare.NUnitTestRunner.TrxResultsSummary System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TrxResultsSummary..ctor [constructor]: (WoofWare.NUnitTestRunner.TrxOutcome, WoofWare.NUnitTestRunner.TrxCounters, WoofWare.NUnitTestRunner.TrxOutput, WoofWare.NUnitTestRunner.TrxRunInfo list)
|
||||
WoofWare.NUnitTestRunner.TrxResultsSummary.Counters [property]: [read-only] WoofWare.NUnitTestRunner.TrxCounters
|
||||
WoofWare.NUnitTestRunner.TrxResultsSummary.Equals [method]: (WoofWare.NUnitTestRunner.TrxResultsSummary, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxResultsSummary.get_Counters [method]: unit -> WoofWare.NUnitTestRunner.TrxCounters
|
||||
WoofWare.NUnitTestRunner.TrxResultsSummary.get_Outcome [method]: unit -> WoofWare.NUnitTestRunner.TrxOutcome
|
||||
WoofWare.NUnitTestRunner.TrxResultsSummary.get_Output [method]: unit -> WoofWare.NUnitTestRunner.TrxOutput
|
||||
@@ -528,6 +597,7 @@ WoofWare.NUnitTestRunner.TrxResultsSummary.RunInfos [property]: [read-only] Woof
|
||||
WoofWare.NUnitTestRunner.TrxRunInfo inherit obj, implements WoofWare.NUnitTestRunner.TrxRunInfo System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TrxRunInfo..ctor [constructor]: (string, WoofWare.NUnitTestRunner.TrxOutcome, System.DateTimeOffset, string)
|
||||
WoofWare.NUnitTestRunner.TrxRunInfo.ComputerName [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.TrxRunInfo.Equals [method]: (WoofWare.NUnitTestRunner.TrxRunInfo, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxRunInfo.get_ComputerName [method]: unit -> string
|
||||
WoofWare.NUnitTestRunner.TrxRunInfo.get_Outcome [method]: unit -> WoofWare.NUnitTestRunner.TrxOutcome
|
||||
WoofWare.NUnitTestRunner.TrxRunInfo.get_Text [method]: unit -> string
|
||||
@@ -537,6 +607,7 @@ WoofWare.NUnitTestRunner.TrxRunInfo.Text [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.TrxRunInfo.Timestamp [property]: [read-only] System.DateTimeOffset
|
||||
WoofWare.NUnitTestRunner.TrxTestEntry inherit obj, implements WoofWare.NUnitTestRunner.TrxTestEntry System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TrxTestEntry..ctor [constructor]: (System.Guid, System.Guid, System.Guid)
|
||||
WoofWare.NUnitTestRunner.TrxTestEntry.Equals [method]: (WoofWare.NUnitTestRunner.TrxTestEntry, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxTestEntry.ExecutionId [property]: [read-only] System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxTestEntry.get_ExecutionId [method]: unit -> System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxTestEntry.get_TestId [method]: unit -> System.Guid
|
||||
@@ -545,6 +616,7 @@ WoofWare.NUnitTestRunner.TrxTestEntry.TestId [property]: [read-only] System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxTestEntry.TestListId [property]: [read-only] System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxTestListEntry inherit obj, implements WoofWare.NUnitTestRunner.TrxTestListEntry System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TrxTestListEntry..ctor [constructor]: (string, System.Guid)
|
||||
WoofWare.NUnitTestRunner.TrxTestListEntry.Equals [method]: (WoofWare.NUnitTestRunner.TrxTestListEntry, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxTestListEntry.get_Id [method]: unit -> System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxTestListEntry.get_Name [method]: unit -> string
|
||||
WoofWare.NUnitTestRunner.TrxTestListEntry.Id [property]: [read-only] System.Guid
|
||||
@@ -554,6 +626,7 @@ WoofWare.NUnitTestRunner.TrxTestMethod..ctor [constructor]: (string, System.Uri,
|
||||
WoofWare.NUnitTestRunner.TrxTestMethod.AdapterTypeName [property]: [read-only] System.Uri
|
||||
WoofWare.NUnitTestRunner.TrxTestMethod.ClassName [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.TrxTestMethod.CodeBase [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.TrxTestMethod.Equals [method]: (WoofWare.NUnitTestRunner.TrxTestMethod, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxTestMethod.get_AdapterTypeName [method]: unit -> System.Uri
|
||||
WoofWare.NUnitTestRunner.TrxTestMethod.get_ClassName [method]: unit -> string
|
||||
WoofWare.NUnitTestRunner.TrxTestMethod.get_CodeBase [method]: unit -> string
|
||||
@@ -565,6 +638,7 @@ WoofWare.NUnitTestRunner.TrxTestOutcome+Tags.Failed [static field]: int = 1
|
||||
WoofWare.NUnitTestRunner.TrxTestOutcome+Tags.Inconclusive [static field]: int = 3
|
||||
WoofWare.NUnitTestRunner.TrxTestOutcome+Tags.NotExecuted [static field]: int = 2
|
||||
WoofWare.NUnitTestRunner.TrxTestOutcome+Tags.Passed [static field]: int = 0
|
||||
WoofWare.NUnitTestRunner.TrxTestOutcome.Equals [method]: (WoofWare.NUnitTestRunner.TrxTestOutcome, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxTestOutcome.Failed [static property]: [read-only] WoofWare.NUnitTestRunner.TrxTestOutcome
|
||||
WoofWare.NUnitTestRunner.TrxTestOutcome.get_Failed [static method]: unit -> WoofWare.NUnitTestRunner.TrxTestOutcome
|
||||
WoofWare.NUnitTestRunner.TrxTestOutcome.get_Inconclusive [static method]: unit -> WoofWare.NUnitTestRunner.TrxTestOutcome
|
||||
@@ -587,6 +661,7 @@ WoofWare.NUnitTestRunner.TrxTestOutcome.Tag [property]: [read-only] int
|
||||
WoofWare.NUnitTestRunner.TrxTestSettings inherit obj, implements WoofWare.NUnitTestRunner.TrxTestSettings System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TrxTestSettings..ctor [constructor]: (string, System.Guid, WoofWare.NUnitTestRunner.TrxDeployment)
|
||||
WoofWare.NUnitTestRunner.TrxTestSettings.Deployment [property]: [read-only] WoofWare.NUnitTestRunner.TrxDeployment
|
||||
WoofWare.NUnitTestRunner.TrxTestSettings.Equals [method]: (WoofWare.NUnitTestRunner.TrxTestSettings, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxTestSettings.get_Deployment [method]: unit -> WoofWare.NUnitTestRunner.TrxDeployment
|
||||
WoofWare.NUnitTestRunner.TrxTestSettings.get_Id [method]: unit -> System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxTestSettings.get_Name [method]: unit -> string
|
||||
@@ -594,6 +669,7 @@ WoofWare.NUnitTestRunner.TrxTestSettings.Id [property]: [read-only] System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxTestSettings.Name [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.TrxUnitTest inherit obj, implements WoofWare.NUnitTestRunner.TrxUnitTest System.IEquatable, System.Collections.IStructuralEquatable
|
||||
WoofWare.NUnitTestRunner.TrxUnitTest..ctor [constructor]: (string, string, System.Guid, WoofWare.NUnitTestRunner.TrxExecution, WoofWare.NUnitTestRunner.TrxTestMethod)
|
||||
WoofWare.NUnitTestRunner.TrxUnitTest.Equals [method]: (WoofWare.NUnitTestRunner.TrxUnitTest, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxUnitTest.Execution [property]: [read-only] WoofWare.NUnitTestRunner.TrxExecution
|
||||
WoofWare.NUnitTestRunner.TrxUnitTest.get_Execution [method]: unit -> WoofWare.NUnitTestRunner.TrxExecution
|
||||
WoofWare.NUnitTestRunner.TrxUnitTest.get_Id [method]: unit -> System.Guid
|
||||
@@ -609,6 +685,7 @@ WoofWare.NUnitTestRunner.TrxUnitTestResult..ctor [constructor]: (System.Guid, Sy
|
||||
WoofWare.NUnitTestRunner.TrxUnitTestResult.ComputerName [property]: [read-only] string
|
||||
WoofWare.NUnitTestRunner.TrxUnitTestResult.Duration [property]: [read-only] System.TimeSpan
|
||||
WoofWare.NUnitTestRunner.TrxUnitTestResult.EndTime [property]: [read-only] System.DateTimeOffset
|
||||
WoofWare.NUnitTestRunner.TrxUnitTestResult.Equals [method]: (WoofWare.NUnitTestRunner.TrxUnitTestResult, System.Collections.IEqualityComparer) -> bool
|
||||
WoofWare.NUnitTestRunner.TrxUnitTestResult.ExecutionId [property]: [read-only] System.Guid
|
||||
WoofWare.NUnitTestRunner.TrxUnitTestResult.get_ComputerName [method]: unit -> string
|
||||
WoofWare.NUnitTestRunner.TrxUnitTestResult.get_Duration [method]: unit -> System.TimeSpan
|
||||
@@ -630,13 +707,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
|
||||
@@ -644,13 +729,17 @@ WoofWare.NUnitTestRunner.UserMethodFailure+Threw.get_Item2 [method]: unit -> Sys
|
||||
WoofWare.NUnitTestRunner.UserMethodFailure+Threw.get_name [method]: unit -> string
|
||||
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)
|
||||
@@ -590,15 +597,15 @@ module TestFixture =
|
||||
/// Interpret this type as a [<TestFixture>], extracting the test members from it and annotating them with all
|
||||
/// relevant information about how we should run them.
|
||||
let parse (parentType : Type) : TestFixture =
|
||||
let categories, args, par =
|
||||
(([], [], None), parentType.CustomAttributes)
|
||||
||> Seq.fold (fun (categories, args, par) attr ->
|
||||
let categories, args, mods, par =
|
||||
(([], [], [], None), parentType.CustomAttributes)
|
||||
||> Seq.fold (fun (categories, args, mods, par) attr ->
|
||||
match attr.AttributeType.FullName with
|
||||
| "NUnit.Framework.SetUpFixtureAttribute" ->
|
||||
failwith "This test runner does not support SetUpFixture. Please shout if you want this."
|
||||
| "NUnit.Framework.CategoryAttribute" ->
|
||||
let cat = attr.ConstructorArguments |> Seq.exactlyOne |> _.Value |> unbox<string>
|
||||
cat :: categories, args, par
|
||||
cat :: categories, args, mods, par
|
||||
| "NUnit.Framework.TestFixtureAttribute" ->
|
||||
let newArgs =
|
||||
match attr.ConstructorArguments |> Seq.map _.Value |> Seq.toList with
|
||||
@@ -606,36 +613,52 @@ module TestFixture =
|
||||
x |> Seq.cast<CustomAttributeTypedArgument> |> Seq.map _.Value |> Seq.toList
|
||||
| xs -> xs
|
||||
|
||||
categories, newArgs :: args, par
|
||||
categories, newArgs :: args, mods, par
|
||||
| "NUnit.Framework.NonParallelizableAttribute" ->
|
||||
match par with
|
||||
| Some _ -> failwith $"Got multiple parallelism attributes on %s{parentType.FullName}"
|
||||
| None -> categories, args, Some Parallelizable.No
|
||||
| None -> categories, args, mods, Some Parallelizable.No
|
||||
| "NUnit.Framework.ParallelizableAttribute" ->
|
||||
match par with
|
||||
| Some _ -> failwith $"Got multiple parallelism attributes on %s{parentType.FullName}"
|
||||
| None ->
|
||||
match attr.ConstructorArguments |> Seq.toList with
|
||||
| [] -> categories, args, Some (Parallelizable.Yes ClassParallelScope.Self)
|
||||
| [] -> categories, args, mods, Some (Parallelizable.Yes ClassParallelScope.Self)
|
||||
| [ 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, mods, Some (Parallelizable.Yes ClassParallelScope.Fixtures)
|
||||
| ParallelScope.Children ->
|
||||
categories, args, mods, Some (Parallelizable.Yes ClassParallelScope.Children)
|
||||
| ParallelScope.All ->
|
||||
categories, args, mods, Some (Parallelizable.Yes ClassParallelScope.All)
|
||||
| ParallelScope.Self ->
|
||||
categories, args, mods, Some (Parallelizable.Yes ClassParallelScope.Self)
|
||||
| ParallelScope.None -> categories, args, mods, Some Parallelizable.No
|
||||
| v ->
|
||||
failwith
|
||||
$"Unexpectedly non-int value %O{v} of parallel scope in %s{parentType.FullName}"
|
||||
| _ -> failwith $"unexpectedly got multiple args to Parallelizable on %s{parentType.FullName}"
|
||||
| _ -> categories, args, par
|
||||
| "NUnit.Framework.ExplicitAttribute" ->
|
||||
let reason =
|
||||
attr.ConstructorArguments
|
||||
|> Seq.tryHead
|
||||
|> Option.map (_.Value >> unbox<string>)
|
||||
|
||||
categories, args, Modifier.Explicit reason :: mods, par
|
||||
| "NUnit.Framework.IgnoreAttribute" ->
|
||||
let reason =
|
||||
attr.ConstructorArguments
|
||||
|> Seq.tryHead
|
||||
|> Option.map (_.Value >> unbox<string>)
|
||||
|
||||
categories, args, Modifier.Ignored reason :: mods, par
|
||||
| _ -> categories, args, mods, par
|
||||
)
|
||||
|
||||
(TestFixture.Empty parentType par args, parentType.GetRuntimeMethods ())
|
||||
(TestFixture.Empty parentType par mods args, parentType.GetRuntimeMethods ())
|
||||
||> Seq.fold (fun state mi ->
|
||||
((state, []), mi.CustomAttributes)
|
||||
||> Seq.fold (fun (state, unrecognisedAttrs) attr ->
|
||||
@@ -708,6 +731,8 @@ module TestFixture =
|
||||
|
||||
/// Run every test (except those which fail the `filter`) in this test fixture, as well as the
|
||||
/// appropriate setup and tear-down logic.
|
||||
///
|
||||
/// If the TestFixture has modifiers that specify no tests should be run, we don't run any tests.
|
||||
let run
|
||||
(contexts : TestContexts)
|
||||
(par : ParallelQueue)
|
||||
@@ -716,6 +741,26 @@ module TestFixture =
|
||||
(tests : TestFixture)
|
||||
: FixtureRunResults list Task
|
||||
=
|
||||
match
|
||||
tests.Modifiers
|
||||
|> List.tryFind (
|
||||
function
|
||||
| Modifier.Explicit _
|
||||
| Modifier.Ignored _ -> true
|
||||
)
|
||||
with
|
||||
| Some modifier ->
|
||||
let reason =
|
||||
match modifier with
|
||||
| Modifier.Explicit (Some reason) -> reason
|
||||
| Modifier.Ignored (Some reason) -> reason
|
||||
| Modifier.Ignored None -> "test fixture marked Ignore"
|
||||
| Modifier.Explicit None -> "test fixture marked Explicit"
|
||||
|
||||
progress.OnTestFixtureSkipped tests.Name reason
|
||||
Task.FromResult []
|
||||
| None ->
|
||||
|
||||
match tests.Parameters with
|
||||
| [] -> [ null ]
|
||||
| args -> args |> List.map List.toArray
|
||||
|
@@ -10,6 +10,8 @@ type ITestProgress =
|
||||
/// Called just before we start executing the setup logic for the given test fixture.
|
||||
/// We tell you how many test methods there are in the fixture.
|
||||
abstract OnTestFixtureStart : name : string -> testCount : int -> unit
|
||||
/// Called when skipping the test fixture with the given name, e.g. because it's `[<Explicit>]`.
|
||||
abstract OnTestFixtureSkipped : name : string -> reason : string -> unit
|
||||
/// Called just before we start executing the test(s) indicated by a particular method.
|
||||
abstract OnTestMemberStart : name : string -> unit
|
||||
/// Called when a test fails. (This may be called repeatedly with the same `name`, e.g. if the test
|
||||
@@ -32,6 +34,9 @@ module TestProgress =
|
||||
let plural = if testCount = 1 then "" else "s"
|
||||
writer.WriteLine $"Running test fixture: %s{name} (%i{testCount} test%s{plural} to run)"
|
||||
|
||||
member _.OnTestFixtureSkipped name reason =
|
||||
writer.WriteLine $"Skipping test fixture (%s{reason}): %s{name}"
|
||||
|
||||
member _.OnTestMemberStart name =
|
||||
writer.WriteLine $"Running test: %s{name}"
|
||||
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<PackageId>WoofWare.NUnitTestRunner.Lib</PackageId>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<WarnOn>FS3559</WarnOn>
|
||||
<WoofWareMyriadPluginVersion>2.1.53</WoofWareMyriadPluginVersion>
|
||||
<WoofWareMyriadPluginVersion>8.0.5</WoofWareMyriadPluginVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -22,9 +22,16 @@
|
||||
<Compile Include="RuntimeConfig.fs" />
|
||||
<Compile Include="GeneratedRuntimeConfig.fs">
|
||||
<MyriadFile>RuntimeConfig.fs</MyriadFile>
|
||||
<MyriadParams>
|
||||
<RuntimeOptions>JsonParse</RuntimeOptions>
|
||||
<RuntimeConfig>JsonParse</RuntimeConfig>
|
||||
<FrameworkDescription>JsonParse</FrameworkDescription>
|
||||
</MyriadParams>
|
||||
</Compile>
|
||||
<Compile Include="ParallelScope.fs" />
|
||||
<Compile Include="DotnetRuntime.fs" />
|
||||
<Compile Include="Array.fs" />
|
||||
<Compile Include="Exception.fs" />
|
||||
<Compile Include="List.fs" />
|
||||
<Compile Include="Result.fs" />
|
||||
<Compile Include="Domain.fs" />
|
||||
@@ -47,10 +54,9 @@
|
||||
<EmbeddedResource Include="version.json" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="WoofWare.PrattParser" Version="0.2.2" />
|
||||
<PackageReference Update="FSharp.Core" Version="6.0.0" />
|
||||
<PackageReference Include="WoofWare.DotnetRuntimeLocator" Version="0.1.9" />
|
||||
<PackageReference Include="WoofWare.Myriad.Plugins.Attributes" Version="3.1.9" />
|
||||
<PackageReference Include="WoofWare.PrattParser" Version="0.2.4" />
|
||||
<PackageReference Update="FSharp.Core" Version="6.0.1" />
|
||||
<PackageReference Include="WoofWare.DotnetRuntimeLocator" Version="0.1.12" />
|
||||
<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.16",
|
||||
"version": "0.22",
|
||||
"publicReleaseRefSpec": [
|
||||
"^refs/heads/main$"
|
||||
],
|
||||
|
@@ -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
|
||||
|
@@ -13,6 +13,10 @@ module Progress =
|
||||
member _.OnTestFixtureStart name testCount =
|
||||
console.MarkupLine $"[white]Running tests: %s{Markup.Escape name}[/]"
|
||||
|
||||
member _.OnTestFixtureSkipped name reason =
|
||||
console.MarkupLine
|
||||
$"[yellow]Skipping test fixture (%s{Markup.Escape reason}): %s{Markup.Escape name}[/]"
|
||||
|
||||
member _.OnTestMemberFinished name =
|
||||
console.MarkupLine $"[gray]Finished test: %s{Markup.Escape name}[/]"
|
||||
|
||||
|
@@ -0,0 +1,396 @@
|
||||
namespace WoofWare.NUnitTestRunner.Test
|
||||
|
||||
open System
|
||||
open System.Text
|
||||
open System.Threading
|
||||
open System.Threading.Tasks
|
||||
open NUnit.Framework
|
||||
open FsUnitTyped
|
||||
open WoofWare.NUnitTestRunner
|
||||
|
||||
[<TestFixture>]
|
||||
module TestSynchronizationContext =
|
||||
|
||||
[<Test>]
|
||||
let ``ExecutionContext flows correctly through synchronous operations`` () =
|
||||
task {
|
||||
let dummyFixture =
|
||||
TestFixture.Empty typeof<obj> (Some (Parallelizable.Yes ClassParallelScope.All)) [] []
|
||||
|
||||
use contexts = TestContexts.Empty ()
|
||||
use queue = new ParallelQueue (Some 4, None)
|
||||
|
||||
// Track which context values we see during execution
|
||||
let contextValues = System.Collections.Concurrent.ConcurrentBag<Guid * Guid> ()
|
||||
|
||||
// Start the fixture
|
||||
let! running = queue.StartTestFixture dummyFixture
|
||||
let! _, setup = queue.RunTestSetup running (fun () -> ())
|
||||
|
||||
// Create several synchronous operations with different context values
|
||||
let tasks =
|
||||
[ 1..10 ]
|
||||
|> List.map (fun _ ->
|
||||
task {
|
||||
do! Task.Yield ()
|
||||
// Set a unique context value
|
||||
let outputId = contexts.NewOutputs ()
|
||||
let (OutputStreamId expectedId) = outputId
|
||||
contexts.AsyncLocal.Value <- outputId
|
||||
|
||||
// Run a synchronous operation that checks the context
|
||||
let! actualId =
|
||||
queue.Run
|
||||
setup
|
||||
None
|
||||
(fun () ->
|
||||
// Check context immediately
|
||||
let immediate = contexts.AsyncLocal.Value
|
||||
let (OutputStreamId immediateGuid) = immediate
|
||||
contextValues.Add (expectedId, immediateGuid)
|
||||
|
||||
// Do some work that might cause context issues
|
||||
Thread.Sleep 10
|
||||
|
||||
// Check context after work
|
||||
let afterWork = contexts.AsyncLocal.Value
|
||||
let (OutputStreamId afterWorkGuid) = afterWork
|
||||
contextValues.Add (expectedId, afterWorkGuid)
|
||||
|
||||
// Simulate calling into framework code that might use ExecutionContext
|
||||
let mutable capturedValue = Guid.Empty
|
||||
|
||||
ExecutionContext.Run (
|
||||
ExecutionContext.Capture (),
|
||||
(fun _ ->
|
||||
let current = contexts.AsyncLocal.Value
|
||||
let (OutputStreamId currentGuid) = current
|
||||
capturedValue <- currentGuid
|
||||
),
|
||||
()
|
||||
)
|
||||
|
||||
contextValues.Add (expectedId, capturedValue)
|
||||
|
||||
afterWorkGuid
|
||||
)
|
||||
|
||||
// Verify the returned value matches what we set
|
||||
actualId |> shouldEqual expectedId
|
||||
}
|
||||
)
|
||||
|
||||
// Wait for all tasks
|
||||
let! results = Task.WhenAll tasks
|
||||
results |> Array.iter id
|
||||
|
||||
// Verify all context values were correct
|
||||
let allValues = contextValues |> Seq.toList
|
||||
allValues |> shouldHaveLength 30 // 3 checks per operation * 10 operations
|
||||
|
||||
// Every captured value should match its expected value
|
||||
allValues
|
||||
|> List.iter (fun (expected, actual) -> actual |> shouldEqual expected)
|
||||
|
||||
// Clean up
|
||||
let! _, teardown = queue.RunTestTearDown setup (fun () -> ())
|
||||
do! queue.EndTestFixture teardown
|
||||
}
|
||||
|
||||
[<Test>]
|
||||
let ``ExecutionContext isolation between concurrent synchronous operations`` () =
|
||||
task {
|
||||
let dummyFixture =
|
||||
TestFixture.Empty typeof<obj> (Some (Parallelizable.Yes ClassParallelScope.All)) [] []
|
||||
|
||||
use contexts = TestContexts.Empty ()
|
||||
use queue = new ParallelQueue (Some 4, None)
|
||||
|
||||
let! running = queue.StartTestFixture dummyFixture
|
||||
let! _, setup = queue.RunTestSetup running (fun () -> ())
|
||||
|
||||
// Use a barrier to ensure operations run concurrently
|
||||
let barrier = new Barrier (3)
|
||||
let seenValues = System.Collections.Concurrent.ConcurrentBag<int * Guid> ()
|
||||
let outputIds = System.Collections.Concurrent.ConcurrentBag<OutputStreamId> ()
|
||||
|
||||
// Create operations that will definitely run concurrently
|
||||
let tasks =
|
||||
[ 1..3 ]
|
||||
|> List.map (fun i ->
|
||||
task {
|
||||
// Each task sets its own context value
|
||||
let outputId = contexts.NewOutputs ()
|
||||
let (OutputStreamId myId) = outputId
|
||||
contexts.AsyncLocal.Value <- outputId
|
||||
outputIds.Add outputId
|
||||
|
||||
let! result =
|
||||
queue.Run
|
||||
setup
|
||||
(Some (Parallelizable.Yes ()))
|
||||
(fun () ->
|
||||
// Wait for all tasks to reach this point
|
||||
barrier.SignalAndWait ()
|
||||
|
||||
// Now check what value we see
|
||||
let currentValue = contexts.AsyncLocal.Value
|
||||
|
||||
match currentValue with
|
||||
| OutputStreamId guid -> seenValues.Add (i, guid)
|
||||
|
||||
// Do some synchronous work
|
||||
Thread.Sleep 5
|
||||
|
||||
// Check again after work
|
||||
let afterWork = contexts.AsyncLocal.Value
|
||||
|
||||
match afterWork with
|
||||
| OutputStreamId guid ->
|
||||
// Also verify we can write to the correct streams
|
||||
contexts.Stdout.WriteLine $"Task %i{i} sees context %O{guid}"
|
||||
guid
|
||||
)
|
||||
|
||||
// Each task should see its own value
|
||||
result |> shouldEqual myId
|
||||
}
|
||||
)
|
||||
|
||||
let! results = Task.WhenAll tasks
|
||||
results |> Array.iter id
|
||||
|
||||
// Verify we saw 3 different values (one per task)
|
||||
let values = seenValues |> Seq.toList
|
||||
values |> shouldHaveLength 3
|
||||
|
||||
// All seen values should be different (no context bleeding)
|
||||
let uniqueValues = values |> List.map snd |> List.distinct
|
||||
uniqueValues |> shouldHaveLength 3
|
||||
|
||||
let! _, teardown = queue.RunTestTearDown setup (fun () -> ())
|
||||
do! queue.EndTestFixture teardown
|
||||
|
||||
// Verify stdout content for each task
|
||||
let collectedOutputs = outputIds |> Seq.toList
|
||||
collectedOutputs |> shouldHaveLength 3
|
||||
|
||||
for outputId in collectedOutputs do
|
||||
let content = contexts.DumpStdout outputId
|
||||
content |> shouldNotEqual ""
|
||||
let (OutputStreamId guid) = outputId
|
||||
content |> shouldContainText (guid.ToString ())
|
||||
}
|
||||
|
||||
[<Test>]
|
||||
let ``ExecutionContext flows correctly through nested synchronous operations`` () =
|
||||
task {
|
||||
let dummyFixture =
|
||||
TestFixture.Empty typeof<obj> (Some (Parallelizable.Yes ClassParallelScope.All)) [] []
|
||||
|
||||
use contexts = TestContexts.Empty ()
|
||||
use queue = new ParallelQueue (Some 4, None)
|
||||
|
||||
let! running = queue.StartTestFixture dummyFixture
|
||||
let! _, setup = queue.RunTestSetup running (fun () -> ())
|
||||
|
||||
// Set an initial context
|
||||
let outputId = contexts.NewOutputs ()
|
||||
let (OutputStreamId outerGuid) = outputId
|
||||
contexts.AsyncLocal.Value <- outputId
|
||||
|
||||
let! result =
|
||||
queue.Run
|
||||
setup
|
||||
None
|
||||
(fun () ->
|
||||
// Check we have the outer context
|
||||
let outer = contexts.AsyncLocal.Value
|
||||
let (OutputStreamId outerSeen) = outer
|
||||
outerSeen |> shouldEqual outerGuid
|
||||
|
||||
// Now change the context for a nested operation
|
||||
let innerOutputId = contexts.NewOutputs ()
|
||||
let (OutputStreamId innerGuid) = innerOutputId
|
||||
contexts.AsyncLocal.Value <- innerOutputId
|
||||
|
||||
// Use Task.Run to potentially hop threads
|
||||
let innerResult =
|
||||
Task
|
||||
.Run(fun () ->
|
||||
let inner = contexts.AsyncLocal.Value
|
||||
let (OutputStreamId innerSeen) = inner
|
||||
innerSeen |> shouldEqual innerGuid
|
||||
innerSeen
|
||||
)
|
||||
.Result
|
||||
|
||||
// After the nested operation, we should still have our inner context
|
||||
let afterNested = contexts.AsyncLocal.Value
|
||||
let (OutputStreamId afterNestedGuid) = afterNested
|
||||
afterNestedGuid |> shouldEqual innerGuid
|
||||
|
||||
(outerSeen, innerResult, afterNestedGuid)
|
||||
)
|
||||
|
||||
// Unpack results
|
||||
let seenOuter, seenInner, seenAfter = result
|
||||
seenOuter |> shouldEqual outerGuid
|
||||
seenInner |> shouldNotEqual outerGuid
|
||||
seenAfter |> shouldEqual seenInner
|
||||
|
||||
let! _, teardown = queue.RunTestTearDown setup (fun () -> ())
|
||||
do! queue.EndTestFixture teardown
|
||||
}
|
||||
|
||||
[<Test>]
|
||||
let ``ExecutionContext flows correctly through async operations`` () =
|
||||
task {
|
||||
// Create a test fixture
|
||||
let dummyFixture =
|
||||
TestFixture.Empty typeof<obj> (Some (Parallelizable.Yes ClassParallelScope.All)) [] []
|
||||
|
||||
use contexts = TestContexts.Empty ()
|
||||
use queue = new ParallelQueue (Some 4, None)
|
||||
|
||||
// Track which context values we see during execution
|
||||
let contextValues = System.Collections.Concurrent.ConcurrentBag<Guid * Guid> ()
|
||||
|
||||
// Start the fixture
|
||||
let! running = queue.StartTestFixture dummyFixture
|
||||
let! _, setup = queue.RunTestSetup running (fun () -> ())
|
||||
|
||||
// Create several async operations with different context values
|
||||
let tasks =
|
||||
[ 1..10 ]
|
||||
|> List.map (fun i ->
|
||||
task {
|
||||
// Set a unique context value
|
||||
let expectedId = Guid.NewGuid ()
|
||||
let outputId = OutputStreamId expectedId
|
||||
contexts.AsyncLocal.Value <- outputId
|
||||
|
||||
// Run an async operation that checks the context at multiple points
|
||||
let! actualId =
|
||||
queue.RunAsync
|
||||
setup
|
||||
None
|
||||
(fun () ->
|
||||
async {
|
||||
// Check context immediately
|
||||
let immediate = contexts.AsyncLocal.Value
|
||||
let (OutputStreamId immediateGuid) = immediate
|
||||
contextValues.Add (expectedId, immediateGuid)
|
||||
|
||||
// Yield to allow potential context loss
|
||||
do! Async.Sleep 10
|
||||
|
||||
// Check context after yield
|
||||
let afterYield = contexts.AsyncLocal.Value
|
||||
let (OutputStreamId afterYieldGuid) = afterYield
|
||||
contextValues.Add (expectedId, afterYieldGuid)
|
||||
|
||||
// Do some actual async work
|
||||
do! Task.Delay (10) |> Async.AwaitTask
|
||||
|
||||
// Check context after task
|
||||
let afterTask = contexts.AsyncLocal.Value
|
||||
let (OutputStreamId afterTaskGuid) = afterTask
|
||||
contextValues.Add (expectedId, afterTaskGuid)
|
||||
|
||||
return afterTaskGuid
|
||||
}
|
||||
)
|
||||
|
||||
// Verify the returned value matches what we set
|
||||
actualId |> shouldEqual expectedId
|
||||
}
|
||||
)
|
||||
|
||||
// Wait for all tasks
|
||||
let! results = Task.WhenAll (tasks)
|
||||
results |> Array.iter id
|
||||
|
||||
// Verify all context values were correct
|
||||
let allValues = contextValues |> Seq.toList
|
||||
allValues |> shouldHaveLength 30 // 3 checks per operation * 10 operations
|
||||
|
||||
// Every captured value should match its expected value
|
||||
allValues
|
||||
|> List.iter (fun (expected, actual) -> actual |> shouldEqual expected)
|
||||
|
||||
// Clean up
|
||||
let! _, teardown = queue.RunTestTearDown setup (fun () -> ())
|
||||
do! queue.EndTestFixture teardown
|
||||
}
|
||||
|
||||
[<Test>]
|
||||
let ``ExecutionContext isolation between concurrent operations`` () =
|
||||
task {
|
||||
let dummyFixture =
|
||||
TestFixture.Empty typeof<obj> (Some (Parallelizable.Yes ClassParallelScope.All)) [] []
|
||||
|
||||
use contexts = TestContexts.Empty ()
|
||||
use queue = new ParallelQueue (Some 4, None)
|
||||
|
||||
let! running = queue.StartTestFixture dummyFixture
|
||||
let! _, setup = queue.RunTestSetup running (fun () -> ())
|
||||
|
||||
// Use a barrier to ensure operations run concurrently
|
||||
let barrier = new Barrier (3)
|
||||
let seenValues = System.Collections.Concurrent.ConcurrentBag<int * Guid> ()
|
||||
|
||||
// Create operations that will definitely run concurrently
|
||||
let tasks =
|
||||
[ 1..3 ]
|
||||
|> List.map (fun i ->
|
||||
task {
|
||||
// Each task sets its own context value
|
||||
let myId = Guid.NewGuid ()
|
||||
contexts.AsyncLocal.Value <- OutputStreamId myId
|
||||
|
||||
let! result =
|
||||
queue.RunAsync
|
||||
setup
|
||||
(Some (Parallelizable.Yes ()))
|
||||
(fun () ->
|
||||
async {
|
||||
// Wait for all tasks to reach this point
|
||||
barrier.SignalAndWait () |> ignore
|
||||
|
||||
// Now check what value we see
|
||||
let currentValue = contexts.AsyncLocal.Value
|
||||
|
||||
match currentValue with
|
||||
| OutputStreamId guid -> seenValues.Add (i, guid)
|
||||
|
||||
// Do some async work
|
||||
do! Async.Sleep 5
|
||||
|
||||
// Check again after async work
|
||||
let afterAsync = contexts.AsyncLocal.Value
|
||||
|
||||
match afterAsync with
|
||||
| OutputStreamId guid -> return guid
|
||||
}
|
||||
)
|
||||
|
||||
// Each task should see its own value
|
||||
result |> shouldEqual myId
|
||||
}
|
||||
)
|
||||
|
||||
let! results = Task.WhenAll (tasks)
|
||||
results |> Array.iter id
|
||||
|
||||
// Verify we saw 3 different values (one per task)
|
||||
let values = seenValues |> Seq.toList
|
||||
values |> shouldHaveLength 3
|
||||
|
||||
// All seen values should be different (no context bleeding)
|
||||
let uniqueValues = values |> List.map snd |> List.distinct
|
||||
uniqueValues |> shouldHaveLength 3
|
||||
|
||||
let! _, teardown = queue.RunTestTearDown setup (fun () -> ())
|
||||
do! queue.EndTestFixture teardown
|
||||
}
|
@@ -11,17 +11,18 @@
|
||||
<Compile Include="TestFilter.fs" />
|
||||
<Compile Include="TestList.fs" />
|
||||
<Compile Include="TestSurface.fs" />
|
||||
<Compile Include="TestSynchronizationContext.fs" />
|
||||
<Compile Include="TestTrx.fs" />
|
||||
<EmbeddedResource Include="Example1.trx" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ApiSurface" Version="4.0.43" />
|
||||
<PackageReference Include="FsCheck" Version="3.0.0-rc3" />
|
||||
<PackageReference Include="FsUnit" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
|
||||
<PackageReference Include="NUnit" Version="4.1.0" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0"/>
|
||||
<PackageReference Include="ApiSurface" Version="4.1.22" />
|
||||
<PackageReference Include="FsCheck" Version="3.3.0" />
|
||||
<PackageReference Include="FsUnit" Version="7.1.1" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="NUnit" Version="4.3.2" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0"/>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@@ -35,7 +35,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Spectre.Console" Version="0.49.1" />
|
||||
<PackageReference Include="Spectre.Console" Version="0.50.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
],
|
||||
"pathFilters": [
|
||||
"./",
|
||||
"^./WoofWare.NUnitTestRunner.Test",
|
||||
":^WoofWare.NUnitTestRunner.Test",
|
||||
":/WoofWare.NUnitTestRunner.Lib",
|
||||
":/Directory.Build.props",
|
||||
":/README.md"
|
||||
|
@@ -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.10.0]" />
|
||||
<PackageDownload Include="G-Research.FSharp.Analyzers" Version="[0.17.0]" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
12
flake.lock
generated
12
flake.lock
generated
@@ -5,11 +5,11 @@
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -20,11 +20,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1722640603,
|
||||
"narHash": "sha256-TcXjLVNd3VeH1qKPH335Tc4RbFDbZQX+d7rqnDUoRaY=",
|
||||
"lastModified": 1753432016,
|
||||
"narHash": "sha256-cnL5WWn/xkZoyH/03NNUS7QgW5vI7D1i74g48qplCvg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "81610abc161d4021b29199aa464d6a1a521e0cc9",
|
||||
"rev": "6027c30c8e9810896b92429f0092f624f7b1aace",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
20
flake.nix
20
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 =
|
||||
@@ -42,9 +42,11 @@
|
||||
'';
|
||||
};
|
||||
in {
|
||||
packages = {
|
||||
fantomas = dotnetTool null "fantomas" (builtins.fromJSON (builtins.readFile ./.config/dotnet-tools.json)).tools.fantomas.version (builtins.head (builtins.filter (elem: elem.pname == "fantomas") ((import ./nix/deps.nix) {fetchNuGet = x: x;}))).hash;
|
||||
fsharp-analyzers = dotnetTool "FSharp.Analyzers.Cli" "fsharp-analyzers" (builtins.fromJSON (builtins.readFile ./.config/dotnet-tools.json)).tools.fsharp-analyzers.version (builtins.head (builtins.filter (elem: elem.pname == "fsharp-analyzers") ((import ./nix/deps.nix) {fetchNuGet = x: x;}))).hash;
|
||||
packages = let
|
||||
deps = builtins.fromJSON (builtins.readFile ./nix/deps.json);
|
||||
in {
|
||||
fantomas = dotnetTool null "fantomas" (builtins.fromJSON (builtins.readFile ./.config/dotnet-tools.json)).tools.fantomas.version (builtins.head (builtins.filter (elem: elem.pname == "fantomas") deps)).hash;
|
||||
fsharp-analyzers = dotnetTool "FSharp.Analyzers.Cli" "fsharp-analyzers" (builtins.fromJSON (builtins.readFile ./.config/dotnet-tools.json)).tools.fsharp-analyzers.version (builtins.head (builtins.filter (elem: elem.pname == "fsharp-analyzers") deps)).hash;
|
||||
default = pkgs.buildDotnetModule {
|
||||
inherit pname version dotnet-sdk dotnet-runtime;
|
||||
name = "unofficial-nunit-runner";
|
||||
@@ -52,7 +54,7 @@
|
||||
projectFile = "./WoofWare.NUnitTestRunner/WoofWare.NUnitTestRunner.fsproj";
|
||||
testProjectFile = "./WoofWare.NUnitTestRunner/WoofWare.NUnitTestRunner.Test/WoofWare.NUnitTestRunner.Test.fsproj";
|
||||
disabledTests = ["WoofWare.NUnitTestRunner.Test.TestSurface.EnsureVersionIsMonotonic"];
|
||||
nugetDeps = ./nix/deps.nix; # `nix build .#default.passthru.fetch-deps && ./result` and put the result here
|
||||
nugetDeps = ./nix/deps.json; # `nix build .#default.fetch-deps && ./result nix/deps.json`
|
||||
doCheck = true;
|
||||
};
|
||||
};
|
||||
@@ -63,11 +65,7 @@
|
||||
pkgs.alejandra
|
||||
pkgs.nodePackages.markdown-link-check
|
||||
pkgs.shellcheck
|
||||
];
|
||||
};
|
||||
net6 = pkgs.mkShell {
|
||||
packages = [
|
||||
pkgs.dotnetCorePackages.runtime_6_0
|
||||
pkgs.xmlstarlet
|
||||
];
|
||||
};
|
||||
};
|
||||
|
387
nix/deps.json
Normal file
387
nix/deps.json
Normal file
@@ -0,0 +1,387 @@
|
||||
[
|
||||
{
|
||||
"pname": "ApiSurface",
|
||||
"version": "4.1.22",
|
||||
"hash": "sha256-voj9m3YmyJ95FAMLV4sWzQMod3Em0mTjzf0LBUUFOso="
|
||||
},
|
||||
{
|
||||
"pname": "fantomas",
|
||||
"version": "7.0.3",
|
||||
"hash": "sha256-0XlfV7SxXPDnk/CjkUesJSaH0cxlNHJ+Jj86zNUhkNA="
|
||||
},
|
||||
{
|
||||
"pname": "Fantomas.Core",
|
||||
"version": "6.1.1",
|
||||
"hash": "sha256-FcTLHQFvKkQY/kV08jhhy/St/+FmXpp3epp/R3zUXMA="
|
||||
},
|
||||
{
|
||||
"pname": "Fantomas.FCS",
|
||||
"version": "6.1.1",
|
||||
"hash": "sha256-NuZ8msPEHYA8T3EYREB28F1RcNgUU8V54eg2+UttYxw="
|
||||
},
|
||||
{
|
||||
"pname": "FsCheck",
|
||||
"version": "3.3.0",
|
||||
"hash": "sha256-TFDR/uAGv4OqrMX8/reQ4faaAhH9hxTHr1T/YkNPCCU="
|
||||
},
|
||||
{
|
||||
"pname": "fsharp-analyzers",
|
||||
"version": "0.32.0",
|
||||
"hash": "sha256-MnhsK5tOeexL6uQhsV4nTRz8CGbz2o8VyHwAK8x91pE="
|
||||
},
|
||||
{
|
||||
"pname": "FSharp.Core",
|
||||
"version": "6.0.1",
|
||||
"hash": "sha256-Ehsgt3nCJijpaVuJguC1TPVEKSkJd6PSc07D2ZQSemI="
|
||||
},
|
||||
{
|
||||
"pname": "FSharp.Core",
|
||||
"version": "8.0.403",
|
||||
"hash": "sha256-3XSQp7JUOU5T6gvSQXNfBF4t4gaX4J4xushH+cfM9mE="
|
||||
},
|
||||
{
|
||||
"pname": "FsUnit",
|
||||
"version": "7.1.1",
|
||||
"hash": "sha256-UMCEGKxQ4ytjmPuVpiNaAPbi3RQH9gqa61JJIUS/6hg="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.ApplicationInsights",
|
||||
"version": "2.22.0",
|
||||
"hash": "sha256-mUQ63atpT00r49ca50uZu2YCiLg3yd6r3HzTryqcuEA="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.AspNetCore.App.Ref",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-9jDkWbjw/nd8yqdzVTagCuqr6owJ/DUMi4BlUZT4hWU="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.AspNetCore.App.Runtime.linux-arm64",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-JQULJyF0ivLoUU1JaFfK/HHg+/qzpN7V2RR2Cc+WlQ4="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.AspNetCore.App.Runtime.linux-x64",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-zUsVIpV481vMLAXaLEEUpEMA9/f1HGOnvaQnaWdzlyY="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.AspNetCore.App.Runtime.osx-arm64",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-2seqZcz0JeUjkzh3QcGa9TcJ4LUafpFjTRk+Nm8T6T0="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.AspNetCore.App.Runtime.osx-x64",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-yxLafxiBKkvfkDggPk0P9YZIHBkDJOsFTO7/V9mEHuU="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.CodeCoverage",
|
||||
"version": "17.14.1",
|
||||
"hash": "sha256-f8QytG8GvRoP47rO2KEmnDLxIpyesaq26TFjDdW40Gs="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NET.Test.Sdk",
|
||||
"version": "17.14.1",
|
||||
"hash": "sha256-mZUzDFvFp7x1nKrcnRd0hhbNu5g8EQYt8SKnRgdhT/A="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NETCore.App.Host.linux-arm64",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-9lC/LYnthYhjkWWz2kkFCvlA5LJOv11jdt59SDnpdy0="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NETCore.App.Host.linux-x64",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-VFRDzx7LJuvI5yzKdGmw/31NYVbwHWPKQvueQt5xc10="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NETCore.App.Host.osx-arm64",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-DaSWwYACJGolEBuMhzDVCj/rQTdDt061xCVi+gyQnuo="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NETCore.App.Host.osx-x64",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-FrRny9EI6HKCKQbu6mcLj5w4ooSRrODD4Vj2ZMGnMd4="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NETCore.App.Ref",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-9LZgVoIFF8qNyUu8kdJrYGLutMF/cL2K82HN2ywwlx8="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NETCore.App.Runtime.linux-arm64",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-k3rxvUhCEU0pVH8KgEMtkPiSOibn+nBh+0zT2xIfId8="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NETCore.App.Runtime.linux-x64",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-U8wJ2snSDFqeAgDVLXjnniidC7Cr5aJ1/h/BMSlyu0c="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NETCore.App.Runtime.osx-arm64",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-UfLcrL2Gj/OLz0s92Oo+OCJeDpZFAcQLPLiSNND8D5Y="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NETCore.App.Runtime.osx-x64",
|
||||
"version": "6.0.36",
|
||||
"hash": "sha256-0xIJYFzxdMcnCj3wzkFRQZSnQcPHzPHMzePRIOA3oJs="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NETCore.Platforms",
|
||||
"version": "1.1.1",
|
||||
"hash": "sha256-8hLiUKvy/YirCWlFwzdejD2Db3DaXhHxT7GSZx/znJg="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NETCore.Platforms",
|
||||
"version": "2.0.0",
|
||||
"hash": "sha256-IEvBk6wUXSdyCnkj6tHahOJv290tVVT8tyemYcR0Yro="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.NETCore.Targets",
|
||||
"version": "1.1.3",
|
||||
"hash": "sha256-WLsf1NuUfRWyr7C7Rl9jiua9jximnVvzy6nk2D2bVRc="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Testing.Extensions.Telemetry",
|
||||
"version": "1.5.3",
|
||||
"hash": "sha256-bIXwPSa3jkr2b6xINOqMUs6/uj/r4oVFM7xq3uVIZDU="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Testing.Extensions.TrxReport.Abstractions",
|
||||
"version": "1.5.3",
|
||||
"hash": "sha256-IfMRfcyaIKEMRtx326ICKtinDBEfGw/Sv8ZHawJ96Yc="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Testing.Extensions.VSTestBridge",
|
||||
"version": "1.5.3",
|
||||
"hash": "sha256-XpM/yFjhLSsuzyDV+xKubs4V1zVVYiV05E0+N4S1h0g="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Testing.Platform",
|
||||
"version": "1.5.3",
|
||||
"hash": "sha256-y61Iih6w5D79dmrj2V675mcaeIiHoj1HSa1FRit2BLM="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Testing.Platform.MSBuild",
|
||||
"version": "1.5.3",
|
||||
"hash": "sha256-YspvjE5Jfi587TAfsvfDVJXNrFOkx1B3y1CKV6m7YLY="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.TestPlatform.ObjectModel",
|
||||
"version": "17.12.0",
|
||||
"hash": "sha256-3XBHBSuCxggAIlHXmKNQNlPqMqwFlM952Av6RrLw1/w="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.TestPlatform.ObjectModel",
|
||||
"version": "17.14.1",
|
||||
"hash": "sha256-QMf6O+w0IT+16Mrzo7wn+N20f3L1/mDhs/qjmEo1rYs="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.TestPlatform.TestHost",
|
||||
"version": "17.14.1",
|
||||
"hash": "sha256-1cxHWcvHRD7orQ3EEEPPxVGEkTpxom1/zoICC9SInJs="
|
||||
},
|
||||
{
|
||||
"pname": "Myriad.Core",
|
||||
"version": "0.8.3",
|
||||
"hash": "sha256-vBOxfq8QriX/yUtaXN69rEQaY/psRNJWxqATLidrt2g="
|
||||
},
|
||||
{
|
||||
"pname": "Myriad.Sdk",
|
||||
"version": "0.8.3",
|
||||
"hash": "sha256-7O397WKhskKOvE3MkJT37BvxorDWngDR6gTUogtDZ2M="
|
||||
},
|
||||
{
|
||||
"pname": "Nerdbank.GitVersioning",
|
||||
"version": "3.8.38-alpha",
|
||||
"hash": "sha256-gPMrVbjOZxXoofczF/pn6eVkLhjVSJIyQrLO2oljrDc="
|
||||
},
|
||||
{
|
||||
"pname": "Newtonsoft.Json",
|
||||
"version": "13.0.3",
|
||||
"hash": "sha256-hy/BieY4qxBWVVsDqqOPaLy1QobiIapkbrESm6v2PHc="
|
||||
},
|
||||
{
|
||||
"pname": "NuGet.Common",
|
||||
"version": "6.14.0",
|
||||
"hash": "sha256-jDOwt3veI1GSG8CfBnf2+dJxD3E/Nmlc+vHtD4J76Ms="
|
||||
},
|
||||
{
|
||||
"pname": "NuGet.Configuration",
|
||||
"version": "6.14.0",
|
||||
"hash": "sha256-1PN9s6fhCw3wd2260U6hQ4vG3jIvcG8GIn1oQgxMXA0="
|
||||
},
|
||||
{
|
||||
"pname": "NuGet.Frameworks",
|
||||
"version": "6.14.0",
|
||||
"hash": "sha256-3ViM3R1ucQMEL2hQYsivT86kI6veMQK2xDsiAcFcVQk="
|
||||
},
|
||||
{
|
||||
"pname": "NuGet.Packaging",
|
||||
"version": "6.14.0",
|
||||
"hash": "sha256-Yafbnxs3maj55bJ1oKQiZ0QkntFUzXdhorL94YEUOhY="
|
||||
},
|
||||
{
|
||||
"pname": "NuGet.Protocol",
|
||||
"version": "6.14.0",
|
||||
"hash": "sha256-uLDKfs+QN1MdnuQtTES8qfNzzsmYKM6XB9pwJc4G+eo="
|
||||
},
|
||||
{
|
||||
"pname": "NuGet.Versioning",
|
||||
"version": "6.14.0",
|
||||
"hash": "sha256-DqdOJgsphKxSvqB8b60zNPCaiLfbiu3WnUJ/90feLrY="
|
||||
},
|
||||
{
|
||||
"pname": "NUnit",
|
||||
"version": "4.3.2",
|
||||
"hash": "sha256-0RWe8uFoxYp6qhPlDDEghOMcKJgyw2ybvEoAqBLebeE="
|
||||
},
|
||||
{
|
||||
"pname": "NUnit3TestAdapter",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-7jZM4qAbIzne3AcdFfMbvbgogqpxvVe6q2S7Ls8xQy0="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.any.System.Runtime",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-qwhNXBaJ1DtDkuRacgHwnZmOZ1u9q7N8j0cWOLYOELM="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.native.System",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-ZBZaodnjvLXATWpXXakFgcy6P+gjhshFXmglrL5xD5Y="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.unix.System.Private.Uri",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-c5tXWhE/fYbJVl9rXs0uHh3pTsg44YD1dJvyOA0WoMs="
|
||||
},
|
||||
{
|
||||
"pname": "Spectre.Console",
|
||||
"version": "0.50.0",
|
||||
"hash": "sha256-3MNgumQSXzuXVGj7kLb5FMkTH/LoFohMvUjAZ7nyHfo="
|
||||
},
|
||||
{
|
||||
"pname": "System.Collections.Immutable",
|
||||
"version": "8.0.0",
|
||||
"hash": "sha256-F7OVjKNwpqbUh8lTidbqJWYi476nsq9n+6k0+QVRo3w="
|
||||
},
|
||||
{
|
||||
"pname": "System.Diagnostics.DiagnosticSource",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-6mW3N6FvcdNH/pB58pl+pFSCGWgyaP4hfVtC/SMWDV4="
|
||||
},
|
||||
{
|
||||
"pname": "System.Diagnostics.DiagnosticSource",
|
||||
"version": "7.0.0",
|
||||
"hash": "sha256-9Wk8cHSkjKtqkN6xW7KnXoQVtF/VNbKeBq79WqDesMs="
|
||||
},
|
||||
{
|
||||
"pname": "System.Formats.Asn1",
|
||||
"version": "6.0.0",
|
||||
"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",
|
||||
"version": "4.5.5",
|
||||
"hash": "sha256-EPQ9o1Kin7KzGI5O3U3PUQAZTItSbk9h/i4rViN3WiI="
|
||||
},
|
||||
{
|
||||
"pname": "System.Memory",
|
||||
"version": "4.6.3",
|
||||
"hash": "sha256-JgeK63WMmumF6L+FH5cwJgYdpqXrSDcgTQwtIgTHKVU="
|
||||
},
|
||||
{
|
||||
"pname": "System.Private.Uri",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-fVfgcoP4AVN1E5wHZbKBIOPYZ/xBeSIdsNF+bdukIRM="
|
||||
},
|
||||
{
|
||||
"pname": "System.Reflection.Metadata",
|
||||
"version": "1.6.0",
|
||||
"hash": "sha256-JJfgaPav7UfEh4yRAQdGhLZF1brr0tUWPl6qmfNWq/E="
|
||||
},
|
||||
{
|
||||
"pname": "System.Reflection.Metadata",
|
||||
"version": "8.0.0",
|
||||
"hash": "sha256-dQGC30JauIDWNWXMrSNOJncVa1umR1sijazYwUDdSIE="
|
||||
},
|
||||
{
|
||||
"pname": "System.Runtime",
|
||||
"version": "4.3.1",
|
||||
"hash": "sha256-R9T68AzS1PJJ7v6ARz9vo88pKL1dWqLOANg4pkQjkA0="
|
||||
},
|
||||
{
|
||||
"pname": "System.Runtime.CompilerServices.Unsafe",
|
||||
"version": "6.0.0",
|
||||
"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",
|
||||
"version": "6.0.4",
|
||||
"hash": "sha256-2e0aRybote+OR66bHaNiYpF//4fCiaO3zbR2e9GABUI="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.ProtectedData",
|
||||
"version": "4.4.0",
|
||||
"hash": "sha256-Ri53QmFX8I8UH0x4PikQ1ZA07ZSnBUXStd5rBfGWFOE="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Principal.Windows",
|
||||
"version": "4.5.0",
|
||||
"hash": "sha256-BkUYNguz0e4NJp1kkW7aJBn3dyH9STwB5N8XqnlCsmY="
|
||||
},
|
||||
{
|
||||
"pname": "System.Text.Json",
|
||||
"version": "8.0.5",
|
||||
"hash": "sha256-yKxo54w5odWT6nPruUVsaX53oPRe+gKzGvLnnxtwP68="
|
||||
},
|
||||
{
|
||||
"pname": "TypeEquality",
|
||||
"version": "0.3.0",
|
||||
"hash": "sha256-V50xAOzzyUJrY+MYPRxtnqW5MVeATXCes89wPprv1r4="
|
||||
},
|
||||
{
|
||||
"pname": "WoofWare.DotnetRuntimeLocator",
|
||||
"version": "0.1.12",
|
||||
"hash": "sha256-6pNZs0/R2LnLKSODq9DyHhGo2C+SDyz9k7D/13/78so="
|
||||
},
|
||||
{
|
||||
"pname": "WoofWare.Myriad.Plugins",
|
||||
"version": "8.0.5",
|
||||
"hash": "sha256-IfTT2GM9ktUW5BQoKQGFKK39BAKeziJJnrOIL7Vs19o="
|
||||
},
|
||||
{
|
||||
"pname": "WoofWare.Myriad.Plugins.Attributes",
|
||||
"version": "3.6.12",
|
||||
"hash": "sha256-90uiVtc5exCbkcdS8DgTmlEZZT8/AdrY0QuFzy+FHUo="
|
||||
},
|
||||
{
|
||||
"pname": "WoofWare.PrattParser",
|
||||
"version": "0.2.4",
|
||||
"hash": "sha256-aNTa2C300jUCsQ+iVSoothbCvBWdg7OzCJknwG5HV6g="
|
||||
},
|
||||
{
|
||||
"pname": "WoofWare.Whippet.Fantomas",
|
||||
"version": "0.6.3",
|
||||
"hash": "sha256-FkW/HtVp8/HE2k6d7yFpnJcnP3FNNe9kGlkoIWmNgDw="
|
||||
}
|
||||
]
|
269
nix/deps.nix
269
nix/deps.nix
@@ -1,269 +0,0 @@
|
||||
# This file was automatically generated by passthru.fetch-deps.
|
||||
# Please dont edit it manually, your changes might get overwritten!
|
||||
{fetchNuGet}: [
|
||||
(fetchNuGet {
|
||||
pname = "ApiSurface";
|
||||
version = "4.0.43";
|
||||
hash = "sha256-CO5a0ZCWvD4fZXQL9l0At0y0vqmN3TT2+TuUw4ZNoC8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "fantomas";
|
||||
version = "6.3.10";
|
||||
hash = "sha256-2m4YevDp9CRm/Ci2hguDXd6DUMElRg3hNAne9LHntWM=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "FsCheck";
|
||||
version = "3.0.0-rc3";
|
||||
hash = "sha256-4Z9Qv+vccrXWh2Fjdwdmjc1YgW+Dcx73ESkdAnHqxOY=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "fsharp-analyzers";
|
||||
version = "0.26.0";
|
||||
hash = "sha256-60Bl36LOb/zVNdH2SBSuQ5O41lP9dKTNZbs5vvYs+3U=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "FSharp.Core";
|
||||
version = "6.0.0";
|
||||
hash = "sha256-aQDRgiGC7iTyzNEmvyd2RBCDcLG0I1dbfncHlkbeUMI=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "FSharp.Core";
|
||||
version = "8.0.301";
|
||||
hash = "sha256-LyP+zHxXFNksSQ/ExQ9CGkQYGvld8W6JNmxMg6lTRCs=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "FsUnit";
|
||||
version = "6.0.0";
|
||||
hash = "sha256-q87WQf6MqGhzvaQ7WkkUlCdoE94DY0CD5PaXEj64A6M=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.AspNetCore.App.Ref";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-1mQTxwruzhm20YdlZefrYuy7xrBs17pH4Vo0K3Tl7Fc=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.AspNetCore.App.Runtime.linux-arm64";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-cIe0F+7rgwYSmh0VuFuQsUI9iEW5hn2KCD2H8Cs/k2g=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.AspNetCore.App.Runtime.linux-x64";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-TkYv7h9NBr3I+FIaXeLU4MawJtgT2RWhs35ewGRDKx8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.AspNetCore.App.Runtime.osx-arm64";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-RaC37ZQcJn7ykXJrtV7ibxh0GcalRyPKncxlqOLou+I=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.AspNetCore.App.Runtime.osx-x64";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-vh/e46xM/HbhbBvL5eP5/DCHwCP2Bg7WoMS28nBXWV0=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.CodeCoverage";
|
||||
version = "17.10.0";
|
||||
hash = "sha256-yQFwqVChRtIRpbtkJr92JH2i+O7xn91NGbYgnKs8G2g=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NET.Test.Sdk";
|
||||
version = "17.10.0";
|
||||
hash = "sha256-rkHIqB2mquNXF89XBTFpUL2z5msjTBsOcyjSBCh36I0=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Host.linux-arm64";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-yDOkSHEGuGG6u+rB5u+IC3rc2tQwvbjdqmgHcl7Gkn4=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Host.linux-x64";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-2aDGkn0QqXXHUUSAwtQQbjKl5I6S0fcQWPciqPnOiM4=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Host.osx-arm64";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-n6hks4j88TRelq1O6SCeUH5GmxoSm5BWXGwnpnYJibI=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Host.osx-x64";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-nBBq4RYAgimBYOn/bN6JTFvJFYaqYXMHae2pmCzRaS8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Ref";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-Fm3RUZNcro434rIu3c7unGviGeGBjXj2dGnr2mmrM2g=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Runtime.linux-arm64";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-kdj8ia/2du2oKGg4MJdO2XytpT3gQ9UOiHVCyfiX2V8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Runtime.linux-x64";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-/Hti30Ba12NDJQcG8pFTg6REVUDIrxZ/hRtEZNDlgxE=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Runtime.osx-arm64";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-A8MFGOMXFROH1QGUE7xzq5b5EskDyIQCQt7SLfGdSbU=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.App.Runtime.osx-x64";
|
||||
version = "6.0.32";
|
||||
hash = "sha256-y5YB62WlMrK10bR/+nNpI8luVRlD9W9ZG3GsX7AXzUM=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.NETCore.Platforms";
|
||||
version = "2.0.0";
|
||||
hash = "sha256-IEvBk6wUXSdyCnkj6tHahOJv290tVVT8tyemYcR0Yro=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.TestPlatform.ObjectModel";
|
||||
version = "17.10.0";
|
||||
hash = "sha256-3YjVGK2zEObksBGYg8b/CqoJgLQ1jUv4GCWNjDhLRh4=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Microsoft.TestPlatform.TestHost";
|
||||
version = "17.10.0";
|
||||
hash = "sha256-+yzP3FY6WoOosSpYnB7duZLhOPUZMQYy8zJ1d3Q4hK4=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Myriad.Sdk";
|
||||
version = "0.8.3";
|
||||
hash = "sha256-7O397WKhskKOvE3MkJT37BvxorDWngDR6gTUogtDZ2M=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Nerdbank.GitVersioning";
|
||||
version = "3.6.139";
|
||||
hash = "sha256-DMEdNlYh9tqkqQ/98zwk7NcRYBpTApLiFwzkgaHP7Fo=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Newtonsoft.Json";
|
||||
version = "13.0.1";
|
||||
hash = "sha256-K2tSVW4n4beRPzPu3rlVaBEMdGvWSv/3Q1fxaDh4Mjo=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Newtonsoft.Json";
|
||||
version = "13.0.3";
|
||||
hash = "sha256-hy/BieY4qxBWVVsDqqOPaLy1QobiIapkbrESm6v2PHc=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NuGet.Common";
|
||||
version = "6.10.1";
|
||||
hash = "sha256-2gZe1zwSaZsr0nipaMBJixLEVOvR7vp75kwecSSYyfw=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NuGet.Configuration";
|
||||
version = "6.10.1";
|
||||
hash = "sha256-RmjvlbtJssxuWEiOcVJLtUVT0nPn7IUPb878NmJbwmM=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NuGet.Frameworks";
|
||||
version = "6.10.1";
|
||||
hash = "sha256-AdfpuVDDy9zYAGgcMZoTf/fkFCJJVrxRFhsv6AI4Dd0=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NuGet.Packaging";
|
||||
version = "6.10.1";
|
||||
hash = "sha256-ogsVjOao+LKUOMhGir1flDuMPjOeR2OpkNGHtr/riH4=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NuGet.Protocol";
|
||||
version = "6.10.1";
|
||||
hash = "sha256-UeS/10z1EqswbeB0c7QgBIVOp0VGlN5ZDQqTY2/AhX8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NuGet.Versioning";
|
||||
version = "6.10.1";
|
||||
hash = "sha256-jOh27AORk0TIhVePDVAgVhh6FuUo2v3oh/Xapcw7UVI=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NUnit";
|
||||
version = "4.1.0";
|
||||
hash = "sha256-srzj0lf2ReKw41TnigZwf8rqKKNzGRRVrgN3hR/vRjo=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "NUnit3TestAdapter";
|
||||
version = "4.6.0";
|
||||
hash = "sha256-9Yav2fYhC4w0OgsyUwU4/5rDy4FVDTpKnWHuwl/uKJQ=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "Spectre.Console";
|
||||
version = "0.49.1";
|
||||
hash = "sha256-tqSVojyuQjuB34lXo759NOcyLgNIw815mKXJPq5JFDo=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.Formats.Asn1";
|
||||
version = "6.0.0";
|
||||
hash = "sha256-KaMHgIRBF7Nf3VwOo+gJS1DcD+41cJDPWFh+TDQ8ee8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.IO.Abstractions";
|
||||
version = "4.2.13";
|
||||
hash = "sha256-nkC/PiqE6+c1HJ2yTwg3x+qdBh844Z8n3ERWDW8k6Gg=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.IO.FileSystem.AccessControl";
|
||||
version = "4.5.0";
|
||||
hash = "sha256-ck44YBQ0M+2Im5dw0VjBgFD1s0XuY54cujrodjjSBL8=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.Reflection.Metadata";
|
||||
version = "1.6.0";
|
||||
hash = "sha256-JJfgaPav7UfEh4yRAQdGhLZF1brr0tUWPl6qmfNWq/E=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.Security.AccessControl";
|
||||
version = "4.5.0";
|
||||
hash = "sha256-AFsKPb/nTk2/mqH/PYpaoI8PLsiKKimaXf+7Mb5VfPM=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.Security.Cryptography.Pkcs";
|
||||
version = "6.0.4";
|
||||
hash = "sha256-2e0aRybote+OR66bHaNiYpF//4fCiaO3zbR2e9GABUI=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.Security.Cryptography.ProtectedData";
|
||||
version = "4.4.0";
|
||||
hash = "sha256-Ri53QmFX8I8UH0x4PikQ1ZA07ZSnBUXStd5rBfGWFOE=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.Security.Principal.Windows";
|
||||
version = "4.5.0";
|
||||
hash = "sha256-BkUYNguz0e4NJp1kkW7aJBn3dyH9STwB5N8XqnlCsmY=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.Text.Encodings.Web";
|
||||
version = "7.0.0";
|
||||
hash = "sha256-tF8qt9GZh/nPy0mEnj6nKLG4Lldpoi/D8xM5lv2CoYQ=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "System.Text.Json";
|
||||
version = "7.0.3";
|
||||
hash = "sha256-aSJZ17MjqaZNQkprfxm/09LaCoFtpdWmqU9BTROzWX4=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "WoofWare.DotnetRuntimeLocator";
|
||||
version = "0.1.9";
|
||||
hash = "sha256-0v8JQgGjS3tseA28OFmYZUcinYRArjs28BwVy3oczJM=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "WoofWare.Myriad.Plugins";
|
||||
version = "2.1.53";
|
||||
hash = "sha256-7Kl1tW3EbkUghFs7ZE3hE5PChYxTXcVxWFCSTGrzfpk=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "WoofWare.Myriad.Plugins.Attributes";
|
||||
version = "3.1.9";
|
||||
hash = "sha256-atV9vJlhLvXYrJvS9ET1A7M+LY9IdgBSTyGhz2Vom5U=";
|
||||
})
|
||||
(fetchNuGet {
|
||||
pname = "WoofWare.PrattParser";
|
||||
version = "0.2.2";
|
||||
hash = "sha256-OCsHlp/HYB/i1+h0ixq+0zxO1bXFQ6kpEWIONkOr+TE=";
|
||||
})
|
||||
]
|
Reference in New Issue
Block a user