Files
whetstone_DSL/editor/tests/step354_test.cpp

137 lines
4.0 KiB
C++
Raw Normal View History

// Step 354: Menu Bar with Key Symbols (12 tests)
#include <cassert>
#include <iostream>
#include <string>
#include "MenuBar.h"
#include "KeybindingRegistry.h"
int main() {
int passed = 0;
KeybindingRegistry reg;
reg.loadDefaults();
MenuBar bar = MenuBar::buildDefaults(reg);
// Test 1: all 5 core menus render (+ Help)
{
assert(bar.hasMenu("File"));
assert(bar.hasMenu("Edit"));
assert(bar.hasMenu("View"));
assert(bar.hasMenu("Tools"));
assert(bar.hasMenu("Workflow"));
assert(bar.hasMenu("Help"));
std::cout << "Test 1 PASSED: all menus render\n";
passed++;
}
// Test 2: File menu Save has Ctrl+S
{
MenuItem save = bar.findItem("save-buffer");
assert(save.id == "save-buffer");
assert(save.shortcut == "Ctrl+S");
std::cout << "Test 2 PASSED: File Save shortcut\n";
passed++;
}
// Test 3: Edit menu Undo has Ctrl+Z
{
MenuItem undo = bar.findItem("undo");
assert(undo.id == "undo");
assert(undo.shortcut == "Ctrl+Z");
std::cout << "Test 3 PASSED: Edit Undo shortcut\n";
passed++;
}
// Test 4: View menu panel toggles present
{
assert(bar.hasItem("toggle-file-tree"));
assert(bar.hasItem("toggle-ast-view"));
assert(bar.hasItem("toggle-diagnostics"));
assert(bar.hasItem("toggle-annotations"));
std::cout << "Test 4 PASSED: View panel toggles present\n";
passed++;
}
// Test 5: Tools menu run pipeline present
{
MenuItem run = bar.findItem("run-pipeline");
assert(run.id == "run-pipeline");
assert(run.label.find("Run") != std::string::npos);
std::cout << "Test 5 PASSED: Tools run pipeline present\n";
passed++;
}
// Test 6: menu item executes correct action id
{
bar.openMenu("File");
auto selected = bar.selectItem("save-buffer");
assert(selected.has_value());
assert(selected.value() == "save-buffer");
std::cout << "Test 6 PASSED: menu selection executes action\n";
passed++;
}
// Test 7: key symbols visible on bound actions
{
MenuItem save = bar.findItem("save-buffer");
MenuItem run = bar.findItem("run-pipeline");
assert(!save.symbols.empty());
assert(!run.symbols.empty());
std::cout << "Test 7 PASSED: key symbols visible\n";
passed++;
}
// Test 8: menu closes after selection
{
bar.openMenu("Edit");
assert(bar.isMenuOpen("Edit"));
auto selected = bar.selectItem("undo");
assert(selected.has_value());
assert(!bar.isAnyMenuOpen());
std::cout << "Test 8 PASSED: menu closes after selection\n";
passed++;
}
// Test 9: separators between groups
{
assert(bar.separatorCount("File") >= 2);
assert(bar.separatorCount("Edit") >= 1);
assert(bar.separatorCount("Tools") >= 1);
std::cout << "Test 9 PASSED: separators between groups\n";
passed++;
}
// Test 10: workflow menu items present
{
assert(bar.hasItem("create-workflow"));
assert(bar.hasItem("route-all"));
assert(bar.hasItem("view-ready-tasks"));
assert(bar.hasItem("save-workflow"));
std::cout << "Test 10 PASSED: workflow items present\n";
passed++;
}
// Test 11: submenu rendering metadata
{
assert(bar.hasSubmenu("docs"));
assert(bar.hasItem("docs-getting-started"));
assert(bar.hasItem("docs-keybindings"));
std::cout << "Test 11 PASSED: submenu metadata\n";
passed++;
}
// Test 12: selecting separator/unknown is ignored
{
auto bad = bar.selectItem("not-found");
assert(!bad.has_value());
auto sep = bar.selectItem("");
assert(!sep.has_value());
std::cout << "Test 12 PASSED: invalid selections ignored\n";
passed++;
}
std::cout << "\nResults: " << passed << "/12\n";
assert(passed == 12);
return 0;
}