Files
whetstone_DSL/editor/tests/step357_test.cpp
2026-02-16 09:13:18 -07:00

155 lines
4.5 KiB
C++

// Step 357: Status Bar (12 tests)
#include <cassert>
#include <iostream>
#include <string>
#include "panels/StatusBar.h"
int main() {
int passed = 0;
WhetstoneTheme theme = getDefaultDarkTheme();
// Test 1: language badge shows current buffer language
{
StatusBarInput in;
in.language = "python";
in.filePath = "src/main.py";
auto model = buildStatusBar(in, theme);
assert(model.languageBadge == "python");
std::cout << "Test 1 PASSED: language badge\n";
passed++;
}
// Test 2: cursor position updates
{
StatusBarInput in;
in.filePath = "file";
in.line = 42;
in.column = 8;
auto model = buildStatusBar(in, theme);
assert(model.centerText.find("Ln 42, Col 8") != std::string::npos);
std::cout << "Test 2 PASSED: cursor position\n";
passed++;
}
// Test 3: diagnostic count accurate
{
StatusBarInput in;
in.filePath = "file";
in.errorCount = 3;
in.warningCount = 2;
auto model = buildStatusBar(in, theme);
assert(model.diagnosticsText == "3 errors, 2 warnings");
std::cout << "Test 3 PASSED: diagnostics count\n";
passed++;
}
// Test 4: workflow badge shown when active
{
StatusBarInput in;
in.filePath = "file";
in.workflowActive = true;
in.workflowCurrent = 3;
in.workflowTotal = 10;
auto model = buildStatusBar(in, theme);
assert(model.workflowBadge == "Executing 3/10");
std::cout << "Test 4 PASSED: workflow badge active\n";
passed++;
}
// Test 5: click diagnostics focuses diagnostics panel
{
assert(statusBarClickDiagnosticsTarget() == "diagnostics");
std::cout << "Test 5 PASSED: diagnostics click target\n";
passed++;
}
// Test 6: status bar uses theme colors
{
StatusBarInput in;
in.filePath = "file";
auto model = buildStatusBar(in, theme);
assert(model.bgColor.toHex() == theme.bgPanel.toHex());
assert(model.textColor.toHex() == theme.text.toHex());
assert(model.dimTextColor.toHex() == theme.textDim.toHex());
std::cout << "Test 6 PASSED: theme colors\n";
passed++;
}
// Test 7: language changes when switching buffers
{
StatusBarInput py;
py.language = "python";
py.filePath = "a.py";
StatusBarInput cpp;
cpp.language = "cpp";
cpp.filePath = "a.cpp";
auto m1 = buildStatusBar(py, theme);
auto m2 = buildStatusBar(cpp, theme);
assert(m1.languageBadge != m2.languageBadge);
std::cout << "Test 7 PASSED: language switch reflected\n";
passed++;
}
// Test 8: encoding display
{
StatusBarInput in;
in.filePath = "file";
in.encoding = "UTF-16";
auto model = buildStatusBar(in, theme);
assert(model.centerText.find("UTF-16") != std::string::npos);
std::cout << "Test 8 PASSED: encoding display\n";
passed++;
}
// Test 9: all sections fit without overflow for normal input
{
StatusBarInput in;
in.filePath = "src/main.cpp";
auto model = buildStatusBar(in, theme, 200);
assert(!model.overflow);
std::cout << "Test 9 PASSED: no overflow normal case\n";
passed++;
}
// Test 10: overflow flagged for extreme long path
{
StatusBarInput in;
in.filePath = std::string(220, 'a');
auto model = buildStatusBar(in, theme, 80);
assert(model.overflow);
std::cout << "Test 10 PASSED: overflow flagged\n";
passed++;
}
// Test 11: line ending display
{
StatusBarInput in;
in.filePath = "file";
in.lineEnding = "CRLF";
auto model = buildStatusBar(in, theme);
assert(model.centerText.find("CRLF") != std::string::npos);
std::cout << "Test 11 PASSED: line ending display\n";
passed++;
}
// Test 12: MCP indicator states
{
StatusBarInput on;
on.filePath = "file";
on.mcpConnected = true;
StatusBarInput off = on;
off.mcpConnected = false;
auto a = buildStatusBar(on, theme);
auto b = buildStatusBar(off, theme);
assert(a.mcpText == "MCP: connected");
assert(b.mcpText == "MCP: offline");
std::cout << "Test 12 PASSED: MCP indicator states\n";
passed++;
}
std::cout << "\nResults: " << passed << "/12\n";
assert(passed == 12);
return 0;
}