#include "input/ShiftState.h" #include 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"