2026-07-10 02:27:47 +01:00
param (
[ string ] $AetheriaRoot = " E:\Projects\Aetheria " ,
[ string ] $UnityExe = " C:\Program Files\Unity\Hub\Editor\6000.4.2f1\Editor\Unity.exe " ,
[ string ] $OutputRoot = " artifacts\aetheria-consumer "
)
$ErrorActionPreference = " Stop "
$repoRoot = Split-Path -Parent $PSScriptRoot
$packageRoot = Join-Path $repoRoot " packages\org.gamecult.eve.unity-scene "
$manifestPath = Join-Path $AetheriaRoot " Packages\manifest.json "
$output = if ( [ System.IO.Path ] :: IsPathRooted ( $OutputRoot ) ) {
$OutputRoot
} else {
Join-Path $repoRoot $OutputRoot
}
foreach ( $required in @ ( $packageRoot , $manifestPath , $UnityExe ) ) {
if ( -not ( Test-Path -LiteralPath $required ) ) {
throw " Required EveUnity consumer-test path not found: $required "
}
}
$stamp = Get-Date -Format " yyyyMMddTHHmmss "
$runRoot = Join-Path $output $stamp
New-Item -ItemType Directory -Force -Path $runRoot | Out-Null
$resultsPath = Join-Path $runRoot " unity-editmode-results.xml "
$logPath = Join-Path $runRoot " unity-editmode.log "
$originalManifest = Get-Content -Raw -LiteralPath $manifestPath
try {
$manifest = $originalManifest | ConvertFrom-Json
2026-07-10 02:30:06 +01:00
$manifestUri = [ Uri ] ( ( $AetheriaRoot . TrimEnd ( '\\' ) + '\\' ) )
$packageUri = [ Uri ] ( ( $packageRoot . TrimEnd ( '\\' ) + '\\' ) )
$relativePackageRoot = [ Uri ] :: UnescapeDataString (
$manifestUri . MakeRelativeUri ( $packageUri ) . ToString ( ) ) . TrimEnd ( '/' )
$dependency = " file: " + ( $relativePackageRoot -replace '\\' , '/' )
2026-07-10 02:27:47 +01:00
$manifest . dependencies . 'org.gamecult.eve.unity-scene' = $dependency
$testables = @ ( $manifest . testables ) | Where-Object { $_ }
if ( $testables -notcontains 'org.gamecult.eve.unity-scene' ) {
$testables + = 'org.gamecult.eve.unity-scene'
}
if ( $manifest . PSObject . Properties . Name -contains 'testables' ) {
$manifest . testables = $testables
} else {
$manifest | Add-Member -NotePropertyName testables -NotePropertyValue $testables
}
$manifest | ConvertTo-Json -Depth 32 | Set-Content -LiteralPath $manifestPath
$arguments = @ (
'-batchmode' ,
'-projectPath' , $AetheriaRoot ,
'-runTests' ,
'-testPlatform' , 'EditMode' ,
'-assemblyNames' , 'GameCult.Eve.UnityScene.Tests' ,
'-testResults' , $resultsPath ,
'-logFile' , $logPath
)
$process = Start-Process -FilePath $UnityExe -ArgumentList $arguments -Wait -PassThru -WindowStyle Hidden
if ( $process . ExitCode -ne 0 ) {
if ( Test-Path -LiteralPath $logPath ) {
Get-Content -LiteralPath $logPath -Tail 120
}
throw " EveUnity consumer tests failed with exit code $( $process . ExitCode ) "
}
} finally {
Set-Content -NoNewline -LiteralPath $manifestPath -Value $originalManifest
}
[ xml ] $results = Get-Content -Raw -LiteralPath $resultsPath
$run = $results . SelectSingleNode ( '//test-run' )
if ( $null -eq $run -or [ int ] $run . failed -gt 0 ) {
throw " EveUnity consumer tests did not pass: $resultsPath "
}
Write-Host " EveUnity consumer tests: $( $run . passed ) passed, $( $run . total ) total "
Write-Host " Results: $resultsPath "