Prove EveUnity scene EditMode lifecycle
This commit is contained in:
parent
028042009e
commit
881282dd50
34 changed files with 221 additions and 42 deletions
|
|
@ -550,16 +550,20 @@ Recently cut:
|
|||
`interactiveWorldSurfaces[]` records. The Aetheria consumer smoke asserts the
|
||||
advertised web, Unity UI Toolkit, and Unity scene lowering targets without
|
||||
importing Aetheria or Eve internals.
|
||||
- EveUnity test lifecycle now carries a structured Unity EditMode runner
|
||||
contract. `packages/org.gamecult.eve.unity-uitoolkit/eve-runtime-capability.json`
|
||||
names the runner script, consumer Unity project, default Unity editor path,
|
||||
package name, test assembly, platform, result artifacts, and temporary
|
||||
`testables` manifest mutation. The lifecycle smoke validates the runner
|
||||
script and Aetheria project, parity compares the contract against the ledger,
|
||||
and the runtime-owner consumer smoke asserts exported test fields. This is
|
||||
Unity package consumption proof for CultLib-produced assemblies; the test
|
||||
contract names those CultLib-owned NuGet/precompiled assembly inputs
|
||||
explicitly. CultLib remains the owner of the .NET/NuGet dependency story.
|
||||
- EveUnity test lifecycle now carries structured Unity EditMode runner
|
||||
contracts. `packages/org.gamecult.eve.unity-uitoolkit/eve-runtime-capability.json`
|
||||
and `runtimes/incubating/eve-unity-scene/eve-runtime-capability.json` name
|
||||
runner scripts, the Aetheria consumer Unity project, package names, test
|
||||
assemblies, platform, result artifacts, and temporary `testables` manifest
|
||||
mutation. The shared runner restores Aetheria's `Packages/manifest.json`
|
||||
after each run, while `scripts/run-aetheria-unity-scene-editmode-tests.ps1`
|
||||
selects `org.gamecult.eve.unity-scene` and
|
||||
`GameCult.Eve.UnityScene.Tests`. Lifecycle smokes validate the runner scripts
|
||||
and Aetheria project, parity compares the contracts against the ledger, and
|
||||
runtime-owner consumer smoke asserts exported test fields. UI Toolkit still
|
||||
carries the CultLib-managed precompiled assembly dependency proof; Unity
|
||||
Scene now carries a generic playable-world EditMode proof through the real
|
||||
Aetheria consumer project.
|
||||
- EveUnity release lifecycle now carries a structured UPM release contract.
|
||||
`packages/org.gamecult.eve.unity-uitoolkit/eve-runtime-capability.json`
|
||||
names the package root, version source, tag pattern, artifact kind, and
|
||||
|
|
@ -973,6 +977,15 @@ Recently cut:
|
|||
resolves those assemblies after it leaves Eve incubation, not inventing a
|
||||
dependency system for CultLib. This proves the incubating test lifecycle; it
|
||||
does not make Eve own Unity's final runtime lifecycle.
|
||||
- Aetheria now has the same repeatable Unity EditMode evidence for the
|
||||
EveUnity scene runtime. `scripts/run-aetheria-unity-scene-editmode-tests.ps1`
|
||||
temporarily adds `org.gamecult.eve.unity-scene` to Aetheria's Unity
|
||||
`testables`, runs `GameCult.Eve.UnityScene.Tests`, writes XML and log
|
||||
artifacts under `artifacts/aetheria-unity-scene-editmode`, and restores
|
||||
`Packages/manifest.json`. This proves the generic playable-world host,
|
||||
bootstrap, input, camera, scene sink, and command-envelope tests compile and
|
||||
run through the Aetheria consumer project without making the Unity client
|
||||
Aetheria-specific.
|
||||
- Aetheria now has repeatable Unity package consumer-build evidence for the
|
||||
Eve UI Toolkit runtime. `scripts/run-aetheria-unity-package-smoke.ps1`
|
||||
verifies Aetheria's Unity `Packages/manifest.json` consumes Eve's surface and
|
||||
|
|
|
|||
|
|
@ -425,6 +425,17 @@ The exported runtime lifecycle records that runner contract so EveUnity can
|
|||
inherit the Unity-specific test proof without making Eve responsible for
|
||||
CultLib package distribution.
|
||||
|
||||
Unity scene EditMode test smoke:
|
||||
|
||||
```powershell
|
||||
powershell -ExecutionPolicy Bypass -File .\scripts\run-aetheria-unity-scene-editmode-tests.ps1
|
||||
```
|
||||
|
||||
That wrapper uses the same manifest-restore runner, but selects
|
||||
`org.gamecult.eve.unity-scene` and `GameCult.Eve.UnityScene.Tests`. It proves
|
||||
the generic playable-world Unity client body through the Aetheria consumer
|
||||
project while keeping Aetheria as provider authority.
|
||||
|
||||
Unity runtime lifecycle evidence:
|
||||
|
||||
`packages/org.gamecult.eve.unity-uitoolkit/eve-runtime-capability.json`
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d6c655fae0c77064490eba9c3ed1fb4c
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d50f4f5a379d8ab4ba6217c2af18ded0
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
runtimes/incubating/eve-unity-scene/Runtime.meta
Normal file
8
runtimes/incubating/eve-unity-scene/Runtime.meta
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1ed3bb976c01b68498f8da912b8ddf2d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e924fe3501e6e584392cb405f916c9c9
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0a1f1e9cabc1b044dbf58bc878a6d09a
|
||||
|
|
@ -131,6 +131,7 @@ namespace GameCult.Eve.UnityScene
|
|||
}
|
||||
|
||||
var cameraObject = new GameObject("Eve Unity Playable World Camera");
|
||||
cameraObject.transform.SetParent(transform, false);
|
||||
cameraObject.AddComponent<Camera>();
|
||||
cameraTransform = cameraObject.transform;
|
||||
return cameraTransform;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using GameCult.Eve.Surface;
|
||||
using UnityEngine;
|
||||
|
||||
|
|
@ -172,15 +173,16 @@ namespace GameCult.Eve.UnityScene
|
|||
|
||||
private void RefreshProviderSources()
|
||||
{
|
||||
RefreshProvider(providerSurfaceDocuments);
|
||||
RefreshProvider(assetManifestDocuments);
|
||||
RefreshProvider(receiptSource);
|
||||
RefreshProvider(commandSink);
|
||||
var refreshed = new HashSet<MonoBehaviour>();
|
||||
RefreshProvider(providerSurfaceDocuments, refreshed);
|
||||
RefreshProvider(assetManifestDocuments, refreshed);
|
||||
RefreshProvider(receiptSource, refreshed);
|
||||
RefreshProvider(commandSink, refreshed);
|
||||
}
|
||||
|
||||
private static void RefreshProvider(MonoBehaviour? behaviour)
|
||||
private static void RefreshProvider(MonoBehaviour? behaviour, ISet<MonoBehaviour> refreshed)
|
||||
{
|
||||
if (behaviour is IEveUnityProviderRefreshSource refreshSource)
|
||||
if (behaviour is IEveUnityProviderRefreshSource refreshSource && refreshed.Add(behaviour))
|
||||
refreshSource.Refresh();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3b46f9972e945ca4daa29473de0bfb9b
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1df1c82e51d1ee04c96247cdff61101a
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9323e6fa0b61837499fa84b30e597e92
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d2b8fac8eb072f8419afa594928840ef
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9e93e937d561d4941b5080a454091f7a
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 32422132e752b9a4f8a45b2a5cb01217
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a5b5eeaa1ac2b24409cf4718616ebbe3
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: bbe1659cc5c50ff4e9ab6f2ef0ed82c3
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: fc79e8d0b375f3d41ad7809e2129ca6c
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0184a5155baa9774f9ed133ad871b735
|
||||
8
runtimes/incubating/eve-unity-scene/Tests.meta
Normal file
8
runtimes/incubating/eve-unity-scene/Tests.meta
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b37c64ab7abc96a468018e86c041d431
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
runtimes/incubating/eve-unity-scene/Tests/Editor.meta
Normal file
8
runtimes/incubating/eve-unity-scene/Tests/Editor.meta
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ac7339c6ff81f6f48864df2308ebeed2
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -423,7 +423,7 @@ namespace GameCult.Eve.UnityScene.Tests
|
|||
var bootstrap = hostObject.AddComponent<EveUnityPlayableWorldClientBootstrap>();
|
||||
bootstrap.ConfigureProvider(provider);
|
||||
|
||||
hostObject.SetActive(true);
|
||||
bootstrap.Mount();
|
||||
|
||||
Assert.That(bootstrap.Host, Is.Not.Null);
|
||||
Assert.That(bootstrap.Host!.ActiveWorld, Is.Not.Null);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d2b3006d5699924498750dbf5f087435
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 10e7994adb919944aadc88f960300bc4
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -162,18 +162,18 @@
|
|||
},
|
||||
"test": {
|
||||
"ownerRepo": "EveUnity",
|
||||
"status": "provider-shell-contract-skeleton",
|
||||
"status": "unity-scene-editmode-batchmode",
|
||||
"testContract": {
|
||||
"ownerRepo": "EveUnity",
|
||||
"runnerKind": "unity-scene-provider-shell-smoke",
|
||||
"runnerScript": "scripts/run-eveunity-scene-provider-shell-smoke.ps1",
|
||||
"runnerKind": "unity-editmode-batchmode",
|
||||
"runnerScript": "scripts/run-aetheria-unity-scene-editmode-tests.ps1",
|
||||
"consumerProject": "E:\\Projects\\Aetheria",
|
||||
"packageName": "org.gamecult.eve.unity-scene",
|
||||
"testAssembly": "GameCult.Eve.UnityScene.Tests",
|
||||
"testPlatform": "EditMode contract skeleton",
|
||||
"resultsArtifact": "artifacts/eveunity-scene-provider-shell/{stamp}/provider-shell-results.json",
|
||||
"logArtifact": "artifacts/eveunity-scene-provider-shell/{stamp}/provider-shell.log",
|
||||
"manifestMutation": "None; the scene lowerer consumes provider advertisements and must not mutate provider product manifests."
|
||||
"testPlatform": "EditMode",
|
||||
"resultsArtifact": "artifacts/aetheria-unity-scene-editmode/{stamp}/unity-editmode-results.xml",
|
||||
"logArtifact": "artifacts/aetheria-unity-scene-editmode/{stamp}/unity-editmode.log",
|
||||
"manifestMutation": "Temporarily adds org.gamecult.eve.unity-scene to Aetheria Unity testables, runs GameCult.Eve.UnityScene.Tests, and restores Packages/manifest.json."
|
||||
},
|
||||
"evidencePaths": [
|
||||
"runtimes/incubating/eve-unity-scene/package.json",
|
||||
|
|
@ -198,10 +198,12 @@
|
|||
"runtimes/incubating/eve-unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs",
|
||||
"runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json",
|
||||
"scripts/run-eveunity-scene-split-handoff-smoke.ps1",
|
||||
"scripts/run-eveunity-scene-provider-shell-smoke.ps1"
|
||||
"scripts/run-eveunity-scene-provider-shell-smoke.ps1",
|
||||
"scripts/run-aetheria-unity-editmode-tests.ps1",
|
||||
"scripts/run-aetheria-unity-scene-editmode-tests.ps1"
|
||||
],
|
||||
"pendingProofs": [
|
||||
"Unity scene provider-advertisement smoke runs from EveUnity with real Unity scene/frame objects and no Aetheria imports.",
|
||||
"Unity scene EditMode runner is owned by EveUnity rather than Eve incubation.",
|
||||
"Live CultMesh/CultNet provider subscription adapter implements IEveUnitySceneProviderSurfaceDocumentSource/IEveUnitySceneProviderSurfaceSource and feeds EveUnitySceneClientSession snapshots from provider-owned documents instead of Eve-local fixture documents."
|
||||
]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 16a73a75d0939424bad58c752f0f8a3e
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0a5262acca13bee44bb5cac30a93f8dd
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
7
runtimes/incubating/eve-unity-scene/package.json.meta
Normal file
7
runtimes/incubating/eve-unity-scene/package.json.meta
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 8eaedcd0b70a6574c8ddb12c84b444a5
|
||||
PackageManifestImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -1,7 +1,9 @@
|
|||
param(
|
||||
[string] $AetheriaRoot = "E:\Projects\Aetheria",
|
||||
[string] $UnityExe = "C:\Program Files\Unity\Hub\Editor\6000.4.2f1\Editor\Unity.exe",
|
||||
[string] $OutputRoot = ""
|
||||
[string] $OutputRoot = "",
|
||||
[string] $PackageName = "org.gamecult.eve.unity-uitoolkit",
|
||||
[string] $TestAssembly = "GameCult.Eve.UnityUIToolkit.Tests"
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
|
@ -10,6 +12,12 @@ $eveRoot = Split-Path -Parent $PSScriptRoot
|
|||
if ([string]::IsNullOrWhiteSpace($OutputRoot)) {
|
||||
$OutputRoot = Join-Path $eveRoot "artifacts\aetheria-unity-editmode"
|
||||
}
|
||||
if ([string]::IsNullOrWhiteSpace($PackageName)) {
|
||||
throw "Unity EditMode package name must not be empty"
|
||||
}
|
||||
if ([string]::IsNullOrWhiteSpace($TestAssembly)) {
|
||||
throw "Unity EditMode test assembly must not be empty"
|
||||
}
|
||||
|
||||
if (-not (Test-Path -LiteralPath $AetheriaRoot)) {
|
||||
throw "Aetheria repo not found: $AetheriaRoot"
|
||||
|
|
@ -29,7 +37,6 @@ New-Item -ItemType Directory -Force -Path $runRoot | Out-Null
|
|||
|
||||
$resultsPath = Join-Path $runRoot "unity-editmode-results.xml"
|
||||
$logPath = Join-Path $runRoot "unity-editmode.log"
|
||||
$packageName = "org.gamecult.eve.unity-uitoolkit"
|
||||
|
||||
$originalManifest = Get-Content -Raw -LiteralPath $manifestPath
|
||||
$manifestRestored = $false
|
||||
|
|
@ -43,9 +50,12 @@ function Restore-Manifest {
|
|||
|
||||
try {
|
||||
$manifest = $originalManifest | ConvertFrom-Json
|
||||
$testables = @($manifest.testables)
|
||||
if ($testables -notcontains $packageName) {
|
||||
$testables += $packageName
|
||||
$testables = @()
|
||||
if ($null -ne $manifest.testables) {
|
||||
$testables = @($manifest.testables) | Where-Object { $null -ne $_ -and -not [string]::IsNullOrWhiteSpace([string] $_) }
|
||||
}
|
||||
if ($testables -notcontains $PackageName) {
|
||||
$testables += $PackageName
|
||||
if ($manifest.PSObject.Properties.Name -contains "testables") {
|
||||
$manifest.testables = $testables
|
||||
} else {
|
||||
|
|
@ -59,7 +69,7 @@ try {
|
|||
"-projectPath", $AetheriaRoot,
|
||||
"-runTests",
|
||||
"-testPlatform", "EditMode",
|
||||
"-assemblyNames", "GameCult.Eve.UnityUIToolkit.Tests",
|
||||
"-assemblyNames", $TestAssembly,
|
||||
"-testResults", $resultsPath,
|
||||
"-logFile", $logPath
|
||||
)
|
||||
|
|
@ -94,6 +104,6 @@ if ($failed -gt 0) {
|
|||
throw "Unity EditMode tests failed: $failed failed, $passed passed, $total total. Results: $resultsPath"
|
||||
}
|
||||
|
||||
Write-Host "Unity EditMode tests passed: $passed passed, $total total"
|
||||
Write-Host "Unity EditMode tests passed for ${TestAssembly}: $passed passed, $total total"
|
||||
Write-Host "Unity EditMode results: $resultsPath"
|
||||
Write-Host "Unity EditMode log: $logPath"
|
||||
|
|
|
|||
19
scripts/run-aetheria-unity-scene-editmode-tests.ps1
Normal file
19
scripts/run-aetheria-unity-scene-editmode-tests.ps1
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
param(
|
||||
[string] $AetheriaRoot = "E:\Projects\Aetheria",
|
||||
[string] $UnityExe = "C:\Program Files\Unity\Hub\Editor\6000.4.2f1\Editor\Unity.exe",
|
||||
[string] $OutputRoot = ""
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$eveRoot = Split-Path -Parent $PSScriptRoot
|
||||
if ([string]::IsNullOrWhiteSpace($OutputRoot)) {
|
||||
$OutputRoot = Join-Path $eveRoot "artifacts\aetheria-unity-scene-editmode"
|
||||
}
|
||||
|
||||
& (Join-Path $PSScriptRoot "run-aetheria-unity-editmode-tests.ps1") `
|
||||
-AetheriaRoot $AetheriaRoot `
|
||||
-UnityExe $UnityExe `
|
||||
-OutputRoot $OutputRoot `
|
||||
-PackageName "org.gamecult.eve.unity-scene" `
|
||||
-TestAssembly "GameCult.Eve.UnityScene.Tests"
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
param(
|
||||
[string] $CapabilityManifestPath = "runtimes\incubating\eve-unity-scene\eve-runtime-capability.json"
|
||||
[string] $CapabilityManifestPath = "runtimes\incubating\eve-unity-scene\eve-runtime-capability.json",
|
||||
[switch] $RunUnityEditMode
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
|
@ -39,7 +40,7 @@ if ($manifest.incubation.splitHandoff.manifestPath -ne "runtimes/incubating/eve-
|
|||
throw "EveUnity scene manifest missing split handoff path"
|
||||
}
|
||||
|
||||
foreach ($feature in @("providerAdvertisements", "commandTransport", "providerSurfaceSession", "providerSurfaceSource", "providerSurfaceDocumentSource", "livePlayableWorldClient", "providerCommandReceipts", "providerAssetManifestDocumentSource", "sceneGraphProjection", "playableWorldProjection", "playableWorldRuntimeHost", "playableWorldScenePresentation", "unityGameObjectSceneSink", "providerAssetManifestResolution", "providerAssetManifestSource", "embeddedDocuments")) {
|
||||
foreach ($feature in @("providerAdvertisements", "commandTransport", "providerSurfaceSession", "providerSurfaceSource", "providerSurfaceDocumentSource", "livePlayableWorldClient", "providerCommandReceipts", "providerAssetManifestDocumentSource", "playableWorldClientHost", "playableWorldClientBootstrap", "playableWorldInputDriver", "playableWorldCameraRig", "sceneGraphProjection", "playableWorldProjection", "playableWorldRuntimeHost", "playableWorldScenePresentation", "unityGameObjectSceneSink", "providerAssetManifestResolution", "providerAssetManifestSource", "embeddedDocuments")) {
|
||||
if (-not (@($manifest.supportedFeatures) -contains $feature)) {
|
||||
throw "EveUnity scene manifest missing provider-shell feature: $feature"
|
||||
}
|
||||
|
|
@ -182,6 +183,18 @@ foreach ($field in @("ownerRepo", "runnerKind", "runnerScript", "consumerProject
|
|||
throw "EveUnity scene test contract missing $field"
|
||||
}
|
||||
}
|
||||
if ($testContract.runnerKind -ne "unity-editmode-batchmode") {
|
||||
throw "EveUnity scene test contract has unexpected runner kind: $($testContract.runnerKind)"
|
||||
}
|
||||
if ($testContract.packageName -ne "org.gamecult.eve.unity-scene") {
|
||||
throw "EveUnity scene test contract has unexpected package name: $($testContract.packageName)"
|
||||
}
|
||||
if ($testContract.testAssembly -ne "GameCult.Eve.UnityScene.Tests") {
|
||||
throw "EveUnity scene test contract has unexpected test assembly: $($testContract.testAssembly)"
|
||||
}
|
||||
if ($testContract.testPlatform -ne "EditMode") {
|
||||
throw "EveUnity scene test contract has unexpected test platform: $($testContract.testPlatform)"
|
||||
}
|
||||
foreach ($pathProperty in @("runnerScript", "consumerProject")) {
|
||||
$candidate = $testContract.$pathProperty
|
||||
$absolutePath = if ([System.IO.Path]::IsPathRooted($candidate)) {
|
||||
|
|
@ -193,6 +206,12 @@ foreach ($pathProperty in @("runnerScript", "consumerProject")) {
|
|||
throw "EveUnity scene test contract $pathProperty does not exist: $candidate"
|
||||
}
|
||||
}
|
||||
$runnerSource = Get-Content -LiteralPath (Join-Path $projectRoot $testContract.runnerScript) -Raw
|
||||
foreach ($expectedText in @($testContract.packageName, $testContract.testAssembly, "run-aetheria-unity-editmode-tests.ps1")) {
|
||||
if (-not $runnerSource.Contains($expectedText)) {
|
||||
throw "EveUnity scene test runner script missing expected text: $expectedText"
|
||||
}
|
||||
}
|
||||
|
||||
$captureContract = $manifest.lifecycle.capture.captureContract
|
||||
foreach ($field in @("ownerRepo", "runtimeId", "targetId", "requestSchema", "requestBuilder", "advertisementPath", "captureKind", "artifactKind", "artifactPattern", "conformanceAttachment", "requiredProvider", "requiredSurface", "authority", "publishProof")) {
|
||||
|
|
@ -227,4 +246,11 @@ foreach ($pathProperty in @("requestBuilder", "advertisementPath")) {
|
|||
& (Join-Path $projectRoot "scripts\run-eveunity-scene-capture-contract-smoke.ps1")
|
||||
& (Join-Path $projectRoot "scripts\run-eveunity-scene-capture-smoke.ps1")
|
||||
|
||||
if ($RunUnityEditMode) {
|
||||
& (Join-Path $projectRoot "scripts\run-aetheria-unity-scene-editmode-tests.ps1")
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "Aetheria Unity scene EditMode smoke failed with exit code $LASTEXITCODE"
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "EveUnity scene lifecycle smoke passed: $absoluteManifestPath"
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ $manifest = Get-Content -LiteralPath $absoluteManifestPath -Raw | ConvertFrom-Js
|
|||
if ($manifest.runtimeId -ne "unity-scene") {
|
||||
throw "Unexpected EveUnity scene runtime id: $($manifest.runtimeId)"
|
||||
}
|
||||
if ($manifest.lifecycle.test.status -ne "provider-shell-contract-skeleton") {
|
||||
if ($manifest.lifecycle.test.status -ne "unity-scene-editmode-batchmode") {
|
||||
throw "Unexpected EveUnity scene provider shell status: $($manifest.lifecycle.test.status)"
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -236,10 +236,10 @@ node $consumerScript $consumerExport `
|
|||
--expect-runtime-lifecycle-field "unity-uitoolkit:capture:captureContract.additionalProviderSurfaces.1.providerId:aetheria" `
|
||||
--expect-runtime-lifecycle-field "unity-uitoolkit:capture:captureContract.additionalProviderSurfaces.1.surfaceId:aetheria.daemon.editor" `
|
||||
--expect-runtime-lifecycle-status unity-scene:release:unity-scene-upm-artifact-smoke `
|
||||
--expect-runtime-lifecycle-status unity-scene:test:provider-shell-contract-skeleton `
|
||||
--expect-runtime-lifecycle-status unity-scene:test:unity-scene-editmode-batchmode `
|
||||
--expect-runtime-lifecycle-status unity-scene:capture:pending-unity-scene-capture `
|
||||
--expect-runtime-lifecycle-pending "unity-scene:release:Unity scene package release" `
|
||||
--expect-runtime-lifecycle-pending "unity-scene:test:Unity scene provider-advertisement smoke" `
|
||||
--expect-runtime-lifecycle-pending "unity-scene:test:Unity scene EditMode runner" `
|
||||
--expect-runtime-lifecycle-pending "unity-scene:capture:Unity scene screenshot or frame-capture PNG artifact" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:release:releaseContract.packageName:org.gamecult.eve.unity-scene" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:release:releaseContract.artifactKind:upm-package" `
|
||||
|
|
@ -252,8 +252,10 @@ node $consumerScript $consumerExport `
|
|||
--expect-runtime-lifecycle-field "unity-scene:release:releaseContract.requiredPackageDependencies.0.packageName:org.gamecult.eve.surface" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:release:releaseContract.requiredPackageDependencies.0.ownerRepo:Eve" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:release:releaseContract.requiredPackageDependencies.0.packageManager:upm" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:test:testContract.runnerKind:unity-scene-provider-shell-smoke" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:test:testContract.runnerScript:scripts/run-eveunity-scene-provider-shell-smoke.ps1" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:test:testContract.runnerKind:unity-editmode-batchmode" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:test:testContract.runnerScript:scripts/run-aetheria-unity-scene-editmode-tests.ps1" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:test:testContract.testPlatform:EditMode" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:test:testContract.testAssembly:GameCult.Eve.UnityScene.Tests" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:capture:captureContract.captureKind:unity-scene-frame-png" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:capture:captureContract.targetId:unity-scene" `
|
||||
--expect-runtime-lifecycle-field "unity-scene:capture:captureContract.requestSchema:gamecult.eve.runtime_capture_request.v1" `
|
||||
|
|
|
|||
|
|
@ -656,7 +656,8 @@
|
|||
"runtimes/incubating/eve-unity-scene/eve-runtime-capability.json",
|
||||
"scripts/run-eveunity-scene-lifecycle-smoke.ps1",
|
||||
"scripts/run-eveunity-scene-release-artifact-smoke.ps1",
|
||||
"scripts/run-eveunity-scene-provider-shell-smoke.ps1"
|
||||
"scripts/run-eveunity-scene-provider-shell-smoke.ps1",
|
||||
"scripts/run-aetheria-unity-scene-editmode-tests.ps1"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -675,7 +676,7 @@
|
|||
],
|
||||
"pendingProofs": [
|
||||
"Tagged UPM release is cut from EveUnity rather than Eve incubation.",
|
||||
"Unity batchmode EditMode runner is owned by EveUnity rather than Eve incubation.",
|
||||
"Unity batchmode EditMode runners are owned by EveUnity rather than Eve incubation.",
|
||||
"Unity batchmode or editor capture artifact is attached to the runtime conformance report.",
|
||||
"Unity scene runtime body graduates to EveUnity outside Aetheria product code.",
|
||||
"Unity scene screenshot or frame-capture PNG artifact is attached to the runtime conformance report."
|
||||
|
|
|
|||
Loading…
Reference in a new issue