mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-10-17 09:23:10 +08:00
65 lines
3.3 KiB
C++
65 lines
3.3 KiB
C++
#include "keyboard.h"
|
|
#include <cassert>
|
|
#include <iostream>
|
|
using crossdesk::harmony::desktop::KeyboardState;
|
|
int main() {
|
|
KeyboardState keys;
|
|
assert(keys.Translate(2017, true) == "a");
|
|
assert(keys.Translate(2017, false) == "a");
|
|
keys.Translate(2047, true);
|
|
assert(keys.Translate(2017, true) == "A");
|
|
assert(keys.Translate(2017, true) == "A"); // repeat retains the original symbol
|
|
keys.Translate(2047, false);
|
|
assert(keys.Translate(2017, false) == "A"); // Shift was released first
|
|
keys.Translate(2047, true); keys.Translate(2048, true); keys.Translate(2047, false);
|
|
assert(keys.Translate(2001, true) == "!"); // the other Shift is still pressed
|
|
keys.Translate(2001, false); keys.Translate(2048, false);
|
|
assert(keys.Translate(2057, true) == "-"); keys.Translate(2057, false);
|
|
keys.Translate(2074, true); keys.Translate(2074, false);
|
|
assert(keys.Translate(2042, true) == "Z"); keys.Translate(2042, false);
|
|
keys.Translate(2047, true);
|
|
assert(keys.Translate(2042, true) == "z"); keys.Translate(2042, false);
|
|
keys.Translate(2072, true); keys.Reset();
|
|
assert(keys.Pressed().empty());
|
|
for (int code=2090; code<=2101; ++code) {
|
|
auto press=keys.Translate(code,true); assert(!press.empty()); assert(keys.Translate(code,false)==press);
|
|
}
|
|
assert(keys.Translate(2117, true) == ".");
|
|
assert(keys.Translate(99999, true).empty());
|
|
keys.Reset();
|
|
for (auto pair : {std::pair{2047, 2048}, std::pair{2072, 2073}, std::pair{2076, 2077}}) {
|
|
const auto left = keys.Translate(pair.first, true);
|
|
const auto right = keys.Translate(pair.second, true);
|
|
assert(!left.empty() && !right.empty() && left != right);
|
|
assert(keys.Translate(pair.first, false) == left && keys.IsPressed(pair.second));
|
|
assert(keys.Translate(pair.second, false) == right);
|
|
}
|
|
for (int code = 2816; code <= 2827; ++code) {
|
|
const auto press = keys.Translate(code, true);
|
|
assert(!press.empty() && keys.Translate(code, false) == press);
|
|
}
|
|
assert(!keys.Translate(2067, true).empty());
|
|
keys.Reset();
|
|
// The lock state changed while another application had keyboard focus.
|
|
assert(keys.Translate(2017, true, 0, true) == "A");
|
|
assert(keys.Translate(2017, false, 0, false) == "A");
|
|
assert(keys.Translate(2017, true, 0, false) == "a");
|
|
keys.Reset();
|
|
// Prefer the OS layout result to the US fallback, preserving paired releases.
|
|
assert(keys.Translate(2042, true, 'y') == "y");
|
|
assert(keys.Translate(2042, true, 'Y') == "y");
|
|
assert(keys.Translate(2042, false, 'Y') == "y");
|
|
assert(keys.Translate(2057, true, '?') == "?"); keys.Reset();
|
|
using namespace slint::platform::key_codes;
|
|
const auto utf8 = [](std::u8string_view key) { return std::string(reinterpret_cast<const char*>(key.data()), key.size()); };
|
|
assert(keys.Translate(2104, true, '1', {}, false) == utf8(End));
|
|
assert(keys.Translate(2104, false, '1', {}, true) == utf8(End));
|
|
assert(keys.Translate(2104, true, '1', {}, true) == "1"); keys.Reset();
|
|
assert(keys.Translate(2117, true, '.', {}, false) == utf8(Delete)); keys.Reset();
|
|
assert(keys.Translate(2045, true) == utf8(Alt));
|
|
assert(keys.Translate(2046, true) == utf8(AltGr));
|
|
assert(keys.Translate(2045, false) == utf8(Alt) && keys.IsPressed(2046));
|
|
assert(keys.Translate(2046, false) == utf8(AltGr));
|
|
std::cout << "Slint keyboard chords, repeat, focus release, punctuation and function keys passed\n";
|
|
}
|