aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquicktextinput
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2020-11-30 12:02:29 +0100
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2020-12-10 14:24:45 +0100
commit8257cf75c68bd3d2a2af0cd8260e3cc96f5d0df4 (patch)
tree85de1fe17a781000ad46ae07a8c18b1cd4a20f4f /tests/auto/quick/qquicktextinput
parent323cdf820c723660f3c67c3fd583f0b28c8d80a2 (diff)
Refactor QQuickTextInput test to use QKeyCombination
Makes the code typesafe, simplifies the data structures, and fixes a compiler warning from implicit conversion from/to int. Pick-to: 6.0 Fixes: QTBUG-89356 Change-Id: I52d834811fa7325788fc71ea20f78b4afe3fdb86 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'tests/auto/quick/qquicktextinput')
-rw-r--r--tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp110
1 files changed, 35 insertions, 75 deletions
diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
index d176da4449..d0e5425c0f 100644
--- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
+++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
@@ -88,22 +88,11 @@ template <typename T> static T evaluate(QObject *scope, const QString &expressio
template<typename T, int N> int lengthOf(const T (&)[N]) { return N; }
struct Key {
- Key() = default;
- Key(int key, Qt::Key keyAsCharacter) : key(key), character(keyAsCharacter <= 0xffff ? keyAsCharacter : 0) {}
- Key(int key, QChar character) : key(key), character(character) {}
-
- QString toString() const {
- if (character == 0)
- return {};
- return character;
- }
-
- int key; // a Qt::Key
- QChar character; // the character corresponding to the key (if any)
+ QKeyCombination keyCombination;
+ QChar character = {}; // the character generated by keyCombination (if any)
};
class tst_qquicktextinput : public QQmlDataTest
-
{
Q_OBJECT
public:
@@ -250,8 +239,6 @@ private slots:
void QTBUG_77814_InsertRemoveNoSelection();
private:
- void simulateKey(QWindow *, int key);
-
void simulateKeys(QWindow *window, const QList<Key> &keys);
#if QT_CONFIG(shortcut)
void simulateKeys(QWindow *window, const QKeySequence &sequence);
@@ -271,15 +258,12 @@ Q_DECLARE_METATYPE(KeyList)
void tst_qquicktextinput::simulateKeys(QWindow *window, const QList<Key> &keys)
{
for (int i = 0; i < keys.count(); ++i) {
- const int key = keys.at(i).key & ~Qt::KeyboardModifierMask;
- const int modifiers = keys.at(i).key & Qt::KeyboardModifierMask;
- const QString text = keys.at(i).toString();
-
- QKeyEvent press(QEvent::KeyPress, Qt::Key(key), Qt::KeyboardModifiers(modifiers), text);
- QKeyEvent release(QEvent::KeyRelease, Qt::Key(key), Qt::KeyboardModifiers(modifiers), text);
-
- QGuiApplication::sendEvent(window, &press);
- QGuiApplication::sendEvent(window, &release);
+ const Qt::KeyboardModifiers modifiers = keys.at(i).keyCombination.keyboardModifiers();
+ const QChar character = keys.at(i).character;
+ if (!character.isNull())
+ QTest::keyClick(window, character.toLatin1(), modifiers);
+ else
+ QTest::keyClick(window, keys.at(i).keyCombination.key(), modifiers);
}
}
@@ -294,7 +278,7 @@ void tst_qquicktextinput::simulateKeys(QWindow *window, const QKeySequence &sequ
QList<Key> &operator <<(QList<Key> &keys, const QKeySequence &sequence)
{
for (int i = 0; i < sequence.count(); ++i)
- keys << Key(sequence[i], QChar());
+ keys << Key{sequence[i]};
return keys;
}
@@ -302,17 +286,8 @@ QList<Key> &operator <<(QList<Key> &keys, const QKeySequence &sequence)
template <int N> QList<Key> &operator <<(QList<Key> &keys, const char (&characters)[N])
{
- for (int i = 0; i < N - 1; ++i) {
- int key = QTest::asciiToKey(characters[i]);
- QChar character = QLatin1Char(characters[i]);
- keys << Key(key, character);
- }
- return keys;
-}
-
-QList<Key> &operator <<(QList<Key> &keys, Qt::Key key)
-{
- keys << Key(key, QChar());
+ for (int i = 0; i < N - 1; ++i)
+ keys << Key{{}, QLatin1Char(characters[i])};
return keys;
}
@@ -1934,9 +1909,7 @@ void tst_qquicktextinput::maxLength()
QTRY_VERIFY(textinputObject->hasActiveFocus());
for (int i=0; i<20; i++) {
QTRY_COMPARE(textinputObject->text().length(), qMin(i,10));
- //simulateKey(&window, Qt::Key_A);
- QTest::keyPress(&window, Qt::Key_A);
- QTest::keyRelease(&window, Qt::Key_A, Qt::NoModifier);
+ QTest::keyClick(&window, Qt::Key_A);
}
}
@@ -1960,9 +1933,7 @@ void tst_qquicktextinput::masks()
QCOMPARE(textinputObject->getText(0, qMin(i, 8)), QString(qMin(i, 8), 'a'));
QCOMPARE(textinputObject->getText(qMin(i, 8), 8), QString(8 - qMin(i, 8), ' '));
QCOMPARE(i>=4, textinputObject->hasAcceptableInput());
- //simulateKey(&window, Qt::Key_A);
- QTest::keyPress(&window, Qt::Key_A);
- QTest::keyRelease(&window, Qt::Key_A, Qt::NoModifier);
+ QTest::keyClick(&window, Qt::Key_A);
}
}
@@ -2536,39 +2507,39 @@ void tst_qquicktextinput::navigation()
QVERIFY(input != nullptr);
input->setCursorPosition(0);
QTRY_VERIFY(input->hasActiveFocus());
- simulateKey(&window, Qt::Key_Left);
+ QTest::keyClick(&window, Qt::Key_Left);
QVERIFY(!input->hasActiveFocus());
- simulateKey(&window, Qt::Key_Right);
+ QTest::keyClick(&window, Qt::Key_Right);
QVERIFY(input->hasActiveFocus());
//QT-2944: If text is selected, ensure we deselect upon cursor motion
input->setCursorPosition(input->text().length());
input->select(0,input->text().length());
QVERIFY(input->selectionStart() != input->selectionEnd());
- simulateKey(&window, Qt::Key_Right);
+ QTest::keyClick(&window, Qt::Key_Right);
QCOMPARE(input->selectionStart(), input->selectionEnd());
QCOMPARE(input->selectionStart(), input->text().length());
QVERIFY(input->hasActiveFocus());
- simulateKey(&window, Qt::Key_Right);
+ QTest::keyClick(&window, Qt::Key_Right);
QVERIFY(!input->hasActiveFocus());
- simulateKey(&window, Qt::Key_Left);
+ QTest::keyClick(&window, Qt::Key_Left);
QVERIFY(input->hasActiveFocus());
// Up and Down should NOT do Home/End, even on OS X (QTBUG-10438).
input->setCursorPosition(2);
QCOMPARE(input->cursorPosition(),2);
- simulateKey(&window, Qt::Key_Up);
+ QTest::keyClick(&window, Qt::Key_Up);
QCOMPARE(input->cursorPosition(),2);
- simulateKey(&window, Qt::Key_Down);
+ QTest::keyClick(&window, Qt::Key_Down);
QCOMPARE(input->cursorPosition(),2);
// Test left and right navigation works if the TextInput is empty (QTBUG-25447).
input->setText(QString());
QCOMPARE(input->cursorPosition(), 0);
- simulateKey(&window, Qt::Key_Right);
+ QTest::keyClick(&window, Qt::Key_Right);
QCOMPARE(input->hasActiveFocus(), false);
- simulateKey(&window, Qt::Key_Left);
+ QTest::keyClick(&window, Qt::Key_Left);
QCOMPARE(input->hasActiveFocus(), true);
- simulateKey(&window, Qt::Key_Left);
+ QTest::keyClick(&window, Qt::Key_Left);
QCOMPARE(input->hasActiveFocus(), false);
}
@@ -2590,22 +2561,22 @@ void tst_qquicktextinput::navigation_RTL()
QTRY_VERIFY(input->hasActiveFocus());
// move off
- simulateKey(&window, Qt::Key_Right);
+ QTest::keyClick(&window, Qt::Key_Right);
QVERIFY(!input->hasActiveFocus());
// move back
- simulateKey(&window, Qt::Key_Left);
+ QTest::keyClick(&window, Qt::Key_Left);
QVERIFY(input->hasActiveFocus());
input->setCursorPosition(input->text().length());
QVERIFY(input->hasActiveFocus());
// move off
- simulateKey(&window, Qt::Key_Left);
+ QTest::keyClick(&window, Qt::Key_Left);
QVERIFY(!input->hasActiveFocus());
// move back
- simulateKey(&window, Qt::Key_Right);
+ QTest::keyClick(&window, Qt::Key_Right);
QVERIFY(input->hasActiveFocus());
}
@@ -3337,11 +3308,11 @@ void tst_qquicktextinput::readOnly()
QVERIFY(input->isReadOnly());
QVERIFY(!input->isCursorVisible());
QString initial = input->text();
- for (int k=Qt::Key_0; k<=Qt::Key_Z; k++)
- simulateKey(&window, k);
- simulateKey(&window, Qt::Key_Return);
- simulateKey(&window, Qt::Key_Space);
- simulateKey(&window, Qt::Key_Escape);
+ for (int k = Qt::Key_0; k <= Qt::Key_Z; k++)
+ QTest::keyClick(&window, Qt::Key(k));
+ QTest::keyClick(&window, Qt::Key_Return);
+ QTest::keyClick(&window, Qt::Key_Space);
+ QTest::keyClick(&window, Qt::Key_Escape);
QCOMPARE(input->text(), initial);
input->setCursorPosition(3);
@@ -3496,17 +3467,6 @@ void tst_qquicktextinput::passwordEchoDelay()
QCOMPARE(input->displayText(), QString(8, fillChar));
}
-
-void tst_qquicktextinput::simulateKey(QWindow *view, int key)
-{
- QKeyEvent press(QKeyEvent::KeyPress, key, {});
- QKeyEvent release(QKeyEvent::KeyRelease, key, {});
-
- QGuiApplication::sendEvent(view, &press);
- QGuiApplication::sendEvent(view, &release);
-}
-
-
void tst_qquicktextinput::focusOnPress()
{
QString componentStr =
@@ -5296,7 +5256,7 @@ void tst_qquicktextinput::keySequence()
QVERIFY(QTest::qWaitForWindowActive(&window));
QVERIFY(textInput->hasActiveFocus());
- simulateKey(&window, layoutDirection);
+ QTest::keyClick(&window, layoutDirection);
textInput->select(selectionStart, selectionEnd);
@@ -6472,7 +6432,7 @@ void tst_qquicktextinput::setInputMask()
QVERIFY(QTest::qWaitForWindowActive(&window));
QVERIFY(textInput->hasActiveFocus());
- simulateKey(&window, Qt::Key_Home);
+ QTest::keyClick(&window, Qt::Key_Home);
for (int i = 0; i < input.length(); i++)
QTest::keyClick(&window, input.at(i).toLatin1());
}
@@ -6561,7 +6521,7 @@ void tst_qquicktextinput::keypress_inputMask_data()
KeyList keys;
// selecting all and delete
keys << Qt::Key_Home
- << Key(Qt::ShiftModifier, Qt::Key_End)
+ << Key{QKeyCombination(Qt::ShiftModifier, Qt::Key_End)}
<< Qt::Key_Delete;
QTest::newRow("deleting all") << QString("000.000;_") << keys << QString(".") << QString("___.___");
}