Something went wrong. Try again.
A fork of https://github.com/crosspoint-reader/crosspoint-reader
Something went wrong. Try again.
2.0 kB · 46 lines
C++
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include <gtest/gtest.h>
#include <cstdint>
#include "util/HomeButtonInput.h"
TEST(HomeButtonInput, RecognizesConfiguredGestures) { using A = HomeButtonAction; HomeButtonInput input; auto tick = [&](uint32_t now, bool tap = false, bool hold = false, bool swipe = false, bool press = false) { return input.update(now, tap, hold, swipe, press, A::Home, A::ToggleFrontlight, A::ReaderMenu); }; EXPECT_EQ(tick(0, true), A::Ignore); EXPECT_EQ(tick(350), A::Ignore); EXPECT_EQ(tick(351), A::Home); EXPECT_EQ(tick(352), A::Ignore); EXPECT_EQ(tick(1000, true), A::Ignore); EXPECT_EQ(tick(1350, true), A::ToggleFrontlight); EXPECT_EQ(tick(1701), A::Ignore); EXPECT_EQ(tick(2000, false, true), A::ReaderMenu); EXPECT_EQ(tick(2001), A::Ignore); // Tap then hold: the second contact prevents an early single-tap action. EXPECT_EQ(tick(3000, true), A::Ignore); EXPECT_EQ(tick(3200, false, false, false, true), A::Ignore); EXPECT_EQ(tick(3400), A::Ignore); EXPECT_EQ(tick(3900, false, true), A::ReaderMenu); EXPECT_EQ(tick(4000), A::Ignore); // A bezel swipe cancels the Home-key event and any deferred action. EXPECT_EQ(tick(5000, true), A::Ignore); EXPECT_EQ(tick(5100, true, false, true), A::Ignore); EXPECT_EQ(tick(5500), A::Ignore); EXPECT_EQ(tick(6000, true), A::Ignore); input.reset(); EXPECT_EQ(tick(6500), A::Ignore); // Unsigned subtraction remains valid over the millisecond clock wrap. EXPECT_EQ(tick(UINT32_MAX - 100, true), A::Ignore); EXPECT_EQ(tick(100, true), A::ToggleFrontlight); EXPECT_EQ(tick(UINT32_MAX - 100, true), A::Ignore); EXPECT_EQ(tick(251), A::Home); // Two separated taps each produce a single action. EXPECT_EQ(tick(7000, true), A::Ignore); EXPECT_EQ(tick(7400, true), A::Home); EXPECT_EQ(tick(7751), A::Home); // Disabling double tap removes the single-tap delay. EXPECT_EQ(input.update(8000, true, false, false, false, A::Bookmark, A::Ignore, A::ReaderMenu), A::Bookmark);}