shader control
This commit is contained in:
@@ -147,6 +147,29 @@ void TestLayerPostEndpointsUseCallbacks()
|
||||
Expect(removeResponse.body.find("Unknown layer id.") != std::string::npos, "remove layer callback returns diagnostic");
|
||||
}
|
||||
|
||||
void TestGenericPostCallbackHandlesControlRoutes()
|
||||
{
|
||||
using namespace RenderCadenceCompositor;
|
||||
|
||||
HttpControlServer server;
|
||||
HttpControlServerCallbacks callbacks;
|
||||
callbacks.executePost = [](const std::string& path, const std::string& body) {
|
||||
ExpectEquals(path, "/api/layers/set-bypass", "generic callback receives route path");
|
||||
Expect(body.find("runtime-layer-1") != std::string::npos, "generic callback receives request body");
|
||||
return ControlActionResult{ true, std::string() };
|
||||
};
|
||||
server.SetCallbacksForTest(callbacks);
|
||||
|
||||
HttpControlServer::HttpRequest request;
|
||||
request.method = "POST";
|
||||
request.path = "/api/layers/set-bypass";
|
||||
request.body = "{\"layerId\":\"runtime-layer-1\",\"bypass\":true}";
|
||||
|
||||
const HttpControlServer::HttpResponse response = server.RouteRequestForTest(request);
|
||||
ExpectEquals(response.status, "200 OK", "generic control callback success returns 200");
|
||||
Expect(response.body.find("\"ok\":true") != std::string::npos, "generic control callback returns action success");
|
||||
}
|
||||
|
||||
void TestUnknownEndpointReturns404()
|
||||
{
|
||||
using namespace RenderCadenceCompositor;
|
||||
@@ -169,6 +192,7 @@ int main()
|
||||
TestRootServesUiIndex();
|
||||
TestKnownPostEndpointReturnsActionError();
|
||||
TestLayerPostEndpointsUseCallbacks();
|
||||
TestGenericPostCallbackHandlesControlRoutes();
|
||||
TestUnknownEndpointReturns404();
|
||||
|
||||
if (gFailures != 0)
|
||||
|
||||
@@ -143,6 +143,49 @@ void TestAddAndRemoveLayers()
|
||||
|
||||
std::filesystem::remove_all(root);
|
||||
}
|
||||
|
||||
void TestLayerControlsUpdateDisplayAndRenderModels()
|
||||
{
|
||||
std::filesystem::path root;
|
||||
RenderCadenceCompositor::SupportedShaderCatalog catalog = MakeCatalog(root);
|
||||
|
||||
RenderCadenceCompositor::RuntimeLayerModel model;
|
||||
std::string error;
|
||||
std::string firstLayerId;
|
||||
std::string secondLayerId;
|
||||
Expect(model.AddLayer(catalog, "solid", firstLayerId, error), "first control layer can be added");
|
||||
Expect(model.AddLayer(catalog, "solid", secondLayerId, error), "second control layer can be added");
|
||||
|
||||
Expect(model.SetLayerBypass(firstLayerId, true, error), "bypass can be set");
|
||||
Expect(model.ReorderLayer(firstLayerId, 1, error), "layer can be reordered");
|
||||
RenderCadenceCompositor::RuntimeLayerModelSnapshot snapshot = model.Snapshot();
|
||||
Expect(snapshot.displayLayers[1].id == firstLayerId, "reordered layer moves to requested index");
|
||||
Expect(snapshot.displayLayers[1].bypass, "bypass state is visible in read model");
|
||||
|
||||
JsonValue gainValue(0.75);
|
||||
Expect(model.UpdateParameter(firstLayerId, "gain", gainValue, error), "parameter value can be updated");
|
||||
snapshot = model.Snapshot();
|
||||
Expect(snapshot.displayLayers[1].parameterValues.at("gain").numberValues.front() == 0.75, "updated parameter value is visible");
|
||||
|
||||
RuntimeShaderArtifact artifact;
|
||||
artifact.layerId = firstLayerId;
|
||||
artifact.shaderId = "solid";
|
||||
artifact.displayName = "Solid";
|
||||
artifact.fragmentShaderSource = "void main(){}";
|
||||
artifact.parameterDefinitions = snapshot.displayLayers[1].parameterDefinitions;
|
||||
artifact.message = "build ready";
|
||||
Expect(model.MarkBuildReady(artifact, error), "ready artifact keeps layer parameter state");
|
||||
snapshot = model.Snapshot();
|
||||
Expect(snapshot.renderLayers.size() == 1, "ready layer produces render model");
|
||||
Expect(snapshot.renderLayers[0].bypass, "render model carries bypass state");
|
||||
Expect(snapshot.renderLayers[0].artifact.parameterValues.at("gain").numberValues.front() == 0.75, "render artifact carries updated parameter value");
|
||||
|
||||
Expect(model.ResetParameters(firstLayerId, error), "parameters can reset to defaults");
|
||||
snapshot = model.Snapshot();
|
||||
Expect(snapshot.displayLayers[1].parameterValues.at("gain").numberValues.front() == 0.5, "reset restores default value");
|
||||
|
||||
std::filesystem::remove_all(root);
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
@@ -151,6 +194,7 @@ int main()
|
||||
TestRejectsUnsupportedStartupShader();
|
||||
TestBuildFailureStaysDisplaySide();
|
||||
TestAddAndRemoveLayers();
|
||||
TestLayerControlsUpdateDisplayAndRenderModels();
|
||||
|
||||
if (gFailures != 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user