58 lines
2.9 KiB
PowerShell
58 lines
2.9 KiB
PowerShell
[CmdletBinding()]
|
|
param([string] $InnoCompiler)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
Set-StrictMode -Version Latest
|
|
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
|
|
$OutputEncoding = [Console]::OutputEncoding
|
|
|
|
$repo = (Resolve-Path (Join-Path $PSScriptRoot '..\..')).Path
|
|
if ([string]::IsNullOrWhiteSpace($InnoCompiler)) {
|
|
$InnoCompiler = Join-Path $env:LOCALAPPDATA 'Programs\Inno Setup 6\ISCC.exe'
|
|
}
|
|
if (-not (Test-Path -LiteralPath $InnoCompiler -PathType Leaf)) {
|
|
throw "Inno Setup compiler not found: $InnoCompiler"
|
|
}
|
|
$fixture = Join-Path $PSScriptRoot 'installer-migration-fixture.iss'
|
|
$root = Join-Path $repo ('tmp\installer-migration-' + [guid]::NewGuid().ToString('N'))
|
|
New-Item -ItemType Directory -Path $root | Out-Null
|
|
$previousTemp = $env:TEMP
|
|
$previousTmp = $env:TMP
|
|
try {
|
|
$env:TEMP = $root
|
|
$env:TMP = $root
|
|
$target = Join-Path $root 'link-target'
|
|
New-Item -ItemType Directory -Path $target | Out-Null
|
|
[System.IO.File]::WriteAllText((Join-Path $target 'nebula.exe'), 'fixture data')
|
|
New-Item -ItemType Junction -Path (Join-Path $root 'linked-install') -Target $target | Out-Null
|
|
& $InnoCompiler '/Q' "/DFixtureRoot=$root" "/O$root" $fixture
|
|
if ($LASTEXITCODE -ne 0) { throw 'Migration fixture compilation failed.' }
|
|
$executable = Join-Path $root 'installer-migration-fixture.exe'
|
|
$process = Start-Process -FilePath $executable -ArgumentList @(
|
|
'/VERYSILENT', '/SUPPRESSMSGBOXES', "/LOG=`"$(Join-Path $root 'setup.log')`""
|
|
) -Wait -PassThru
|
|
# InitializeSetup returns false before any install, registry, shortcut or PATH actions.
|
|
$reportPath = Join-Path $root 'result.txt'
|
|
if (-not (Test-Path -LiteralPath $reportPath)) {
|
|
throw "Migration fixture did not produce a report (exit $($process.ExitCode)); see $root"
|
|
}
|
|
$report = Get-Content -LiteralPath $reportPath -Raw -Encoding UTF8
|
|
if (-not $report.StartsWith('PASS: ')) { throw "$report; see $root" }
|
|
Write-Output "installer-migration.tests.ps1: $report"
|
|
$payload = Join-Path $root 'syntax-payload'
|
|
$syntaxOutput = Join-Path $root 'syntax-only-do-not-install'
|
|
New-Item -ItemType Directory -Path $payload, $syntaxOutput | Out-Null
|
|
foreach ($name in @('pebrel.exe', 'pebrel-hook.exe', 'conpty.dll', 'OpenConsole.exe')) {
|
|
[System.IO.File]::WriteAllText((Join-Path $payload $name), 'Syntax fixture, not a runtime executable.')
|
|
}
|
|
& $InnoCompiler '/Q' '/DAppVersion=0.0.0' '/DNumericVersion=0.0.0.0' `
|
|
'/DPackageBrand=PebrelInstallerSyntaxFixture' "/DBuildRoot=$payload" "/O$syntaxOutput" `
|
|
(Join-Path $repo 'scripts\installer.iss')
|
|
if ($LASTEXITCODE -ne 0) { throw 'Full installer syntax compilation failed.' }
|
|
Write-Output 'installer-migration.tests.ps1: full installer compilation PASS (not executed)'
|
|
Write-Output "Fixture evidence: $root"
|
|
} finally {
|
|
$env:TEMP = $previousTemp
|
|
$env:TMP = $previousTmp
|
|
}
|