diff options
Diffstat (limited to 'tests/auto/wasm/qwasmkeytranslator/tst_qwasmkeytranslator.cpp')
-rw-r--r-- | tests/auto/wasm/qwasmkeytranslator/tst_qwasmkeytranslator.cpp | 425 |
1 files changed, 425 insertions, 0 deletions
diff --git a/tests/auto/wasm/qwasmkeytranslator/tst_qwasmkeytranslator.cpp b/tests/auto/wasm/qwasmkeytranslator/tst_qwasmkeytranslator.cpp new file mode 100644 index 0000000000..de06c298df --- /dev/null +++ b/tests/auto/wasm/qwasmkeytranslator/tst_qwasmkeytranslator.cpp @@ -0,0 +1,425 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include "../../../../src/plugins/platforms/wasm/qwasmkeytranslator.h" + +#include "../../../../src/plugins/platforms/wasm/qwasmevent.h" + +#include <QTest> + +#include <emscripten/val.h> + +namespace { +emscripten::val makeDeadKeyJsEvent(QString code, Qt::KeyboardModifiers modifiers) +{ + auto jsEvent = emscripten::val::object(); + jsEvent.set("code", emscripten::val(code.toStdString())); + jsEvent.set("key", emscripten::val("Dead")); + jsEvent.set("shiftKey", emscripten::val(modifiers.testFlag(Qt::ShiftModifier))); + jsEvent.set("ctrlKey", emscripten::val(false)); + jsEvent.set("altKey", emscripten::val(false)); + jsEvent.set("metaKey", emscripten::val(false)); + + return jsEvent; +} + +emscripten::val makeKeyJsEvent(QString code, QString key, Qt::KeyboardModifiers modifiers) +{ + auto jsEvent = emscripten::val::object(); + jsEvent.set("code", emscripten::val(code.toStdString())); + jsEvent.set("key", emscripten::val(key.toStdString())); + jsEvent.set("shiftKey", emscripten::val(modifiers.testFlag(Qt::ShiftModifier))); + jsEvent.set("ctrlKey", emscripten::val(modifiers.testFlag(Qt::ControlModifier))); + jsEvent.set("altKey", emscripten::val(modifiers.testFlag(Qt::AltModifier))); + jsEvent.set("metaKey", emscripten::val(modifiers.testFlag(Qt::MetaModifier))); + + return jsEvent; +} +} // unnamed namespace + +class tst_QWasmKeyTranslator : public QObject +{ + Q_OBJECT + +public: + tst_QWasmKeyTranslator() = default; + +private slots: + void init(); + + void modifyByDeadKey_data(); + void modifyByDeadKey(); + void deadKeyModifiesOnlyOneKeyPressAndUp(); + void deadKeyIgnoresKeyUpPrecedingKeyDown(); + void onlyKeysProducingTextAreModifiedByDeadKeys(); +}; + +void tst_QWasmKeyTranslator::init() { } + +void tst_QWasmKeyTranslator::modifyByDeadKey_data() +{ + QTest::addColumn<QString>("deadKeyCode"); + QTest::addColumn<Qt::KeyboardModifiers>("deadKeyModifiers"); + QTest::addColumn<QString>("targetKeyCode"); + QTest::addColumn<QString>("targetKey"); + QTest::addColumn<Qt::Key>("targetQtKey"); + QTest::addColumn<Qt::KeyboardModifiers>("modifiers"); + QTest::addColumn<QString>("expectedModifiedKey"); + + QTest::newRow("à (Backquote)") << "Backquote" << Qt::KeyboardModifiers() << "KeyA" + << "a" << Qt::Key_Agrave << Qt::KeyboardModifiers() << "à"; + QTest::newRow("À (Backquote)") + << "Backquote" << Qt::KeyboardModifiers() << "KeyA" + << "A" << Qt::Key_Agrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "À"; + QTest::newRow("à (IntlBackslash)") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyA" + << "a" << Qt::Key_Agrave << Qt::KeyboardModifiers() << "à"; + QTest::newRow("À (IntlBackslash)") + << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyA" + << "A" << Qt::Key_Agrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "À"; + QTest::newRow("á (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyA" + << "a" << Qt::Key_Aacute << Qt::KeyboardModifiers() << "á"; + QTest::newRow("Á (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyA" + << "A" << Qt::Key_Aacute << Qt::KeyboardModifiers(Qt::ShiftModifier) + << "Á"; + QTest::newRow("á") << "KeyE" << Qt::KeyboardModifiers() << "KeyA" + << "a" << Qt::Key_Aacute << Qt::KeyboardModifiers() << "á"; + QTest::newRow("Á") << "KeyE" << Qt::KeyboardModifiers() << "KeyA" + << "A" << Qt::Key_Aacute << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Á"; + QTest::newRow("ä (Mac Umlaut)") << "KeyU" << Qt::KeyboardModifiers() << "KeyA" + << "a" << Qt::Key_Adiaeresis << Qt::KeyboardModifiers() << "ä"; + QTest::newRow("Ä (Mac Umlaut)") + << "KeyU" << Qt::KeyboardModifiers() << "KeyA" + << "A" << Qt::Key_Adiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ä"; + QTest::newRow("ä (Shift+Quote)") + << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyA" + << "a" << Qt::Key_Adiaeresis << Qt::KeyboardModifiers() << "ä"; + QTest::newRow("Ä (Shift+Quote)") + << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyA" + << "A" << Qt::Key_Adiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ä"; + QTest::newRow("â") << "KeyI" << Qt::KeyboardModifiers() << "KeyA" + << "a" << Qt::Key_Acircumflex << Qt::KeyboardModifiers() << "â"; + QTest::newRow("Â") << "KeyI" << Qt::KeyboardModifiers() << "KeyA" + << "A" << Qt::Key_Acircumflex << Qt::KeyboardModifiers(Qt::ShiftModifier) + << "Â"; + QTest::newRow("â (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyA" + << "a" << Qt::Key_Acircumflex << Qt::KeyboardModifiers() << "â"; + QTest::newRow("Â (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyA" + << "A" << Qt::Key_Acircumflex + << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Â"; + QTest::newRow("ã") << "KeyN" << Qt::KeyboardModifiers() << "KeyA" + << "a" << Qt::Key_Atilde << Qt::KeyboardModifiers() << "ã"; + QTest::newRow("Ã") << "KeyN" << Qt::KeyboardModifiers() << "KeyA" + << "A" << Qt::Key_Atilde << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ã"; + + QTest::newRow("è (Backquote)") << "Backquote" << Qt::KeyboardModifiers() << "KeyE" + << "e" << Qt::Key_Egrave << Qt::KeyboardModifiers() << "è"; + QTest::newRow("È (Backquote)") + << "Backquote" << Qt::KeyboardModifiers() << "KeyE" + << "E" << Qt::Key_Egrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "È"; + QTest::newRow("è") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyE" + << "e" << Qt::Key_Egrave << Qt::KeyboardModifiers() << "è"; + QTest::newRow("È") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyE" + << "E" << Qt::Key_Egrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "È"; + QTest::newRow("é") << "KeyE" << Qt::KeyboardModifiers() << "KeyE" + << "e" << Qt::Key_Eacute << Qt::KeyboardModifiers() << "é"; + QTest::newRow("É") << "KeyE" << Qt::KeyboardModifiers() << "KeyE" + << "E" << Qt::Key_Eacute << Qt::KeyboardModifiers(Qt::ShiftModifier) << "É"; + QTest::newRow("é (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyE" + << "e" << Qt::Key_Eacute << Qt::KeyboardModifiers() << "é"; + QTest::newRow("É (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyE" + << "E" << Qt::Key_Eacute << Qt::KeyboardModifiers(Qt::ShiftModifier) + << "É"; + QTest::newRow("ë (Mac Umlaut)") << "KeyU" << Qt::KeyboardModifiers() << "KeyE" + << "e" << Qt::Key_Ediaeresis << Qt::KeyboardModifiers() << "ë"; + QTest::newRow("Ë (Mac Umlaut)") + << "KeyU" << Qt::KeyboardModifiers() << "KeyE" + << "E" << Qt::Key_Ediaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ë"; + QTest::newRow("ë (Shift+Quote)") + << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyE" + << "e" << Qt::Key_Ediaeresis << Qt::KeyboardModifiers() << "ë"; + QTest::newRow("Ë (Shift+Quote)") + << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyE" + << "E" << Qt::Key_Ediaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ë"; + QTest::newRow("ê") << "KeyI" << Qt::KeyboardModifiers() << "KeyE" + << "e" << Qt::Key_Ecircumflex << Qt::KeyboardModifiers() << "ê"; + QTest::newRow("Ê") << "KeyI" << Qt::KeyboardModifiers() << "KeyE" + << "E" << Qt::Key_Ecircumflex << Qt::KeyboardModifiers(Qt::ShiftModifier) + << "Ê"; + QTest::newRow("ê (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyE" + << "e" << Qt::Key_Ecircumflex << Qt::KeyboardModifiers() << "ê"; + QTest::newRow("Ê (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyE" + << "E" << Qt::Key_Ecircumflex + << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ê"; + + QTest::newRow("ì (Backquote)") << "Backquote" << Qt::KeyboardModifiers() << "KeyI" + << "i" << Qt::Key_Igrave << Qt::KeyboardModifiers() << "ì"; + QTest::newRow("Ì (Backquote)") + << "Backquote" << Qt::KeyboardModifiers() << "KeyI" + << "I" << Qt::Key_Igrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ì"; + QTest::newRow("ì") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyI" + << "i" << Qt::Key_Igrave << Qt::KeyboardModifiers() << "ì"; + QTest::newRow("Ì") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyI" + << "I" << Qt::Key_Igrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ì"; + QTest::newRow("í") << "KeyE" << Qt::KeyboardModifiers() << "KeyI" + << "i" << Qt::Key_Iacute << Qt::KeyboardModifiers() << "í"; + QTest::newRow("Í") << "KeyE" << Qt::KeyboardModifiers() << "KeyI" + << "I" << Qt::Key_Iacute << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Í"; + QTest::newRow("í (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyI" + << "i" << Qt::Key_Iacute << Qt::KeyboardModifiers() << "í"; + QTest::newRow("Í (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyI" + << "I" << Qt::Key_Iacute << Qt::KeyboardModifiers(Qt::ShiftModifier) + << "Í"; + QTest::newRow("ï (Mac Umlaut)") << "KeyU" << Qt::KeyboardModifiers() << "KeyI" + << "i" << Qt::Key_Idiaeresis << Qt::KeyboardModifiers() << "ï"; + QTest::newRow("Ï (Mac Umlaut)") + << "KeyU" << Qt::KeyboardModifiers() << "KeyI" + << "I" << Qt::Key_Idiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ï"; + QTest::newRow("ï (Shift+Quote)") + << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyI" + << "i" << Qt::Key_Idiaeresis << Qt::KeyboardModifiers() << "ï"; + QTest::newRow("Ï (Shift+Quote)") + << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyI" + << "I" << Qt::Key_Idiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ï"; + QTest::newRow("î") << "KeyI" << Qt::KeyboardModifiers() << "KeyI" + << "i" << Qt::Key_Icircumflex << Qt::KeyboardModifiers() << "î"; + QTest::newRow("Î") << "KeyI" << Qt::KeyboardModifiers() << "KeyI" + << "I" << Qt::Key_Icircumflex << Qt::KeyboardModifiers(Qt::ShiftModifier) + << "Î"; + QTest::newRow("î (^ key)") << "Digit6" << Qt::KeyboardModifiers() << "KeyI" + << "i" << Qt::Key_Icircumflex << Qt::KeyboardModifiers() << "î"; + QTest::newRow("Î (^ key)") << "Digit6" << Qt::KeyboardModifiers() << "KeyI" + << "I" << Qt::Key_Icircumflex + << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Î"; + + QTest::newRow("ñ") << "KeyN" << Qt::KeyboardModifiers() << "KeyN" + << "n" << Qt::Key_Ntilde << Qt::KeyboardModifiers() << "ñ"; + QTest::newRow("Ñ") << "KeyN" << Qt::KeyboardModifiers() << "KeyN" + << "N" << Qt::Key_Ntilde << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ñ"; + + QTest::newRow("ò (Backquote)") << "Backquote" << Qt::KeyboardModifiers() << "KeyO" + << "o" << Qt::Key_Ograve << Qt::KeyboardModifiers() << "ò"; + QTest::newRow("Ò (Backquote)") + << "Backquote" << Qt::KeyboardModifiers() << "KeyO" + << "O" << Qt::Key_Ograve << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ò"; + QTest::newRow("ò") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyO" + << "o" << Qt::Key_Ograve << Qt::KeyboardModifiers() << "ò"; + QTest::newRow("Ò") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyO" + << "O" << Qt::Key_Ograve << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ò"; + QTest::newRow("ó") << "KeyE" << Qt::KeyboardModifiers() << "KeyO" + << "o" << Qt::Key_Oacute << Qt::KeyboardModifiers() << "ó"; + QTest::newRow("Ó") << "KeyE" << Qt::KeyboardModifiers() << "KeyO" + << "O" << Qt::Key_Oacute << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ó"; + QTest::newRow("ó (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyO" + << "o" << Qt::Key_Oacute << Qt::KeyboardModifiers() << "ó"; + QTest::newRow("Ó (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyO" + << "O" << Qt::Key_Oacute << Qt::KeyboardModifiers(Qt::ShiftModifier) + << "Ó"; + QTest::newRow("ö (Mac Umlaut)") << "KeyU" << Qt::KeyboardModifiers() << "KeyO" + << "o" << Qt::Key_Odiaeresis << Qt::KeyboardModifiers() << "ö"; + QTest::newRow("Ö (Mac Umlaut)") + << "KeyU" << Qt::KeyboardModifiers() << "KeyO" + << "O" << Qt::Key_Odiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ö"; + QTest::newRow("ö (Shift+Quote)") + << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyO" + << "o" << Qt::Key_Odiaeresis << Qt::KeyboardModifiers() << "ö"; + QTest::newRow("Ö (Shift+Quote)") + << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyO" + << "O" << Qt::Key_Odiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ö"; + QTest::newRow("ô") << "KeyI" << Qt::KeyboardModifiers() << "KeyO" + << "o" << Qt::Key_Ocircumflex << Qt::KeyboardModifiers() << "ô"; + QTest::newRow("Ô") << "KeyI" << Qt::KeyboardModifiers() << "KeyO" + << "O" << Qt::Key_Ocircumflex << Qt::KeyboardModifiers(Qt::ShiftModifier) + << "Ô"; + QTest::newRow("ô (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyO" + << "o" << Qt::Key_Ocircumflex << Qt::KeyboardModifiers() << "ô"; + QTest::newRow("Ô (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyO" + << "O" << Qt::Key_Ocircumflex + << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ô"; + QTest::newRow("õ") << "KeyN" << Qt::KeyboardModifiers() << "KeyO" + << "o" << Qt::Key_Otilde << Qt::KeyboardModifiers() << "õ"; + QTest::newRow("Õ") << "KeyN" << Qt::KeyboardModifiers() << "KeyO" + << "O" << Qt::Key_Otilde << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Õ"; + + QTest::newRow("ù (Backquote)") << "Backquote" << Qt::KeyboardModifiers() << "KeyU" + << "u" << Qt::Key_Ugrave << Qt::KeyboardModifiers() << "ù"; + QTest::newRow("Ù (Backquote)") + << "Backquote" << Qt::KeyboardModifiers() << "KeyU" + << "U" << Qt::Key_Ugrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ù"; + QTest::newRow("ù") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyU" + << "u" << Qt::Key_Ugrave << Qt::KeyboardModifiers() << "ù"; + QTest::newRow("Ù") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyU" + << "U" << Qt::Key_Ugrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ù"; + QTest::newRow("ú") << "KeyE" << Qt::KeyboardModifiers() << "KeyU" + << "u" << Qt::Key_Uacute << Qt::KeyboardModifiers() << "ú"; + QTest::newRow("Ú") << "KeyE" << Qt::KeyboardModifiers() << "KeyU" + << "U" << Qt::Key_Uacute << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ú"; + QTest::newRow("ú (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyU" + << "u" << Qt::Key_Uacute << Qt::KeyboardModifiers() << "ú"; + QTest::newRow("Ú (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyU" + << "U" << Qt::Key_Uacute << Qt::KeyboardModifiers(Qt::ShiftModifier) + << "Ú"; + QTest::newRow("ü (Mac Umlaut)") << "KeyU" << Qt::KeyboardModifiers() << "KeyU" + << "u" << Qt::Key_Udiaeresis << Qt::KeyboardModifiers() << "ü"; + QTest::newRow("Ü (Mac Umlaut)") + << "KeyU" << Qt::KeyboardModifiers() << "KeyU" + << "U" << Qt::Key_Udiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ü"; + QTest::newRow("ü (Shift+Quote)") + << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyU" + << "u" << Qt::Key_Udiaeresis << Qt::KeyboardModifiers() << "ü"; + QTest::newRow("Ü (Shift+Quote)") + << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyU" + << "U" << Qt::Key_Udiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ü"; + QTest::newRow("û") << "KeyI" << Qt::KeyboardModifiers() << "KeyU" + << "û" << Qt::Key_Ucircumflex << Qt::KeyboardModifiers() << "û"; + QTest::newRow("Û") << "KeyI" << Qt::KeyboardModifiers() << "KeyU" + << "U" << Qt::Key_Ucircumflex << Qt::KeyboardModifiers(Qt::ShiftModifier) + << "Û"; + QTest::newRow("û (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyU" + << "û" << Qt::Key_Ucircumflex << Qt::KeyboardModifiers() << "û"; + QTest::newRow("Û (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyU" + << "U" << Qt::Key_Ucircumflex + << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Û"; + + QTest::newRow("ý") << "KeyE" << Qt::KeyboardModifiers() << "KeyY" + << "y" << Qt::Key_Yacute << Qt::KeyboardModifiers() << "ý"; + QTest::newRow("Ý") << "KeyE" << Qt::KeyboardModifiers() << "KeyY" + << "Y" << Qt::Key_Yacute << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ý"; + QTest::newRow("ý (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyY" + << "y" << Qt::Key_Yacute << Qt::KeyboardModifiers() << "ý"; + QTest::newRow("Ý (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyY" + << "Y" << Qt::Key_Yacute << Qt::KeyboardModifiers(Qt::ShiftModifier) + << "Ý"; + QTest::newRow("ÿ (Mac Umlaut)") << "KeyU" << Qt::KeyboardModifiers() << "KeyY" + << "y" << Qt::Key_ydiaeresis << Qt::KeyboardModifiers() << "ÿ"; + QTest::newRow("Ÿ (Mac Umlaut)") + << "KeyU" << Qt::KeyboardModifiers() << "KeyY" + << "Y" << Qt::Key_ydiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ÿ"; + QTest::newRow("ÿ (Shift+Quote)") + << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyY" + << "y" << Qt::Key_ydiaeresis << Qt::KeyboardModifiers() << "ÿ"; + QTest::newRow("Ÿ (Shift+Quote)") + << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyY" + << "Y" << Qt::Key_ydiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ÿ"; +} + +void tst_QWasmKeyTranslator::modifyByDeadKey() +{ + QFETCH(QString, deadKeyCode); + QFETCH(Qt::KeyboardModifiers, deadKeyModifiers); + QFETCH(QString, targetKeyCode); + QFETCH(QString, targetKey); + QFETCH(Qt::Key, targetQtKey); + QFETCH(Qt::KeyboardModifiers, modifiers); + QFETCH(QString, expectedModifiedKey); + + QWasmDeadKeySupport deadKeySupport; + + KeyEvent event(EventType::KeyDown, makeDeadKeyJsEvent(deadKeyCode, deadKeyModifiers)); + QCOMPARE(event.deadKey, true); + + deadKeySupport.applyDeadKeyTranslations(&event); + + KeyEvent eDown(EventType::KeyDown, makeKeyJsEvent(targetKeyCode, targetKey, modifiers)); + QCOMPARE(eDown.deadKey, false); + deadKeySupport.applyDeadKeyTranslations(&eDown); + QCOMPARE(eDown.deadKey, false); + QCOMPARE(eDown.text, expectedModifiedKey); + QCOMPARE(eDown.key, targetQtKey); + + KeyEvent eUp(EventType::KeyUp, makeKeyJsEvent(targetKeyCode, targetKey, modifiers)); + QCOMPARE(eUp.deadKey, false); + deadKeySupport.applyDeadKeyTranslations(&eUp); + QCOMPARE(eUp.text, expectedModifiedKey); + QCOMPARE(eUp.key, targetQtKey); +} + +void tst_QWasmKeyTranslator::deadKeyModifiesOnlyOneKeyPressAndUp() +{ + QWasmDeadKeySupport deadKeySupport; + KeyEvent event(EventType::KeyDown, makeDeadKeyJsEvent("KeyU", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&event); + + KeyEvent eDown(EventType::KeyDown, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&eDown); + QCOMPARE(eDown.text, "ü"); + QCOMPARE(eDown.key, Qt::Key_Udiaeresis); + + KeyEvent eUp(EventType::KeyUp, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&eUp); + QCOMPARE(eUp.text, "ü"); + QCOMPARE(eUp.key, Qt::Key_Udiaeresis); + + KeyEvent eDown2(EventType::KeyDown, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&eDown2); + QCOMPARE(eDown2.text, "u"); + QCOMPARE(eDown2.key, Qt::Key_U); + + KeyEvent eUp2(EventType::KeyUp, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&eUp2); + QCOMPARE(eUp2.text, "u"); + QCOMPARE(eUp2.key, Qt::Key_U); +} + +void tst_QWasmKeyTranslator::deadKeyIgnoresKeyUpPrecedingKeyDown() +{ + QWasmDeadKeySupport deadKeySupport; + + KeyEvent deadKeyDownEvent(EventType::KeyDown, + makeDeadKeyJsEvent("KeyU", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&deadKeyDownEvent); + + KeyEvent deadKeyUpEvent(EventType::KeyUp, makeDeadKeyJsEvent("KeyU", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&deadKeyUpEvent); + + KeyEvent otherKeyUpEvent(EventType::KeyUp, + makeKeyJsEvent("AltLeft", "Alt", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&otherKeyUpEvent); + + KeyEvent eDown(EventType::KeyDown, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&eDown); + QCOMPARE(eDown.text, "ü"); + QCOMPARE(eDown.key, Qt::Key_Udiaeresis); + + KeyEvent yetAnotherKeyUpEvent( + EventType::KeyUp, makeKeyJsEvent("ControlLeft", "Control", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&yetAnotherKeyUpEvent); + + KeyEvent eUp(EventType::KeyUp, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&eUp); + QCOMPARE(eUp.text, "ü"); + QCOMPARE(eUp.key, Qt::Key_Udiaeresis); +} + +void tst_QWasmKeyTranslator::onlyKeysProducingTextAreModifiedByDeadKeys() +{ + QWasmDeadKeySupport deadKeySupport; + + KeyEvent deadKeyDownEvent(EventType::KeyDown, + makeDeadKeyJsEvent("KeyU", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&deadKeyDownEvent); + + KeyEvent noTextKeyDown(EventType::KeyDown, + makeKeyJsEvent("AltLeft", "Alt", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&noTextKeyDown); + QCOMPARE(noTextKeyDown.text, ""); + QCOMPARE(noTextKeyDown.key, Qt::Key_Alt); + + KeyEvent noTextKeyUp(EventType::KeyUp, + makeKeyJsEvent("AltLeft", "Alt", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&noTextKeyUp); + QCOMPARE(noTextKeyDown.text, ""); + QCOMPARE(noTextKeyDown.key, Qt::Key_Alt); + + KeyEvent eDown(EventType::KeyDown, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&eDown); + QCOMPARE(eDown.text, "ü"); + QCOMPARE(eDown.key, Qt::Key_Udiaeresis); + + KeyEvent eUp(EventType::KeyUp, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers())); + deadKeySupport.applyDeadKeyTranslations(&eUp); + QCOMPARE(eUp.text, "ü"); + QCOMPARE(eUp.key, Qt::Key_Udiaeresis); +} + +QTEST_MAIN(tst_QWasmKeyTranslator) +#include "tst_qwasmkeytranslator.moc" |