Files
whetstone_DSL/editor/tests/step562_test.cpp

134 lines
4.8 KiB
C++

// Step 562: Workflow-Aware Debug Hooks (12 tests)
#include "WorkflowAwareDebugHooks.h"
#include <iostream>
static int passed = 0, failed = 0;
#define TEST(name) { std::cout << " " << #name << "... "; }
#define PASS() { std::cout << "PASS\n"; ++passed; }
#define FAIL(msg) { std::cout << "FAIL: " << msg << "\n"; ++failed; }
#define CHECK(cond, msg) if (!(cond)) { FAIL(msg); return; } else {}
void test_attach_binding_succeeds() {
TEST(attach_binding_succeeds);
WorkflowAwareDebugHooks h;
CHECK(h.attach("wi-1", "ds-1", {"d1"}), "attach should succeed");
CHECK(h.isAttached("wi-1"), "binding should exist");
PASS();
}
void test_attach_rejects_duplicate_workflow_item() {
TEST(attach_rejects_duplicate_workflow_item);
WorkflowAwareDebugHooks h;
CHECK(h.attach("wi-1", "ds-1", {"d1"}), "first attach should succeed");
CHECK(!h.attach("wi-1", "ds-2", {"d2"}), "duplicate workflow item should fail");
PASS();
}
void test_attach_rejects_missing_ids() {
TEST(attach_rejects_missing_ids);
WorkflowAwareDebugHooks h;
CHECK(!h.attach("", "ds-1", {}), "missing workflow id should fail");
CHECK(!h.attach("wi-1", "", {}), "missing session id should fail");
PASS();
}
void test_detach_removes_binding() {
TEST(detach_removes_binding);
WorkflowAwareDebugHooks h;
CHECK(h.attach("wi-1", "ds-1", {"d1"}), "attach should succeed");
CHECK(h.detach("wi-1"), "detach should succeed");
CHECK(!h.isAttached("wi-1"), "binding should be removed");
PASS();
}
void test_detach_fails_for_unknown_item() {
TEST(detach_fails_for_unknown_item);
WorkflowAwareDebugHooks h;
CHECK(!h.detach("missing"), "detach unknown should fail");
PASS();
}
void test_set_active_toggles_binding_state() {
TEST(set_active_toggles_binding_state);
WorkflowAwareDebugHooks h;
CHECK(h.attach("wi-1", "ds-1", {"d1"}), "attach should succeed");
CHECK(h.setActive("wi-1", false), "set inactive should succeed");
CHECK(h.activeBindings().empty(), "no active bindings expected");
CHECK(h.setActive("wi-1", true), "set active should succeed");
CHECK(h.activeBindings().size() == 1, "one active binding expected");
PASS();
}
void test_set_active_fails_for_unknown_item() {
TEST(set_active_fails_for_unknown_item);
WorkflowAwareDebugHooks h;
CHECK(!h.setActive("missing", true), "set active unknown should fail");
PASS();
}
void test_add_diagnostic_appends_unique_diagnostic() {
TEST(add_diagnostic_appends_unique_diagnostic);
WorkflowAwareDebugHooks h;
CHECK(h.attach("wi-1", "ds-1", {"d1"}), "attach should succeed");
CHECK(h.addDiagnostic("wi-1", "d2"), "add diagnostic should succeed");
auto d = h.diagnosticsFor("wi-1");
CHECK(d.size() == 2, "two diagnostics expected");
PASS();
}
void test_add_diagnostic_rejects_duplicate() {
TEST(add_diagnostic_rejects_duplicate);
WorkflowAwareDebugHooks h;
CHECK(h.attach("wi-1", "ds-1", {"d1"}), "attach should succeed");
CHECK(!h.addDiagnostic("wi-1", "d1"), "duplicate diagnostic should fail");
PASS();
}
void test_add_diagnostic_fails_for_unknown_binding() {
TEST(add_diagnostic_fails_for_unknown_binding);
WorkflowAwareDebugHooks h;
CHECK(!h.addDiagnostic("missing", "d1"), "unknown binding should fail");
PASS();
}
void test_active_bindings_returns_only_active() {
TEST(active_bindings_returns_only_active);
WorkflowAwareDebugHooks h;
CHECK(h.attach("wi-1", "ds-1", {"d1"}), "attach wi-1");
CHECK(h.attach("wi-2", "ds-2", {"d2"}), "attach wi-2");
CHECK(h.setActive("wi-2", false), "deactivate wi-2");
auto active = h.activeBindings();
CHECK(active.size() == 1, "only one active expected");
CHECK(active[0].workflowItemId == "wi-1", "active item mismatch");
PASS();
}
void test_diagnostics_for_unknown_item_empty() {
TEST(diagnostics_for_unknown_item_empty);
WorkflowAwareDebugHooks h;
CHECK(h.diagnosticsFor("missing").empty(), "unknown diagnostics should be empty");
PASS();
}
int main() {
std::cout << "Step 562: Workflow-Aware Debug Hooks\n";
test_attach_binding_succeeds(); // 1
test_attach_rejects_duplicate_workflow_item(); // 2
test_attach_rejects_missing_ids(); // 3
test_detach_removes_binding(); // 4
test_detach_fails_for_unknown_item(); // 5
test_set_active_toggles_binding_state(); // 6
test_set_active_fails_for_unknown_item(); // 7
test_add_diagnostic_appends_unique_diagnostic(); // 8
test_add_diagnostic_rejects_duplicate(); // 9
test_add_diagnostic_fails_for_unknown_binding(); // 10
test_active_bindings_returns_only_active(); // 11
test_diagnostics_for_unknown_item_empty(); // 12
std::cout << "\nResults: " << passed << "/" << (passed + failed) << " passed\n";
return failed == 0 ? 0 : 1;
}