Files
msime-windows/tests/server-test-entrypoints.ps1

56 lines
3.5 KiB
PowerShell

# Run the actual helpers from a moved checkout. Native commands are synthetic;
# no Server process, installed user data, microphone, signing or registration.
$ErrorActionPreference = 'Stop'
Set-StrictMode -Version Latest
$source = (Resolve-Path (Join-Path $PSScriptRoot '..')).Path
$fixture = Join-Path ([IO.Path]::GetTempPath()) ('msime test helpers ' + [Guid]::NewGuid())
$originalLocation = Get-Location
try {
$scripts = Join-Path $fixture 'server/tests/scripts'
New-Item -ItemType Directory -Force $scripts | Out-Null
Copy-Item (Join-Path $source 'server/tests/scripts/*.ps1') $scripts
function global:cmake {
$global:MsimeTestCalls.Add(@{ tool = 'cmake'; arguments = @($args); location = (Get-Location).Path })
$global:LASTEXITCODE = if ($global:MsimeTestCalls.Count -eq $global:MsimeTestFailAt) { 17 } else { 0 }
}
function global:ctest {
$global:MsimeTestCalls.Add(@{ tool = 'ctest'; arguments = @($args); location = (Get-Location).Path })
$global:LASTEXITCODE = if ($global:MsimeTestCalls.Count -eq $global:MsimeTestFailAt) { 17 } else { 0 }
}
Set-Location $fixture
foreach ($configuration in @('Debug', 'Release')) {
$build = Join-Path $fixture $(if ($configuration -eq 'Release') { 'server/build-release' } else { 'server/build' })
$preset = if ($configuration -eq 'Release') { 'default-release' } else { 'default' }
foreach ($failure in @(0, 1, 2, 3)) {
$global:MsimeTestCalls = [Collections.Generic.List[object]]::new()
$global:MsimeTestFailAt = $failure
$rejected = $false
try { & (Join-Path $scripts 'llaunch.ps1') -Configuration $configuration }
catch { $rejected = $_.Exception.Message -match 'Server test(s| configure| build) failed \(17\)' }
if ($rejected -ne ($failure -ne 0)) { throw "Wrong failure result at stage $failure ($configuration)" }
$expectedCount = if ($failure -eq 0) { 3 } else { $failure }
if ($global:MsimeTestCalls.Count -ne $expectedCount) { throw 'Continued after failure or skipped a stage' }
if ((Get-Location).Path -ne $fixture) { throw 'Changed the caller working directory' }
if ($failure -ne 0) { continue }
$configure, $compile, $test = $global:MsimeTestCalls
if ($configure.location -ne (Join-Path $fixture 'server') -or
($configure.arguments -join '|') -ne "--preset=$preset|-DBUILD_TESTING=ON") {
throw 'Configured the obsolete standalone tests project'
}
if (($compile.arguments -join '|') -ne "--build|$build|--config|$configuration|--target|MetasequoiaImeServerTests|test_webview_contract") {
throw 'Did not build both registered tests in the parent Server tree'
}
if ($test.tool -ne 'ctest' -or ($test.arguments -join '|') -ne "--test-dir|$build|-C|$configuration|--output-on-failure|--no-tests=error|--timeout|120") {
throw 'Did not run the matching CTest registry with empty-test rejection'
}
}
}
$global:LASTEXITCODE = 0
Write-Host 'Debug/Release test helpers resolve the Server project and propagate every failure'
} finally {
Set-Location $originalLocation
Remove-Item Function:/cmake, Function:/ctest -ErrorAction SilentlyContinue
Remove-Variable MsimeTestCalls, MsimeTestFailAt -Scope Global -ErrorAction SilentlyContinue
if (Test-Path $fixture) { Remove-Item $fixture -Recurse -Force }
}