Files
ARCADIA-Studio/harness/experiments/scenario-label-measurement-20260913/run-font-version-test.ps1
T

51 lines
3.1 KiB
PowerShell

# Runs an ALREADY BUILT desktop test executable. This script never invokes Cargo.
# Supply the matching runtime DLL environment prepared by the compiler owner.
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)][string]$TestExecutable,
[Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-fA-F]{64}$')][string]$ExpectedSha256,
[Parameter(Mandatory=$true)][string]$RunDirectory,
[ValidateSet('behavior::scenario_label::tests::actual_font_load_rejects_retained_label_and_old_session', 'scenario_label::tests::actual_font_load_rejects_retained_label_and_old_session')]
[string]$TestName = 'behavior::scenario_label::tests::actual_font_load_rejects_retained_label_and_old_session'
)
$ErrorActionPreference = 'Stop'
$fontTestName = $TestName
$fontTestExe = (Resolve-Path -LiteralPath $TestExecutable).Path
$fontTestHash = (Get-FileHash -LiteralPath $fontTestExe -Algorithm SHA256).Hash
if ($fontTestHash -ne $ExpectedSha256) { throw 'Test executable SHA256 differs from the supplied compiler receipt' }
if (Test-Path -LiteralPath $RunDirectory) { throw 'Use a fresh evidence directory; refusing to overwrite a previous run' }
$fontTestOutput = (New-Item -ItemType Directory -Path $RunDirectory).FullName
# Listing is a separate process and runs no test. Refuse zero/multiple matches
# before launching the one process that will mutate global font state.
$fontTestList = & $fontTestExe --list --ignored --exact $fontTestName 2>&1
$fontTestListExit = $LASTEXITCODE
$fontTestListText = $fontTestList | Out-String
$fontTestListText | Set-Content -LiteralPath (Join-Path $fontTestOutput 'selection.log') -Encoding utf8
$fontTestSelected = $fontTestListExit -eq 0 -and
$fontTestListText -match ('(?m)^' + [regex]::Escape($fontTestName) + ': test\s*$') -and
$fontTestListText -match '(?m)^1 test, 0 benchmarks\s*$'
if (-not $fontTestSelected) { throw 'The exact ignored-test selection did not list exactly one test; inspect selection.log' }
# Fresh dedicated executable invocation; no normal/other ignored test is chosen.
$fontTestStarted = (Get-Date).ToUniversalTime().ToString('o')
$fontTestRun = & $fontTestExe --ignored --exact $fontTestName --nocapture --test-threads=1 2>&1
$fontTestExit = $LASTEXITCODE
$fontTestRunText = $fontTestRun | Out-String
$fontTestRunText | Set-Content -LiteralPath (Join-Path $fontTestOutput 'test.log') -Encoding utf8
$fontTestPassed = $fontTestExit -eq 0 -and
$fontTestRunText -match 'test result: ok\. 1 passed; 0 failed; 0 ignored;'
@{
test = $fontTestName
executable = $fontTestExe
sha256 = $fontTestHash
exactSelection = $fontTestSelected
startedUtc = $fontTestStarted
finishedUtc = (Get-Date).ToUniversalTime().ToString('o')
exitCode = $fontTestExit
passedExactlyOne = $fontTestPassed
scope = 'Actual global font Version invalidation and artifact rejection; no WGPU dynamic cache recovery claim'
} | ConvertTo-Json | Set-Content -LiteralPath (Join-Path $fontTestOutput 'receipt.json') -Encoding utf8
Write-Output $fontTestRunText
if (-not $fontTestPassed) { throw 'Isolated font-version test did not pass exactly one test; inspect test.log and receipt.json' }