]> git.donarmstrong.com Git - qmk_firmware.git/blob - tests/basic/test_macro.cpp
qwerty_code_friendly: configurable left thumb
[qmk_firmware.git] / tests / basic / test_macro.cpp
1 /* Copyright 2017 Fred Sundvik
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 "test_common.hpp"
18 #include "time.h"
19
20 using testing::InSequence;
21 using testing::InvokeWithoutArgs;
22
23 class Macro : public TestFixture {};
24
25 #define AT_TIME(t) WillOnce(InvokeWithoutArgs([current_time]() {EXPECT_EQ(timer_elapsed32(current_time), t);}))
26
27 TEST_F(Macro, PlayASimpleMacro) {
28     TestDriver driver;
29     InSequence s;
30     press_key(8, 0);
31     uint32_t current_time = timer_read32();
32     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)))
33         .AT_TIME(0);
34     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_H)))
35         .AT_TIME(0);
36     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)))
37         .AT_TIME(0);
38     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
39         .AT_TIME(0);
40     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_E)))
41         .AT_TIME(0);
42     // The macro system could actually skip these empty keyboard reports
43     // it should be enough to just send a report with the next key down
44     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
45         .AT_TIME(0);
46     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_L)))
47         .AT_TIME(0);
48     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
49         .AT_TIME(0);
50     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_L)))
51         .AT_TIME(0);
52     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
53         .AT_TIME(0);
54     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_O)))
55         .AT_TIME(0);
56     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
57         .AT_TIME(0);
58     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_SPACE)))
59         .AT_TIME(0);
60     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
61         .AT_TIME(0);
62     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)))
63         .AT_TIME(100);
64     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_W)))
65         .AT_TIME(100);
66     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)))
67         .AT_TIME(100);
68     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
69         .AT_TIME(100);
70     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_O)))
71     // BUG: The timer should not really have advanced 10 ms here
72     // See issue #1477
73         .AT_TIME(110);
74     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
75     // BUG: The timer should not advance on both keydown and key-up
76     // See issue #1477
77         .AT_TIME(120);
78     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_R)))
79         .AT_TIME(130);
80     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
81         .AT_TIME(140);
82     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_L)))
83         .AT_TIME(150);
84     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
85         .AT_TIME(160);
86     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_D)))
87         .AT_TIME(170);
88     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
89         .AT_TIME(180);
90     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)))
91         .AT_TIME(190);
92     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_1)))
93         .AT_TIME(200);
94     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)))
95         .AT_TIME(210);
96     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
97         .AT_TIME(220);
98     run_one_scan_loop();
99 }