aboutsummaryrefslogtreecommitdiff
path: root/tests/basic/test_macro.cpp
diff options
context:
space:
mode:
authorFred Sundvik <fsundvik@gmail.com>2017-07-02 01:06:59 +0300
committerJack Humbert <jack.humb@gmail.com>2017-07-08 21:59:51 -0400
commite5780a6dc66bb21969594f1b446916e36cf69253 (patch)
treebe170b59b369f3a6c9f099df137f977908b01db7 /tests/basic/test_macro.cpp
parent4087d6da0d60f51735f6ec2c34e5fdabcf9c4447 (diff)
downloadqmk_firmware-e5780a6dc66bb21969594f1b446916e36cf69253.tar.gz
qmk_firmware-e5780a6dc66bb21969594f1b446916e36cf69253.zip
Add tests for macros
Diffstat (limited to 'tests/basic/test_macro.cpp')
-rw-r--r--tests/basic/test_macro.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/tests/basic/test_macro.cpp b/tests/basic/test_macro.cpp
new file mode 100644
index 000000000..f1990bf6f
--- /dev/null
+++ b/tests/basic/test_macro.cpp
@@ -0,0 +1,97 @@
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.h"
18#include "time.h"
19
20using testing::InSequence;
21using testing::InvokeWithoutArgs;
22
23class Macro : public TestFixture {};
24
25#define AT_TIME(t) WillOnce(InvokeWithoutArgs([current_time]() {EXPECT_EQ(timer_elapsed32(current_time), t);}))
26
27TEST_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 .AT_TIME(110);
73 EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
74 // BUG: The timer should not advance on both keydown and key-up
75 .AT_TIME(120);
76 EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_R)))
77 .AT_TIME(130);
78 EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
79 .AT_TIME(140);
80 EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_L)))
81 .AT_TIME(150);
82 EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
83 .AT_TIME(160);
84 EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_D)))
85 .AT_TIME(170);
86 EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
87 .AT_TIME(180);
88 EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)))
89 .AT_TIME(190);
90 EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_1)))
91 .AT_TIME(200);
92 EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)))
93 .AT_TIME(210);
94 EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()))
95 .AT_TIME(220);
96 run_one_scan_loop();
97} \ No newline at end of file