Files
kte/tests/test_kkeymap.cc
Kyle Isom 895e4ccb1e Add swap journaling and group undo/redo with extensive tests.
- Introduced SwapManager for sidecar journaling of buffer mutations, with a safe recovery mechanism.
- Added group undo/redo functionality, allowing atomic grouping of related edits.
- Implemented `SwapRecorder` and integrated it as a callback interface for mutations.
- Added unit tests for swap journaling (save/load/replay) and undo grouping.
- Refactored undo to support group tracking and ID management.
- Updated CMake to include the new tests and swap journaling logic.
2026-02-11 20:47:18 -08:00

84 lines
2.2 KiB
C++

#include "Test.h"
#include "KKeymap.h"
#include <ncurses.h>
TEST (KKeymap_KPrefix_CanonicalChords)
{
CommandId id{};
// From docs/ke.md (K-commands)
ASSERT_TRUE(KLookupKCommand('s', false, id));
ASSERT_EQ(id, CommandId::Save);
ASSERT_TRUE(KLookupKCommand('s', true, id)); // C-k C-s
ASSERT_EQ(id, CommandId::Save);
ASSERT_TRUE(KLookupKCommand('d', false, id));
ASSERT_EQ(id, CommandId::KillToEOL);
ASSERT_TRUE(KLookupKCommand('d', true, id)); // C-k C-d
ASSERT_EQ(id, CommandId::KillLine);
ASSERT_TRUE(KLookupKCommand(' ', false, id)); // C-k SPACE
ASSERT_EQ(id, CommandId::ToggleMark);
ASSERT_TRUE(KLookupKCommand('j', false, id));
ASSERT_EQ(id, CommandId::JumpToMark);
ASSERT_TRUE(KLookupKCommand('f', false, id));
ASSERT_EQ(id, CommandId::FlushKillRing);
ASSERT_TRUE(KLookupKCommand('y', false, id));
ASSERT_EQ(id, CommandId::Yank);
// Unknown should not map
ASSERT_EQ(KLookupKCommand('Z', false, id), false);
}
TEST (KKeymap_CtrlChords_CanonicalChords)
{
CommandId id{};
// From docs/ke.md (other keybindings)
ASSERT_TRUE(KLookupCtrlCommand('n', id));
ASSERT_EQ(id, CommandId::MoveDown);
ASSERT_TRUE(KLookupCtrlCommand('p', id));
ASSERT_EQ(id, CommandId::MoveUp);
ASSERT_TRUE(KLookupCtrlCommand('f', id));
ASSERT_EQ(id, CommandId::MoveRight);
ASSERT_TRUE(KLookupCtrlCommand('b', id));
ASSERT_EQ(id, CommandId::MoveLeft);
ASSERT_TRUE(KLookupCtrlCommand('w', id));
ASSERT_EQ(id, CommandId::KillRegion);
ASSERT_TRUE(KLookupCtrlCommand('y', id));
ASSERT_EQ(id, CommandId::Yank);
ASSERT_EQ(KLookupCtrlCommand('z', id), false);
}
TEST (KKeymap_EscChords_CanonicalChords)
{
CommandId id{};
// From docs/ke.md (ESC bindings)
ASSERT_TRUE(KLookupEscCommand('b', id));
ASSERT_EQ(id, CommandId::WordPrev);
ASSERT_TRUE(KLookupEscCommand('f', id));
ASSERT_EQ(id, CommandId::WordNext);
ASSERT_TRUE(KLookupEscCommand('d', id));
ASSERT_EQ(id, CommandId::DeleteWordNext);
ASSERT_TRUE(KLookupEscCommand('q', id));
ASSERT_EQ(id, CommandId::ReflowParagraph);
ASSERT_TRUE(KLookupEscCommand('w', id));
ASSERT_EQ(id, CommandId::CopyRegion);
// ESC BACKSPACE
ASSERT_TRUE(KLookupEscCommand(KEY_BACKSPACE, id));
ASSERT_EQ(id, CommandId::DeleteWordPrev);
ASSERT_EQ(KLookupEscCommand('z', id), false);
}