// Debug-only IPC test harness (compiled only when COOP_TEST_HARNESS is defined; the // shipped product never contains it). Lets a test script drive the real overlay code // paths -- inject, enable audio, re-measure, override, etc. -- by writing a command to // %TEMP%\coop_test_cmd.txt and reading the reply from %TEMP%\coop_test_resp.txt, instead // of simulating mouse/keyboard input (which ImGui doesn't accept reliably via PostMessage). // // Protocol: the driver writes one command line to the cmd file; the host consumes it // (deleting the cmd file to ack), runs it on the main thread (so it hits the same code // the UI buttons do), and writes a single response line to the resp file. One command at // a time. See tools/test_drive notes / the per-phase validation scripts. #pragma once #include namespace coop { class TestHarness { public: #ifdef COOP_TEST_HARNESS void init(); // resolve the %TEMP% file paths and clear any stale command // Main thread: returns the next pending command line (acking by deleting the cmd // file), or an empty string if none is waiting. std::string poll_command(); // Main thread: write the response for the command just handled. void write_response(const std::string& resp); private: std::wstring cmd_path_; std::wstring resp_path_; #else // No-op shims so call sites don't need their own #ifdef. void init() {} std::string poll_command() { return {}; } void write_response(const std::string&) {} #endif }; } // namespace coop