added optional web component UI control
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user