More changes
Some checks failed
CI / React UI Build (push) Successful in 11s
CI / Native Windows Build And Tests (push) Failing after 2m12s
CI / Windows Release Package (push) Has been skipped

This commit is contained in:
2026-05-21 16:51:00 +10:00
parent d68cf9b1a0
commit 5c46eaf18a
10 changed files with 505 additions and 2 deletions

View File

@@ -252,6 +252,27 @@ void TestInitializeFromRuntimeStateRestoresLayerStack()
std::filesystem::remove_all(root);
}
void TestInvalidRuntimeStateCanFallBackToConfiguredShader()
{
std::filesystem::path root;
RenderCadenceCompositor::SupportedShaderCatalog catalog = MakeCatalog(root);
JsonValue invalidRuntimeState = JsonValue::MakeObject();
invalidRuntimeState.set("layers", JsonValue("not-an-array"));
RenderCadenceCompositor::RuntimeLayerModel model;
std::string error;
Expect(!model.InitializeFromRuntimeState(catalog, invalidRuntimeState, error), "invalid runtime state is rejected");
Expect(model.InitializeSingleLayer(catalog, "solid", error), "configured default shader can initialize after invalid runtime state");
RenderCadenceCompositor::RuntimeLayerModelSnapshot snapshot = model.Snapshot();
Expect(snapshot.displayLayers.size() == 1, "fallback startup creates one default layer");
Expect(snapshot.displayLayers[0].shaderId == "solid", "fallback layer uses the configured shader id");
Expect(snapshot.displayLayers[0].parameterValues.at("gain").numberValues.front() == 0.5, "fallback layer uses shader defaults");
std::filesystem::remove_all(root);
}
void TestLayerControlsUpdateDisplayAndRenderModels()
{
std::filesystem::path root;
@@ -308,23 +329,42 @@ void TestReloadRefreshesChangedShaderMetadataAndPreservesValues()
{
std::filesystem::path root;
RenderCadenceCompositor::SupportedShaderCatalog catalog = MakeCatalog(root);
WriteFile(root / "passthrough" / "shader.slang", "float4 shadeVideo(float2 uv) { return float4(uv, 1.0, 1.0); }\n");
WriteFile(root / "passthrough" / "shader.json", R"({
"id": "passthrough",
"name": "Passthrough",
"description": "Passthrough test shader",
"category": "Tests",
"entryPoint": "shadeVideo",
"parameters": [
{ "id": "opacity", "label": "Opacity", "type": "float", "default": 1.0 }
]
})");
catalog = LoadCatalog(root);
RenderCadenceCompositor::RuntimeLayerModel model;
std::string error;
std::string layerId;
std::string unchangedLayerId;
Expect(model.AddLayer(catalog, "solid", layerId, error), "reload test layer can be added");
Expect(model.AddLayer(catalog, "passthrough", unchangedLayerId, error), "reload unchanged layer can be added");
Expect(model.UpdateParameter(layerId, "gain", JsonValue(0.75), error), "reload test parameter can be customized");
WriteFile(root / "solid" / "shader.json", SolidShaderManifest(0.1, true));
RenderCadenceCompositor::SupportedShaderCatalog reloadedCatalog = LoadCatalog(root);
std::vector<std::pair<std::string, std::string>> buildsToStart;
Expect(model.ReloadFromCatalog(reloadedCatalog, buildsToStart, error), "reload refreshes model from changed catalog");
Expect(buildsToStart.size() == 1 && buildsToStart[0].first == layerId && buildsToStart[0].second == "solid", "changed shader queues a layer rebuild");
Expect(buildsToStart.size() == 2
&& buildsToStart[0].first == layerId
&& buildsToStart[0].second == "solid"
&& buildsToStart[1].first == unchangedLayerId
&& buildsToStart[1].second == "passthrough", "reload queues every available layer rebuild in order");
RenderCadenceCompositor::RuntimeLayerModelSnapshot snapshot = model.Snapshot();
Expect(snapshot.displayLayers[0].parameterDefinitions.size() == 3, "reload exposes new JSON parameter definitions to UI");
Expect(snapshot.displayLayers[0].parameterValues.at("gain").numberValues.front() == 0.75, "reload preserves compatible parameter values");
Expect(snapshot.displayLayers[0].parameterValues.at("mix").numberValues.front() == 0.25, "reload initializes newly added parameters");
Expect(snapshot.displayLayers[1].parameterValues.at("opacity").numberValues.front() == 1.0, "reload keeps unchanged layer parameter values");
std::filesystem::remove_all(root);
}
@@ -337,6 +377,7 @@ int main()
TestBuildFailureStaysDisplaySide();
TestAddAndRemoveLayers();
TestInitializeFromRuntimeStateRestoresLayerStack();
TestInvalidRuntimeStateCanFallBackToConfiguredShader();
TestLayerControlsUpdateDisplayAndRenderModels();
TestReloadRefreshesChangedShaderMetadataAndPreservesValues();