Extract history UI operation planning

This commit is contained in:
2026-06-03 11:13:57 +02:00
parent 8dc476d205
commit 58afa672c7
9 changed files with 392 additions and 7 deletions

View File

@@ -0,0 +1,90 @@
#include "app_core/history_ui.h"
#include "test_harness.h"
namespace {
void undo_and_redo_plan_availability(pp::tests::Harness& harness)
{
const auto undo = pp::app::plan_history_undo(2);
PP_EXPECT(harness, undo);
if (undo) {
PP_EXPECT(harness, undo.value().operation == pp::app::HistoryUiOperation::undo);
PP_EXPECT(harness, undo.value().undo_count == 2);
PP_EXPECT(harness, undo.value().invokes_undo);
PP_EXPECT(harness, undo.value().updates_memory_label);
PP_EXPECT(harness, undo.value().updates_title);
PP_EXPECT(harness, !undo.value().no_op);
}
const auto undo_empty = pp::app::plan_history_undo(0);
PP_EXPECT(harness, undo_empty);
if (undo_empty) {
PP_EXPECT(harness, undo_empty.value().no_op);
PP_EXPECT(harness, !undo_empty.value().invokes_undo);
}
const auto redo = pp::app::plan_history_redo(1);
PP_EXPECT(harness, redo);
if (redo) {
PP_EXPECT(harness, redo.value().operation == pp::app::HistoryUiOperation::redo);
PP_EXPECT(harness, redo.value().redo_count == 1);
PP_EXPECT(harness, redo.value().invokes_redo);
PP_EXPECT(harness, redo.value().updates_title);
}
const auto redo_empty = pp::app::plan_history_redo(0);
PP_EXPECT(harness, redo_empty);
if (redo_empty) {
PP_EXPECT(harness, redo_empty.value().no_op);
PP_EXPECT(harness, !redo_empty.value().invokes_redo);
}
}
void clear_plan_tracks_stacks_and_memory(pp::tests::Harness& harness)
{
const auto clear = pp::app::plan_history_clear(2, 1, 4096);
PP_EXPECT(harness, clear);
if (clear) {
PP_EXPECT(harness, clear.value().operation == pp::app::HistoryUiOperation::clear);
PP_EXPECT(harness, clear.value().undo_count == 2);
PP_EXPECT(harness, clear.value().redo_count == 1);
PP_EXPECT(harness, clear.value().memory_bytes == 4096);
PP_EXPECT(harness, clear.value().clears_history);
PP_EXPECT(harness, clear.value().updates_memory_label);
PP_EXPECT(harness, !clear.value().updates_title);
}
const auto memory_only = pp::app::plan_history_clear(0, 0, 1024);
PP_EXPECT(harness, memory_only);
if (memory_only) {
PP_EXPECT(harness, memory_only.value().clears_history);
PP_EXPECT(harness, !memory_only.value().no_op);
}
const auto empty = pp::app::plan_history_clear(0, 0, 0);
PP_EXPECT(harness, empty);
if (empty) {
PP_EXPECT(harness, empty.value().no_op);
PP_EXPECT(harness, !empty.value().clears_history);
}
}
void rejects_negative_metrics(pp::tests::Harness& harness)
{
PP_EXPECT(harness, !pp::app::plan_history_undo(-1));
PP_EXPECT(harness, !pp::app::plan_history_redo(-1));
PP_EXPECT(harness, !pp::app::plan_history_clear(-1, 0, 0));
PP_EXPECT(harness, !pp::app::plan_history_clear(0, -1, 0));
PP_EXPECT(harness, !pp::app::plan_history_clear(0, 0, -1));
}
} // namespace
int main()
{
pp::tests::Harness harness;
harness.run("undo and redo plan availability", undo_and_redo_plan_availability);
harness.run("clear plan tracks stacks and memory", clear_plan_tracks_stacks_and_memory);
harness.run("rejects negative metrics", rejects_negative_metrics);
return harness.finish();
}