Files
sloposk/tests/tst_shiftstate.cpp
T
ericek111andClaude Opus 5.5 5277ab16ff Fix double-space period, shift double-tap; settings; letters from system keymap
- Double-space replaced the space via a Backspace keysym, which clients
  apply after the commit: use delete_surrounding_text with the commit
- Tests use a shared FakeEngine that applies ops to a simulated field
- Double-tap shift locks at a sentence start; typing between taps doesn't
- Organization name set: config lives in ~/.config/sloposk/
- Settings (auto-capitalization, double-space period) with a ⚙ panel
- Letter rows come from the compositor's XKB keymap; other letters of the
  layout become long-press alternates; globe switches the system layout
  over org.kde.keyboard
- One JSON template for non-letter layers; stretch keys even out rows

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 20:28:39 +02:00

118 lines
2.7 KiB
C++

#include "input/ShiftState.h"
#include <QTest>
using Mode = ShiftState::Mode;
class TestShiftState : public QObject
{
Q_OBJECT
private Q_SLOTS:
void tapShiftsOneCharacter()
{
ShiftState shift;
shift.press(0);
shift.release();
QCOMPARE(shift.mode(), Mode::Once);
shift.characterTyped();
QCOMPARE(shift.mode(), Mode::Off);
}
void doubleTapLocks()
{
ShiftState shift;
shift.press(0);
shift.release();
shift.press(200);
shift.release();
QCOMPARE(shift.mode(), Mode::Locked);
shift.characterTyped();
shift.characterTyped();
QCOMPARE(shift.mode(), Mode::Locked);
}
void doubleTapLocksAfterAutomaticShift()
{
ShiftState shift;
shift.setAutomatic(true);
shift.press(0); // turns auto-shift off...
shift.release();
shift.press(200); // ...and the second tap locks
shift.release();
QCOMPARE(shift.mode(), Mode::Locked);
}
void tapAfterUnlockIsNotDoubleTap()
{
ShiftState shift;
shift.press(0);
shift.press(100); // locked
shift.press(1000); // unlocks
shift.press(1100);
QCOMPARE(shift.mode(), Mode::Once);
}
void typingBetweenTapsIsNotDoubleTap()
{
ShiftState shift;
shift.press(0);
shift.release();
shift.characterTyped();
shift.press(200);
QCOMPARE(shift.mode(), Mode::Once);
}
void tapUnlocks()
{
ShiftState shift;
shift.press(0);
shift.press(100);
shift.press(1000);
QCOMPARE(shift.mode(), Mode::Off);
}
void slowSecondTapTurnsOff()
{
ShiftState shift;
shift.press(0);
shift.release();
shift.press(ShiftState::DoubleTapMs + 1);
shift.release();
QCOMPARE(shift.mode(), Mode::Off);
}
void holdShiftsEveryCharacterUntilRelease()
{
ShiftState shift;
shift.press(0);
shift.characterTyped();
shift.characterTyped();
QCOMPARE(shift.mode(), Mode::Once);
shift.release();
QCOMPARE(shift.mode(), Mode::Off);
}
void automaticIgnoredWhileLocked()
{
ShiftState shift;
shift.press(0);
shift.press(100);
shift.release();
shift.setAutomatic(false);
QCOMPARE(shift.mode(), Mode::Locked);
}
void automaticCapitalizes()
{
ShiftState shift;
shift.setAutomatic(true);
QCOMPARE(shift.mode(), Mode::Once);
shift.characterTyped();
QCOMPARE(shift.mode(), Mode::Off);
}
};
QTEST_GUILESS_MAIN(TestShiftState)
#include "tst_shiftstate.moc"