Step 357: Status Bar (12/12 tests)
This commit is contained in:
154
editor/tests/step357_test.cpp
Normal file
154
editor/tests/step357_test.cpp
Normal file
@@ -0,0 +1,154 @@
|
||||
// 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;
|
||||
}
|
||||
Reference in New Issue
Block a user