You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
2.0 KiB
40 lines
2.0 KiB
#include "../src/ptt_key_chord.h" |
|
#include <cstdio> |
|
|
|
static int failures; |
|
#define CHECK(value) do { if (!(value)) { std::printf("FAIL line %d: %s\n", __LINE__, #value); failures++; } } while (0) |
|
int main() { |
|
// Физические CtrlL/WinL и ShiftL/ShiftR на Windows; алгоритм не зависит от платформы. |
|
PttKeyChord ctrlWin{162, 91}, shifts{160, 161}; |
|
CHECK(!pttChordHeld({}, {})); |
|
CHECK(!pttChordHeld(ctrlWin, {162})); |
|
CHECK(pttChordHeld(ctrlWin, {162, 91})); |
|
CHECK(pttChordHeld(ctrlWin, {162, 91, 65})); |
|
CHECK(!pttChordHeld(ctrlWin, {91})); // отпускание любого участника прекращает передачу |
|
CHECK(!pttChordHeld(shifts, {160})); |
|
CHECK(!pttChordHeld(shifts, {161})); |
|
CHECK(pttChordHeld(shifts, {160, 161})); |
|
CHECK(!pttChordHeld(ctrlWin, {163, 92})); // правые клавиши не подменяют левые |
|
CHECK(pttChordHeld({65, 66}, {65, 66})); // две обычные клавиши |
|
CHECK(pttDecodeChord(pttEncodeChord(shifts)) == shifts); |
|
CHECK(pttEncodeChord(ctrlWin) == "91,162"); |
|
CHECK(pttDecodeChord("0,162").isEmpty()); |
|
CHECK(pttDecodeChord("256").isEmpty()); |
|
CHECK(pttDecodeChord("Shift+F8").isEmpty()); |
|
CHECK(pttDecodeChord("91,invalid").isEmpty()); |
|
CHECK(pttDecodeChord("91,162,91") == ctrlWin); |
|
PttChordCapture capture; |
|
CHECK(!capture.observe({})); |
|
CHECK(!capture.observe({160})); |
|
CHECK(!capture.observe(shifts)); |
|
CHECK(!capture.observe({161})); // отпускание первой клавиши сохраняет полную комбинацию |
|
CHECK(capture.observe({})); |
|
CHECK(capture.candidate == shifts); |
|
capture = {}; |
|
CHECK(!capture.observe({65})); |
|
CHECK(!capture.observe({66})); |
|
CHECK(capture.observe({})); |
|
CHECK(capture.candidate == PttKeyChord{66}); // последовательные A/B не превращаются в A+B |
|
std::printf("PTT key chords: %s\n", failures ? "FAILED" : "PASSED"); |
|
return failures ? 1 : 0; |
|
}
|
|
|