--- /dev/null
+import QtQuick 2.0
+
+Rectangle {
+ objectName: "cursorInstance"
+}
--- /dev/null
+import QtQuick 2.0
+
+Rectangle { width: 300; height: 300; color: "white"
+ property string contextualProperty: "Hello"
+ TextEdit {
+ text: "Hello world!"
+ id: textEditObject;
+ objectName: "textEditObject"
+ width: 300; height: 300
+ wrapMode: TextEdit.WordWrap
+ cursorDelegate: contextDelegate
+ }
+}
#include <Carbon/Carbon.h>
#endif
+#define SERVER_PORT 42332
+#define SERVER_ADDR "http://localhost:42332"
Q_DECLARE_METATYPE(QQuickTextEdit::SelectionMode)
Q_DECLARE_METATYPE(Qt::Key)
void cursorDelegate_data();
void cursorDelegate();
+ void remoteCursorDelegate();
void cursorVisible();
void delegateLoading_data();
void delegateLoading();
QVERIFY(!textEditObject->findChild<QQuickItem*>("cursorInstance"));
}
+void tst_qquicktextedit::remoteCursorDelegate()
+{
+ TestHTTPServer server(SERVER_PORT);
+ server.serveDirectory(dataDirectory());
+
+ QQuickView view;
+
+ QQmlComponent component(view.engine(), QUrl(SERVER_ADDR "/RemoteCursor.qml"));
+
+ view.rootContext()->setContextProperty("contextDelegate", &component);
+ view.setSource(testFileUrl("cursorTestRemote.qml"));
+ view.show();
+ view.requestActivateWindow();
+ QQuickTextEdit *textEditObject = view.rootObject()->findChild<QQuickTextEdit*>("textEditObject");
+ QVERIFY(textEditObject != 0);
+
+ // Delegate is created on demand, and so won't be available immediately. Focus in or
+ // setCursorVisible(true) will trigger creation.
+ QTRY_VERIFY(!textEditObject->findChild<QQuickItem*>("cursorInstance"));
+ QVERIFY(!textEditObject->isCursorVisible());
+
+ textEditObject->setFocus(true);
+ QVERIFY(textEditObject->isCursorVisible());
+
+ QCOMPARE(component.status(), QQmlComponent::Loading);
+ QVERIFY(!textEditObject->findChild<QQuickItem*>("cursorInstance"));
+
+ // Wait for component to load.
+ QTRY_COMPARE(component.status(), QQmlComponent::Ready);
+ QVERIFY(textEditObject->findChild<QQuickItem*>("cursorInstance"));
+}
+
void tst_qquicktextedit::cursorVisible()
{
QQuickTextEdit edit;
QFETCH(QString, qmlfile);
QFETCH(QString, error);
- TestHTTPServer server(42332);
+ TestHTTPServer server(SERVER_PORT);
server.serveDirectory(testFile("httpfail"), TestHTTPServer::Disconnect);
server.serveDirectory(testFile("httpslow"), TestHTTPServer::Delay);
server.serveDirectory(testFile("http"));
- QQuickView view(QUrl(QLatin1String("http://localhost:42332/") + qmlfile));
+ QQuickView view(QUrl(QLatin1String(SERVER_ADDR "/") + qmlfile));
view.show();
view.requestActivateWindow();
QFETCH(QUrl, qmlfile);
QFETCH(QString, error);
- TestHTTPServer server(42332);
+ TestHTTPServer server(SERVER_PORT);
server.serveDirectory(testFile("http"));
if (!error.isEmpty())
--- /dev/null
+import QtQuick 2.0
+
+Rectangle {
+ objectName: "cursorInstance"
+}
--- /dev/null
+import QtQuick 2.0
+
+Rectangle { width: 300; height: 300; color: "white"
+ TextInput {
+ text: "Hello world!"
+ id: textInputObject;
+ objectName: "textInputObject"
+ width: 300; height: 300
+ wrapMode: TextInput.Wrap
+ cursorDelegate: contextDelegate
+ }
+}
TARGET = tst_qquicktextinput
macx:CONFIG -= app_bundle
-SOURCES += tst_qquicktextinput.cpp
+SOURCES += tst_qquicktextinput.cpp \
+ ../../shared/testhttpserver.cpp
+
+HEADERS += ../../shared/testhttpserver.h
include (../../shared/util.pri)
#include <qtest.h>
#include <QtTest/QSignalSpy>
#include "../../shared/util.h"
+#include "../../shared/testhttpserver.h"
#include <private/qinputmethod_p.h>
#include <QtQml/qqmlengine.h>
#include <QtQml/qqmlexpression.h>
#include "qplatformdefs.h"
#include "../../shared/platforminputcontext.h"
+#define SERVER_PORT 14460
+#define SERVER_ADDR "http://localhost:14460"
+
Q_DECLARE_METATYPE(QQuickTextInput::SelectionMode)
Q_DECLARE_METATYPE(QQuickTextInput::EchoMode)
Q_DECLARE_METATYPE(Qt::Key)
void passwordCharacter();
void cursorDelegate_data();
void cursorDelegate();
+ void remoteCursorDelegate();
void cursorVisible();
void cursorRectangle_data();
void cursorRectangle();
QVERIFY(!textInputObject->findChild<QQuickItem*>("cursorInstance"));
}
+void tst_qquicktextinput::remoteCursorDelegate()
+{
+ TestHTTPServer server(SERVER_PORT);
+ server.serveDirectory(dataDirectory());
+
+ QQuickView view;
+
+ QQmlComponent component(view.engine(), QUrl(SERVER_ADDR "/RemoteCursor.qml"));
+
+ view.rootContext()->setContextProperty("contextDelegate", &component);
+ view.setSource(testFileUrl("cursorTestRemote.qml"));
+ view.show();
+ view.requestActivateWindow();
+ QQuickTextInput *textInputObject = view.rootObject()->findChild<QQuickTextInput*>("textInputObject");
+ QVERIFY(textInputObject != 0);
+
+ // Delegate is created on demand, and so won't be available immediately. Focus in or
+ // setCursorVisible(true) will trigger creation.
+ QTRY_VERIFY(!textInputObject->findChild<QQuickItem*>("cursorInstance"));
+ QVERIFY(!textInputObject->isCursorVisible());
+
+ textInputObject->setFocus(true);
+ QVERIFY(textInputObject->isCursorVisible());
+
+ QCOMPARE(component.status(), QQmlComponent::Loading);
+ QVERIFY(!textInputObject->findChild<QQuickItem*>("cursorInstance"));
+
+ // Wait for component to load.
+ QTRY_COMPARE(component.status(), QQmlComponent::Ready);
+ QVERIFY(textInputObject->findChild<QQuickItem*>("cursorInstance"));
+}
+
void tst_qquicktextinput::cursorVisible()
{
QQuickTextInput input;