fix(tests): Fix tests in Linux and macOS (#5179)

This commit is contained in:
Hsiao-nan Cheung
2022-10-15 23:12:52 +08:00
committed by GitHub
parent 9fda5428ae
commit 7dcb7c0030
9 changed files with 114 additions and 202 deletions
+4
View File
@@ -15,6 +15,10 @@
- **auto-pr:** Add `CommitMessageFormat` option ([#5171](https://github.com/ScoopInstaller/Scoop/issues/5171))
- **checkver:** Support XML default namespace ([#5191](https://github.com/ScoopInstaller/Scoop/issues/5191))
### Tests
- **unix:** Fix tests in Linux and macOS ([#5179](https://github.com/ScoopInstaller/Scoop/issues/5179))
## [v0.3.0](https://github.com/ScoopInstaller/Scoop/compare/v0.2.4...v0.3.0) - 2022-10-10
### Features
+32 -45
View File
@@ -3,54 +3,41 @@
. "$PSScriptRoot\..\lib\help.ps1"
. "$PSScriptRoot\..\libexec\scoop-alias.ps1" | Out-Null
Describe 'add_alias' -Tag 'Scoop' {
Mock shimdir { "$env:TEMP\shims" }
Mock set_config { }
Mock get_config { @{} }
Describe 'Manipulate Alias' -Tag 'Scoop' {
BeforeAll {
Mock shimdir { "$TestDrive\shims" }
Mock set_config { }
Mock get_config { @{} }
$shimdir = shimdir
ensure $shimdir
Context "alias doesn't exist" {
It 'creates a new alias' {
$alias_file = "$shimdir\scoop-rm.ps1"
$alias_file | Should -Not -Exist
add_alias 'rm' '"hello, world!"'
& $alias_file | Should -Be 'hello, world!'
}
$shimdir = shimdir
ensure $shimdir
}
Context 'alias exists' {
It 'does not change existing alias' {
$alias_file = "$shimdir\scoop-rm.ps1"
New-Item $alias_file -Type File -Force
$alias_file | Should -Exist
It 'Creates a new alias if alias doesn''t exist' {
$alias_file = "$shimdir\scoop-rm.ps1"
$alias_file | Should -Not -Exist
add_alias 'rm' 'test'
$alias_file | Should -FileContentMatch ''
}
}
}
Describe 'rm_alias' -Tag 'Scoop' {
Mock shimdir { "$env:TEMP\shims" }
Mock set_config { }
Mock get_config { @{} }
$shimdir = shimdir
ensure $shimdir
Context 'alias exists' {
It 'removes an existing alias' {
$alias_file = "$shimdir\scoop-rm.ps1"
add_alias 'rm' '"hello, world!"'
$alias_file | Should -Exist
Mock get_config { @(@{'rm' = 'scoop-rm' }) }
rm_alias 'rm'
$alias_file | Should -Not -Exist
}
add_alias 'rm' '"hello, world!"'
& $alias_file | Should -Be 'hello, world!'
}
It 'Does not change existing alias if alias exists' {
$alias_file = "$shimdir\scoop-rm.ps1"
New-Item $alias_file -Type File -Force
$alias_file | Should -Exist
add_alias 'rm' 'test'
& $alias_file | Should -Not -Be 'test'
}
It 'Removes an existing alias' {
$alias_file = "$shimdir\scoop-rm.ps1"
add_alias 'rm' '"hello, world!"'
$alias_file | Should -Exist
Mock get_config { @(@{'rm' = 'scoop-rm' }) }
rm_alias 'rm'
$alias_file | Should -Not -Exist
}
}
+3 -6
View File
@@ -3,15 +3,12 @@
Describe 'config' -Tag 'Scoop' {
BeforeAll {
$configFile = "$env:TEMP\ScoopTestFixtures\config.json"
if (Test-Path $configFile) {
Remove-Item -Path $configFile -Force
}
$configFile = [IO.Path]::GetTempFileName()
$unicode = [Regex]::Unescape('\u4f60\u597d\u3053\u3093\u306b\u3061\u306f') # 你好こんにちは
}
BeforeEach {
$scoopConfig = $null
AfterAll {
Remove-Item -Path $configFile -Force
}
It 'load_cfg should return null if config file does not exist' {
+16 -18
View File
@@ -1,10 +1,8 @@
. "$PSScriptRoot\Scoop-TestLib.ps1"
. "$PSScriptRoot\..\lib\core.ps1"
. "$PSScriptRoot\..\lib\install.ps1"
. "$PSScriptRoot\..\lib\unix.ps1"
$repo_dir = (Get-Item $MyInvocation.MyCommand.Path).directory.parent.FullName
$isUnix = is_unix
Describe 'Get-AppFilePath' -Tag 'Scoop' {
BeforeAll {
@@ -128,7 +126,7 @@ Describe 'is_directory' -Tag 'Scoop' {
}
}
Describe 'movedir' -Tag 'Scoop' {
Describe 'movedir' -Tag 'Scoop', 'Windows' {
$extract_dir = 'subdir'
$extract_to = $null
@@ -136,7 +134,7 @@ Describe 'movedir' -Tag 'Scoop' {
$working_dir = setup_working 'movedir'
}
It 'moves directories with no spaces in path' -Skip:$isUnix {
It 'moves directories with no spaces in path' {
$dir = "$working_dir\user"
movedir "$dir\_tmp\$extract_dir" "$dir\$extract_to"
@@ -144,7 +142,7 @@ Describe 'movedir' -Tag 'Scoop' {
"$dir\_tmp\$extract_dir" | Should -Not -Exist
}
It 'moves directories with spaces in path' -Skip:$isUnix {
It 'moves directories with spaces in path' {
$dir = "$working_dir\user with space"
movedir "$dir\_tmp\$extract_dir" "$dir\$extract_to"
@@ -157,7 +155,7 @@ Describe 'movedir' -Tag 'Scoop' {
"$dir\_tmp" | Should -Not -Exist
}
It 'moves directories with quotes in path' -Skip:$isUnix {
It 'moves directories with quotes in path' {
$dir = "$working_dir\user with 'quote"
movedir "$dir\_tmp\$extract_dir" "$dir\$extract_to"
@@ -166,14 +164,14 @@ Describe 'movedir' -Tag 'Scoop' {
}
}
Describe 'shim' -Tag 'Scoop' {
Describe 'shim' -Tag 'Scoop', 'Windows' {
BeforeAll {
$working_dir = setup_working 'shim'
$shimdir = shimdir
$(ensure_in_path $shimdir) | Out-Null
}
It "links a file onto the user's path" -Skip:$isUnix {
It "links a file onto the user's path" {
{ Get-Command 'shim-test' -ea stop } | Should -Throw
{ Get-Command 'shim-test.ps1' -ea stop } | Should -Throw
{ Get-Command 'shim-test.cmd' -ea stop } | Should -Throw
@@ -187,7 +185,7 @@ Describe 'shim' -Tag 'Scoop' {
}
Context 'user with quote' {
It 'shims a file with quote in path' -Skip:$isUnix {
It 'shims a file with quote in path' {
{ Get-Command 'shim-test' -ea stop } | Should -Throw
{ shim-test } | Should -Throw
@@ -202,14 +200,14 @@ Describe 'shim' -Tag 'Scoop' {
}
}
Describe 'rm_shim' -Tag 'Scoop' {
Describe 'rm_shim' -Tag 'Scoop', 'Windows' {
BeforeAll {
$working_dir = setup_working 'shim'
$shimdir = shimdir
$(ensure_in_path $shimdir) | Out-Null
}
It 'removes shim from path' -Skip:$isUnix {
It 'removes shim from path' {
shim "$working_dir\shim-test.ps1" $false 'shim-test'
rm_shim 'shim-test' $shimdir
@@ -221,7 +219,7 @@ Describe 'rm_shim' -Tag 'Scoop' {
}
}
Describe 'get_app_name_from_shim' -Tag 'Scoop' {
Describe 'get_app_name_from_shim' -Tag 'Scoop', 'Windows' {
BeforeAll {
$working_dir = setup_working 'shim'
$shimdir = shimdir
@@ -229,11 +227,11 @@ Describe 'get_app_name_from_shim' -Tag 'Scoop' {
Mock appsdir { $working_dir }
}
It 'returns empty string if file does not exist' -Skip:$isUnix {
It 'returns empty string if file does not exist' {
get_app_name_from_shim 'non-existent-file' | Should -Be ''
}
It 'returns app name if file exists and is a shim to an app' -Skip:$isUnix {
It 'returns app name if file exists and is a shim to an app' {
ensure "$working_dir/mockapp/current/"
Write-Output '' | Out-File "$working_dir/mockapp/current/mockapp1.ps1"
shim "$working_dir/mockapp/current/mockapp1.ps1" $false 'shim-test1'
@@ -246,7 +244,7 @@ Describe 'get_app_name_from_shim' -Tag 'Scoop' {
get_app_name_from_shim "$shim_path2" | Should -Be 'mockapp'
}
It 'returns empty string if file exists and is not a shim' -Skip:$isUnix {
It 'returns empty string if file exists and is not a shim' {
Write-Output 'lorem ipsum' | Out-File -Encoding ascii "$working_dir/mock-shim.ps1"
get_app_name_from_shim "$working_dir/mock-shim.ps1" | Should -Be ''
}
@@ -263,12 +261,12 @@ Describe 'get_app_name_from_shim' -Tag 'Scoop' {
}
}
Describe 'ensure_robocopy_in_path' -Tag 'Scoop' {
Describe 'ensure_robocopy_in_path' -Tag 'Scoop', 'Windows' {
$shimdir = shimdir $false
Mock versiondir { $repo_dir }
Context 'robocopy is not in path' {
It 'shims robocopy when not on path' -Skip:$isUnix {
It 'shims robocopy when not on path' {
Mock Test-CommandAvailable { $false }
Test-CommandAvailable robocopy | Should -Be $false
@@ -283,7 +281,7 @@ Describe 'ensure_robocopy_in_path' -Tag 'Scoop' {
}
Context 'robocopy is in path' {
It 'does not shim robocopy when it is in path' -Skip:$isUnix {
It 'does not shim robocopy when it is in path' {
Mock Test-CommandAvailable { $true }
Test-CommandAvailable robocopy | Should -Be $true
+25 -24
View File
@@ -4,11 +4,8 @@
. "$PSScriptRoot\..\lib\install.ps1"
. "$PSScriptRoot\..\lib\manifest.ps1"
. "$PSScriptRoot\..\lib\versions.ps1"
. "$PSScriptRoot\..\lib\unix.ps1"
$isUnix = is_unix
Describe 'Decompression function' -Tag 'Scoop', 'Decompress' {
Describe 'Decompression function' -Tag 'Scoop', 'Windows', 'Decompress' {
BeforeAll {
$working_dir = setup_working 'decompress'
@@ -19,13 +16,17 @@ Describe 'Decompression function' -Tag 'Scoop', 'Decompress' {
return $to
}
It 'Decompression test cases should exist' {
}
Context 'Decompression test cases should exist' {
BeforeAll {
$testcases = "$working_dir\TestCases.zip"
}
It 'Test cases should exist and hash should match' {
$testcases | Should -Exist
(Get-FileHash -Path $testcases -Algorithm SHA256).Hash.ToLower() | Should -Be '791bfce192917a2ff225dcdd87d23ae5f720b20178d85e68e4b1b56139cf8e6a'
if (!$isUnix) {
Microsoft.PowerShell.Archive\Expand-Archive $testcases $working_dir
}
}
It 'Test cases should be extracted correctly' {
{ Microsoft.PowerShell.Archive\Expand-Archive -Path $testcases -DestinationPath $working_dir } | Should -Not -Throw
}
}
@@ -49,14 +50,14 @@ Describe 'Decompression function' -Tag 'Scoop', 'Decompress' {
$test6_3 = "$working_dir\7ZipTest6.part03.rar"
}
It 'extract normal compressed file' -Skip:$isUnix {
It 'extract normal compressed file' {
$to = test_extract 'Expand-7zipArchive' $test1
$to | Should -Exist
"$to\empty" | Should -Exist
(Get-ChildItem $to).Count | Should -Be 1
}
It 'extract nested compressed file' -Skip:$isUnix {
It 'extract nested compressed file' {
# file ext: tgz
$to = test_extract 'Expand-7zipArchive' $test2
$to | Should -Exist
@@ -70,28 +71,28 @@ Describe 'Decompression function' -Tag 'Scoop', 'Decompress' {
(Get-ChildItem $to).Count | Should -Be 1
}
It 'extract nested compressed file with different inner name' -Skip:$isUnix {
It 'extract nested compressed file with different inner name' {
$to = test_extract 'Expand-7zipArchive' $test4
$to | Should -Exist
"$to\empty" | Should -Exist
(Get-ChildItem $to).Count | Should -Be 1
}
It 'extract splited 7z archives (.001, .002, ...)' -Skip:$isUnix {
It 'extract splited 7z archives (.001, .002, ...)' {
$to = test_extract 'Expand-7zipArchive' $test5_1
$to | Should -Exist
"$to\empty" | Should -Exist
(Get-ChildItem $to).Count | Should -Be 1
}
It 'extract splited RAR archives (.part01.rar, .part02.rar, ...)' -Skip:$isUnix {
It 'extract splited RAR archives (.part01.rar, .part02.rar, ...)' {
$to = test_extract 'Expand-7zipArchive' $test6_1
$to | Should -Exist
"$to\dummy" | Should -Exist
(Get-ChildItem $to).Count | Should -Be 1
}
It 'works with "-Removal" switch ($removal param)' -Skip:$isUnix {
It 'works with "-Removal" switch ($removal param)' {
$test1 | Should -Exist
test_extract 'Expand-7zipArchive' $test1 $true
$test1 | Should -Not -Exist
@@ -126,21 +127,21 @@ Describe 'Decompression function' -Tag 'Scoop', 'Decompress' {
$test2 = "$working_dir\ZstdTest.tar.zst"
}
It 'extract normal compressed file' -Skip:$isUnix {
It 'extract normal compressed file' {
$to = test_extract 'Expand-ZstdArchive' $test1
$to | Should -Exist
"$to\ZstdTest" | Should -Exist
(Get-ChildItem $to).Count | Should -Be 1
}
It 'extract nested compressed file' -Skip:$isUnix {
It 'extract nested compressed file' {
$to = test_extract 'Expand-ZstdArchive' $test2
$to | Should -Exist
"$to\ZstdTest" | Should -Exist
(Get-ChildItem $to).Count | Should -Be 1
}
It 'works with "-Removal" switch ($removal param)' -Skip:$isUnix {
It 'works with "-Removal" switch ($removal param)' {
$test1 | Should -Exist
test_extract 'Expand-ZstdArchive' $test1 $true
$test1 | Should -Not -Exist
@@ -159,7 +160,7 @@ Describe 'Decompression function' -Tag 'Scoop', 'Decompress' {
$test2 = "$working_dir\MSITestNull.msi"
}
It 'extract normal MSI file' -Skip:$isUnix {
It 'extract normal MSI file' {
Mock get_config { $false }
$to = test_extract 'Expand-MsiArchive' $test1
$to | Should -Exist
@@ -167,13 +168,13 @@ Describe 'Decompression function' -Tag 'Scoop', 'Decompress' {
(Get-ChildItem "$to\MSITest").Count | Should -Be 1
}
It 'extract empty MSI file using lessmsi' -Skip:$isUnix {
It 'extract empty MSI file using lessmsi' {
Mock get_config { $true }
$to = test_extract 'Expand-MsiArchive' $test2
$to | Should -Exist
}
It 'works with "-Removal" switch ($removal param)' -Skip:$isUnix {
It 'works with "-Removal" switch ($removal param)' {
Mock get_config { $false }
$test1 | Should -Exist
test_extract 'Expand-MsiArchive' $test1 $true
@@ -192,14 +193,14 @@ Describe 'Decompression function' -Tag 'Scoop', 'Decompress' {
$test = "$working_dir\InnoTest.exe"
}
It 'extract Inno Setup file' -Skip:$isUnix {
It 'extract Inno Setup file' {
$to = test_extract 'Expand-InnoArchive' $test
$to | Should -Exist
"$to\empty" | Should -Exist
(Get-ChildItem $to).Count | Should -Be 1
}
It 'works with "-Removal" switch ($removal param)' -Skip:$isUnix {
It 'works with "-Removal" switch ($removal param)' {
$test | Should -Exist
test_extract 'Expand-InnoArchive' $test $true
$test | Should -Not -Exist
@@ -212,14 +213,14 @@ Describe 'Decompression function' -Tag 'Scoop', 'Decompress' {
$test = "$working_dir\ZipTest.zip"
}
It 'extract compressed file' -Skip:$isUnix {
It 'extract compressed file' {
$to = test_extract 'Expand-ZipArchive' $test
$to | Should -Exist
"$to\empty" | Should -Exist
(Get-ChildItem $to).Count | Should -Be 1
}
It 'works with "-Removal" switch ($removal param)' -Skip:$isUnix {
It 'works with "-Removal" switch ($removal param)' {
$test | Should -Exist
test_extract 'Expand-ZipArchive' $test $true
$test | Should -Not -Exist
+4 -7
View File
@@ -2,9 +2,6 @@
. "$PSScriptRoot\..\lib\core.ps1"
. "$PSScriptRoot\..\lib\manifest.ps1"
. "$PSScriptRoot\..\lib\install.ps1"
. "$PSScriptRoot\..\lib\unix.ps1"
$isUnix = is_unix
Describe 'appname_from_url' -Tag 'Scoop' {
It 'should extract the correct name' {
@@ -34,8 +31,8 @@ Describe 'url_remote_filename' -Tag 'Scoop' {
}
}
Describe 'is_in_dir' -Tag 'Scoop' {
It 'should work correctly' -Skip:$isUnix {
Describe 'is_in_dir' -Tag 'Scoop', 'Windows' {
It 'should work correctly' {
is_in_dir 'C:\test' 'C:\foo' | Should -BeFalse
is_in_dir 'C:\test' 'C:\test\foo\baz.zip' | Should -BeTrue
@@ -44,7 +41,7 @@ Describe 'is_in_dir' -Tag 'Scoop' {
}
}
Describe 'env add and remove path' -Tag 'Scoop' {
Describe 'env add and remove path' -Tag 'Scoop', 'Windows' {
# test data
$manifest = @{
'env_add_path' = @('foo', 'bar')
@@ -55,7 +52,7 @@ Describe 'env add and remove path' -Tag 'Scoop' {
# store the original path to prevent leakage of tests
$origPath = $env:PATH
It 'should concat the correct path' -Skip:$isUnix {
It 'should concat the correct path' {
Mock add_first_in_path {}
Mock remove_from_path {}
+1 -71
View File
@@ -1,69 +1,3 @@
if (!$script:run) { $script:run = 0 }
if (!$script:failed) { $script:failed = 0 }
function filter_tests($arg) {
if (!$arg) { return }
$script:filter = $arg -join ' '
Write-Host "filtering by '$filter'"
}
function test($desc, $assertions) {
if ($filter -and $desc -notlike "*$filter*") { return }
$script:test = $desc
$script:run++
try {
$assertions.invoke()
} catch {
script:fail $_.exception.innerexception.message
}
$script:test = $null
}
function assert($x, $eq = '__undefined', $ne = '__undefined') {
if ($args.length -gt 0) {
fail "unexpected arguments: $args"
}
if ($eq -ne '__undefined') {
if ($x -ne $eq) { fail "$(fmt $x) != $(fmt $eq)" }
} elseif ($ne -ne '__undefined') {
if ($x -eq $ne) { fail "$(fmt $x) == $(fmt $ne)" }
} else {
if (!$x) { fail "$x" }
}
}
function test_results {
$col = 'darkgreen'
$res = 'all passed'
if ($script:failed -gt 0) {
$col = 'darkred'
$res = "$script:failed failed"
}
Write-Host "ran $script:run tests, " -NoNewline
Write-Host $res -f $col
}
function script:fail($msg) {
$script:failed++
$invoked = (Get-Variable -Scope 1 myinvocation).value
$script = Split-Path $invoked.scriptname -Leaf
$line = $invoked.scriptlinenumber
if ($script:test) { $msg = "$script:test`r`n -> $msg" }
Write-Host "FAIL: $msg" -f darkred
Write-Host "$script line $line`:"
Write-Host (($invoked.positionmessage -split "`r`n")[1..2] -join "`r`n")
}
function script:fmt($var) {
if ($null -eq $var) { return "`$null" }
if ($var -is [string]) { return "'$var'" }
return $var
}
# copies fixtures to a working directory
function setup_working($name) {
$fixtures = "$PSScriptRoot/fixtures/$name"
@@ -73,11 +7,7 @@ function setup_working($name) {
}
# reset working dir
if ($PSVersionTable.Platform -eq 'Unix') {
$working_dir = "/tmp/ScoopTestFixtures/$name"
} else {
$working_dir = "$env:TEMP/ScoopTestFixtures/$name"
}
$working_dir = "$([IO.Path]::GetTempPath())ScoopTestFixtures/$name"
if (Test-Path $working_dir) {
Remove-Item -Recurse -Force $working_dir
-1
View File
@@ -1,6 +1,5 @@
#Requires -Version 5.1
Write-Host "PowerShell: $($PSVersionTable.PSVersion)"
Write-Host (7z.exe | Select-String -Pattern '7-Zip').ToString()
Write-Host 'Check and install testsuite dependencies ...'
if (Get-InstalledModule -Name Pester -MinimumVersion 4.0 -MaximumVersion 4.99 -ErrorAction SilentlyContinue) {
Write-Host 'Pester 4 is already installed.'
+29 -30
View File
@@ -10,13 +10,17 @@ $splat = @{
Path = $TestPath
PassThru = $true
}
$excludes = @()
if ($IsLinux -or $IsMacOS) {
Write-Warning 'Skipping Windows-only tests on Linux/macOS'
$excludes += 'Windows'
}
if ($env:CI -eq $true) {
Write-Host "Load 'BuildHelpers' environment variables ..."
Set-BuildEnvironment -Force
$CI_WIN = (($env:RUNNER_OS -eq 'Windows') -or ($env:CI_WINDOWS -eq $true))
$excludes = @()
$commit = $env:BHCommitHash
$commitMessage = $env:BHCommitMessage
@@ -27,11 +31,6 @@ if ($env:CI -eq $true) {
$excludes += 'Linter'
}
if (!$CI_WIN) {
Write-Warning 'Skipping tests and code linting for decompress.ps1 because they only work on Windows'
$excludes += 'Decompress'
}
$changedScripts = (Get-GitChangedFile -Include '*.ps1' -Commit $commit)
if (!$changedScripts) {
Write-Warning "Skipping tests and code linting for *.ps1 files because they didn't change"
@@ -44,9 +43,11 @@ if ($env:CI -eq $true) {
$excludes += 'Decompress'
}
if ('Decompress' -notin $excludes) {
if ('Decompress' -notin $excludes -and 'Windows' -notin $excludes) {
Write-Host 'Install decompress dependencies ...'
Write-Host (7z.exe | Select-String -Pattern '7-Zip').ToString()
$env:SCOOP_HELPERS_PATH = 'C:\projects\helpers'
if (!(Test-Path $env:SCOOP_HELPERS_PATH)) {
New-Item -ItemType Directory -Path $env:SCOOP_HELPERS_PATH
@@ -83,10 +84,6 @@ if ($env:CI -eq $true) {
}
}
if ($excludes.Length -gt 0) {
$splat.ExcludeTag = $excludes
}
# Display CI environment variables
$buildVariables = ( Get-ChildItem -Path 'Env:' ).Where( { $_.Name -match '^(?:BH|CI(?:_|$)|APPVEYOR|GITHUB_|RUNNER_|SCOOP_)' } )
$buildVariables += ( Get-Variable -Name 'CI_*' -Scope 'Script' )
@@ -97,24 +94,26 @@ if ($env:CI -eq $true) {
Out-String
Write-Host 'CI variables:'
Write-Host $details -ForegroundColor DarkGray
# AppVeyor
if ($env:BHBuildSystem -eq "AppVeyor") {
$resultsXml = "$PSScriptRoot\TestResults.xml"
$splat += @{
OutputFile = $resultsXml
OutputFormat = 'NUnitXML'
}
Write-Host 'Invoke-Pester' @splat
$result = Invoke-Pester @splat
(New-Object Net.WebClient).UploadFile("https://ci.appveyor.com/api/testresults/nunit/$($env:APPVEYOR_JOB_ID)", $resultsXml)
exit $result.FailedCount
}
}
# GitHub Actions / Local
Write-Host 'Invoke-Pester' @splat
$result = Invoke-Pester @splat
if ($excludes.Length -gt 0) {
$splat.ExcludeTag = $excludes
}
if ($env:BHBuildSystem -eq 'AppVeyor') {
# AppVeyor
$resultsXml = "$PSScriptRoot\TestResults.xml"
$splat += @{
OutputFile = $resultsXml
OutputFormat = 'NUnitXML'
}
Write-Host 'Invoke-Pester' @splat
$result = Invoke-Pester @splat
(New-Object Net.WebClient).UploadFile("https://ci.appveyor.com/api/testresults/nunit/$($env:APPVEYOR_JOB_ID)", $resultsXml)
} else {
# GitHub Actions / Local
Write-Host 'Invoke-Pester' @splat
$result = Invoke-Pester @splat
}
exit $result.FailedCount