/ test / tst_input_win32.cpp
tst_input_win32.cpp
  1  #include <QtTest/QtTest>
  2  
  3  #include <gui/input.h>
  4  #include "tst_input.h"
  5  
  6  class TestInputWin32 : public QObject
  7  {
  8  	Q_OBJECT
  9  
 10  private slots:
 11  	void LessThanModifierKeys() noexcept;
 12  	void SpecialKeys() noexcept;
 13  	void CtrlCaretWellFormed() noexcept;
 14  	void ShiftModifierLetter() noexcept;
 15  	void GermanKeyboardLayout() noexcept;
 16  	void FrenchBepoKeyboardLayout() noexcept;
 17  };
 18  
 19  void TestInputWin32::LessThanModifierKeys() noexcept
 20  {
 21  	QKeyEvent evLessThanControl{ QEvent::KeyPress, Qt::Key::Key_Less, Qt::ShiftModifier | Qt::ControlModifier, "<" };
 22  	QCOMPARE(NeovimQt::Input::convertKey(evLessThanControl), QString{ "<C-lt>" });
 23  
 24  	QKeyEvent evLessThanAlt{ QEvent::KeyPress, Qt::Key::Key_Less, Qt::ShiftModifier | Qt::AltModifier, "<" };
 25  	QCOMPARE(NeovimQt::Input::convertKey(evLessThanAlt), QString{ "<A-lt>" });
 26  
 27  	QKeyEvent evLessThanMeta{ QEvent::KeyPress, Qt::Key::Key_Less, Qt::ShiftModifier | Qt::MetaModifier, "<" };
 28  	QCOMPARE(NeovimQt::Input::convertKey(evLessThanMeta), QString{ "<lt>" });
 29  }
 30  
 31  void TestInputWin32::SpecialKeys() noexcept
 32  {
 33  	const QList<int> specialKeys{ NeovimQt::Input::GetSpecialKeysMap().keys() };
 34  
 35  	for (const auto k : specialKeys) {
 36  		// On Mac Meta is the Control key, treated as C-.
 37  		QList<InputTest> keyEventList{
 38  			{ QEvent::KeyPress, k, Qt::NoModifier,       "<%1>" },
 39  			{ QEvent::KeyPress, k, Qt::ControlModifier,  "<C-%1>" },
 40  			{ QEvent::KeyPress, k, Qt::AltModifier,      "<A-%1>" },
 41  			{ QEvent::KeyPress, k, Qt::MetaModifier,     "<%1>" },
 42  		};
 43  
 44  		for (const auto& keyTest : keyEventList) {
 45  			auto event = QKeyEvent(keyTest.event_type, keyTest.key, keyTest.modifiers);
 46  			QCOMPARE(NeovimQt::Input::convertKey(event),
 47  				keyTest.expected_input.arg(NeovimQt::Input::GetSpecialKeysMap().value(k)));
 48  		}
 49  	}
 50  }
 51  
 52  void TestInputWin32::CtrlCaretWellFormed() noexcept
 53  {
 54  	QKeyEvent evCtrl6{ QEvent::KeyPress, Qt::Key_6, Qt::ControlModifier, { "6" } };
 55  	QCOMPARE(NeovimQt::Input::convertKey(evCtrl6), QString{ "<C-^>" });
 56  
 57  	QKeyEvent evCtrlShift6{ QEvent::KeyPress, Qt::Key_AsciiCircum, Qt::ControlModifier | Qt::ShiftModifier, { "\u001E" } };
 58  	QCOMPARE(NeovimQt::Input::convertKey(evCtrlShift6), QString{ "<C-^>" });
 59  }
 60  
 61  void TestInputWin32::ShiftModifierLetter() noexcept
 62  {
 63  	// CTRL + B
 64  	QKeyEvent evCtrlB{ QEvent::KeyPress, Qt::Key_B, Qt::ControlModifier, QString{ "\u0002" } };
 65  	QCOMPARE(NeovimQt::Input::convertKey(evCtrlB), QString{ "<C-b>" });
 66  
 67  	// CTRL + SHIFT + B
 68  	QKeyEvent evCtrlShiftB{ QEvent::KeyPress, Qt::Key_B, Qt::ControlModifier | Qt::ShiftModifier,
 69  		QString{ "\u0002" } };
 70  	QCOMPARE(NeovimQt::Input::convertKey(evCtrlShiftB), QString{ "<C-S-B>" });
 71  }
 72  
 73  void TestInputWin32::GermanKeyboardLayout() noexcept
 74  {
 75  	QKeyEvent evAlt7{ QEvent::KeyPress, Qt::Key_BraceLeft, Qt::ControlModifier | Qt::AltModifier, "{" };
 76  	QCOMPARE(NeovimQt::Input::convertKey(evAlt7), QString{ "{" });
 77  
 78  	QKeyEvent evAlt8{ QEvent::KeyPress, Qt::Key_BracketLeft, Qt::ControlModifier | Qt::AltModifier, "[" };
 79  	QCOMPARE(NeovimQt::Input::convertKey(evAlt8), QString{ "[" });
 80  
 81  	QKeyEvent evAlt9{ QEvent::KeyPress, Qt::Key_BracketRight, Qt::ControlModifier | Qt::AltModifier, "]" };
 82  	QCOMPARE(NeovimQt::Input::convertKey(evAlt9), QString{ "]" });
 83  
 84  	QKeyEvent evAlt0{ QEvent::KeyPress, Qt::Key_BraceRight, Qt::ControlModifier | Qt::AltModifier, "}" };
 85  	QCOMPARE(NeovimQt::Input::convertKey(evAlt0), QString{ "}" });
 86  
 87  	QKeyEvent evKeyAt{ QEvent::KeyPress, Qt::Key_At, Qt::ControlModifier | Qt::AltModifier, "@" };
 88  	QCOMPARE(NeovimQt::Input::convertKey(evKeyAt), QString{ "@" });
 89  
 90  	QKeyEvent evKeyBSlash{ QEvent::KeyPress, Qt::Key_Backslash, Qt::ControlModifier | Qt::AltModifier, "\\" };
 91  	QCOMPARE(NeovimQt::Input::convertKey(evKeyBSlash), QString{ "<Bslash>" });
 92  
 93  	QKeyEvent evKeyTilde{ QEvent::KeyPress, Qt::Key_AsciiTilde, Qt::ControlModifier | Qt::AltModifier, "~" };
 94  	QCOMPARE(NeovimQt::Input::convertKey(evKeyTilde), QString{ "~" });
 95  
 96  	QKeyEvent evLeftAlt8{ QEvent::KeyPress, Qt::Key_8, Qt::AltModifier, "8" };
 97  	QCOMPARE(NeovimQt::Input::convertKey(evLeftAlt8), QString{ "<A-8>" });
 98  }
 99  
100  void TestInputWin32::FrenchBepoKeyboardLayout() noexcept
101  {
102  	QKeyEvent evTilde{ QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier, "~" };
103  	QCOMPARE(NeovimQt::Input::convertKey(evTilde), QString{ "~" });
104  
105  	QKeyEvent evCircum{ QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier, "^" };
106  	QCOMPARE(NeovimQt::Input::convertKey(evCircum), QString{ "^" });
107  
108  	QKeyEvent evShiftCircum{ QEvent::KeyPress, Qt::Key_Space, Qt::ShiftModifier, "^" };
109  	QCOMPARE(NeovimQt::Input::convertKey(evShiftCircum), QString{ "<S-^>" });
110  
111  	QKeyEvent evSpace{ QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier, " " };
112  	QCOMPARE(NeovimQt::Input::convertKey(evSpace), QString{ "<Space>" });
113  }
114  
115  #include "tst_input_win32.moc"
116  QTEST_MAIN(TestInputWin32)