added optional web component UI control
All checks were successful
CI / React UI Build (push) Successful in 12s
CI / Native Windows Build And Tests (push) Successful in 2m20s
CI / Windows Release Package (push) Successful in 2m56s

This commit is contained in:
Aiden
2026-05-30 22:57:59 +10:00
parent a6d2ee385e
commit 27690c3afa
26 changed files with 804 additions and 76 deletions

View File

@@ -157,6 +157,53 @@ void TestRootServesUiIndex()
std::filesystem::remove_all(root);
}
void TestShaderAssetEndpointUsesCallback()
{
using namespace RenderCadenceCompositor;
const std::filesystem::path root = std::filesystem::temp_directory_path() / "render-cadence-compositor-shader-asset-test";
std::filesystem::create_directories(root / "ui");
const std::filesystem::path assetPath = root / "ui" / "controls.js";
{
std::ofstream output(assetPath, std::ios::binary);
output << "customElements.define('solid-controls', class extends HTMLElement {});";
}
HttpControlServer server;
RenderCadenceHttpRouteCallbacks callbacks;
callbacks.resolveShaderAssetPath = [&assetPath](const std::string& shaderId, const std::string& relativePath, std::filesystem::path& resolvedPath, std::string&) {
ExpectEquals(shaderId, "solid", "shader asset callback receives shader id");
ExpectEquals(relativePath, "ui/controls.js", "shader asset callback receives package-relative asset path");
resolvedPath = assetPath;
return true;
};
HttpControlServer::HttpRequest request;
request.method = "GET";
request.path = "/shader-assets/solid/ui/controls.js";
const HttpControlServer::HttpResponse response = RouteRenderCadenceHttpRequest(request, server, callbacks);
ExpectEquals(response.status, "200 OK", "shader asset endpoint serves resolved asset");
ExpectEquals(response.contentType, "text/javascript", "shader asset endpoint guesses javascript content type");
Expect(response.body.find("solid-controls") != std::string::npos, "shader asset endpoint returns asset body");
std::filesystem::remove_all(root);
}
void TestIncompleteShaderAssetEndpointReturns404()
{
using namespace RenderCadenceCompositor;
HttpControlServer server;
HttpControlServer::HttpRequest request;
request.method = "GET";
request.path = "/shader-assets/solid";
RenderCadenceHttpRouteCallbacks callbacks;
const HttpControlServer::HttpResponse response = RouteRenderCadenceHttpRequest(request, server, callbacks);
ExpectEquals(response.status, "404 Not Found", "incomplete shader asset endpoint returns 404");
}
void TestKnownPostEndpointReturnsActionError()
{
using namespace RenderCadenceCompositor;
@@ -285,6 +332,8 @@ int main()
TestNdiSourcesEndpointUsesCallback();
TestWebSocketAcceptKey();
TestRootServesUiIndex();
TestShaderAssetEndpointUsesCallback();
TestIncompleteShaderAssetEndpointReturns404();
TestKnownPostEndpointReturnsActionError();
TestLayerPostEndpointsUseCallbacks();
TestGenericPostCallbackHandlesControlRoutes();