Sprint 8: add step244 integration test and fix Ubuntu test build
This commit is contained in:
@@ -755,3 +755,7 @@ vcpkg's imgui 1.91.9 removed the `sdl2-binding` feature (only `sdl3-binding` exi
|
||||
| 2026-02-10 | Codex | Step 233: Training data pipeline CLI (load/anonymize/convert/filter/dedup/export + stats). 1/1 tests pass. |
|
||||
| 2026-02-10 | Codex | Step 234: Session pipeline tests (anonymizer round-trip, no PII, trace conversion, pipeline output count, quality filter, dedup). 1/1 tests pass. |
|
||||
| 2026-02-10 | Codex | Step 241: Text-first default mode (default buffer mode Text, settings preference, wizard step, tips updated). 1/1 tests pass (`file_limits_test`). |
|
||||
| 2026-02-10 | Codex | Step 242: DockBuilder initial layout on first launch + View→Reset Layout (applies preset docking for Explorer/Editor/Panel and tool windows). Tests not run. |
|
||||
| 2026-02-10 | Codex | Step 243: First-launch polish — Explorer shows Open Folder prompt when no workspace, status bar shows “Text Mode/Structured Mode”, bottom panel collapses on initial layout/reset. Tests not run. |
|
||||
| 2026-02-10 | Codex | Ubuntu 24 build portability pass: fixed Linux/GCC compile/link regressions and validated product target build (`whetstone_editor`, `orchestrator`) via `installer/linux/build.sh`. Updated Linux build/install scripts with explicit prerequisite checks/deps and product-target build mode. |
|
||||
| 2026-02-10 | Codex | Step 244: Added integration-style test target `step244_test` validating text-first defaults, mode policy gating, per-buffer mode persistence, VSCode preset layout ratios, and settings-driven default buffer mode mapping. 6/6 checks pass (`./editor/build/step244_test`). |
|
||||
|
||||
@@ -387,11 +387,29 @@ target_link_libraries(step49_test PRIVATE unofficial::tree-sitter::tree-sitter t
|
||||
|
||||
add_executable(step50_test tests/step50_test.cpp)
|
||||
target_include_directories(step50_test PRIVATE src)
|
||||
target_link_libraries(step50_test PRIVATE unofficial::tree-sitter::tree-sitter tree_sitter_python tree_sitter_cpp tree_sitter_elisp)
|
||||
target_link_libraries(step50_test PRIVATE
|
||||
unofficial::tree-sitter::tree-sitter
|
||||
tree_sitter_python
|
||||
tree_sitter_cpp
|
||||
tree_sitter_elisp
|
||||
tree_sitter_javascript
|
||||
tree_sitter_typescript
|
||||
tree_sitter_java
|
||||
tree_sitter_rust
|
||||
tree_sitter_go)
|
||||
|
||||
add_executable(step51_test tests/step51_test.cpp)
|
||||
target_include_directories(step51_test PRIVATE src)
|
||||
target_link_libraries(step51_test PRIVATE unofficial::tree-sitter::tree-sitter tree_sitter_python tree_sitter_cpp tree_sitter_elisp)
|
||||
target_link_libraries(step51_test PRIVATE
|
||||
unofficial::tree-sitter::tree-sitter
|
||||
tree_sitter_python
|
||||
tree_sitter_cpp
|
||||
tree_sitter_elisp
|
||||
tree_sitter_javascript
|
||||
tree_sitter_typescript
|
||||
tree_sitter_java
|
||||
tree_sitter_rust
|
||||
tree_sitter_go)
|
||||
|
||||
add_executable(step52_test tests/step52_test.cpp)
|
||||
target_include_directories(step52_test PRIVATE src)
|
||||
@@ -468,7 +486,16 @@ target_include_directories(step71_test PRIVATE src)
|
||||
|
||||
add_executable(step72_test tests/step72_test.cpp)
|
||||
target_include_directories(step72_test PRIVATE src)
|
||||
target_link_libraries(step72_test PRIVATE unofficial::tree-sitter::tree-sitter tree_sitter_python tree_sitter_cpp tree_sitter_elisp)
|
||||
target_link_libraries(step72_test PRIVATE
|
||||
unofficial::tree-sitter::tree-sitter
|
||||
tree_sitter_python
|
||||
tree_sitter_cpp
|
||||
tree_sitter_elisp
|
||||
tree_sitter_javascript
|
||||
tree_sitter_typescript
|
||||
tree_sitter_java
|
||||
tree_sitter_rust
|
||||
tree_sitter_go)
|
||||
|
||||
add_executable(step73_test tests/step73_test.cpp)
|
||||
target_include_directories(step73_test PRIVATE src)
|
||||
@@ -1187,6 +1214,9 @@ target_link_libraries(step233_test PRIVATE nlohmann_json::nlohmann_json)
|
||||
add_executable(step234_test tests/step234_test.cpp)
|
||||
target_include_directories(step234_test PRIVATE src)
|
||||
target_link_libraries(step234_test PRIVATE nlohmann_json::nlohmann_json)
|
||||
add_executable(step244_test tests/step244_test.cpp)
|
||||
target_include_directories(step244_test PRIVATE src)
|
||||
target_link_libraries(step244_test PRIVATE nlohmann_json::nlohmann_json)
|
||||
add_executable(step213_test tests/step213_test.cpp)
|
||||
target_include_directories(step213_test PRIVATE src)
|
||||
target_link_libraries(step213_test PRIVATE nlohmann_json::nlohmann_json)
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
static void expect(bool cond, const std::string& name, int& passed, int& failed) {
|
||||
if (cond) {
|
||||
|
||||
109
editor/tests/step244_test.cpp
Normal file
109
editor/tests/step244_test.cpp
Normal file
@@ -0,0 +1,109 @@
|
||||
// Step 244 TDD Test: First-launch UX checks
|
||||
//
|
||||
// Verifies:
|
||||
// 1. New buffers default to Text mode.
|
||||
// 2. Text mode disables structured-only features.
|
||||
// 3. Structured mode enables structured-only features.
|
||||
// 4. Mode toggle behavior persists per-buffer in BufferManager.
|
||||
// 5. LayoutManager VSCode preset matches DockBuilder expectations.
|
||||
// 6. Settings defaultBufferMode preference is readable and can drive default mode.
|
||||
|
||||
#include <cassert>
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
#include "BufferManager.h"
|
||||
#include "EditorModePolicy.h"
|
||||
#include "LayoutManager.h"
|
||||
#include "SettingsManager.h"
|
||||
|
||||
static bool approx(float a, float b) {
|
||||
return std::fabs(a - b) < 0.0001f;
|
||||
}
|
||||
|
||||
int main() {
|
||||
int passed = 0;
|
||||
int failed = 0;
|
||||
|
||||
// 1. New buffers default to Text mode.
|
||||
{
|
||||
BufferManager bm;
|
||||
bm.openBuffer("a.py", "print('x')", "python");
|
||||
assert(bm.getBufferMode("a.py") == BufferManager::BufferMode::Text);
|
||||
std::cout << "Test 1 PASS: new buffers default to text mode" << std::endl;
|
||||
++passed;
|
||||
}
|
||||
|
||||
// 2. Text mode disables structured-only features.
|
||||
{
|
||||
assert(isTextMode(BufferManager::BufferMode::Text));
|
||||
assert(!allowStructuredFeatures(BufferManager::BufferMode::Text));
|
||||
std::cout << "Test 2 PASS: text mode disables structured features" << std::endl;
|
||||
++passed;
|
||||
}
|
||||
|
||||
// 3. Structured mode enables structured-only features.
|
||||
{
|
||||
assert(!isTextMode(BufferManager::BufferMode::Structured));
|
||||
assert(allowStructuredFeatures(BufferManager::BufferMode::Structured));
|
||||
std::cout << "Test 3 PASS: structured mode enables structured features" << std::endl;
|
||||
++passed;
|
||||
}
|
||||
|
||||
// 4. Mode toggle behavior persists per-buffer.
|
||||
{
|
||||
BufferManager bm;
|
||||
bm.openBuffer("b.py", "", "python");
|
||||
bm.setBufferMode("b.py", BufferManager::BufferMode::Structured);
|
||||
assert(bm.getBufferMode("b.py") == BufferManager::BufferMode::Structured);
|
||||
bm.switchToBuffer("b.py");
|
||||
assert(bm.getBufferMode("b.py") == BufferManager::BufferMode::Structured);
|
||||
std::cout << "Test 4 PASS: mode toggle persists per-buffer" << std::endl;
|
||||
++passed;
|
||||
}
|
||||
|
||||
// 5. LayoutManager VSCode preset data matches Step 242 DockBuilder expectations.
|
||||
{
|
||||
LayoutManager layout;
|
||||
layout.setPreset(LayoutPreset::VSCode);
|
||||
const DockPanel* explorer = layout.findPanel("Explorer");
|
||||
const DockPanel* editor = layout.findPanel("Editor");
|
||||
const DockPanel* panel = layout.findPanel("Panel");
|
||||
assert(explorer && editor && panel);
|
||||
assert(explorer->direction == DockDirection::Left);
|
||||
assert(editor->direction == DockDirection::Center);
|
||||
assert(panel->direction == DockDirection::Bottom);
|
||||
assert(approx(explorer->sizeRatio, 0.20f));
|
||||
assert(approx(editor->sizeRatio, 0.60f));
|
||||
assert(approx(panel->sizeRatio, 0.20f));
|
||||
std::cout << "Test 5 PASS: VSCode layout preset matches expected docking data" << std::endl;
|
||||
++passed;
|
||||
}
|
||||
|
||||
// 6. Settings defaultBufferMode preference is respected by caller mapping.
|
||||
{
|
||||
SettingsManager settings;
|
||||
assert(settings.getDefaultBufferMode() == "text");
|
||||
|
||||
settings.setDefaultBufferMode("structured");
|
||||
assert(settings.getDefaultBufferMode() == "structured");
|
||||
|
||||
auto modeFromSetting = [](const std::string& value) {
|
||||
return value == "structured"
|
||||
? BufferManager::BufferMode::Structured
|
||||
: BufferManager::BufferMode::Text;
|
||||
};
|
||||
|
||||
BufferManager bm;
|
||||
bm.openBuffer("c.py", "", "python", modeFromSetting(settings.getDefaultBufferMode()));
|
||||
assert(bm.getBufferMode("c.py") == BufferManager::BufferMode::Structured);
|
||||
std::cout << "Test 6 PASS: defaultBufferMode setting drives buffer default mode" << std::endl;
|
||||
++passed;
|
||||
}
|
||||
|
||||
std::cout << "\n=== Step 244 Results: " << passed << " passed, " << failed
|
||||
<< " failed ===" << std::endl;
|
||||
return failed > 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user