keyboard stuff
at master 117 lines 3.0 kB view raw
1/* Copyright 2021 Balz Guenat 2 * 3 * This program is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published by 5 * the Free Software Foundation, either version 2 of the License, or 6 * (at your option) any later version. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 15 */ 16 17#include "gtest/gtest.h" 18#include "gmock/gmock.h" 19#include <vector> 20#include <algorithm> 21#include <stdio.h> 22 23extern "C" { 24#include "encoder.h" 25#include "keyboard.h" 26#include "encoder/tests/mock_split.h" 27} 28 29struct update { 30 int8_t index; 31 bool clockwise; 32}; 33 34uint8_t num_updates = 0; 35 36bool isMaster; 37bool isLeftHand; 38 39bool is_keyboard_master(void) { 40 return isMaster; 41} 42 43bool encoder_update_kb(uint8_t index, bool clockwise) { 44 if (!isMaster) { 45 ADD_FAILURE() << "We shouldn't get here."; 46 } 47 num_updates++; 48 return true; 49} 50 51bool setAndRead(pin_t pin, bool val) { 52 setPin(pin, val); 53 return encoder_task(); 54} 55 56class EncoderSplitTestRole : public ::testing::Test { 57 protected: 58 void SetUp() override { 59 num_updates = 0; 60 for (int i = 0; i < 32; i++) { 61 pinIsInputHigh[i] = 0; 62 pins[i] = 0; 63 } 64 } 65}; 66 67TEST_F(EncoderSplitTestRole, TestPrimaryLeft) { 68 isMaster = true; 69 isLeftHand = true; 70 encoder_init(); 71 // send 4 pulses. with resolution 4, that's one step and we should get 1 update. 72 setAndRead(0, false); 73 setAndRead(1, false); 74 setAndRead(0, true); 75 setAndRead(1, true); 76 77 EXPECT_EQ(num_updates, 1); // one update received 78} 79 80TEST_F(EncoderSplitTestRole, TestPrimaryRight) { 81 isMaster = true; 82 isLeftHand = false; 83 encoder_init(); 84 // send 4 pulses. with resolution 4, that's one step and we should get 1 update. 85 setAndRead(6, false); 86 setAndRead(7, false); 87 setAndRead(6, true); 88 setAndRead(7, true); 89 90 EXPECT_EQ(num_updates, 1); // one update received 91} 92 93TEST_F(EncoderSplitTestRole, TestNotPrimaryLeft) { 94 isMaster = false; 95 isLeftHand = true; 96 encoder_init(); 97 // send 4 pulses. with resolution 4, that's one step and we should get 1 update. 98 setAndRead(0, false); 99 setAndRead(1, false); 100 setAndRead(0, true); 101 setAndRead(1, true); 102 103 EXPECT_EQ(num_updates, 0); // zero updates received 104} 105 106TEST_F(EncoderSplitTestRole, TestNotPrimaryRight) { 107 isMaster = false; 108 isLeftHand = false; 109 encoder_init(); 110 // send 4 pulses. with resolution 4, that's one step and we should get 1 update. 111 setAndRead(6, false); 112 setAndRead(7, false); 113 setAndRead(6, true); 114 setAndRead(7, true); 115 116 EXPECT_EQ(num_updates, 0); // zero updates received 117}