From cbdd2b30eb1a481b2384a24f4825e6ad2898de3e Mon Sep 17 00:00:00 2001 From: Jesse Vincent Date: Mon, 9 Nov 2020 23:34:39 -0800 Subject: [PATCH] Port issue 941 test case to ktest --- tests/issues/941/test.ktest | 63 +++++++++++++++ tests/issues/941/test/testcase.cpp | 126 ----------------------------- 2 files changed, 63 insertions(+), 126 deletions(-) create mode 100644 tests/issues/941/test.ktest delete mode 100644 tests/issues/941/test/testcase.cpp diff --git a/tests/issues/941/test.ktest b/tests/issues/941/test.ktest new file mode 100644 index 00000000..11f29651 --- /dev/null +++ b/tests/issues/941/test.ktest @@ -0,0 +1,63 @@ +TYPE Issue941 +NAME one keypress per cycle + +KEYSWITCH A 2 1 +KEYSWITCH S 2 2 +KEYSWITCH D 2 3 + +RUN 10 ms + +PRESS A +RUN 1 cycle +EXPECT keyboard-report Key_A # Report should contain only `A` + +RUN 10 ms + +PRESS S +RUN 1 cycle +EXPECT keyboard-report Key_A, Key_S # Report should contain 'A' and 'S' + +RUN 25 ms + +RELEASE A + +RUN 1 cycle +EXPECT keyboard-report Key_S # Report should contain only 'S' + +RELEASE S +RUN 1 cycle +EXPECT keyboard-report empty # Report should be empty + +RUN 10 ms + +# TODO : this should be another test cycle "Simultaneous keypresses" +# NAME Simultaneous keypresses + + +# Press three keys in one scan cycle: + +RUN 10 ms + +PRESS A +PRESS S +PRESS D + +# This test is expected to fail if Kaleidoscope becomes event-driven; +# instead, there will be three reports here: the first will contain `D`, the +# second will add `S`, and the third will add `A` (I could have that wrong; +# it should be in keyscan order). + +RUN 1 cycle +EXPECT keyboard-report Key_A, Key_S # Report should contain `A` and `S` +EXPECT keyboard-report Key_A, Key_S, Key_D # Report should contain `A` , `S`, and `D` + +# Release all three in one scan cycle: + +RUN 25 ms + +RELEASE A +RELEASE S +RELEASE D + +RUN 1 cycles +EXPECT keyboard-report empty # Report should be empty diff --git a/tests/issues/941/test/testcase.cpp b/tests/issues/941/test/testcase.cpp deleted file mode 100644 index 691b2034..00000000 --- a/tests/issues/941/test/testcase.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/* -*- mode: c++ -*- - * Copyright (C) 2020 Keyboard.io, Inc. - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see . - */ - -#include "testing/setup-googletest.h" - -SETUP_GOOGLETEST(); - -namespace kaleidoscope { -namespace testing { -namespace { - -constexpr KeyAddr key_addr_A{2, 1}; -constexpr KeyAddr key_addr_S{2, 2}; -constexpr KeyAddr key_addr_D{2, 3}; - -using ::testing::IsEmpty; - -class Issue941 : public VirtualDeviceTest {}; - -TEST_F(Issue941, OneKeypressPerCycle) { - - std::unique_ptr state{nullptr}; - std::set expected_keycodes{}; - - // Press `A` - sim_.Press(key_addr_A); - expected_keycodes.insert(Key_A.getKeyCode()); - - state = VirtualDeviceTest::RunCycle(); - - // Press `S` - sim_.Press(key_addr_S); - expected_keycodes.insert(Key_S.getKeyCode()); - - state = VirtualDeviceTest::RunCycle(); - - ASSERT_EQ(state->HIDReports()->Keyboard().size(), 1); - EXPECT_THAT( - state->HIDReports()->Keyboard(0).ActiveKeycodes(), - ::testing::ElementsAreArray(expected_keycodes) - ); - - // Release `A` - sim_.Release(key_addr_A); - expected_keycodes.erase(Key_A.getKeyCode()); - - // Release `S` - sim_.Release(key_addr_S); - expected_keycodes.erase(Key_S.getKeyCode()); - - // Run one cycle with two keys toggled off - state = VirtualDeviceTest::RunCycle(); - - ASSERT_EQ(state->HIDReports()->Keyboard().size(), 1); - EXPECT_THAT( - state->HIDReports()->Keyboard(0).ActiveKeycodes(), - IsEmpty() - ); -} - -TEST_F(Issue941, SimultaneousKeypresses) { - - std::unique_ptr state{nullptr}; - std::set expected_keycodes{}; - - // Press `A` - sim_.Press(key_addr_A); - expected_keycodes.insert(Key_A.getKeyCode()); - - // state = VirtualDeviceTest::RunCycle(); - - // Press `S` - sim_.Press(key_addr_S); - expected_keycodes.insert(Key_S.getKeyCode()); - - // Press `D` - sim_.Press(key_addr_D); - expected_keycodes.insert(Key_D.getKeyCode()); - - // Run one cycle with two keys toggled on - state = VirtualDeviceTest::RunCycle(); - - EXPECT_THAT(state->HIDReports()->Keyboard().size(), ::testing::Ge(1)); - int n = state->HIDReports()->Keyboard().size(); - EXPECT_THAT( - state->HIDReports()->Keyboard(n - 1).ActiveKeycodes(), - ::testing::ElementsAreArray(expected_keycodes) - ); - - // Release `A` - sim_.Release(key_addr_A); - expected_keycodes.erase(Key_A.getKeyCode()); - - // Release `S` - sim_.Release(key_addr_S); - expected_keycodes.erase(Key_S.getKeyCode()); - - // Release `D` - sim_.Release(key_addr_D); - expected_keycodes.erase(Key_D.getKeyCode()); - - // Run one cycle with two keys toggled off - state = VirtualDeviceTest::RunCycle(); - - EXPECT_THAT( - state->HIDReports()->Keyboard(0).ActiveKeycodes(), - IsEmpty() - ); -} - -} // namespace -} // namespace testing -} // namespace kaleidoscope