More changes
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user