aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquicktextinput
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/quick/qquicktextinput')
-rw-r--r--tests/auto/quick/qquicktextinput/BLACKLIST4
-rw-r--r--tests/auto/quick/qquicktextinput/CMakeLists.txt22
-rw-r--r--tests/auto/quick/qquicktextinput/data/checkCursorDelegateWhenPaddingChanged.qml16
-rw-r--r--tests/auto/quick/qquicktextinput/data/cursorTest.qml2
-rw-r--r--tests/auto/quick/qquicktextinput/data/cursorTestExternal.qml2
-rw-r--r--tests/auto/quick/qquicktextinput/data/cursorTestInline.qml2
-rw-r--r--tests/auto/quick/qquicktextinput/data/focusReason.qml39
-rw-r--r--tests/auto/quick/qquicktextinput/data/mouseselection_old_default.qml (renamed from tests/auto/quick/qquicktextinput/data/mouseselection_true.qml)1
-rw-r--r--tests/auto/quick/qquicktextinput/data/mouseselectionmode_default.qml3
-rw-r--r--tests/auto/quick/qquicktextinput/data/twoInAColumn.qml14
-rw-r--r--tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp877
11 files changed, 637 insertions, 345 deletions
diff --git a/tests/auto/quick/qquicktextinput/BLACKLIST b/tests/auto/quick/qquicktextinput/BLACKLIST
index 7f3128d7fc..2af586c68a 100644
--- a/tests/auto/quick/qquicktextinput/BLACKLIST
+++ b/tests/auto/quick/qquicktextinput/BLACKLIST
@@ -9,3 +9,7 @@ macos ci
# QTQAINFRA-4127
[passwordCharacter]
ci b2qt 32bit
+
+# QTBUG-103256
+[copyAndPasteKeySequence]
+android
diff --git a/tests/auto/quick/qquicktextinput/CMakeLists.txt b/tests/auto/quick/qquicktextinput/CMakeLists.txt
index 6e8d855a58..70003a63b8 100644
--- a/tests/auto/quick/qquicktextinput/CMakeLists.txt
+++ b/tests/auto/quick/qquicktextinput/CMakeLists.txt
@@ -1,9 +1,18 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
# Generated from qquicktextinput.pro.
#####################################################################
## tst_qquicktextinput Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qquicktextinput LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -12,17 +21,14 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qquicktextinput
SOURCES
- ../../shared/testhttpserver.cpp ../../shared/testhttpserver.h
- ../../shared/util.cpp ../../shared/util.h
tst_qquicktextinput.cpp
- INCLUDE_DIRECTORIES
- ../../shared
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
+ Qt::QuickTestUtilsPrivate
TESTDATA ${test_data}
)
@@ -30,16 +36,16 @@ qt_internal_add_test(tst_qquicktextinput
#####################################################################
qt_internal_extend_target(tst_qquicktextinput CONDITION MACOS
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWAppKit}
)
qt_internal_extend_target(tst_qquicktextinput CONDITION ANDROID OR IOS
DEFINES
- QT_QMLTEST_DATADIR=\\\":/data\\\"
+ QT_QMLTEST_DATADIR=":/data"
)
qt_internal_extend_target(tst_qquicktextinput CONDITION NOT ANDROID AND NOT IOS
DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
+ QT_QMLTEST_DATADIR="${CMAKE_CURRENT_SOURCE_DIR}/data"
)
diff --git a/tests/auto/quick/qquicktextinput/data/checkCursorDelegateWhenPaddingChanged.qml b/tests/auto/quick/qquicktextinput/data/checkCursorDelegateWhenPaddingChanged.qml
new file mode 100644
index 0000000000..e6f07b4687
--- /dev/null
+++ b/tests/auto/quick/qquicktextinput/data/checkCursorDelegateWhenPaddingChanged.qml
@@ -0,0 +1,16 @@
+import QtQuick 2.12
+
+Rectangle {
+ width: 200
+ height: 200
+ TextInput {
+ objectName: "textInput"
+ leftPadding: 10
+ focus: true
+ cursorDelegate: Rectangle {
+ objectName: "cursorDelegate"
+ width: 5
+ color: "red"
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicktextinput/data/cursorTest.qml b/tests/auto/quick/qquicktextinput/data/cursorTest.qml
index 363d37174b..44e81f9522 100644
--- a/tests/auto/quick/qquicktextinput/data/cursorTest.qml
+++ b/tests/auto/quick/qquicktextinput/data/cursorTest.qml
@@ -2,7 +2,7 @@ import QtQuick 2.0
Rectangle { id:rect; width: 300; height: 300; color: "white"
property string contextualProperty: "Hello"
- TextInput { text: "Hello world!"; id: textInputObject; objectName: "textInputObject"
+ TextInput { text: "Hello my wonderful world!"; id: textInputObject; objectName: "textInputObject"
width: 300; height: 300
resources: [ Component { id:cursor; Item { id:cursorInstance; objectName: "cursorInstance"; property string localProperty: contextualProperty } } ]
cursorDelegate: cursor
diff --git a/tests/auto/quick/qquicktextinput/data/cursorTestExternal.qml b/tests/auto/quick/qquicktextinput/data/cursorTestExternal.qml
index 31ee01db99..1e2c91e9cc 100644
--- a/tests/auto/quick/qquicktextinput/data/cursorTestExternal.qml
+++ b/tests/auto/quick/qquicktextinput/data/cursorTestExternal.qml
@@ -3,7 +3,7 @@ import QtQuick 2.0
Rectangle { width: 300; height: 300; color: "white"
property string contextualProperty: "Hello"
TextInput {
- text: "Hello world!"
+ text: "Hello my wonderful world!"
id: textInputObject;
objectName: "textInputObject"
width: 300; height: 300
diff --git a/tests/auto/quick/qquicktextinput/data/cursorTestInline.qml b/tests/auto/quick/qquicktextinput/data/cursorTestInline.qml
index b699ed2752..b7ad69962e 100644
--- a/tests/auto/quick/qquicktextinput/data/cursorTestInline.qml
+++ b/tests/auto/quick/qquicktextinput/data/cursorTestInline.qml
@@ -3,7 +3,7 @@ import QtQuick 2.0
Rectangle { width: 300; height: 300; color: "white"
property string contextualProperty: "Hello"
TextInput {
- text: "Hello world!"
+ text: "Hello my wonderful world!"
id: textInputObject
objectName: "textInputObject"
width: 300; height: 300
diff --git a/tests/auto/quick/qquicktextinput/data/focusReason.qml b/tests/auto/quick/qquicktextinput/data/focusReason.qml
new file mode 100644
index 0000000000..7ac913d363
--- /dev/null
+++ b/tests/auto/quick/qquicktextinput/data/focusReason.qml
@@ -0,0 +1,39 @@
+import QtQuick 2.2
+
+Rectangle {
+ width: 400
+ height: 400
+
+ Column {
+ spacing: 5
+ TextInput {
+ id: first
+ objectName: "first"
+ width: 100
+ Rectangle { anchors.fill: parent; color: parent.activeFocus ? "red" : "blue"; opacity: 0.3 }
+ KeyNavigation.backtab: third
+ KeyNavigation.tab: second
+ KeyNavigation.down: second
+ }
+ TextInput {
+ id: second
+ objectName: "second"
+ width: 100
+ Rectangle { anchors.fill: parent; color: parent.activeFocus ? "red" : "blue"; opacity: 0.3 }
+ KeyNavigation.up: first
+ KeyNavigation.backtab: first
+ KeyNavigation.tab: third
+ }
+ TextInput {
+ objectName: "third"
+ id: third
+ width: 100
+ Rectangle { anchors.fill: parent; color: parent.activeFocus ? "red" : "blue"; opacity: 0.3 }
+ KeyNavigation.backtab: second
+ KeyNavigation.tab: first
+ }
+ Component.onCompleted: {
+ first.focus = true
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicktextinput/data/mouseselection_true.qml b/tests/auto/quick/qquicktextinput/data/mouseselection_old_default.qml
index 974041b04a..42ab4931ea 100644
--- a/tests/auto/quick/qquicktextinput/data/mouseselection_true.qml
+++ b/tests/auto/quick/qquicktextinput/data/mouseselection_old_default.qml
@@ -3,5 +3,4 @@ import QtQuick 2.0
TextInput {
focus: true
text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- selectByMouse: true
}
diff --git a/tests/auto/quick/qquicktextinput/data/mouseselectionmode_default.qml b/tests/auto/quick/qquicktextinput/data/mouseselectionmode_default.qml
index 974041b04a..ad19fa8c2a 100644
--- a/tests/auto/quick/qquicktextinput/data/mouseselectionmode_default.qml
+++ b/tests/auto/quick/qquicktextinput/data/mouseselectionmode_default.qml
@@ -1,7 +1,6 @@
-import QtQuick 2.0
+import QtQuick
TextInput {
focus: true
text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- selectByMouse: true
}
diff --git a/tests/auto/quick/qquicktextinput/data/twoInAColumn.qml b/tests/auto/quick/qquicktextinput/data/twoInAColumn.qml
new file mode 100644
index 0000000000..dbc70afe4b
--- /dev/null
+++ b/tests/auto/quick/qquicktextinput/data/twoInAColumn.qml
@@ -0,0 +1,14 @@
+import QtQuick
+import QtQuick.Layouts
+
+ColumnLayout {
+ height: 100
+ TextInput {
+ objectName: "top"
+ text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ }
+ TextInput {
+ objectName: "bottom"
+ text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ }
+}
diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
index d0e5425c0f..8f8442544f 100644
--- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
+++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
@@ -1,42 +1,23 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
#include <qtest.h>
#include <QtTest/QSignalSpy>
-#include "../../shared/util.h"
-#include "../../shared/testhttpserver.h"
+#include <QtQuickTestUtils/private/qmlutils_p.h>
+#include <QtQuickTestUtils/private/testhttpserver_p.h>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
#include <private/qinputmethod_p.h>
#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
#include <QtQml/qqmlexpression.h>
#include <QFile>
#include <QtQuick/qquickview.h>
#include <QtGui/qguiapplication.h>
#include <QtGui/qstylehints.h>
#include <QtGui/qvalidator.h>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtGui/private/qpointingdevice_p.h>
#include <QInputMethod>
#include <private/qquicktextinput_p.h>
#include <private/qquicktextinput_p_p.h>
@@ -46,13 +27,9 @@
#include <math.h>
#include <qmath.h>
-#ifdef Q_OS_OSX
-#include <Carbon/Carbon.h>
-#endif
-
#include "qplatformdefs.h"
-#include "../../shared/platformquirks.h"
-#include "../../shared/platforminputcontext.h"
+#include <QtQuickTestUtils/private/platformquirks_p.h>
+#include <QtQuickTestUtils/private/platforminputcontext_p.h>
Q_DECLARE_METATYPE(QQuickTextInput::SelectionMode)
Q_DECLARE_METATYPE(QQuickTextInput::EchoMode)
@@ -60,22 +37,6 @@ Q_DECLARE_METATYPE(Qt::Key)
DEFINE_BOOL_CONFIG_OPTION(qmlDisableDistanceField, QML_DISABLE_DISTANCEFIELD)
-QString createExpectedFileIfNotFound(const QString& filebasename, const QImage& actual)
-{
- // XXX This will be replaced by some clever persistent platform image store.
- QString persistent_dir = QQmlDataTest::instance()->dataDirectory();
- QString arch = "unknown-architecture"; // QTest needs to help with this.
-
- QString expectfile = persistent_dir + QDir::separator() + filebasename + QLatin1Char('-') + arch + ".png";
-
- if (!QFile::exists(expectfile)) {
- actual.save(expectfile);
- qWarning() << "created" << expectfile;
- }
-
- return expectfile;
-}
-
template <typename T> static T evaluate(QObject *scope, const QString &expression)
{
QQmlExpression expr(qmlContext(scope), scope, expression);
@@ -135,6 +96,8 @@ private slots:
void validators();
void inputMethods();
+ void inputMethodQueryEnterKeyType();
+
void signal_accepted();
void signal_editingfinished();
void signal_textEdited();
@@ -238,6 +201,14 @@ private slots:
void QTBUG_51115_readOnlyResetsSelection();
void QTBUG_77814_InsertRemoveNoSelection();
+ void checkCursorDelegateWhenPaddingChanged();
+
+ void focusReason();
+
+ void touchscreenDoesNotSelect_data();
+ void touchscreenDoesNotSelect();
+ void touchscreenSetsFocusAndMovesCursor();
+
private:
void simulateKeys(QWindow *window, const QList<Key> &keys);
#if QT_CONFIG(shortcut)
@@ -247,6 +218,7 @@ private:
QQmlEngine engine;
QStringList standard;
QStringList colorStrings;
+ QScopedPointer<QPointingDevice> touchscreen = QScopedPointer<QPointingDevice>(QTest::createTouchDevice());
};
typedef QList<int> IntList;
@@ -257,7 +229,7 @@ Q_DECLARE_METATYPE(KeyList)
void tst_qquicktextinput::simulateKeys(QWindow *window, const QList<Key> &keys)
{
- for (int i = 0; i < keys.count(); ++i) {
+ for (int i = 0; i < keys.size(); ++i) {
const Qt::KeyboardModifiers modifiers = keys.at(i).keyCombination.keyboardModifiers();
const QChar character = keys.at(i).character;
if (!character.isNull())
@@ -299,6 +271,7 @@ void tst_qquicktextinput::cleanup()
}
tst_qquicktextinput::tst_qquicktextinput()
+ : QQmlDataTest(QT_QMLTEST_DATADIR)
{
standard << "the quick brown fox jumped over the lazy dog"
<< "It's supercalifragisiticexpialidocious!"
@@ -343,7 +316,7 @@ void tst_qquicktextinput::text()
QVERIFY(textinputObject != nullptr);
QCOMPARE(textinputObject->text(), standard.at(i));
- QCOMPARE(textinputObject->length(), standard.at(i).length());
+ QCOMPARE(textinputObject->length(), standard.at(i).size());
delete textinputObject;
}
@@ -495,36 +468,36 @@ void tst_qquicktextinput::color()
textInputObject->setColor(QColor("white"));
QCOMPARE(textInputObject->color(), QColor("white"));
- QCOMPARE(colorSpy.count(), 1);
+ QCOMPARE(colorSpy.size(), 1);
textInputObject->setSelectionColor(QColor("black"));
QCOMPARE(textInputObject->selectionColor(), QColor("black"));
- QCOMPARE(selectionColorSpy.count(), 1);
+ QCOMPARE(selectionColorSpy.size(), 1);
textInputObject->setSelectedTextColor(QColor("blue"));
QCOMPARE(textInputObject->selectedTextColor(), QColor("blue"));
- QCOMPARE(selectedTextColorSpy.count(), 1);
+ QCOMPARE(selectedTextColorSpy.size(), 1);
textInputObject->setColor(QColor("white"));
- QCOMPARE(colorSpy.count(), 1);
+ QCOMPARE(colorSpy.size(), 1);
textInputObject->setSelectionColor(QColor("black"));
- QCOMPARE(selectionColorSpy.count(), 1);
+ QCOMPARE(selectionColorSpy.size(), 1);
textInputObject->setSelectedTextColor(QColor("blue"));
- QCOMPARE(selectedTextColorSpy.count(), 1);
+ QCOMPARE(selectedTextColorSpy.size(), 1);
textInputObject->setColor(QColor("black"));
QCOMPARE(textInputObject->color(), QColor("black"));
- QCOMPARE(colorSpy.count(), 2);
+ QCOMPARE(colorSpy.size(), 2);
textInputObject->setSelectionColor(QColor("blue"));
QCOMPARE(textInputObject->selectionColor(), QColor("blue"));
- QCOMPARE(selectionColorSpy.count(), 2);
+ QCOMPARE(selectionColorSpy.size(), 2);
textInputObject->setSelectedTextColor(QColor("white"));
QCOMPARE(textInputObject->selectedTextColor(), QColor("white"));
- QCOMPARE(selectedTextColorSpy.count(), 2);
+ QCOMPARE(selectedTextColorSpy.size(), 2);
}
//test color
@@ -600,7 +573,7 @@ void tst_qquicktextinput::wrap()
delete textObject;
}
- for (int i = 0; i < standard.count(); i++) {
+ for (int i = 0; i < standard.size(); i++) {
QString componentStr = "import QtQuick 2.0\nTextInput { wrapMode: Text.WrapAnywhere; width: 30; text: \"" + standard.at(i) + "\" }";
QQmlComponent textComponent(&engine);
textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
@@ -630,14 +603,14 @@ void tst_qquicktextinput::wrap()
input->setWrapMode(QQuickTextInput::Wrap);
QCOMPARE(input->wrapMode(), QQuickTextInput::Wrap);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
input->setWrapMode(QQuickTextInput::Wrap);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
input->setWrapMode(QQuickTextInput::NoWrap);
QCOMPARE(input->wrapMode(), QQuickTextInput::NoWrap);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
}
@@ -673,7 +646,7 @@ void tst_qquicktextinput::selection()
QCOMPARE(textinputObject->selectionEnd(), 0);
QVERIFY(textinputObject->selectedText().isNull());
- textinputObject->setCursorPosition(textinputObject->text().count()+1);
+ textinputObject->setCursorPosition(textinputObject->text().size() + 1);
QCOMPARE(textinputObject->cursorPosition(), 0);
QCOMPARE(textinputObject->selectionStart(), 0);
QCOMPARE(textinputObject->selectionEnd(), 0);
@@ -733,7 +706,7 @@ void tst_qquicktextinput::selection()
QInputMethodEvent event("", attributes);
QGuiApplication::sendEvent(textinputObject, &event);
}
- QCOMPARE(selectionSpy.count(), 1);
+ QCOMPARE(selectionSpy.size(), 1);
QCOMPARE(textinputObject->selectionStart(), 12);
QCOMPARE(textinputObject->selectionEnd(), 17);
@@ -757,7 +730,7 @@ void tst_qquicktextinput::persistentSelection()
input->setPersistentSelection(false);
QCOMPARE(input->persistentSelection(), false);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
input->select(1, 4);
QCOMPARE(input->property("selected").toString(), QLatin1String("ell"));
@@ -770,7 +743,7 @@ void tst_qquicktextinput::persistentSelection()
input->setPersistentSelection(true);
QCOMPARE(input->persistentSelection(), true);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
input->select(1, 4);
QCOMPARE(input->property("selected").toString(), QLatin1String("ell"));
@@ -801,25 +774,25 @@ void tst_qquicktextinput::overwriteMode()
QVERIFY(textInput->hasActiveFocus());
textInput->setOverwriteMode(true);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(true, textInput->overwriteMode());
textInput->setOverwriteMode(false);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QCOMPARE(false, textInput->overwriteMode());
QVERIFY(!textInput->overwriteMode());
QString insertString = "Some first text";
- for (int j = 0; j < insertString.length(); j++)
+ for (int j = 0; j < insertString.size(); j++)
QTest::keyClick(&window, insertString.at(j).toLatin1());
QCOMPARE(textInput->text(), QString("Some first text"));
textInput->setOverwriteMode(true);
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
textInput->setCursorPosition(5);
insertString = "shiny";
- for (int j = 0; j < insertString.length(); j++)
+ for (int j = 0; j < insertString.size(); j++)
QTest::keyClick(&window, insertString.at(j).toLatin1());
QCOMPARE(textInput->text(), QString("Some shiny text"));
}
@@ -861,24 +834,24 @@ void tst_qquicktextinput::isRightToLeft()
// first test that the right string is delivered to the QString::isRightToLeft()
QCOMPARE(textInput.isRightToLeft(0,0), text.mid(0,0).isRightToLeft());
QCOMPARE(textInput.isRightToLeft(0,1), text.mid(0,1).isRightToLeft());
- QCOMPARE(textInput.isRightToLeft(text.count()-2, text.count()-1), text.mid(text.count()-2, text.count()-1).isRightToLeft());
- QCOMPARE(textInput.isRightToLeft(text.count()/2, text.count()/2 + 1), text.mid(text.count()/2, text.count()/2 + 1).isRightToLeft());
- QCOMPARE(textInput.isRightToLeft(0,text.count()/4), text.mid(0,text.count()/4).isRightToLeft());
- QCOMPARE(textInput.isRightToLeft(text.count()/4,3*text.count()/4), text.mid(text.count()/4,3*text.count()/4).isRightToLeft());
+ QCOMPARE(textInput.isRightToLeft(text.size()-2, text.size()-1), text.mid(text.size()-2, text.size()-1).isRightToLeft());
+ QCOMPARE(textInput.isRightToLeft(text.size()/2, text.size()/2 + 1), text.mid(text.size()/2, text.size()/2 + 1).isRightToLeft());
+ QCOMPARE(textInput.isRightToLeft(0,text.size()/4), text.mid(0,text.size()/4).isRightToLeft());
+ QCOMPARE(textInput.isRightToLeft(text.size()/4,3*text.size()/4), text.mid(text.size()/4,3*text.size()/4).isRightToLeft());
if (text.isEmpty())
QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML TextInput: isRightToLeft(start, end) called with the end property being smaller than the start.");
- QCOMPARE(textInput.isRightToLeft(3*text.count()/4,text.count()-1), text.mid(3*text.count()/4,text.count()-1).isRightToLeft());
+ QCOMPARE(textInput.isRightToLeft(3*text.size()/4,text.size()-1), text.mid(3*text.size()/4,text.size()-1).isRightToLeft());
// then test that the feature actually works
QCOMPARE(textInput.isRightToLeft(0,0), emptyString);
QCOMPARE(textInput.isRightToLeft(0,1), firstCharacter);
- QCOMPARE(textInput.isRightToLeft(text.count()-2, text.count()-1), lastCharacter);
- QCOMPARE(textInput.isRightToLeft(text.count()/2, text.count()/2 + 1), middleCharacter);
- QCOMPARE(textInput.isRightToLeft(0,text.count()/4), startString);
- QCOMPARE(textInput.isRightToLeft(text.count()/4,3*text.count()/4), midString);
+ QCOMPARE(textInput.isRightToLeft(text.size()-2, text.size()-1), lastCharacter);
+ QCOMPARE(textInput.isRightToLeft(text.size()/2, text.size()/2 + 1), middleCharacter);
+ QCOMPARE(textInput.isRightToLeft(0,text.size()/4), startString);
+ QCOMPARE(textInput.isRightToLeft(text.size()/4,3*text.size()/4), midString);
if (text.isEmpty())
QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML TextInput: isRightToLeft(start, end) called with the end property being smaller than the start.");
- QCOMPARE(textInput.isRightToLeft(3*text.count()/4,text.count()-1), endString);
+ QCOMPARE(textInput.isRightToLeft(3*text.size()/4,text.size()-1), endString);
}
void tst_qquicktextinput::moveCursorSelection_data()
@@ -1293,7 +1266,7 @@ void tst_qquicktextinput::moveCursorSelectionSequence()
void tst_qquicktextinput::dragMouseSelection()
{
- QString qmlfile = testFile("mouseselection_true.qml");
+ QString qmlfile = testFile("mouseselectionmode_default.qml");
QQuickView window(QUrl::fromLocalFile(qmlfile));
@@ -1304,6 +1277,7 @@ void tst_qquicktextinput::dragMouseSelection()
QVERIFY(window.rootObject() != nullptr);
QQuickTextInput *textInputObject = qobject_cast<QQuickTextInput *>(window.rootObject());
QVERIFY(textInputObject != nullptr);
+ textInputObject->setSelectByMouse(true);
// press-and-drag-and-release from x1 to x2
int x1 = 10;
@@ -1313,8 +1287,8 @@ void tst_qquicktextinput::dragMouseSelection()
QTest::mouseMove(&window, QPoint(x2, y));
QTest::mouseRelease(&window, Qt::LeftButton, Qt::NoModifier, QPoint(x2,y));
QString str1;
- QTRY_VERIFY((str1 = textInputObject->selectedText()).length() > 3);
- QTRY_VERIFY(str1.length() > 3);
+ QTRY_VERIFY((str1 = textInputObject->selectedText()).size() > 3);
+ QTRY_VERIFY(str1.size() > 3);
// press and drag the current selection.
x1 = 40;
@@ -1323,7 +1297,7 @@ void tst_qquicktextinput::dragMouseSelection()
QTest::mouseMove(&window, QPoint(x2, y));
QTest::mouseRelease(&window, Qt::LeftButton, Qt::NoModifier, QPoint(x2,y));
QString str2 = textInputObject->selectedText();
- QTRY_VERIFY(str2.length() > 3);
+ QTRY_VERIFY(str2.size() > 3);
QTRY_VERIFY(str1 != str2);
}
@@ -1379,7 +1353,7 @@ void tst_qquicktextinput::mouseSelectionMode()
if (selectWords) {
QTRY_COMPARE(textInputObject->selectedText(), text);
} else {
- QTRY_VERIFY(textInputObject->selectedText().length() > 3);
+ QTRY_VERIFY(textInputObject->selectedText().size() > 3);
QVERIFY(textInputObject->selectedText() != text);
}
}
@@ -1398,14 +1372,14 @@ void tst_qquicktextinput::mouseSelectionMode_accessors()
input->setMouseSelectionMode(QQuickTextInput::SelectWords);
QCOMPARE(input->mouseSelectionMode(), QQuickTextInput::SelectWords);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
input->setMouseSelectionMode(QQuickTextInput::SelectWords);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
input->setMouseSelectionMode(QQuickTextInput::SelectCharacters);
QCOMPARE(input->mouseSelectionMode(), QQuickTextInput::SelectCharacters);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
void tst_qquicktextinput::selectByMouse()
@@ -1422,15 +1396,15 @@ void tst_qquicktextinput::selectByMouse()
input->setSelectByMouse(true);
QCOMPARE(input->selectByMouse(), true);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), true);
input->setSelectByMouse(true);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
input->setSelectByMouse(false);
QCOMPARE(input->selectByMouse(), false);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QCOMPARE(spy.at(1).at(0).toBool(), false);
}
@@ -1448,14 +1422,14 @@ void tst_qquicktextinput::renderType()
input->setRenderType(QQuickTextInput::NativeRendering);
QCOMPARE(input->renderType(), QQuickTextInput::NativeRendering);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
input->setRenderType(QQuickTextInput::NativeRendering);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
input->setRenderType(QQuickTextInput::QtRendering);
QCOMPARE(input->renderType(), QQuickTextInput::QtRendering);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
void tst_qquicktextinput::horizontalAlignment_RightToLeft()
@@ -1565,7 +1539,7 @@ void tst_qquicktextinput::horizontalAlignment_RightToLeft()
QSignalSpy cursorRectangleSpy(textInput, SIGNAL(cursorRectangleChanged()));
platformInputContext.setInputDirection(Qt::RightToLeft);
QCOMPARE(qApp->inputMethod()->inputDirection(), Qt::RightToLeft);
- QCOMPARE(cursorRectangleSpy.count(), 1);
+ QCOMPARE(cursorRectangleSpy.size(), 1);
QCOMPARE(textInput->hAlign(), QQuickTextInput::AlignRight);
QVERIFY(textInput->boundingRect().right() >= textInput->width() - 1);
QVERIFY(textInput->boundingRect().right() <= textInput->width() + 1);
@@ -1899,16 +1873,16 @@ void tst_qquicktextinput::maxLength()
QVERIFY(textinputObject != nullptr);
QVERIFY(textinputObject->text().isEmpty());
QCOMPARE(textinputObject->maxLength(), 10);
- foreach (const QString &str, standard) {
- QVERIFY(textinputObject->text().length() <= 10);
+ for (const QString &str : std::as_const(standard)) {
+ QVERIFY(textinputObject->text().size() <= 10);
textinputObject->setText(str);
- QVERIFY(textinputObject->text().length() <= 10);
+ QVERIFY(textinputObject->text().size() <= 10);
}
textinputObject->setText("");
QTRY_VERIFY(textinputObject->hasActiveFocus());
for (int i=0; i<20; i++) {
- QTRY_COMPARE(textinputObject->text().length(), qMin(i,10));
+ QTRY_COMPARE(textinputObject->text().size(), qMin(i,10));
QTest::keyClick(&window, Qt::Key_A);
}
}
@@ -1924,11 +1898,11 @@ void tst_qquicktextinput::masks()
QQuickTextInput *textinputObject = qobject_cast<QQuickTextInput *>(window.rootObject());
QVERIFY(textinputObject != nullptr);
QTRY_VERIFY(textinputObject->hasActiveFocus());
- QCOMPARE(textinputObject->text().length(), 0);
+ QCOMPARE(textinputObject->text().size(), 0);
QCOMPARE(textinputObject->inputMask(), QString("HHHHhhhh; "));
QCOMPARE(textinputObject->length(), 8);
for (int i=0; i<10; i++) {
- QTRY_COMPARE(qMin(i,8), textinputObject->text().length());
+ QTRY_COMPARE(qMin(i,8), textinputObject->text().size());
QCOMPARE(textinputObject->length(), 8);
QCOMPARE(textinputObject->getText(0, qMin(i, 8)), QString(qMin(i, 8), 'a'));
QCOMPARE(textinputObject->getText(qMin(i, 8), 8), QString(8 - qMin(i, 8), ' '));
@@ -1980,10 +1954,10 @@ void tst_qquicktextinput::validators()
QTRY_COMPARE(intInput->text(), QLatin1String("1"));
QCOMPARE(intInput->hasAcceptableInput(), false);
QCOMPARE(intInput->property("acceptable").toBool(), false);
- QCOMPARE(intSpy.count(), 0);
+ QCOMPARE(intSpy.size(), 0);
QCOMPARE(intInput->hasAcceptableInput(), false);
QCOMPARE(intInput->property("acceptable").toBool(), false);
- QCOMPARE(intSpy.count(), 0);
+ QCOMPARE(intSpy.size(), 0);
QTest::keyPress(&window, Qt::Key_Period);
QTest::keyRelease(&window, Qt::Key_Period, Qt::NoModifier);
QTRY_COMPARE(intInput->text(), QLatin1String("1"));
@@ -2011,13 +1985,13 @@ void tst_qquicktextinput::validators()
QCOMPARE(intInput->text(), QLatin1String("11"));
QCOMPARE(intInput->hasAcceptableInput(), true);
QCOMPARE(intInput->property("acceptable").toBool(), true);
- QCOMPARE(intSpy.count(), 1);
+ QCOMPARE(intSpy.size(), 1);
QTest::keyPress(&window, Qt::Key_0);
QTest::keyRelease(&window, Qt::Key_0, Qt::NoModifier);
QCOMPARE(intInput->text(), QLatin1String("11"));
QCOMPARE(intInput->hasAcceptableInput(), true);
QCOMPARE(intInput->property("acceptable").toBool(), true);
- QCOMPARE(intSpy.count(), 1);
+ QCOMPARE(intSpy.size(), 1);
QQuickTextInput *dblInput = qobject_cast<QQuickTextInput *>(qvariant_cast<QObject *>(window.rootObject()->property("dblInput")));
QVERIFY(dblInput);
@@ -2043,13 +2017,13 @@ void tst_qquicktextinput::validators()
QTRY_COMPARE(dblInput->text(), QLatin1String("1"));
QCOMPARE(dblInput->hasAcceptableInput(), false);
QCOMPARE(dblInput->property("acceptable").toBool(), false);
- QCOMPARE(dblSpy.count(), 0);
+ QCOMPARE(dblSpy.size(), 0);
QTest::keyPress(&window, Qt::Key_2);
QTest::keyRelease(&window, Qt::Key_2, Qt::NoModifier);
QTRY_COMPARE(dblInput->text(), QLatin1String("12"));
QCOMPARE(dblInput->hasAcceptableInput(), true);
QCOMPARE(dblInput->property("acceptable").toBool(), true);
- QCOMPARE(dblSpy.count(), 1);
+ QCOMPARE(dblSpy.size(), 1);
QTest::keyPress(&window, Qt::Key_Comma);
QTest::keyRelease(&window, Qt::Key_Comma, Qt::NoModifier);
QTRY_COMPARE(dblInput->text(), QLatin1String("12,"));
@@ -2090,84 +2064,84 @@ void tst_qquicktextinput::validators()
QTRY_COMPARE(dblInput->text(), QLatin1String("12."));
QCOMPARE(dblInput->hasAcceptableInput(), true);
QCOMPARE(dblInput->property("acceptable").toBool(), true);
- QCOMPARE(dblSpy.count(), 1 + extraSignals);
+ QCOMPARE(dblSpy.size(), 1 + extraSignals);
QTest::keyPress(&window, Qt::Key_1);
QTest::keyRelease(&window, Qt::Key_1, Qt::NoModifier);
QTRY_COMPARE(dblInput->text(), QLatin1String("12.1"));
QCOMPARE(dblInput->hasAcceptableInput(), true);
QCOMPARE(dblInput->property("acceptable").toBool(), true);
- QCOMPARE(dblSpy.count(), 1 + extraSignals);
+ QCOMPARE(dblSpy.size(), 1 + extraSignals);
QTest::keyPress(&window, Qt::Key_1);
QTest::keyRelease(&window, Qt::Key_1, Qt::NoModifier);
QTRY_COMPARE(dblInput->text(), QLatin1String("12.11"));
QCOMPARE(dblInput->hasAcceptableInput(), true);
QCOMPARE(dblInput->property("acceptable").toBool(), true);
- QCOMPARE(dblSpy.count(), 1 + extraSignals);
+ QCOMPARE(dblSpy.size(), 1 + extraSignals);
QTest::keyPress(&window, Qt::Key_1);
QTest::keyRelease(&window, Qt::Key_1, Qt::NoModifier);
QTRY_COMPARE(dblInput->text(), QLatin1String("12.11"));
QCOMPARE(dblInput->hasAcceptableInput(), true);
QCOMPARE(dblInput->property("acceptable").toBool(), true);
- QCOMPARE(dblSpy.count(), 1 + extraSignals);
+ QCOMPARE(dblSpy.size(), 1 + extraSignals);
// Ensure the validator doesn't prevent characters being removed.
dblInput->setValidator(intInput->validator());
QCOMPARE(dblInput->text(), QLatin1String("12.11"));
QCOMPARE(dblInput->hasAcceptableInput(), false);
QCOMPARE(dblInput->property("acceptable").toBool(), false);
- QCOMPARE(dblSpy.count(), 2 + extraSignals);
+ QCOMPARE(dblSpy.size(), 2 + extraSignals);
QTest::keyPress(&window, Qt::Key_Backspace);
QTest::keyRelease(&window, Qt::Key_Backspace, Qt::NoModifier);
QTRY_COMPARE(dblInput->text(), QLatin1String("12.1"));
QCOMPARE(dblInput->hasAcceptableInput(), false);
QCOMPARE(dblInput->property("acceptable").toBool(), false);
- QCOMPARE(dblSpy.count(), 2 + extraSignals);
+ QCOMPARE(dblSpy.size(), 2 + extraSignals);
// Once unacceptable input is in anything goes until it reaches an acceptable state again.
QTest::keyPress(&window, Qt::Key_1);
QTest::keyRelease(&window, Qt::Key_1, Qt::NoModifier);
QTRY_COMPARE(dblInput->text(), QLatin1String("12.11"));
QCOMPARE(dblInput->hasAcceptableInput(), false);
- QCOMPARE(dblSpy.count(), 2 + extraSignals);
+ QCOMPARE(dblSpy.size(), 2 + extraSignals);
QTest::keyPress(&window, Qt::Key_Backspace);
QTest::keyRelease(&window, Qt::Key_Backspace, Qt::NoModifier);
QTRY_COMPARE(dblInput->text(), QLatin1String("12.1"));
QCOMPARE(dblInput->hasAcceptableInput(), false);
QCOMPARE(dblInput->property("acceptable").toBool(), false);
- QCOMPARE(dblSpy.count(), 2 + extraSignals);
+ QCOMPARE(dblSpy.size(), 2 + extraSignals);
QTest::keyPress(&window, Qt::Key_Backspace);
QTest::keyRelease(&window, Qt::Key_Backspace, Qt::NoModifier);
QTRY_COMPARE(dblInput->text(), QLatin1String("12."));
QCOMPARE(dblInput->hasAcceptableInput(), false);
QCOMPARE(dblInput->property("acceptable").toBool(), false);
- QCOMPARE(dblSpy.count(), 2 + extraSignals);
+ QCOMPARE(dblSpy.size(), 2 + extraSignals);
QTest::keyPress(&window, Qt::Key_Backspace);
QTest::keyRelease(&window, Qt::Key_Backspace, Qt::NoModifier);
QTRY_COMPARE(dblInput->text(), QLatin1String("12"));
QCOMPARE(dblInput->hasAcceptableInput(), false);
QCOMPARE(dblInput->property("acceptable").toBool(), false);
- QCOMPARE(dblSpy.count(), 2 + extraSignals);
+ QCOMPARE(dblSpy.size(), 2 + extraSignals);
QTest::keyPress(&window, Qt::Key_Backspace);
QTest::keyRelease(&window, Qt::Key_Backspace, Qt::NoModifier);
QTRY_COMPARE(dblInput->text(), QLatin1String("1"));
QCOMPARE(dblInput->hasAcceptableInput(), false);
QCOMPARE(dblInput->property("acceptable").toBool(), false);
- QCOMPARE(dblSpy.count(), 2 + extraSignals);
+ QCOMPARE(dblSpy.size(), 2 + extraSignals);
QTest::keyPress(&window, Qt::Key_1);
QTest::keyRelease(&window, Qt::Key_1, Qt::NoModifier);
QCOMPARE(dblInput->text(), QLatin1String("11"));
QCOMPARE(dblInput->property("acceptable").toBool(), true);
QCOMPARE(dblInput->hasAcceptableInput(), true);
- QCOMPARE(dblSpy.count(), 3 + extraSignals);
+ QCOMPARE(dblSpy.size(), 3 + extraSignals);
// Changing the validator properties will re-evaluate whether the input is acceptable.
intValidator->setTop(10);
QCOMPARE(dblInput->property("acceptable").toBool(), false);
QCOMPARE(dblInput->hasAcceptableInput(), false);
- QCOMPARE(dblSpy.count(), 4 + extraSignals);
+ QCOMPARE(dblSpy.size(), 4 + extraSignals);
intValidator->setTop(12);
QCOMPARE(dblInput->property("acceptable").toBool(), true);
QCOMPARE(dblInput->hasAcceptableInput(), true);
- QCOMPARE(dblSpy.count(), 5 + extraSignals);
+ QCOMPARE(dblSpy.size(), 5 + extraSignals);
QQuickTextInput *strInput = qobject_cast<QQuickTextInput *>(qvariant_cast<QObject *>(window.rootObject()->property("strInput")));
QVERIFY(strInput);
@@ -2181,37 +2155,37 @@ void tst_qquicktextinput::validators()
QTRY_COMPARE(strInput->text(), QLatin1String(""));
QCOMPARE(strInput->hasAcceptableInput(), false);
QCOMPARE(strInput->property("acceptable").toBool(), false);
- QCOMPARE(strSpy.count(), 0);
+ QCOMPARE(strSpy.size(), 0);
QTest::keyPress(&window, Qt::Key_A);
QTest::keyRelease(&window, Qt::Key_A, Qt::NoModifier);
QTRY_COMPARE(strInput->text(), QLatin1String("a"));
QCOMPARE(strInput->hasAcceptableInput(), false);
QCOMPARE(strInput->property("acceptable").toBool(), false);
- QCOMPARE(strSpy.count(), 0);
+ QCOMPARE(strSpy.size(), 0);
QTest::keyPress(&window, Qt::Key_A);
QTest::keyRelease(&window, Qt::Key_A, Qt::NoModifier);
QTRY_COMPARE(strInput->text(), QLatin1String("aa"));
QCOMPARE(strInput->hasAcceptableInput(), true);
QCOMPARE(strInput->property("acceptable").toBool(), true);
- QCOMPARE(strSpy.count(), 1);
+ QCOMPARE(strSpy.size(), 1);
QTest::keyPress(&window, Qt::Key_A);
QTest::keyRelease(&window, Qt::Key_A, Qt::NoModifier);
QTRY_COMPARE(strInput->text(), QLatin1String("aaa"));
QCOMPARE(strInput->hasAcceptableInput(), true);
QCOMPARE(strInput->property("acceptable").toBool(), true);
- QCOMPARE(strSpy.count(), 1);
+ QCOMPARE(strSpy.size(), 1);
QTest::keyPress(&window, Qt::Key_A);
QTest::keyRelease(&window, Qt::Key_A, Qt::NoModifier);
QTRY_COMPARE(strInput->text(), QLatin1String("aaaa"));
QCOMPARE(strInput->hasAcceptableInput(), true);
QCOMPARE(strInput->property("acceptable").toBool(), true);
- QCOMPARE(strSpy.count(), 1);
+ QCOMPARE(strSpy.size(), 1);
QTest::keyPress(&window, Qt::Key_A);
QTest::keyRelease(&window, Qt::Key_A, Qt::NoModifier);
QTRY_COMPARE(strInput->text(), QLatin1String("aaaa"));
QCOMPARE(strInput->hasAcceptableInput(), true);
QCOMPARE(strInput->property("acceptable").toBool(), true);
- QCOMPARE(strSpy.count(), 1);
+ QCOMPARE(strSpy.size(), 1);
QQuickTextInput *unvalidatedInput = qobject_cast<QQuickTextInput *>(qvariant_cast<QObject *>(window.rootObject()->property("unvalidatedInput")));
QVERIFY(unvalidatedInput);
@@ -2225,13 +2199,13 @@ void tst_qquicktextinput::validators()
QTRY_COMPARE(unvalidatedInput->text(), QLatin1String("1"));
QCOMPARE(unvalidatedInput->hasAcceptableInput(), true);
QCOMPARE(unvalidatedInput->property("acceptable").toBool(), true);
- QCOMPARE(unvalidatedSpy.count(), 0);
+ QCOMPARE(unvalidatedSpy.size(), 0);
QTest::keyPress(&window, Qt::Key_A);
QTest::keyRelease(&window, Qt::Key_A, Qt::NoModifier);
QTRY_COMPARE(unvalidatedInput->text(), QLatin1String("1a"));
QCOMPARE(unvalidatedInput->hasAcceptableInput(), true);
QCOMPARE(unvalidatedInput->property("acceptable").toBool(), true);
- QCOMPARE(unvalidatedSpy.count(), 0);
+ QCOMPARE(unvalidatedSpy.size(), 0);
}
void tst_qquicktextinput::inputMethods()
@@ -2249,9 +2223,9 @@ void tst_qquicktextinput::inputMethods()
QSignalSpy inputMethodHintSpy(input, SIGNAL(inputMethodHintsChanged()));
input->setInputMethodHints(Qt::ImhUppercaseOnly);
QVERIFY(input->inputMethodHints() & Qt::ImhUppercaseOnly);
- QCOMPARE(inputMethodHintSpy.count(), 1);
+ QCOMPARE(inputMethodHintSpy.size(), 1);
input->setInputMethodHints(Qt::ImhUppercaseOnly);
- QCOMPARE(inputMethodHintSpy.count(), 1);
+ QCOMPARE(inputMethodHintSpy.size(), 1);
// default value
QQuickTextInput plainInput;
@@ -2310,8 +2284,8 @@ void tst_qquicktextinput::inputMethods()
// input should reset selection even if replacement parameters are out of bounds
input->setText("text");
input->setCursorPosition(0);
- input->moveCursorSelection(input->text().length());
- event.setCommitString("replacement", -input->text().length(), input->text().length());
+ input->moveCursorSelection(input->text().size());
+ event.setCommitString("replacement", -input->text().size(), input->text().size());
QGuiApplication::sendEvent(input, &event);
QCOMPARE(input->selectionStart(), input->selectionEnd());
QCOMPARE(input->text(), QString("replacement"));
@@ -2326,6 +2300,36 @@ void tst_qquicktextinput::inputMethods()
QCOMPARE(enabledQueryEvent.value(Qt::ImEnabled).toBool(), false);
}
+void tst_qquicktextinput::inputMethodQueryEnterKeyType()
+{
+ QQuickView view(testFileUrl("focusReason.qml"));
+
+ QQuickTextInput *first = view.rootObject()->findChild<QQuickTextInput *>("first");
+ QQuickTextInput *second = view.rootObject()->findChild<QQuickTextInput *>("second");
+ QQuickTextInput *third = view.rootObject()->findChild<QQuickTextInput *>("third");
+ QVERIFY(first && second && third);
+
+ first->setActiveFocusOnTab(true);
+ second->setActiveFocusOnTab(true);
+ third->setActiveFocusOnTab(true);
+
+ view.show();
+
+ QVariant enterTypeFirst = first->inputMethodQuery(Qt::ImEnterKeyType);
+ QVariant enterTypeSecond = second->inputMethodQuery(Qt::ImEnterKeyType);
+ QVariant enterTypeThird = third->inputMethodQuery(Qt::ImEnterKeyType);
+#ifdef Q_OS_ANDROID
+ // QTBUG-61652
+ // EnterKey is changed to EnterKeyNext if the focus can be moved to item below
+ QCOMPARE(enterTypeFirst.value<Qt::EnterKeyType>(), Qt::EnterKeyNext);
+ QCOMPARE(enterTypeSecond.value<Qt::EnterKeyType>(), Qt::EnterKeyNext);
+#else
+ QCOMPARE(enterTypeFirst.value<Qt::EnterKeyType>(), Qt::EnterKeyDefault);
+ QCOMPARE(enterTypeSecond.value<Qt::EnterKeyType>(), Qt::EnterKeyDefault);
+#endif
+ QCOMPARE(enterTypeThird.value<Qt::EnterKeyType>(), Qt::EnterKeyDefault);
+}
+
void tst_qquicktextinput::signal_accepted()
{
QQuickView window(testFileUrl("signal_accepted.qml"));
@@ -2350,22 +2354,22 @@ void tst_qquicktextinput::signal_accepted()
QTRY_COMPARE(input->text(), QLatin1String("a"));
QCOMPARE(input->hasAcceptableInput(), false);
QCOMPARE(input->property("acceptable").toBool(), false);
- QTRY_COMPARE(inputSpy.count(), 0);
+ QTRY_COMPARE(inputSpy.size(), 0);
QTest::keyPress(&window, Qt::Key_Enter);
QTest::keyRelease(&window, Qt::Key_Enter, Qt::NoModifier);
- QTRY_COMPARE(acceptedSpy.count(), 0);
+ QTRY_COMPARE(acceptedSpy.size(), 0);
QTest::keyPress(&window, Qt::Key_A);
QTest::keyRelease(&window, Qt::Key_A, Qt::NoModifier);
QTRY_COMPARE(input->text(), QLatin1String("aa"));
QCOMPARE(input->hasAcceptableInput(), true);
QCOMPARE(input->property("acceptable").toBool(), true);
- QTRY_COMPARE(inputSpy.count(), 1);
+ QTRY_COMPARE(inputSpy.size(), 1);
QTest::keyPress(&window, Qt::Key_Enter);
QTest::keyRelease(&window, Qt::Key_Enter, Qt::NoModifier);
- QTRY_COMPARE(acceptedSpy.count(), 1);
+ QTRY_COMPARE(acceptedSpy.size(), 1);
}
void tst_qquicktextinput::signal_editingfinished()
@@ -2393,23 +2397,23 @@ void tst_qquicktextinput::signal_editingfinished()
QTRY_COMPARE(input1->text(), QLatin1String("a"));
QCOMPARE(input1->hasAcceptableInput(), false);
QCOMPARE(input1->property("acceptable").toBool(), false);
- QTRY_COMPARE(input1Spy.count(), 0);
+ QTRY_COMPARE(input1Spy.size(), 0);
QTest::keyPress(&window, Qt::Key_Enter);
QTest::keyRelease(&window, Qt::Key_Enter, Qt::NoModifier);
- QTRY_COMPARE(editingFinished1Spy.count(), 0);
+ QTRY_COMPARE(editingFinished1Spy.size(), 0);
QTest::keyPress(&window, Qt::Key_A);
QTest::keyRelease(&window, Qt::Key_A, Qt::NoModifier);
QTRY_COMPARE(input1->text(), QLatin1String("aa"));
QCOMPARE(input1->hasAcceptableInput(), true);
QCOMPARE(input1->property("acceptable").toBool(), true);
- QTRY_COMPARE(input1Spy.count(), 1);
+ QTRY_COMPARE(input1Spy.size(), 1);
QTest::keyPress(&window, Qt::Key_Enter);
QTest::keyRelease(&window, Qt::Key_Enter, Qt::NoModifier);
- QTRY_COMPARE(editingFinished1Spy.count(), 1);
- QTRY_COMPARE(input1Spy.count(), 1);
+ QTRY_COMPARE(editingFinished1Spy.size(), 1);
+ QTRY_COMPARE(input1Spy.size(), 1);
QSignalSpy editingFinished2Spy(input2, SIGNAL(editingFinished()));
QSignalSpy input2Spy(input2, SIGNAL(acceptableInputChanged()));
@@ -2423,19 +2427,19 @@ void tst_qquicktextinput::signal_editingfinished()
QTRY_COMPARE(input2->text(), QLatin1String("a"));
QCOMPARE(input2->hasAcceptableInput(), false);
QCOMPARE(input2->property("acceptable").toBool(), false);
- QTRY_COMPARE(input2Spy.count(), 0);
+ QTRY_COMPARE(input2Spy.size(), 0);
QTest::keyPress(&window, Qt::Key_A);
QTest::keyRelease(&window, Qt::Key_A, Qt::NoModifier);
QTRY_COMPARE(input2->text(), QLatin1String("aa"));
QCOMPARE(input2->hasAcceptableInput(), true);
QCOMPARE(input2->property("acceptable").toBool(), true);
- QTRY_COMPARE(input2Spy.count(), 1);
+ QTRY_COMPARE(input2Spy.size(), 1);
input1->setFocus(true);
QTRY_VERIFY(input1->hasActiveFocus());
QTRY_VERIFY(!input2->hasActiveFocus());
- QTRY_COMPARE(editingFinished2Spy.count(), 1);
+ QTRY_COMPARE(editingFinished2Spy.size(), 1);
}
void tst_qquicktextinput::signal_textEdited()
@@ -2461,32 +2465,32 @@ void tst_qquicktextinput::signal_textEdited()
int textEdits = 0;
QTest::keyClick(&window, Qt::Key_A);
- QCOMPARE(textChangedSpy.count(), ++textChanges);
- QCOMPARE(textEditedSpy.count(), ++textEdits);
+ QCOMPARE(textChangedSpy.size(), ++textChanges);
+ QCOMPARE(textEditedSpy.size(), ++textEdits);
QTest::keyClick(&window, Qt::Key_B);
- QCOMPARE(textChangedSpy.count(), ++textChanges);
- QCOMPARE(textEditedSpy.count(), ++textEdits);
+ QCOMPARE(textChangedSpy.size(), ++textChanges);
+ QCOMPARE(textEditedSpy.size(), ++textEdits);
QTest::keyClick(&window, Qt::Key_C);
- QCOMPARE(textChangedSpy.count(), ++textChanges);
- QCOMPARE(textEditedSpy.count(), ++textEdits);
+ QCOMPARE(textChangedSpy.size(), ++textChanges);
+ QCOMPARE(textEditedSpy.size(), ++textEdits);
QTest::keyClick(&window, Qt::Key_Space);
- QCOMPARE(textChangedSpy.count(), ++textChanges);
- QCOMPARE(textEditedSpy.count(), ++textEdits);
+ QCOMPARE(textChangedSpy.size(), ++textChanges);
+ QCOMPARE(textEditedSpy.size(), ++textEdits);
QTest::keyClick(&window, Qt::Key_Backspace);
- QCOMPARE(textChangedSpy.count(), ++textChanges);
- QCOMPARE(textEditedSpy.count(), ++textEdits);
+ QCOMPARE(textChangedSpy.size(), ++textChanges);
+ QCOMPARE(textEditedSpy.size(), ++textEdits);
input->clear();
- QCOMPARE(textChangedSpy.count(), ++textChanges);
- QCOMPARE(textEditedSpy.count(), textEdits);
+ QCOMPARE(textChangedSpy.size(), ++textChanges);
+ QCOMPARE(textEditedSpy.size(), textEdits);
input->setText("TextInput");
- QCOMPARE(textChangedSpy.count(), ++textChanges);
- QCOMPARE(textEditedSpy.count(), textEdits);
+ QCOMPARE(textChangedSpy.size(), ++textChanges);
+ QCOMPARE(textEditedSpy.size(), textEdits);
}
/*
@@ -2512,12 +2516,12 @@ void tst_qquicktextinput::navigation()
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());
+ input->setCursorPosition(input->text().size());
+ input->select(0,input->text().size());
QVERIFY(input->selectionStart() != input->selectionEnd());
QTest::keyClick(&window, Qt::Key_Right);
QCOMPARE(input->selectionStart(), input->selectionEnd());
- QCOMPARE(input->selectionStart(), input->text().length());
+ QCOMPARE(input->selectionStart(), input->text().size());
QVERIFY(input->hasActiveFocus());
QTest::keyClick(&window, Qt::Key_Right);
QVERIFY(!input->hasActiveFocus());
@@ -2568,7 +2572,7 @@ void tst_qquicktextinput::navigation_RTL()
QTest::keyClick(&window, Qt::Key_Left);
QVERIFY(input->hasActiveFocus());
- input->setCursorPosition(input->text().length());
+ input->setCursorPosition(input->text().size());
QVERIFY(input->hasActiveFocus());
// move off
@@ -2593,16 +2597,16 @@ void tst_qquicktextinput::copyAndPaste()
QVERIFY(textInput != nullptr);
// copy and paste
- QCOMPARE(textInput->text().length(), 12);
- textInput->select(0, textInput->text().length());
+ QCOMPARE(textInput->text().size(), 12);
+ textInput->select(0, textInput->text().size());
textInput->copy();
QCOMPARE(textInput->selectedText(), QString("Hello world!"));
- QCOMPARE(textInput->selectedText().length(), 12);
+ QCOMPARE(textInput->selectedText().size(), 12);
textInput->setCursorPosition(0);
QTRY_VERIFY(textInput->canPaste());
textInput->paste();
QCOMPARE(textInput->text(), QString("Hello world!Hello world!"));
- QCOMPARE(textInput->text().length(), 24);
+ QCOMPARE(textInput->text().size(), 24);
// can paste
QVERIFY(textInput->canPaste());
@@ -2610,7 +2614,7 @@ void tst_qquicktextinput::copyAndPaste()
QVERIFY(!textInput->canPaste());
textInput->paste();
QCOMPARE(textInput->text(), QString("Hello world!Hello world!"));
- QCOMPARE(textInput->text().length(), 24);
+ QCOMPARE(textInput->text().size(), 24);
textInput->setReadOnly(false);
QVERIFY(textInput->canPaste());
@@ -2632,10 +2636,10 @@ void tst_qquicktextinput::copyAndPaste()
// select all and cut
textInput->selectAll();
textInput->cut();
- QCOMPARE(textInput->text().length(), 0);
+ QCOMPARE(textInput->text().size(), 0);
textInput->paste();
QCOMPARE(textInput->text(), QString("Hello world!Hello world!"));
- QCOMPARE(textInput->text().length(), 24);
+ QCOMPARE(textInput->text().size(), 24);
// Copy first word.
textInput->setCursorPosition(0);
@@ -2662,7 +2666,7 @@ void tst_qquicktextinput::copyAndPaste()
QQuickTextInput::EchoMode echoMode = QQuickTextInput::EchoMode(index);
textInput->setEchoMode(echoMode);
textInput->setText("My password");
- textInput->select(0, textInput->text().length());
+ textInput->select(0, textInput->text().size());
textInput->copy();
if (echoMode == QQuickTextInput::Normal) {
QVERIFY(!clipboard->text().isEmpty());
@@ -2698,24 +2702,24 @@ void tst_qquicktextinput::copyAndPasteKeySequence()
// copy and paste
QVERIFY(textInput->hasActiveFocus());
- QCOMPARE(textInput->text().length(), 12);
- textInput->select(0, textInput->text().length());
+ QCOMPARE(textInput->text().size(), 12);
+ textInput->select(0, textInput->text().size());
simulateKeys(&window, QKeySequence::Copy);
QCOMPARE(textInput->selectedText(), QString("Hello world!"));
- QCOMPARE(textInput->selectedText().length(), 12);
+ QCOMPARE(textInput->selectedText().size(), 12);
textInput->setCursorPosition(0);
QVERIFY(textInput->canPaste());
simulateKeys(&window, QKeySequence::Paste);
QCOMPARE(textInput->text(), QString("Hello world!Hello world!"));
- QCOMPARE(textInput->text().length(), 24);
+ QCOMPARE(textInput->text().size(), 24);
// select all and cut
simulateKeys(&window, QKeySequence::SelectAll);
simulateKeys(&window, QKeySequence::Cut);
- QCOMPARE(textInput->text().length(), 0);
+ QCOMPARE(textInput->text().size(), 0);
simulateKeys(&window, QKeySequence::Paste);
QCOMPARE(textInput->text(), QString("Hello world!Hello world!"));
- QCOMPARE(textInput->text().length(), 24);
+ QCOMPARE(textInput->text().size(), 24);
// clear copy buffer
QClipboard *clipboard = QGuiApplication::clipboard();
@@ -2730,7 +2734,7 @@ void tst_qquicktextinput::copyAndPasteKeySequence()
QQuickTextInput::EchoMode echoMode = QQuickTextInput::EchoMode(index);
textInput->setEchoMode(echoMode);
textInput->setText("My password");
- textInput->select(0, textInput->text().length());
+ textInput->select(0, textInput->text().size());
simulateKeys(&window, QKeySequence::Copy);
if (echoMode == QQuickTextInput::Normal) {
QVERIFY(!clipboard->text().isEmpty());
@@ -2749,15 +2753,18 @@ void tst_qquicktextinput::copyAndPasteKeySequence()
#if QT_CONFIG(clipboard) && QT_CONFIG(shortcut)
void tst_qquicktextinput::canPasteEmpty()
{
+ if (!PlatformQuirks::isClipboardAvailable())
+ QSKIP("This machine has no clipboard support.");
+
QGuiApplication::clipboard()->clear();
- QString componentStr = "import QtQuick 2.0\nTextInput { text: \"Hello world!\" }";
+ const QString componentStr = "import QtQuick 2.0\nTextInput { text: \"Hello world!\" }";
QQmlComponent textInputComponent(&engine);
textInputComponent.setData(componentStr.toLatin1(), QUrl());
QQuickTextInput *textInput = qobject_cast<QQuickTextInput*>(textInputComponent.create());
QVERIFY(textInput != nullptr);
- bool cp = !textInput->isReadOnly() && QGuiApplication::clipboard()->text().length() != 0;
+ const bool cp = !textInput->isReadOnly() && QGuiApplication::clipboard()->text().size() != 0;
QCOMPARE(textInput->canPaste(), cp);
}
#endif
@@ -2765,15 +2772,18 @@ void tst_qquicktextinput::canPasteEmpty()
#if QT_CONFIG(clipboard) && QT_CONFIG(shortcut)
void tst_qquicktextinput::canPaste()
{
+ if (!PlatformQuirks::isClipboardAvailable())
+ QSKIP("This machine has no clipboard support.");
+
QGuiApplication::clipboard()->setText("Some text");
- QString componentStr = "import QtQuick 2.0\nTextInput { text: \"Hello world!\" }";
+ const QString componentStr = "import QtQuick 2.0\nTextInput { text: \"Hello world!\" }";
QQmlComponent textInputComponent(&engine);
textInputComponent.setData(componentStr.toLatin1(), QUrl());
QQuickTextInput *textInput = qobject_cast<QQuickTextInput*>(textInputComponent.create());
QVERIFY(textInput != nullptr);
- bool cp = !textInput->isReadOnly() && QGuiApplication::clipboard()->text().length() != 0;
+ const bool cp = !textInput->isReadOnly() && QGuiApplication::clipboard()->text().size() != 0;
QCOMPARE(textInput->canPaste(), cp);
}
#endif
@@ -2782,9 +2792,9 @@ void tst_qquicktextinput::canPaste()
void tst_qquicktextinput::middleClickPaste()
{
if (!PlatformQuirks::isClipboardAvailable())
- QSKIP("This machine doesn't support the clipboard");
+ QSKIP("This machine has no clipboard support.");
- QQuickView window(testFileUrl("mouseselection_true.qml"));
+ QQuickView window(testFileUrl("mouseselectionmode_default.qml"));
window.show();
window.requestActivate();
@@ -2793,11 +2803,12 @@ void tst_qquicktextinput::middleClickPaste()
QVERIFY(window.rootObject() != nullptr);
QQuickTextInput *textInputObject = qobject_cast<QQuickTextInput *>(window.rootObject());
QVERIFY(textInputObject != nullptr);
+ textInputObject->setSelectByMouse(true);
textInputObject->setFocus(true);
- QString originalText = textInputObject->text();
- QString selectedText = "234567";
+ const QString originalText = textInputObject->text();
+ const QString selectedText = "234567";
// press-and-drag-and-release from x1 to x2
const QPoint p1 = textInputObject->positionToRectangle(2).center().toPoint();
@@ -2815,7 +2826,7 @@ void tst_qquicktextinput::middleClickPaste()
QTest::qWait(QGuiApplication::styleHints()->mouseDoubleClickInterval() + 10);
if (QGuiApplication::clipboard()->supportsSelection())
- QCOMPARE(textInputObject->text().mid(1, selectedText.length()), selectedText);
+ QCOMPARE(textInputObject->text().mid(1, selectedText.size()), selectedText);
else
QCOMPARE(textInputObject->text(), originalText);
}
@@ -2867,7 +2878,7 @@ void tst_qquicktextinput::cursorDelegate()
QVERIFY(delegateObject);
QCOMPARE(delegateObject->property("localProperty").toString(), QString("Hello"));
//Test Delegate gets moved
- for (int i=0; i<= textInputObject->text().length(); i++) {
+ for (int i=0; i<= textInputObject->text().size(); i++) {
textInputObject->setCursorPosition(i);
QCOMPARE(textInputObject->cursorRectangle().x(), delegateObject->x());
QCOMPARE(textInputObject->cursorRectangle().y(), delegateObject->y());
@@ -2879,7 +2890,7 @@ void tst_qquicktextinput::cursorDelegate()
// Test delegate gets moved on mouse press.
textInputObject->setSelectByMouse(true);
textInputObject->setCursorPosition(0);
- const QPoint point1 = textInputObject->positionToRectangle(5).center().toPoint();
+ const QPoint point1 = textInputObject->positionToRectangle(10).center().toPoint();
QTest::qWait(400); //ensure this isn't treated as a double-click
QTest::mouseClick(&view, Qt::LeftButton, Qt::NoModifier, point1);
QTest::qWait(50);
@@ -2889,10 +2900,11 @@ void tst_qquicktextinput::cursorDelegate()
// Test delegate gets moved on mouse drag
textInputObject->setCursorPosition(0);
- const QPoint point2 = textInputObject->positionToRectangle(10).center().toPoint();
+ const QPoint point2 = textInputObject->positionToRectangle(15).center().toPoint();
QTest::qWait(400); //ensure this isn't treated as a double-click
QTest::mousePress(&view, Qt::LeftButton, Qt::NoModifier, point1);
- QMouseEvent mv(QEvent::MouseMove, point2, Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
+ QMouseEvent mv(QEvent::MouseMove, point2, textInputObject->mapToGlobal(point2),
+ Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
QGuiApplication::sendEvent(&view, &mv);
QTest::mouseRelease(&view, Qt::LeftButton, Qt::NoModifier, point2);
QTest::qWait(50);
@@ -2902,7 +2914,7 @@ void tst_qquicktextinput::cursorDelegate()
textInputObject->setReadOnly(true);
textInputObject->setCursorPosition(0);
QTest::qWait(400); //ensure this isn't treated as a double-click
- QTest::mouseClick(&view, Qt::LeftButton, Qt::NoModifier, textInputObject->positionToRectangle(5).center().toPoint());
+ QTest::mouseClick(&view, Qt::LeftButton, Qt::NoModifier, textInputObject->positionToRectangle(10).center().toPoint());
QTest::qWait(50);
QTRY_VERIFY(textInputObject->cursorPosition() != 0);
QCOMPARE(textInputObject->cursorRectangle().x(), delegateObject->x());
@@ -2910,7 +2922,7 @@ void tst_qquicktextinput::cursorDelegate()
textInputObject->setCursorPosition(0);
QTest::qWait(400); //ensure this isn't treated as a double-click
- QTest::mouseClick(&view, Qt::LeftButton, Qt::NoModifier, textInputObject->positionToRectangle(5).center().toPoint());
+ QTest::mouseClick(&view, Qt::LeftButton, Qt::NoModifier, textInputObject->positionToRectangle(10).center().toPoint());
QTest::qWait(50);
QTRY_VERIFY(textInputObject->cursorPosition() != 0);
QCOMPARE(textInputObject->cursorRectangle().x(), delegateObject->x());
@@ -3004,27 +3016,27 @@ void tst_qquicktextinput::cursorVisible()
input.setCursorVisible(true);
QCOMPARE(input.isCursorVisible(), true);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
input.setCursorVisible(false);
QCOMPARE(input.isCursorVisible(), false);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
input.setFocus(true);
QCOMPARE(input.isCursorVisible(), false);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
input.setParentItem(view.rootObject());
QCOMPARE(input.isCursorVisible(), true);
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
input.setFocus(false);
QCOMPARE(input.isCursorVisible(), false);
- QCOMPARE(spy.count(), 4);
+ QCOMPARE(spy.size(), 4);
input.setFocus(true);
QCOMPARE(input.isCursorVisible(), true);
- QCOMPARE(spy.count(), 5);
+ QCOMPARE(spy.size(), 5);
QQuickView alternateView;
alternateView.show();
@@ -3032,12 +3044,12 @@ void tst_qquicktextinput::cursorVisible()
QVERIFY(QTest::qWaitForWindowActive(&alternateView));
QCOMPARE(input.isCursorVisible(), false);
- QCOMPARE(spy.count(), 6);
+ QCOMPARE(spy.size(), 6);
view.requestActivate();
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(input.isCursorVisible(), true);
- QCOMPARE(spy.count(), 7);
+ QCOMPARE(spy.size(), 7);
{ // Cursor attribute with 0 length hides cursor.
QInputMethodEvent ev(QString(), QList<QInputMethodEvent::Attribute>()
@@ -3045,7 +3057,7 @@ void tst_qquicktextinput::cursorVisible()
QCoreApplication::sendEvent(&input, &ev);
}
QCOMPARE(input.isCursorVisible(), false);
- QCOMPARE(spy.count(), 8);
+ QCOMPARE(spy.size(), 8);
{ // Cursor attribute with non zero length shows cursor.
QInputMethodEvent ev(QString(), QList<QInputMethodEvent::Attribute>()
@@ -3053,7 +3065,7 @@ void tst_qquicktextinput::cursorVisible()
QCoreApplication::sendEvent(&input, &ev);
}
QCOMPARE(input.isCursorVisible(), true);
- QCOMPARE(spy.count(), 9);
+ QCOMPARE(spy.size(), 9);
{ // If the cursor is hidden by the input method and the text is changed it should be visible again.
QInputMethodEvent ev(QString(), QList<QInputMethodEvent::Attribute>()
@@ -3061,11 +3073,11 @@ void tst_qquicktextinput::cursorVisible()
QCoreApplication::sendEvent(&input, &ev);
}
QCOMPARE(input.isCursorVisible(), false);
- QCOMPARE(spy.count(), 10);
+ QCOMPARE(spy.size(), 10);
input.setText("something");
QCOMPARE(input.isCursorVisible(), true);
- QCOMPARE(spy.count(), 11);
+ QCOMPARE(spy.size(), 11);
{ // If the cursor is hidden by the input method and the cursor position is changed it should be visible again.
QInputMethodEvent ev(QString(), QList<QInputMethodEvent::Attribute>()
@@ -3073,11 +3085,11 @@ void tst_qquicktextinput::cursorVisible()
QCoreApplication::sendEvent(&input, &ev);
}
QCOMPARE(input.isCursorVisible(), false);
- QCOMPARE(spy.count(), 12);
+ QCOMPARE(spy.size(), 12);
input.setCursorPosition(5);
QCOMPARE(input.isCursorVisible(), true);
- QCOMPARE(spy.count(), 13);
+ QCOMPARE(spy.size(), 13);
}
void tst_qquicktextinput::cursorRectangle_data()
@@ -3154,14 +3166,14 @@ void tst_qquicktextinput::cursorRectangle()
// Check the cursor rectangle remains within the input bounding rect when auto scrolling.
QCOMPARE(r.left(), leftToRight ? input.width() : 0);
- for (int i = positionAtWidth + 1; i < text.length(); ++i) {
+ for (int i = positionAtWidth + 1; i < text.size(); ++i) {
input.setCursorPosition(i);
QCOMPARE(r, input.cursorRectangle());
COMPARE_INPUT_METHOD_QUERY(QRectF, (&input), Qt::ImCursorRectangle, toRectF, r);
QCOMPARE(input.positionToRectangle(i), r);
}
- for (int i = text.length() - 2; i >= 0; --i) {
+ for (int i = text.size() - 2; i >= 0; --i) {
input.setCursorPosition(i);
r = input.cursorRectangle();
QCOMPARE(r.top(), 0.);
@@ -3200,7 +3212,7 @@ void tst_qquicktextinput::cursorRectangle()
COMPARE_INPUT_METHOD_QUERY(QRectF, (&input), Qt::ImCursorRectangle, toRectF, r);
QCOMPARE(input.positionToRectangle(11), r);
- for (int i = wrapPosition + 1; i < text.length(); ++i) {
+ for (int i = wrapPosition + 1; i < text.size(); ++i) {
input.setCursorPosition(i);
r = input.cursorRectangle();
QVERIFY(r.top() >= line.height() - 5);
@@ -3241,7 +3253,7 @@ void tst_qquicktextinput::cursorRectangle()
COMPARE_INPUT_METHOD_QUERY(QRectF, (&input), Qt::ImCursorRectangle, toRectF, r);
QCOMPARE(input.positionToRectangle(11), r);
- for (int i = wrapPosition + 1; i < text.length(); ++i) {
+ for (int i = wrapPosition + 1; i < text.size(); ++i) {
input.setCursorPosition(i);
r = input.cursorRectangle();
QVERIFY(r.bottom() >= input.height());
@@ -3249,7 +3261,7 @@ void tst_qquicktextinput::cursorRectangle()
QCOMPARE(input.positionToRectangle(i), r);
}
- for (int i = text.length() - 2; i >= wrapPosition; --i) {
+ for (int i = text.size() - 2; i >= wrapPosition; --i) {
input.setCursorPosition(i);
r = input.cursorRectangle();
QVERIFY(r.bottom() >= input.height());
@@ -3290,7 +3302,7 @@ void tst_qquicktextinput::cursorRectangle()
widerText[1] = 'W'; // Assumes shortText is at least two characters long.
input.setText(widerText);
- QCOMPARE(cursorRectangleSpy.count(), 1);
+ QCOMPARE(cursorRectangleSpy.size(), 1);
}
void tst_qquicktextinput::readOnly()
@@ -3318,7 +3330,7 @@ void tst_qquicktextinput::readOnly()
input->setCursorPosition(3);
input->setReadOnly(false);
QCOMPARE(input->isReadOnly(), false);
- QCOMPARE(input->cursorPosition(), input->text().length());
+ QCOMPARE(input->cursorPosition(), input->text().size());
QVERIFY(input->isCursorVisible());
}
@@ -3440,7 +3452,7 @@ void tst_qquicktextinput::passwordEchoDelay()
QSignalSpy cursorSpy(input, SIGNAL(cursorRectangleChanged()));
QTest::qWait(maskDelay);
QTRY_COMPARE(input->displayText(), QString(5, fillChar));
- QCOMPARE(cursorSpy.count(), 1);
+ QCOMPARE(cursorSpy.size(), 1);
QCOMPARE(input->cursorRectangle().topLeft(), cursor->position());
QTest::keyPress(&window, '5');
@@ -3491,7 +3503,7 @@ void tst_qquicktextinput::focusOnPress()
textInputObject->setFocusOnPress(true);
QCOMPARE(textInputObject->focusOnPress(), true);
- QCOMPARE(activeFocusOnPressSpy.count(), 0);
+ QCOMPARE(activeFocusOnPressSpy.size(), 0);
QQuickWindow window;
window.resize(100, 50);
@@ -3508,20 +3520,20 @@ void tst_qquicktextinput::focusOnPress()
QGuiApplication::processEvents();
QCOMPARE(textInputObject->hasFocus(), true);
QCOMPARE(textInputObject->hasActiveFocus(), true);
- QCOMPARE(focusSpy.count(), 1);
- QCOMPARE(activeFocusSpy.count(), 1);
+ QCOMPARE(focusSpy.size(), 1);
+ QCOMPARE(activeFocusSpy.size(), 1);
QCOMPARE(textInputObject->selectedText(), QString());
QTest::mouseRelease(&window, Qt::LeftButton, noModifiers);
textInputObject->setFocusOnPress(false);
QCOMPARE(textInputObject->focusOnPress(), false);
- QCOMPARE(activeFocusOnPressSpy.count(), 1);
+ QCOMPARE(activeFocusOnPressSpy.size(), 1);
textInputObject->setFocus(false);
QCOMPARE(textInputObject->hasFocus(), false);
QCOMPARE(textInputObject->hasActiveFocus(), false);
- QCOMPARE(focusSpy.count(), 2);
- QCOMPARE(activeFocusSpy.count(), 2);
+ QCOMPARE(focusSpy.size(), 2);
+ QCOMPARE(activeFocusSpy.size(), 2);
// Wait for double click timeout to expire before clicking again.
QTest::qWait(400);
@@ -3529,13 +3541,13 @@ void tst_qquicktextinput::focusOnPress()
QGuiApplication::processEvents();
QCOMPARE(textInputObject->hasFocus(), false);
QCOMPARE(textInputObject->hasActiveFocus(), false);
- QCOMPARE(focusSpy.count(), 2);
- QCOMPARE(activeFocusSpy.count(), 2);
+ QCOMPARE(focusSpy.size(), 2);
+ QCOMPARE(activeFocusSpy.size(), 2);
QTest::mouseRelease(&window, Qt::LeftButton, noModifiers);
textInputObject->setFocusOnPress(true);
QCOMPARE(textInputObject->focusOnPress(), true);
- QCOMPARE(activeFocusOnPressSpy.count(), 2);
+ QCOMPARE(activeFocusOnPressSpy.size(), 2);
// Test a selection made in the on(Active)FocusChanged handler isn't overwritten.
textInputObject->setProperty("selectOnFocus", true);
@@ -3545,8 +3557,8 @@ void tst_qquicktextinput::focusOnPress()
QGuiApplication::processEvents();
QCOMPARE(textInputObject->hasFocus(), true);
QCOMPARE(textInputObject->hasActiveFocus(), true);
- QCOMPARE(focusSpy.count(), 3);
- QCOMPARE(activeFocusSpy.count(), 3);
+ QCOMPARE(focusSpy.size(), 3);
+ QCOMPARE(activeFocusSpy.size(), 3);
QCOMPARE(textInputObject->selectedText(), textInputObject->text());
QTest::mouseRelease(&window, Qt::LeftButton, noModifiers);
}
@@ -3637,7 +3649,7 @@ void tst_qquicktextinput::openInputPanel()
anotherInput.setFocus(true);
QCOMPARE(qApp->inputMethod()->isVisible(), true);
QCOMPARE(qApp->focusObject(), qobject_cast<QObject*>(&anotherInput));
- QCOMPARE(inputPanelVisibilitySpy.count(), 0);
+ QCOMPARE(inputPanelVisibilitySpy.size(), 0);
anotherInput.setFocus(false);
QVERIFY(qApp->focusObject() != &anotherInput);
@@ -3672,7 +3684,7 @@ public:
{
nbPaint = 0;
}
- virtual QSGNode *updatePaintNode(QSGNode *node, UpdatePaintNodeData *data)
+ QSGNode *updatePaintNode(QSGNode *node, UpdatePaintNodeData *data) override
{
nbPaint++;
return QQuickTextInput::updatePaintNode(node, data);
@@ -3752,8 +3764,6 @@ void tst_qquicktextinput::focusOutNotClearSelection()
input.setFocus(false, Qt::PopupFocusReason);
QGuiApplication::processEvents();
QTRY_COMPARE(input.selectedText(), QLatin1String("llo"));
- // QTBUG-36332 and 36292: a popup window does not take focus
- QTRY_COMPARE(input.hasActiveFocus(), true);
input.setFocus(true);
QTRY_COMPARE(input.hasActiveFocus(), true);
@@ -3788,18 +3798,18 @@ void tst_qquicktextinput::contentSize()
QVERIFY(textObject->contentWidth() > textObject->width());
QVERIFY(textObject->contentHeight() < textObject->height());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
textObject->setWrapMode(QQuickTextInput::WordWrap);
QVERIFY(textObject->contentWidth() <= textObject->width());
QVERIFY(textObject->contentHeight() > textObject->height());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
textObject->setText("The quickredfoxjumpedoverthe lazy brown dog");
QVERIFY(textObject->contentWidth() > textObject->width());
QVERIFY(textObject->contentHeight() > textObject->height());
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
textObject->setText("The quick red fox jumped over the lazy brown dog");
for (int w = 60; w < 120; ++w) {
@@ -3812,7 +3822,7 @@ void tst_qquicktextinput::contentSize()
static void sendPreeditText(QQuickItem *item, const QString &text, int cursor)
{
QInputMethodEvent event(text, QList<QInputMethodEvent::Attribute>()
- << QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursor, text.length(), QVariant()));
+ << QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursor, text.size(), QVariant()));
QCoreApplication::sendEvent(item, &event);
}
@@ -3837,14 +3847,14 @@ void tst_qquicktextinput::preeditAutoScroll()
sendPreeditText(input, preeditText.mid(0, 3), 1);
QVERIFY(evaluate<int>(input, QString("positionAt(0)")) != 0);
QVERIFY(input->cursorRectangle().left() < input->boundingRect().width());
- QCOMPARE(cursorRectangleSpy.count(), ++cursorRectangleChanges);
+ QCOMPARE(cursorRectangleSpy.size(), ++cursorRectangleChanges);
// test the text is scrolled back when the preedit is removed.
QInputMethodEvent imEvent;
QCoreApplication::sendEvent(input, &imEvent);
QCOMPARE(evaluate<int>(input, QString("positionAt(%1)").arg(0)), 0);
QCOMPARE(evaluate<int>(input, QString("positionAt(%1)").arg(input->width())), 5);
- QCOMPARE(cursorRectangleSpy.count(), ++cursorRectangleChanges);
+ QCOMPARE(cursorRectangleSpy.size(), ++cursorRectangleChanges);
QTextLayout layout(preeditText);
layout.setFont(input->font());
@@ -3865,7 +3875,7 @@ void tst_qquicktextinput::preeditAutoScroll()
int width = ceil(line.cursorToX(i, QTextLine::Trailing)) - floor(line.cursorToX(i));
QVERIFY(input->cursorRectangle().right() >= width - 3);
QVERIFY(input->positionToRectangle(0).x() < x);
- QCOMPARE(cursorRectangleSpy.count(), ++cursorRectangleChanges);
+ QCOMPARE(cursorRectangleSpy.size(), ++cursorRectangleChanges);
x = input->positionToRectangle(0).x();
}
for (int i = 1; i >= 0; --i) {
@@ -3873,24 +3883,24 @@ void tst_qquicktextinput::preeditAutoScroll()
int width = ceil(line.cursorToX(i, QTextLine::Trailing)) - floor(line.cursorToX(i));
QVERIFY(input->cursorRectangle().right() >= width - 3);
QVERIFY(input->positionToRectangle(0).x() > x);
- QCOMPARE(cursorRectangleSpy.count(), ++cursorRectangleChanges);
+ QCOMPARE(cursorRectangleSpy.size(), ++cursorRectangleChanges);
x = input->positionToRectangle(0).x();
}
// Test incrementing the preedit cursor doesn't cause further
// scrolling when right most text is visible.
- sendPreeditText(input, preeditText, preeditText.length() - 3);
- QCOMPARE(cursorRectangleSpy.count(), ++cursorRectangleChanges);
+ sendPreeditText(input, preeditText, preeditText.size() - 3);
+ QCOMPARE(cursorRectangleSpy.size(), ++cursorRectangleChanges);
x = input->positionToRectangle(0).x();
for (int i = 2; i >= 0; --i) {
- sendPreeditText(input, preeditText, preeditText.length() - i);
+ sendPreeditText(input, preeditText, preeditText.size() - i);
QCOMPARE(input->positionToRectangle(0).x(), x);
- QCOMPARE(cursorRectangleSpy.count(), ++cursorRectangleChanges);
+ QCOMPARE(cursorRectangleSpy.size(), ++cursorRectangleChanges);
}
for (int i = 1; i < 3; ++i) {
- sendPreeditText(input, preeditText, preeditText.length() - i);
+ sendPreeditText(input, preeditText, preeditText.size() - i);
QCOMPARE(input->positionToRectangle(0).x(), x);
- QCOMPARE(cursorRectangleSpy.count(), ++cursorRectangleChanges);
+ QCOMPARE(cursorRectangleSpy.size(), ++cursorRectangleChanges);
}
// Test disabling auto scroll.
@@ -3944,8 +3954,8 @@ void tst_qquicktextinput::preeditCursorRectangle()
QVERIFY(previousRect.left() < currentRect.left());
QCOMPARE(input->cursorRectangle(), currentRect);
QCOMPARE(cursor->position(), currentRect.topLeft());
- QVERIFY(inputSpy.count() > 0); inputSpy.clear();
- QVERIFY(panelSpy.count() > 0); panelSpy.clear();
+ QVERIFY(inputSpy.size() > 0); inputSpy.clear();
+ QVERIFY(panelSpy.size() > 0); panelSpy.clear();
previousRect = currentRect;
}
@@ -3958,8 +3968,8 @@ void tst_qquicktextinput::preeditCursorRectangle()
currentRect = query.value(Qt::ImCursorRectangle).toRectF();
QCOMPARE(input->cursorRectangle(), currentRect);
QCOMPARE(cursor->position(), currentRect.topLeft());
- QCOMPARE(inputSpy.count(), 1);
- QCOMPARE(panelSpy.count(), 1);
+ QCOMPARE(inputSpy.size(), 1);
+ QCOMPARE(panelSpy.size(), 1);
// Verify that if there is no preedit cursor then the micro focus rect is the
// same as it would be if it were positioned at the end of the preedit text.
@@ -3972,8 +3982,8 @@ void tst_qquicktextinput::preeditCursorRectangle()
QCOMPARE(currentRect, previousRect);
QCOMPARE(input->cursorRectangle(), currentRect);
QCOMPARE(cursor->position(), currentRect.topLeft());
- QCOMPARE(inputSpy.count(), 1);
- QCOMPARE(panelSpy.count(), 1);
+ QCOMPARE(inputSpy.size(), 1);
+ QCOMPARE(panelSpy.size(), 1);
}
void tst_qquicktextinput::inputContextMouseHandler()
@@ -4040,37 +4050,37 @@ void tst_qquicktextinput::inputMethodComposing()
QGuiApplication::sendEvent(input, &event);
}
QCOMPARE(input->isInputMethodComposing(), true);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
{
QInputMethodEvent event(text.mid(12), QList<QInputMethodEvent::Attribute>());
QGuiApplication::sendEvent(input, &event);
}
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
{
QInputMethodEvent event;
QGuiApplication::sendEvent(input, &event);
}
QCOMPARE(input->isInputMethodComposing(), false);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
// Changing the text while not composing doesn't alter the composing state.
input->setText(text.mid(0, 16));
QCOMPARE(input->isInputMethodComposing(), false);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
{
QInputMethodEvent event(text.mid(16), QList<QInputMethodEvent::Attribute>());
QGuiApplication::sendEvent(input, &event);
}
QCOMPARE(input->isInputMethodComposing(), true);
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
// Changing the text while composing cancels composition.
input->setText(text.mid(0, 12));
QCOMPARE(input->isInputMethodComposing(), false);
- QCOMPARE(spy.count(), 4);
+ QCOMPARE(spy.size(), 4);
{ // Preedit cursor positioned outside (empty) preedit; composing.
QInputMethodEvent event(QString(), QList<QInputMethodEvent::Attribute>()
@@ -4078,7 +4088,7 @@ void tst_qquicktextinput::inputMethodComposing()
QGuiApplication::sendEvent(input, &event);
}
QCOMPARE(input->isInputMethodComposing(), true);
- QCOMPARE(spy.count(), 5);
+ QCOMPARE(spy.size(), 5);
{ // Cursor hidden; composing
@@ -4087,7 +4097,7 @@ void tst_qquicktextinput::inputMethodComposing()
QGuiApplication::sendEvent(input, &event);
}
QCOMPARE(input->isInputMethodComposing(), true);
- QCOMPARE(spy.count(), 5);
+ QCOMPARE(spy.size(), 5);
{ // Default cursor attributes; composing.
QInputMethodEvent event(QString(), QList<QInputMethodEvent::Attribute>()
@@ -4095,7 +4105,7 @@ void tst_qquicktextinput::inputMethodComposing()
QGuiApplication::sendEvent(input, &event);
}
QCOMPARE(input->isInputMethodComposing(), true);
- QCOMPARE(spy.count(), 5);
+ QCOMPARE(spy.size(), 5);
{ // Selections are persisted: not composing
QInputMethodEvent event(QString(), QList<QInputMethodEvent::Attribute>()
@@ -4103,7 +4113,7 @@ void tst_qquicktextinput::inputMethodComposing()
QGuiApplication::sendEvent(input, &event);
}
QCOMPARE(input->isInputMethodComposing(), false);
- QCOMPARE(spy.count(), 6);
+ QCOMPARE(spy.size(), 6);
input->setCursorPosition(12);
@@ -4115,14 +4125,14 @@ void tst_qquicktextinput::inputMethodComposing()
QGuiApplication::sendEvent(input, &event);
}
QCOMPARE(input->isInputMethodComposing(), true);
- QCOMPARE(spy.count(), 7);
+ QCOMPARE(spy.size(), 7);
{
QInputMethodEvent event;
QGuiApplication::sendEvent(input, &event);
}
QCOMPARE(input->isInputMethodComposing(), false);
- QCOMPARE(spy.count(), 8);
+ QCOMPARE(spy.size(), 8);
}
void tst_qquicktextinput::inputMethodUpdate()
@@ -4309,7 +4319,7 @@ void tst_qquicktextinput::getText_data()
QTest::newRow("all plain text")
<< standard.at(0)
<< QString()
- << 0 << standard.at(0).length()
+ << 0 << standard.at(0).size()
<< standard.at(0);
QTest::newRow("plain text sub string")
@@ -4333,13 +4343,13 @@ void tst_qquicktextinput::getText_data()
QTest::newRow("plain text cropped end")
<< standard.at(0)
<< QString()
- << 23 << standard.at(0).length() + 8
+ << 23 << standard.at(0).size() + 8
<< standard.at(0).mid(23);
QTest::newRow("plain text cropped beginning and end")
<< standard.at(0)
<< QString()
- << -9 << standard.at(0).length() + 4
+ << -9 << standard.at(0).size() + 4
<< standard.at(0);
}
@@ -4387,10 +4397,10 @@ void tst_qquicktextinput::insert_data()
QTest::newRow("at cursor position (end)")
<< standard.at(0)
<< QString()
- << standard.at(0).length() << standard.at(0).length() << standard.at(0).length()
+ << standard.at(0).size() << standard.at(0).size() << standard.at(0).size()
<< QString("Hello")
<< standard.at(0) + QString("Hello")
- << standard.at(0).length() + 5 << standard.at(0).length() + 5 << standard.at(0).length() + 5
+ << standard.at(0).size() + 5 << standard.at(0).size() + 5 << standard.at(0).size() + 5
<< false << true;
QTest::newRow("at cursor position (middle)")
@@ -4414,10 +4424,10 @@ void tst_qquicktextinput::insert_data()
QTest::newRow("before cursor position (end)")
<< standard.at(0)
<< QString()
- << standard.at(0).length() << standard.at(0).length() << 18
+ << standard.at(0).size() << standard.at(0).size() << 18
<< QString("Hello")
<< standard.at(0).mid(0, 18) + QString("Hello") + standard.at(0).mid(18)
- << standard.at(0).length() + 5 << standard.at(0).length() + 5 << standard.at(0).length() + 5
+ << standard.at(0).size() + 5 << standard.at(0).size() + 5 << standard.at(0).size() + 5
<< false << true;
QTest::newRow("before cursor position (middle)")
@@ -4432,7 +4442,7 @@ void tst_qquicktextinput::insert_data()
QTest::newRow("after cursor position (middle)")
<< standard.at(0)
<< QString()
- << 18 << 18 << standard.at(0).length()
+ << 18 << 18 << standard.at(0).size()
<< QString("Hello")
<< standard.at(0) + QString("Hello")
<< 18 << 18 << 18
@@ -4459,7 +4469,7 @@ void tst_qquicktextinput::insert_data()
QTest::newRow("after selection")
<< standard.at(0)
<< QString()
- << 14 << 19 << standard.at(0).length()
+ << 14 << 19 << standard.at(0).size()
<< QString("Hello")
<< standard.at(0) + QString("Hello")
<< 14 << 19 << 19
@@ -4468,7 +4478,7 @@ void tst_qquicktextinput::insert_data()
QTest::newRow("after reversed selection")
<< standard.at(0)
<< QString()
- << 19 << 14 << standard.at(0).length()
+ << 19 << 14 << standard.at(0).size()
<< QString("Hello")
<< standard.at(0) + QString("Hello")
<< 14 << 19 << 14
@@ -4513,7 +4523,7 @@ void tst_qquicktextinput::insert_data()
QTest::newRow("past end")
<< standard.at(0)
<< QString()
- << 0 << 0 << standard.at(0).length() + 3
+ << 0 << 0 << standard.at(0).size() + 3
<< QString("Hello")
<< standard.at(0)
<< 0 << 0 << 0
@@ -4534,10 +4544,10 @@ void tst_qquicktextinput::insert_data()
QTest::newRow("mask: at cursor position (end)")
<< ip
<< inputMask
- << inputMask.length() << inputMask.length() << inputMask.length()
+ << inputMask.size() << inputMask.size() << inputMask.size()
<< QString("8")
<< ip
- << inputMask.length() << inputMask.length() << inputMask.length()
+ << inputMask.size() << inputMask.size() << inputMask.size()
<< false << false;
QTest::newRow("mask: at cursor position (middle)")
@@ -4561,10 +4571,10 @@ void tst_qquicktextinput::insert_data()
QTest::newRow("mask: before cursor position (end)")
<< ip
<< inputMask
- << inputMask.length() << inputMask.length() << 6
+ << inputMask.size() << inputMask.size() << 6
<< QString("75.2")
<< QString("192.167.5.24")
- << inputMask.length() << inputMask.length() << inputMask.length()
+ << inputMask.size() << inputMask.size() << inputMask.size()
<< false << false;
QTest::newRow("mask: before cursor position (middle)")
@@ -4651,7 +4661,7 @@ void tst_qquicktextinput::insert_data()
QTest::newRow("mask: past end")
<< ip
<< inputMask
- << 0 << 0 << ip.length() + 3
+ << 0 << 0 << ip.size() + 3
<< QString("4")
<< ip
<< 0 << 0 << 0
@@ -4708,7 +4718,7 @@ void tst_qquicktextinput::insert()
textInput->insert(insertPosition, insertText);
QCOMPARE(textInput->text(), expectedText);
- QCOMPARE(textInput->length(), inputMask.isEmpty() ? expectedText.length() : inputMask.length());
+ QCOMPARE(textInput->length(), inputMask.isEmpty() ? expectedText.size() : inputMask.size());
QCOMPARE(textInput->selectionStart(), expectedSelectionStart);
QCOMPARE(textInput->selectionEnd(), expectedSelectionEnd);
@@ -4717,11 +4727,11 @@ void tst_qquicktextinput::insert()
if (selectionStart > selectionEnd)
qSwap(selectionStart, selectionEnd);
- QCOMPARE(selectionSpy.count() > 0, selectionChanged);
- QCOMPARE(selectionStartSpy.count() > 0, selectionStart != expectedSelectionStart);
- QCOMPARE(selectionEndSpy.count() > 0, selectionEnd != expectedSelectionEnd);
- QCOMPARE(textSpy.count() > 0, text != expectedText);
- QCOMPARE(cursorPositionSpy.count() > 0, cursorPositionChanged);
+ QCOMPARE(selectionSpy.size() > 0, selectionChanged);
+ QCOMPARE(selectionStartSpy.size() > 0, selectionStart != expectedSelectionStart);
+ QCOMPARE(selectionEndSpy.size() > 0, selectionEnd != expectedSelectionEnd);
+ QCOMPARE(textSpy.size() > 0, text != expectedText);
+ QCOMPARE(cursorPositionSpy.size() > 0, cursorPositionChanged);
}
void tst_qquicktextinput::remove_data()
@@ -4760,19 +4770,19 @@ void tst_qquicktextinput::remove_data()
QTest::newRow("to cursor position (end)")
<< standard.at(0)
<< QString()
- << standard.at(0).length() << standard.at(0).length()
- << standard.at(0).length() << standard.at(0).length() - 5
- << standard.at(0).mid(0, standard.at(0).length() - 5)
- << standard.at(0).length() - 5 << standard.at(0).length() - 5 << standard.at(0).length() - 5
+ << standard.at(0).size() << standard.at(0).size()
+ << standard.at(0).size() << standard.at(0).size() - 5
+ << standard.at(0).mid(0, standard.at(0).size() - 5)
+ << standard.at(0).size() - 5 << standard.at(0).size() - 5 << standard.at(0).size() - 5
<< false << true;
QTest::newRow("to cursor position (end)")
<< standard.at(0)
<< QString()
- << standard.at(0).length() << standard.at(0).length()
- << standard.at(0).length() - 5 << standard.at(0).length()
- << standard.at(0).mid(0, standard.at(0).length() - 5)
- << standard.at(0).length() - 5 << standard.at(0).length() - 5 << standard.at(0).length() - 5
+ << standard.at(0).size() << standard.at(0).size()
+ << standard.at(0).size() - 5 << standard.at(0).size()
+ << standard.at(0).mid(0, standard.at(0).size() - 5)
+ << standard.at(0).size() - 5 << standard.at(0).size() - 5 << standard.at(0).size() - 5
<< false << true;
QTest::newRow("from cursor position (middle)")
@@ -4805,10 +4815,10 @@ void tst_qquicktextinput::remove_data()
QTest::newRow("before cursor position (end)")
<< standard.at(0)
<< QString()
- << standard.at(0).length() << standard.at(0).length()
+ << standard.at(0).size() << standard.at(0).size()
<< 18 << 23
<< standard.at(0).mid(0, 18) + standard.at(0).mid(23)
- << standard.at(0).length() - 5 << standard.at(0).length() - 5 << standard.at(0).length() - 5
+ << standard.at(0).size() - 5 << standard.at(0).size() - 5 << standard.at(0).size() - 5
<< false << true;
QTest::newRow("before cursor position (middle)")
@@ -4851,8 +4861,8 @@ void tst_qquicktextinput::remove_data()
<< standard.at(0)
<< QString()
<< 14 << 19
- << standard.at(0).length() - 5 << standard.at(0).length()
- << standard.at(0).mid(0, standard.at(0).length() - 5)
+ << standard.at(0).size() - 5 << standard.at(0).size()
+ << standard.at(0).mid(0, standard.at(0).size() - 5)
<< 14 << 19 << 19
<< false << false;
@@ -4860,8 +4870,8 @@ void tst_qquicktextinput::remove_data()
<< standard.at(0)
<< QString()
<< 19 << 14
- << standard.at(0).length() - 5 << standard.at(0).length()
- << standard.at(0).mid(0, standard.at(0).length() - 5)
+ << standard.at(0).size() - 5 << standard.at(0).size()
+ << standard.at(0).mid(0, standard.at(0).size() - 5)
<< 14 << 19 << 14
<< false << false;
@@ -4896,7 +4906,7 @@ void tst_qquicktextinput::remove_data()
<< standard.at(0)
<< QString()
<< 0 << 0
- << 23 << standard.at(0).length() + 8
+ << 23 << standard.at(0).size() + 8
<< standard.at(0).mid(0, 23)
<< 0 << 0 << 0
<< false << false;
@@ -4905,7 +4915,7 @@ void tst_qquicktextinput::remove_data()
<< standard.at(0)
<< QString()
<< 0 << 0
- << -9 << standard.at(0).length() + 4
+ << -9 << standard.at(0).size() + 4
<< QString()
<< 0 << 0 << 0
<< false << false;
@@ -5063,7 +5073,7 @@ void tst_qquicktextinput::remove()
textInput->remove(removeStart, removeEnd);
QCOMPARE(textInput->text(), expectedText);
- QCOMPARE(textInput->length(), inputMask.isEmpty() ? expectedText.length() : inputMask.length());
+ QCOMPARE(textInput->length(), inputMask.isEmpty() ? expectedText.size() : inputMask.size());
if (selectionStart > selectionEnd) //
qSwap(selectionStart, selectionEnd);
@@ -5072,13 +5082,13 @@ void tst_qquicktextinput::remove()
QCOMPARE(textInput->selectionEnd(), expectedSelectionEnd);
QCOMPARE(textInput->cursorPosition(), expectedCursorPosition);
- QCOMPARE(selectionSpy.count() > 0, selectionChanged);
- QCOMPARE(selectionStartSpy.count() > 0, selectionStart != expectedSelectionStart);
- QCOMPARE(selectionEndSpy.count() > 0, selectionEnd != expectedSelectionEnd);
- QCOMPARE(textSpy.count() > 0, text != expectedText);
+ QCOMPARE(selectionSpy.size() > 0, selectionChanged);
+ QCOMPARE(selectionStartSpy.size() > 0, selectionStart != expectedSelectionStart);
+ QCOMPARE(selectionEndSpy.size() > 0, selectionEnd != expectedSelectionEnd);
+ QCOMPARE(textSpy.size() > 0, text != expectedText);
if (cursorPositionChanged) //
- QVERIFY(cursorPositionSpy.count() > 0);
+ QVERIFY(cursorPositionSpy.size() > 0);
}
#if QT_CONFIG(shortcut)
@@ -5438,11 +5448,11 @@ void tst_qquicktextinput::undo()
// QTest::keyClick(testWidget, Qt::Key_End, Qt::ShiftModifier);
}
- for (int j = 0; j < insertString.at(i).length(); j++)
+ for (int j = 0; j < insertString.at(i).size(); j++)
QTest::keyClick(&window, insertString.at(i).at(j).toLatin1());
}
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
// STEP 2: Next call undo several times and see if we can restore to the previous state
for (i = 0; i < expectedString.size() - 1; ++i) {
@@ -5454,7 +5464,7 @@ void tst_qquicktextinput::undo()
// STEP 3: Verify that we have undone everything
QVERIFY(textInput->text().isEmpty());
QVERIFY(!textInput->canUndo());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
void tst_qquicktextinput::redo_data()
@@ -5515,13 +5525,13 @@ void tst_qquicktextinput::redo()
for (i = 0; i < insertString.size(); ++i) {
if (insertIndex[i] > -1)
textInput->setCursorPosition(insertIndex[i]);
- for (int j = 0; j < insertString.at(i).length(); j++)
+ for (int j = 0; j < insertString.at(i).size(); j++)
QTest::keyClick(&window, insertString.at(i).at(j).toLatin1());
QVERIFY(textInput->canUndo());
QVERIFY(!textInput->canRedo());
}
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// undo everything
while (!textInput->text().isEmpty()) {
@@ -5530,7 +5540,7 @@ void tst_qquicktextinput::redo()
QVERIFY(textInput->canRedo());
}
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
for (i = 0; i < expectedString.size(); ++i) {
QVERIFY(textInput->canRedo());
@@ -5539,7 +5549,7 @@ void tst_qquicktextinput::redo()
QVERIFY(textInput->canUndo());
}
QVERIFY(!textInput->canRedo());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
#if QT_CONFIG(shortcut)
@@ -5873,12 +5883,12 @@ void tst_qquicktextinput::clear()
textInput->clear();
QVERIFY(textInput->text().isEmpty());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
// checks that clears can be undone
textInput->undo();
QVERIFY(!textInput->canUndo());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QCOMPARE(textInput->text(), QString("I am Legend"));
textInput->setCursorPosition(4);
@@ -5890,14 +5900,16 @@ void tst_qquicktextinput::clear()
textInput->clear();
QVERIFY(textInput->text().isEmpty());
+ QVERIFY2(textInput->preeditText().isEmpty(), "Pre-edit text must be empty after clear");
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
// checks that clears can be undone
textInput->undo();
QVERIFY(!textInput->canUndo());
- QCOMPARE(spy.count(), 4);
+ QCOMPARE(spy.size(), 4);
QCOMPARE(textInput->text(), QString("I am Legend"));
+ QVERIFY2(textInput->preeditText().isEmpty(), "Pre-edit text must be empty after undo");
}
void tst_qquicktextinput::backspaceSurrogatePairs()
@@ -5912,7 +5924,7 @@ void tst_qquicktextinput::backspaceSurrogatePairs()
QQuickTextInput *textInput = qobject_cast<QQuickTextInput*>(textInputComponent.create());
QVERIFY(textInput != nullptr);
textInput->setText(text);
- textInput->setCursorPosition(text.length());
+ textInput->setCursorPosition(text.size());
QQuickWindow window;
textInput->setParentItem(window.contentItem());
@@ -5921,7 +5933,7 @@ void tst_qquicktextinput::backspaceSurrogatePairs()
QVERIFY(QTest::qWaitForWindowActive(&window));
QCOMPARE(QGuiApplication::focusWindow(), &window);
- for (int i = text.length(); i >= 0; i -= 2) {
+ for (int i = text.size(); i >= 0; i -= 2) {
QCOMPARE(textInput->text(), text.mid(0, i));
QTest::keyClick(&window, Qt::Key_Backspace, Qt::NoModifier);
}
@@ -5930,7 +5942,7 @@ void tst_qquicktextinput::backspaceSurrogatePairs()
textInput->setText(text);
textInput->setCursorPosition(0);
- for (int i = 0; i < text.length(); i += 2) {
+ for (int i = 0; i < text.size(); i += 2) {
QCOMPARE(textInput->text(), text.mid(i));
QTest::keyClick(&window, Qt::Key_Delete, Qt::NoModifier);
}
@@ -6417,9 +6429,9 @@ void tst_qquicktextinput::setInputMask()
// inputMaskChanged signal
QString unescapedMask = mask; // mask is escaped, because '\' is also escape in a JS string
unescapedMask.replace(QLatin1String("\\\\"), QLatin1String("\\")); // simple unescape
- QSignalSpy spy(textInput, SIGNAL(inputMaskChanged(const QString &)));
+ QSignalSpy spy(textInput, SIGNAL(inputMaskChanged(QString)));
textInput->setInputMask(unescapedMask);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// then either insert using insert() or keyboard
if (insert_text) {
@@ -6433,7 +6445,7 @@ void tst_qquicktextinput::setInputMask()
QVERIFY(textInput->hasActiveFocus());
QTest::keyClick(&window, Qt::Key_Home);
- for (int i = 0; i < input.length(); i++)
+ for (int i = 0; i < input.size(); i++)
QTest::keyClick(&window, input.at(i).toLatin1());
}
@@ -6713,8 +6725,8 @@ class TestValidator : public QValidator
public:
TestValidator(QObject *parent = nullptr) : QValidator(parent) { }
- State validate(QString &input, int &) const { return input == QStringLiteral("ok") ? Acceptable : Intermediate; }
- void fixup(QString &input) const { input = QStringLiteral("ok"); }
+ State validate(QString &input, int &) const override { return input == QStringLiteral("ok") ? Acceptable : Intermediate; }
+ void fixup(QString &input) const override { input = QStringLiteral("ok"); }
};
void tst_qquicktextinput::fixup()
@@ -6913,7 +6925,7 @@ void tst_qquicktextinput::ensureVisible()
input->ensureVisible(input->length());
- QCOMPARE(cursorSpy.count(), 1);
+ QCOMPARE(cursorSpy.size(), 1);
QCOMPARE(input->boundingRect().x(), input->width() - line.naturalTextWidth());
QCOMPARE(input->boundingRect().y(), qreal(0));
@@ -7023,6 +7035,209 @@ void tst_qquicktextinput::QTBUG_77814_InsertRemoveNoSelection()
QCOMPARE(textInput->selectedText(), QString());
}
+void tst_qquicktextinput::checkCursorDelegateWhenPaddingChanged()
+{
+ QQuickView view;
+ view.setSource(testFileUrl("checkCursorDelegateWhenPaddingChanged.qml"));
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ QQuickTextInput *textInput = view.rootObject()->findChild<QQuickTextInput *>("textInput");
+ QVERIFY(textInput);
+
+ QQuickItem *cursorDelegate = textInput->findChild<QQuickItem *>("cursorDelegate");
+ QVERIFY(cursorDelegate);
+
+ QCOMPARE(cursorDelegate->x(), textInput->leftPadding());
+ QCOMPARE(cursorDelegate->y(), textInput->topPadding());
+
+ textInput->setPadding(5);
+ QCOMPARE(cursorDelegate->x(), textInput->leftPadding());
+ QCOMPARE(cursorDelegate->y(), textInput->topPadding());
+
+ textInput->setTopPadding(10);
+ QCOMPARE(cursorDelegate->x(), textInput->leftPadding());
+ QCOMPARE(cursorDelegate->y(), textInput->topPadding());
+
+ textInput->setLeftPadding(10);
+ QCOMPARE(cursorDelegate->x(), textInput->leftPadding());
+ QCOMPARE(cursorDelegate->y(), textInput->topPadding());
+}
+
+/*!
+ Verifies that TextInput items get focus in/out events with the
+ correct focus reason set.
+
+ Up and Down keys translates to Backtab and Tab focus reasons.
+
+ See QTBUG-75862.
+*/
+void tst_qquicktextinput::focusReason()
+{
+ QQuickView view;
+ view.setSource(testFileUrl("focusReason.qml"));
+
+ QQuickTextInput *first = view.rootObject()->findChild<QQuickTextInput *>("first");
+ QQuickTextInput *second = view.rootObject()->findChild<QQuickTextInput *>("second");
+ QQuickTextInput *third = view.rootObject()->findChild<QQuickTextInput *>("third");
+ QVERIFY(first && second && third);
+
+ class FocusEventFilter : public QObject
+ {
+ public:
+ using QObject::QObject;
+
+ QHash<QObject*, Qt::FocusReason> lastFocusReason;
+ protected:
+ bool eventFilter(QObject *o, QEvent *e) override
+ {
+ if (e->type() == QEvent::FocusIn || e->type() == QEvent::FocusOut) {
+ QFocusEvent *fe = static_cast<QFocusEvent*>(e);
+ lastFocusReason[o] = fe->reason();
+ }
+ return QObject::eventFilter(o, e);
+ }
+ } eventFilter;
+ first->installEventFilter(&eventFilter);
+ second->installEventFilter(&eventFilter);
+ third->installEventFilter(&eventFilter);
+
+ view.show();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QCOMPARE(qApp->focusObject(), first);
+ // on some platforms we don't get ActiveWindowFocusReason; tolerate this,
+ // it's not what we are testing in this test
+ if (eventFilter.lastFocusReason[first] != Qt::ActiveWindowFocusReason) {
+ QEXPECT_FAIL("", qPrintable(QString("No window activation event on the %1 platform")
+ .arg(QGuiApplication::platformName())),
+ Continue);
+ }
+ QCOMPARE(eventFilter.lastFocusReason[first], Qt::ActiveWindowFocusReason);
+
+ QTest::mouseClick(&view, Qt::LeftButton, {},
+ (second->boundingRect().center() + second->position()).toPoint());
+ QTRY_COMPARE(qApp->focusObject(), second);
+ QCOMPARE(eventFilter.lastFocusReason[first], Qt::MouseFocusReason);
+ QCOMPARE(eventFilter.lastFocusReason[second], Qt::MouseFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Tab);
+ QCOMPARE(qApp->focusObject(), third);
+ QCOMPARE(eventFilter.lastFocusReason[second], Qt::TabFocusReason);
+ QCOMPARE(eventFilter.lastFocusReason[third], Qt::TabFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Backtab);
+ QCOMPARE(qApp->focusObject(), second);
+ QCOMPARE(eventFilter.lastFocusReason[third], Qt::BacktabFocusReason);
+ QCOMPARE(eventFilter.lastFocusReason[second], Qt::BacktabFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Up);
+ QCOMPARE(qApp->focusObject(), first);
+ QCOMPARE(eventFilter.lastFocusReason[second], Qt::BacktabFocusReason);
+ QCOMPARE(eventFilter.lastFocusReason[first], Qt::BacktabFocusReason);
+
+ QTest::keyClick(&view, Qt::Key_Down);
+ QCOMPARE(qApp->focusObject(), second);
+ QCOMPARE(eventFilter.lastFocusReason[second], Qt::TabFocusReason);
+ QCOMPARE(eventFilter.lastFocusReason[first], Qt::TabFocusReason);
+}
+
+void tst_qquicktextinput::touchscreenDoesNotSelect_data()
+{
+ QTest::addColumn<QUrl>("src");
+ QTest::addColumn<bool>("expectDefaultSelectByMouse");
+ QTest::addColumn<bool>("overrideSelectByMouseFalse");
+ QTest::newRow("new default") << testFileUrl("mouseselectionmode_default.qml") << true << false;
+ QTest::newRow("new override") << testFileUrl("mouseselectionmode_default.qml") << true << true;
+#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
+ QTest::newRow("old default") << testFileUrl("mouseselection_old_default.qml") << false << false;
+#endif
+}
+
+void tst_qquicktextinput::touchscreenDoesNotSelect()
+{
+ QFETCH(QUrl, src);
+ QFETCH(bool, expectDefaultSelectByMouse);
+ QFETCH(bool, overrideSelectByMouseFalse);
+
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, src));
+
+ QQuickTextInput *textInputObject = qobject_cast<QQuickTextInput *>(window.rootObject());
+ QVERIFY(textInputObject);
+ QCOMPARE(textInputObject->selectByMouse(), expectDefaultSelectByMouse);
+ if (overrideSelectByMouseFalse)
+ textInputObject->setSelectByMouse(overrideSelectByMouseFalse);
+
+ // press-drag-and-release from x1 to x2
+ int x1 = 10;
+ int x2 = 70;
+ int y = textInputObject->height() / 2;
+ QTest::touchEvent(&window, touchscreen.data()).press(0, QPoint(x1,y), &window);
+ QTest::touchEvent(&window, touchscreen.data()).move(0, QPoint(x2,y), &window);
+ QTest::touchEvent(&window, touchscreen.data()).release(0, QPoint(x2,y), &window);
+ QQuickTouchUtils::flush(&window);
+ QVERIFY(textInputObject->selectedText().isEmpty());
+
+ // select all text (which moves the cursor to the end), then tap:
+ // with old API, it deselects, and moves the cursor (QTBUG-116606)
+ // with new API, it remains selected, and the cursor remains at the end
+ textInputObject->selectAll();
+ const int cursorPos = textInputObject->cursorPosition();
+ QTest::touchEvent(&window, touchscreen.data()).press(0, QPoint(x2,y), &window);
+ QTest::touchEvent(&window, touchscreen.data()).release(0, QPoint(x2,y), &window);
+ QQuickTouchUtils::flush(&window);
+ QCOMPARE(textInputObject->selectedText().isEmpty(), !expectDefaultSelectByMouse);
+ if (expectDefaultSelectByMouse)
+ QCOMPARE(textInputObject->cursorPosition(), cursorPos);
+ else
+ QCOMPARE_NE(textInputObject->cursorPosition(), cursorPos);
+}
+
+void tst_qquicktextinput::touchscreenSetsFocusAndMovesCursor()
+{
+ SKIP_IF_NO_WINDOW_ACTIVATION
+
+ QQuickView window;
+ QVERIFY(QQuickTest::showView(window, testFileUrl("twoInAColumn.qml")));
+ window.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+
+ QQuickTextInput *top = window.rootObject()->findChild<QQuickTextInput*>("top");
+ QVERIFY(top);
+ QQuickTextInput *bottom = window.rootObject()->findChild<QQuickTextInput*>("bottom");
+ QVERIFY(bottom);
+
+ // tap the bottom field
+ int x1 = 10;
+ int y = bottom->position().y() + bottom->height() / 2;
+ QTest::touchEvent(&window, touchscreen.data()).press(0, QPoint(x1,y), &window);
+ QQuickTouchUtils::flush(&window);
+ QCOMPARE(qApp->focusObject(), bottom);
+ // text cursor is at the end by default, on press
+ const auto len = bottom->text().size();
+ QCOMPARE(bottom->cursorPosition(), len);
+ // so typing a character appends it
+ QVERIFY(!bottom->text().endsWith('q'));
+ QTest::keyClick(&window, Qt::Key_Q);
+ QVERIFY(bottom->text().endsWith('q'));
+ QCOMPARE(bottom->text().size(), len + 1);
+ QTest::touchEvent(&window, touchscreen.data()).release(0, QPoint(x1,y), &window);
+ QQuickTouchUtils::flush(&window);
+ // the cursor gets moved on release, as long as TextInput's grab wasn't stolen (e.g. by Flickable)
+ QVERIFY(bottom->cursorPosition() < 5);
+
+ // press-drag-and-release from x1 to x2 on the top field
+ int x2 = 70;
+ y = top->position().y() + top->height() / 2;
+ QTest::touchEvent(&window, touchscreen.data()).press(0, QPoint(x1,y), &window);
+ QTest::touchEvent(&window, touchscreen.data()).move(0, QPoint(x2,y), &window);
+ QTest::touchEvent(&window, touchscreen.data()).release(0, QPoint(x2,y), &window);
+ QQuickTouchUtils::flush(&window);
+ QCOMPARE(qApp->focusObject(), top);
+ QVERIFY(top->selectedText().isEmpty());
+}
+
QTEST_MAIN(tst_qquicktextinput)
#include "tst_qquicktextinput.moc"