diff options
Diffstat (limited to 'tests/auto/declarative/qsgtextedit/tst_qsgtextedit.cpp')
-rw-r--r-- | tests/auto/declarative/qsgtextedit/tst_qsgtextedit.cpp | 648 |
1 files changed, 311 insertions, 337 deletions
diff --git a/tests/auto/declarative/qsgtextedit/tst_qsgtextedit.cpp b/tests/auto/declarative/qsgtextedit/tst_qsgtextedit.cpp index e37beffa5e..5510701962 100644 --- a/tests/auto/declarative/qsgtextedit/tst_qsgtextedit.cpp +++ b/tests/auto/declarative/qsgtextedit/tst_qsgtextedit.cpp @@ -61,6 +61,10 @@ #include <private/qapplication_p.h> #include <private/qtextcontrol_p.h> +#ifdef Q_WS_MAC +#include <Carbon/Carbon.h> +#endif + #ifdef Q_OS_SYMBIAN // In Symbian OS test data is located in applications private dir #define SRCDIR "." @@ -148,10 +152,10 @@ private slots: void preeditMicroFocus(); void inputContextMouseHandler(); void inputMethodComposing(); + void cursorRectangleSize(); private: void simulateKey(QSGView *, int key, Qt::KeyboardModifiers modifiers = 0); - QSGView *createView(const QString &filename); QStringList standard; QStringList richText; @@ -216,7 +220,7 @@ void tst_qsgtextedit::text() { { QDeclarativeComponent texteditComponent(&engine); - texteditComponent.setData("import QtQuick 1.0\nTextEdit { text: \"\" }", QUrl()); + texteditComponent.setData("import QtQuick 2.0\nTextEdit { text: \"\" }", QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); QVERIFY(textEditObject != 0); @@ -225,7 +229,7 @@ void tst_qsgtextedit::text() for (int i = 0; i < standard.size(); i++) { - QString componentStr = "import QtQuick 1.0\nTextEdit { text: \"" + standard.at(i) + "\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { text: \"" + standard.at(i) + "\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -236,7 +240,7 @@ void tst_qsgtextedit::text() for (int i = 0; i < richText.size(); i++) { - QString componentStr = "import QtQuick 1.0\nTextEdit { text: \"" + richText.at(i) + "\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { text: \"" + richText.at(i) + "\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -256,7 +260,7 @@ void tst_qsgtextedit::width() // uses Font metrics to find the width for standard and document to find the width for rich { QDeclarativeComponent texteditComponent(&engine); - texteditComponent.setData("import QtQuick 1.0\nTextEdit { text: \"\" }", QUrl()); + texteditComponent.setData("import QtQuick 2.0\nTextEdit { text: \"\" }", QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); QVERIFY(textEditObject != 0); @@ -270,7 +274,7 @@ void tst_qsgtextedit::width() qreal metricWidth = fm.size(Qt::TextExpandTabs && Qt::TextShowMnemonic, standard.at(i)).width(); metricWidth = ceil(metricWidth); - QString componentStr = "import QtQuick 1.0\nTextEdit { text: \"" + standard.at(i) + "\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { text: \"" + standard.at(i) + "\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -287,7 +291,7 @@ void tst_qsgtextedit::width() int documentWidth = ceil(document.idealWidth()); - QString componentStr = "import QtQuick 1.0\nTextEdit { text: \"" + richText.at(i) + "\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { text: \"" + richText.at(i) + "\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -302,7 +306,7 @@ void tst_qsgtextedit::wrap() // for specified width and wrap set true { QDeclarativeComponent texteditComponent(&engine); - texteditComponent.setData("import QtQuick 1.0\nTextEdit { text: \"\"; wrapMode: TextEdit.WordWrap; width: 300 }", QUrl()); + texteditComponent.setData("import QtQuick 2.0\nTextEdit { text: \"\"; wrapMode: TextEdit.WordWrap; width: 300 }", QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); QVERIFY(textEditObject != 0); @@ -311,7 +315,7 @@ void tst_qsgtextedit::wrap() for (int i = 0; i < standard.size(); i++) { - QString componentStr = "import QtQuick 1.0\nTextEdit { wrapMode: TextEdit.WordWrap; width: 300; text: \"" + standard.at(i) + "\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { wrapMode: TextEdit.WordWrap; width: 300; text: \"" + standard.at(i) + "\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -322,7 +326,7 @@ void tst_qsgtextedit::wrap() for (int i = 0; i < richText.size(); i++) { - QString componentStr = "import QtQuick 1.0\nTextEdit { wrapMode: TextEdit.WordWrap; width: 300; text: \"" + richText.at(i) + "\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { wrapMode: TextEdit.WordWrap; width: 300; text: \"" + richText.at(i) + "\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -337,7 +341,7 @@ void tst_qsgtextedit::textFormat() { { QDeclarativeComponent textComponent(&engine); - textComponent.setData("import QtQuick 1.0\nTextEdit { text: \"Hello\"; textFormat: Text.RichText }", QUrl::fromLocalFile("")); + textComponent.setData("import QtQuick 2.0\nTextEdit { text: \"Hello\"; textFormat: Text.RichText }", QUrl::fromLocalFile("")); QSGTextEdit *textObject = qobject_cast<QSGTextEdit*>(textComponent.create()); QVERIFY(textObject != 0); @@ -345,7 +349,7 @@ void tst_qsgtextedit::textFormat() } { QDeclarativeComponent textComponent(&engine); - textComponent.setData("import QtQuick 1.0\nTextEdit { text: \"<b>Hello</b>\"; textFormat: Text.PlainText }", QUrl::fromLocalFile("")); + textComponent.setData("import QtQuick 2.0\nTextEdit { text: \"<b>Hello</b>\"; textFormat: Text.PlainText }", QUrl::fromLocalFile("")); QSGTextEdit *textObject = qobject_cast<QSGTextEdit*>(textComponent.create()); QVERIFY(textObject != 0); @@ -379,30 +383,28 @@ void tst_qsgtextedit::alignments() QFETCH(int, vAlign); QFETCH(QString, expectfile); - QSGView *canvas = createView(SRCDIR "/data/alignments.qml"); + QSGView canvas(QUrl::fromLocalFile(SRCDIR "/data/alignments.qml")); - canvas->show(); - QApplication::setActiveWindow(canvas); - QTest::qWaitForWindowShown(canvas); - QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); + canvas.show(); + QApplication::setActiveWindow(&canvas); + QTest::qWaitForWindowShown(&canvas); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&canvas)); - QObject *ob = canvas->rootObject(); + QObject *ob = canvas.rootObject(); QVERIFY(ob != 0); ob->setProperty("horizontalAlignment",hAlign); ob->setProperty("verticalAlignment",vAlign); QTRY_COMPARE(ob->property("running").toBool(),false); - QImage actual(canvas->width(), canvas->height(), QImage::Format_RGB32); + QImage actual(canvas.width(), canvas.height(), QImage::Format_RGB32); actual.fill(qRgb(255,255,255)); QPainter p(&actual); - canvas->render(&p); + canvas.render(&p); expectfile = createExpectedFileIfNotFound(expectfile, actual); QImage expect(expectfile); QCOMPARE(actual,expect); - - delete canvas; } @@ -415,7 +417,7 @@ void tst_qsgtextedit::hAlign() { for (int j=0; j < hAlignmentStrings.size(); j++) { - QString componentStr = "import QtQuick 1.0\nTextEdit { horizontalAlignment: \"" + hAlignmentStrings.at(j) + "\"; text: \"" + standard.at(i) + "\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { horizontalAlignment: \"" + hAlignmentStrings.at(j) + "\"; text: \"" + standard.at(i) + "\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -429,7 +431,7 @@ void tst_qsgtextedit::hAlign() { for (int j=0; j < hAlignmentStrings.size(); j++) { - QString componentStr = "import QtQuick 1.0\nTextEdit { horizontalAlignment: \"" + hAlignmentStrings.at(j) + "\"; text: \"" + richText.at(i) + "\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { horizontalAlignment: \"" + hAlignmentStrings.at(j) + "\"; text: \"" + richText.at(i) + "\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -443,24 +445,24 @@ void tst_qsgtextedit::hAlign() void tst_qsgtextedit::hAlign_RightToLeft() { - QSGView *canvas = createView(SRCDIR "/data/horizontalAlignment_RightToLeft.qml"); - QSGTextEdit *textEdit = canvas->rootObject()->findChild<QSGTextEdit*>("text"); + QSGView canvas(QUrl::fromLocalFile(SRCDIR "/data/horizontalAlignment_RightToLeft.qml")); + QSGTextEdit *textEdit = canvas.rootObject()->findChild<QSGTextEdit*>("text"); QVERIFY(textEdit != 0); - canvas->show(); + canvas.show(); // implicit alignment should follow the reading direction of text QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignRight); - QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas.width()/2); // explicitly left aligned textEdit->setHAlign(QSGTextEdit::AlignLeft); QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignLeft); - QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() < canvas.width()/2); // explicitly right aligned textEdit->setHAlign(QSGTextEdit::AlignRight); QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignRight); - QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas.width()/2); QString textString = textEdit->text(); textEdit->setText(QString("<i>") + textString + QString("</i>")); @@ -469,31 +471,31 @@ void tst_qsgtextedit::hAlign_RightToLeft() // implicitly aligned rich text should follow the reading direction of RTL text QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignRight); QCOMPARE(textEdit->effectiveHAlign(), textEdit->hAlign()); - QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas.width()/2); // explicitly left aligned rich text textEdit->setHAlign(QSGTextEdit::AlignLeft); QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignLeft); QCOMPARE(textEdit->effectiveHAlign(), textEdit->hAlign()); - QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() < canvas.width()/2); // explicitly right aligned rich text textEdit->setHAlign(QSGTextEdit::AlignRight); QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignRight); QCOMPARE(textEdit->effectiveHAlign(), textEdit->hAlign()); - QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas.width()/2); textEdit->setText(textString); // explicitly center aligned textEdit->setHAlign(QSGTextEdit::AlignHCenter); QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignHCenter); - QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas.width()/2); // reseted alignment should go back to following the text reading direction textEdit->resetHAlign(); QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignRight); - QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas.width()/2); // mirror the text item QSGItemPrivate::get(textEdit)->setLayoutMirror(true); @@ -501,19 +503,19 @@ void tst_qsgtextedit::hAlign_RightToLeft() // mirrored implicit alignment should continue to follow the reading direction of the text QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignRight); QCOMPARE(textEdit->effectiveHAlign(), QSGTextEdit::AlignRight); - QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas.width()/2); // mirrored explicitly right aligned behaves as left aligned textEdit->setHAlign(QSGTextEdit::AlignRight); QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignRight); QCOMPARE(textEdit->effectiveHAlign(), QSGTextEdit::AlignLeft); - QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() < canvas.width()/2); // mirrored explicitly left aligned behaves as right aligned textEdit->setHAlign(QSGTextEdit::AlignLeft); QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignLeft); QCOMPARE(textEdit->effectiveHAlign(), QSGTextEdit::AlignRight); - QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas.width()/2); // disable mirroring QSGItemPrivate::get(textEdit)->setLayoutMirror(false); @@ -522,7 +524,7 @@ void tst_qsgtextedit::hAlign_RightToLeft() // English text should be implicitly left aligned textEdit->setText("Hello world!"); QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignLeft); - QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() < canvas.width()/2); #ifndef Q_OS_MAC // QTBUG-18040 // empty text with implicit alignment follows the system locale-based @@ -531,19 +533,17 @@ void tst_qsgtextedit::hAlign_RightToLeft() QCOMPARE(textEdit->hAlign(), QApplication::keyboardInputDirection() == Qt::LeftToRight ? QSGTextEdit::AlignLeft : QSGTextEdit::AlignRight); if (QApplication::keyboardInputDirection() == Qt::LeftToRight) - QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() < canvas.width()/2); else - QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas.width()/2); textEdit->setHAlign(QSGTextEdit::AlignRight); QCOMPARE(textEdit->hAlign(), QSGTextEdit::AlignRight); - QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas.width()/2); #endif - delete canvas; - #ifndef Q_OS_MAC // QTBUG-18040 // alignment of TextEdit with no text set to it - QString componentStr = "import QtQuick 1.0\nTextEdit {}"; + QString componentStr = "import QtQuick 2.0\nTextEdit {}"; QDeclarativeComponent textComponent(&engine); textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QSGTextEdit *textObject = qobject_cast<QSGTextEdit*>(textComponent.create()); @@ -561,7 +561,7 @@ void tst_qsgtextedit::vAlign() { for (int j=0; j < vAlignmentStrings.size(); j++) { - QString componentStr = "import QtQuick 1.0\nTextEdit { verticalAlignment: \"" + vAlignmentStrings.at(j) + "\"; text: \"" + standard.at(i) + "\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { verticalAlignment: \"" + vAlignmentStrings.at(j) + "\"; text: \"" + standard.at(i) + "\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -575,7 +575,7 @@ void tst_qsgtextedit::vAlign() { for (int j=0; j < vAlignmentStrings.size(); j++) { - QString componentStr = "import QtQuick 1.0\nTextEdit { verticalAlignment: \"" + vAlignmentStrings.at(j) + "\"; text: \"" + richText.at(i) + "\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { verticalAlignment: \"" + vAlignmentStrings.at(j) + "\"; text: \"" + richText.at(i) + "\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -591,7 +591,7 @@ void tst_qsgtextedit::font() { //test size, then bold, then italic, then family { - QString componentStr = "import QtQuick 1.0\nTextEdit { font.pointSize: 40; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { font.pointSize: 40; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -603,7 +603,7 @@ void tst_qsgtextedit::font() } { - QString componentStr = "import QtQuick 1.0\nTextEdit { font.bold: true; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { font.bold: true; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -614,7 +614,7 @@ void tst_qsgtextedit::font() } { - QString componentStr = "import QtQuick 1.0\nTextEdit { font.italic: true; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { font.italic: true; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -625,7 +625,7 @@ void tst_qsgtextedit::font() } { - QString componentStr = "import QtQuick 1.0\nTextEdit { font.family: \"Helvetica\"; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { font.family: \"Helvetica\"; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -637,7 +637,7 @@ void tst_qsgtextedit::font() } { - QString componentStr = "import QtQuick 1.0\nTextEdit { font.family: \"\"; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { font.family: \"\"; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -651,7 +651,7 @@ void tst_qsgtextedit::color() { //test initial color { - QString componentStr = "import QtQuick 1.0\nTextEdit { text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -669,7 +669,7 @@ void tst_qsgtextedit::color() //test normal for (int i = 0; i < colorStrings.size(); i++) { - QString componentStr = "import QtQuick 1.0\nTextEdit { color: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { color: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -681,7 +681,7 @@ void tst_qsgtextedit::color() //test selection for (int i = 0; i < colorStrings.size(); i++) { - QString componentStr = "import QtQuick 1.0\nTextEdit { selectionColor: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { selectionColor: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -692,7 +692,7 @@ void tst_qsgtextedit::color() //test selected text for (int i = 0; i < colorStrings.size(); i++) { - QString componentStr = "import QtQuick 1.0\nTextEdit { selectedTextColor: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { selectedTextColor: \"" + colorStrings.at(i) + "\"; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -705,7 +705,7 @@ void tst_qsgtextedit::color() QColor testColor("#001234"); testColor.setAlpha(170); - QString componentStr = "import QtQuick 1.0\nTextEdit { color: \"" + colorStr + "\"; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { color: \"" + colorStr + "\"; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -718,7 +718,7 @@ void tst_qsgtextedit::color() void tst_qsgtextedit::textMargin() { for(qreal i=0; i<=10; i+=0.3){ - QString componentStr = "import QtQuick 1.0\nTextEdit { textMargin: " + QString::number(i) + "; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { textMargin: " + QString::number(i) + "; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -730,7 +730,7 @@ void tst_qsgtextedit::textMargin() void tst_qsgtextedit::persistentSelection() { { - QString componentStr = "import QtQuick 1.0\nTextEdit { persistentSelection: true; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { persistentSelection: true; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -739,7 +739,7 @@ void tst_qsgtextedit::persistentSelection() } { - QString componentStr = "import QtQuick 1.0\nTextEdit { persistentSelection: false; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { persistentSelection: false; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -751,7 +751,7 @@ void tst_qsgtextedit::persistentSelection() void tst_qsgtextedit::focusOnPress() { { - QString componentStr = "import QtQuick 1.0\nTextEdit { activeFocusOnPress: true; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { activeFocusOnPress: true; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -760,7 +760,7 @@ void tst_qsgtextedit::focusOnPress() } { - QString componentStr = "import QtQuick 1.0\nTextEdit { activeFocusOnPress: false; text: \"Hello World\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { activeFocusOnPress: false; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -772,7 +772,7 @@ void tst_qsgtextedit::focusOnPress() void tst_qsgtextedit::selection() { QString testStr = standard[0];//TODO: What should happen for multiline/rich text? - QString componentStr = "import QtQuick 1.0\nTextEdit { text: \""+ testStr +"\"; }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { text: \""+ testStr +"\"; }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -912,52 +912,50 @@ void tst_qsgtextedit::isRightToLeft() void tst_qsgtextedit::keySelection() { - QSGView *canvas = createView(SRCDIR "/data/navigation.qml"); - canvas->show(); - QApplication::setActiveWindow(canvas); - QTest::qWaitForWindowShown(canvas); - QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); - canvas->setFocus(); + QSGView canvas(QUrl::fromLocalFile(SRCDIR "/data/navigation.qml")); + canvas.show(); + QApplication::setActiveWindow(&canvas); + QTest::qWaitForWindowShown(&canvas); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&canvas)); + canvas.setFocus(); - QVERIFY(canvas->rootObject() != 0); + QVERIFY(canvas.rootObject() != 0); - QSGTextEdit *input = qobject_cast<QSGTextEdit *>(qvariant_cast<QObject *>(canvas->rootObject()->property("myInput"))); + QSGTextEdit *input = qobject_cast<QSGTextEdit *>(qvariant_cast<QObject *>(canvas.rootObject()->property("myInput"))); QVERIFY(input != 0); QTRY_VERIFY(input->hasActiveFocus() == true); QSignalSpy spy(input, SIGNAL(selectionChanged())); - simulateKey(canvas, Qt::Key_Right, Qt::ShiftModifier); + simulateKey(&canvas, Qt::Key_Right, Qt::ShiftModifier); QVERIFY(input->hasActiveFocus() == true); QCOMPARE(input->selectedText(), QString("a")); QCOMPARE(spy.count(), 1); - simulateKey(canvas, Qt::Key_Right); + simulateKey(&canvas, Qt::Key_Right); QVERIFY(input->hasActiveFocus() == true); QCOMPARE(input->selectedText(), QString()); QCOMPARE(spy.count(), 2); - simulateKey(canvas, Qt::Key_Right); + simulateKey(&canvas, Qt::Key_Right); QVERIFY(input->hasActiveFocus() == false); QCOMPARE(input->selectedText(), QString()); QCOMPARE(spy.count(), 2); - simulateKey(canvas, Qt::Key_Left); + simulateKey(&canvas, Qt::Key_Left); QVERIFY(input->hasActiveFocus() == true); QCOMPARE(spy.count(), 2); - simulateKey(canvas, Qt::Key_Left, Qt::ShiftModifier); + simulateKey(&canvas, Qt::Key_Left, Qt::ShiftModifier); QVERIFY(input->hasActiveFocus() == true); QCOMPARE(input->selectedText(), QString("a")); QCOMPARE(spy.count(), 3); - simulateKey(canvas, Qt::Key_Left); + simulateKey(&canvas, Qt::Key_Left); QVERIFY(input->hasActiveFocus() == true); QCOMPARE(input->selectedText(), QString()); QCOMPARE(spy.count(), 4); - simulateKey(canvas, Qt::Key_Left); + simulateKey(&canvas, Qt::Key_Left); QVERIFY(input->hasActiveFocus() == false); QCOMPARE(input->selectedText(), QString()); QCOMPARE(spy.count(), 4); - - delete canvas; } void tst_qsgtextedit::moveCursorSelection_data() @@ -1117,7 +1115,7 @@ void tst_qsgtextedit::moveCursorSelection() QFETCH(int, selectionEnd); QFETCH(bool, reversible); - QString componentStr = "import QtQuick 1.1\nTextEdit { text: \""+ testStr +"\"; }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { text: \""+ testStr +"\"; }"; QDeclarativeComponent textinputComponent(&engine); textinputComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *texteditObject = qobject_cast<QSGTextEdit*>(textinputComponent.create()); @@ -1276,7 +1274,7 @@ void tst_qsgtextedit::moveCursorSelectionSequence() QFETCH(int, selection2Start); QFETCH(int, selection2End); - QString componentStr = "import QtQuick 1.1\nTextEdit { text: \""+ testStr +"\"; }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { text: \""+ testStr +"\"; }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *texteditObject = qobject_cast<QSGTextEdit*>(texteditComponent.create()); @@ -1314,80 +1312,74 @@ void tst_qsgtextedit::mouseSelection() QFETCH(QString, qmlfile); QFETCH(bool, expectSelection); - QSGView *canvas = createView(qmlfile); + QSGView canvas(QUrl::fromLocalFile(qmlfile)); - canvas->show(); - QApplication::setActiveWindow(canvas); - QTest::qWaitForWindowShown(canvas); - QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); + canvas.show(); + QApplication::setActiveWindow(&canvas); + QTest::qWaitForWindowShown(&canvas); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&canvas)); - QVERIFY(canvas->rootObject() != 0); - QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit *>(canvas->rootObject()); + QVERIFY(canvas.rootObject() != 0); + QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit *>(canvas.rootObject()); QVERIFY(textEditObject != 0); // press-and-drag-and-release from x1 to x2 int x1 = 10; int x2 = 70; int y = textEditObject->height()/2; - QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x1,y))); - //QTest::mouseMove(canvas->viewport(), canvas->mapFromScene(QPoint(x2,y))); // doesn't work - QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(x2,y)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); - QApplication::sendEvent(canvas->viewport(), &mv); - QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y))); + QTest::mousePress(&canvas, Qt::LeftButton, 0, QPoint(x1,y)); + //QTest::mouseMove(canvas, QPoint(x2,y)); // doesn't work + QMouseEvent mv(QEvent::MouseMove, QPoint(x2,y), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); + QApplication::sendEvent(&canvas, &mv); + QTest::mouseRelease(&canvas, Qt::LeftButton, 0, QPoint(x2,y)); QString str = textEditObject->selectedText(); if (expectSelection) QVERIFY(str.length() > 3); // don't reallly care *what* was selected (and it's too sensitive to platform) else QVERIFY(str.isEmpty()); - - delete canvas; } void tst_qsgtextedit::dragMouseSelection() { QString qmlfile = SRCDIR "/data/mouseselection_true.qml"; - QSGView *canvas = createView(qmlfile); + QSGView canvas(QUrl::fromLocalFile(qmlfile)); - canvas->show(); - QApplication::setActiveWindow(canvas); - QTest::qWaitForWindowShown(canvas); - QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); + canvas.show(); + QApplication::setActiveWindow(&canvas); + QTest::qWaitForWindowShown(&canvas); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&canvas)); - QVERIFY(canvas->rootObject() != 0); - QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit *>(canvas->rootObject()); + QVERIFY(canvas.rootObject() != 0); + QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit *>(canvas.rootObject()); QVERIFY(textEditObject != 0); - textEditObject->setAcceptDrops(true); - // press-and-drag-and-release from x1 to x2 int x1 = 10; int x2 = 70; int y = textEditObject->height()/2; - QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x1,y))); + QTest::mousePress(&canvas, Qt::LeftButton, 0, QPoint(x1,y)); { - QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(x2,y)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); - QApplication::sendEvent(canvas->viewport(), &mv); + QMouseEvent mv(QEvent::MouseMove, QPoint(x2,y), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); + QApplication::sendEvent(&canvas, &mv); } - QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y))); + QTest::mouseRelease(&canvas, Qt::LeftButton, 0, QPoint(x2,y)); QString str1 = textEditObject->selectedText(); QVERIFY(str1.length() > 3); // press and drag the current selection. x1 = 40; x2 = 100; - QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x1,y))); + QTest::mousePress(&canvas, Qt::LeftButton, 0, QPoint(x1,y)); { - QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(x2,y)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); - QApplication::sendEvent(canvas->viewport(), &mv); + QMouseEvent mv(QEvent::MouseMove, QPoint(x2,y), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); + QApplication::sendEvent(&canvas, &mv); } - QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y))); + QTest::mouseRelease(&canvas, Qt::LeftButton, 0, QPoint(x2,y)); QString str2 = textEditObject->selectedText(); QVERIFY(str2.length() > 3); - QVERIFY(str1 != str2); // Verify the second press and drag is a new selection and doesn't not the first moved. - - delete canvas; + QVERIFY(str1 != str2); // Verify the second press and drag is a new selection and not the first moved. } void tst_qsgtextedit::mouseSelectionMode_data() @@ -1408,26 +1400,26 @@ void tst_qsgtextedit::mouseSelectionMode() QString text = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - QSGView *canvas = createView(qmlfile); + QSGView canvas(QUrl::fromLocalFile(qmlfile)); - canvas->show(); - QApplication::setActiveWindow(canvas); - QTest::qWaitForWindowShown(canvas); - QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); + canvas.show(); + QApplication::setActiveWindow(&canvas); + QTest::qWaitForWindowShown(&canvas); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&canvas)); - QVERIFY(canvas->rootObject() != 0); - QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit *>(canvas->rootObject()); + QVERIFY(canvas.rootObject() != 0); + QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit *>(canvas.rootObject()); QVERIFY(textEditObject != 0); // press-and-drag-and-release from x1 to x2 int x1 = 10; int x2 = 70; int y = textEditObject->height()/2; - QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x1,y))); - //QTest::mouseMove(canvas->viewport(), canvas->mapFromScene(QPoint(x2,y))); // doesn't work - QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(x2,y)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); - QApplication::sendEvent(canvas->viewport(), &mv); - QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y))); + QTest::mousePress(&canvas, Qt::LeftButton, 0, QPoint(x1,y)); + //QTest::mouseMove(canvas, QPoint(x2,y)); // doesn't work + QMouseEvent mv(QEvent::MouseMove, QPoint(x2,y), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); + QApplication::sendEvent(&canvas, &mv); + QTest::mouseRelease(&canvas, Qt::LeftButton, 0, QPoint(x2,y)); QString str = textEditObject->selectedText(); if (selectWords) { QCOMPARE(str, text); @@ -1435,36 +1427,32 @@ void tst_qsgtextedit::mouseSelectionMode() QVERIFY(str.length() > 3); QVERIFY(str != text); } - - delete canvas; } void tst_qsgtextedit::inputMethodHints() { - QSGView *canvas = createView(SRCDIR "/data/inputmethodhints.qml"); - canvas->show(); - canvas->setFocus(); + QSGView canvas(QUrl::fromLocalFile(SRCDIR "/data/inputmethodhints.qml")); + canvas.show(); + canvas.setFocus(); - QVERIFY(canvas->rootObject() != 0); - QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit *>(canvas->rootObject()); + QVERIFY(canvas.rootObject() != 0); + QSGTextEdit *textEditObject = qobject_cast<QSGTextEdit *>(canvas.rootObject()); QVERIFY(textEditObject != 0); QVERIFY(textEditObject->inputMethodHints() & Qt::ImhNoPredictiveText); textEditObject->setInputMethodHints(Qt::ImhUppercaseOnly); QVERIFY(textEditObject->inputMethodHints() & Qt::ImhUppercaseOnly); - - delete canvas; } void tst_qsgtextedit::positionAt() { - QSGView *canvas = createView(SRCDIR "/data/positionAt.qml"); - QVERIFY(canvas->rootObject() != 0); - canvas->show(); - canvas->setFocus(); - QApplication::setActiveWindow(canvas); - QTest::qWaitForWindowShown(canvas); - - QSGTextEdit *texteditObject = qobject_cast<QSGTextEdit *>(canvas->rootObject()); + QSGView canvas(QUrl::fromLocalFile(SRCDIR "/data/positionAt.qml")); + QVERIFY(canvas.rootObject() != 0); + canvas.show(); + canvas.setFocus(); + QApplication::setActiveWindow(&canvas); + QTest::qWaitForWindowShown(&canvas); + + QSGTextEdit *texteditObject = qobject_cast<QSGTextEdit *>(canvas.rootObject()); QVERIFY(texteditObject != 0); QFontMetrics fm(texteditObject->font()); @@ -1489,7 +1477,7 @@ void tst_qsgtextedit::positionAt() texteditObject->setCursorPosition(0); QInputMethodEvent inputEvent(preeditText, QList<QInputMethodEvent::Attribute>()); - QApplication::sendEvent(canvas, &inputEvent); + QApplication::sendEvent(&canvas, &inputEvent); // Check all points within the preedit text return the same position. QCOMPARE(texteditObject->positionAt(0, y0), 0); @@ -1501,16 +1489,14 @@ void tst_qsgtextedit::positionAt() QCOMPARE(texteditObject->positionToRectangle(1).x(), x1); QVERIFY(texteditObject->positionAt(x0 / 2, y1) > 0); - - delete canvas; } void tst_qsgtextedit::cursorDelegate() { - QSGView* view = createView(SRCDIR "/data/cursorTest.qml"); - view->show(); - view->setFocus(); - QSGTextEdit *textEditObject = view->rootObject()->findChild<QSGTextEdit*>("textEditObject"); + QSGView view(QUrl::fromLocalFile(SRCDIR "/data/cursorTest.qml")); + view.show(); + view.setFocus(); + QSGTextEdit *textEditObject = view.rootObject()->findChild<QSGTextEdit*>("textEditObject"); QVERIFY(textEditObject != 0); QVERIFY(textEditObject->findChild<QSGItem*>("cursorInstance")); //Test Delegate gets created @@ -1529,14 +1515,11 @@ void tst_qsgtextedit::cursorDelegate() //Test Delegate gets deleted textEditObject->setCursorDelegate(0); QVERIFY(!textEditObject->findChild<QSGItem*>("cursorInstance")); - - delete view; } void tst_qsgtextedit::cursorVisible() { - QGraphicsScene scene; - QGraphicsView view(&scene); + QSGView view(QUrl::fromLocalFile(SRCDIR "/data/cursorVisible.qml")); view.show(); QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); @@ -1560,7 +1543,7 @@ void tst_qsgtextedit::cursorVisible() QCOMPARE(edit.isCursorVisible(), false); QCOMPARE(spy.count(), 2); - scene.addItem(&edit); + edit.setParentItem(view.rootObject()); QCOMPARE(edit.isCursorVisible(), true); QCOMPARE(spy.count(), 3); @@ -1572,21 +1555,13 @@ void tst_qsgtextedit::cursorVisible() QCOMPARE(edit.isCursorVisible(), true); QCOMPARE(spy.count(), 5); - scene.clearFocus(); - QCOMPARE(edit.isCursorVisible(), false); - QCOMPARE(spy.count(), 6); - - scene.setFocus(); - QCOMPARE(edit.isCursorVisible(), true); - QCOMPARE(spy.count(), 7); - view.clearFocus(); QCOMPARE(edit.isCursorVisible(), false); - QCOMPARE(spy.count(), 8); + QCOMPARE(spy.count(), 6); view.setFocus(); QCOMPARE(edit.isCursorVisible(), true); - QCOMPARE(spy.count(), 9); + QCOMPARE(spy.count(), 7); // on mac, setActiveWindow(0) on mac does not deactivate the current application // (you have to switch to a different app or hide the current app to trigger this) @@ -1594,12 +1569,12 @@ void tst_qsgtextedit::cursorVisible() QApplication::setActiveWindow(0); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(0)); QCOMPARE(edit.isCursorVisible(), false); - QCOMPARE(spy.count(), 10); + QCOMPARE(spy.count(), 8); QApplication::setActiveWindow(&view); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); QCOMPARE(edit.isCursorVisible(), true); - QCOMPARE(spy.count(), 11); + QCOMPARE(spy.count(), 9); #endif } @@ -1624,26 +1599,24 @@ void tst_qsgtextedit::delegateLoading() server.serveDirectory(SRCDIR "/data/httpslow", TestHTTPServer::Delay); server.serveDirectory(SRCDIR "/data/http"); - QSGView* view = new QSGView(0); - - view->setSource(QUrl(QLatin1String("http://localhost:42332/") + qmlfile)); - view->show(); - view->setFocus(); + QSGView view(QUrl(QLatin1String("http://localhost:42332/") + qmlfile)); + view.show(); + view.setFocus(); if (!error.isEmpty()) { QTest::ignoreMessage(QtWarningMsg, error.toUtf8()); - QTRY_VERIFY(view->status()==QSGView::Error); - QTRY_VERIFY(!view->rootObject()); // there is fail item inside this test + QTRY_VERIFY(view.status()==QSGView::Error); + QTRY_VERIFY(!view.rootObject()); // there is fail item inside this test } else { - QTRY_VERIFY(view->rootObject());//Wait for loading to finish. - QSGTextEdit *textEditObject = view->rootObject()->findChild<QSGTextEdit*>("textEditObject"); - // view->rootObject()->dumpObjectTree(); + QTRY_VERIFY(view.rootObject());//Wait for loading to finish. + QSGTextEdit *textEditObject = view.rootObject()->findChild<QSGTextEdit*>("textEditObject"); + // view.rootObject()->dumpObjectTree(); QVERIFY(textEditObject != 0); textEditObject->setFocus(true); QSGItem *delegate; - delegate = view->rootObject()->findChild<QSGItem*>("delegateOkay"); + delegate = view.rootObject()->findChild<QSGItem*>("delegateOkay"); QVERIFY(delegate); - delegate = view->rootObject()->findChild<QSGItem*>("delegateSlow"); + delegate = view.rootObject()->findChild<QSGItem*>("delegateSlow"); QVERIFY(delegate); delete delegate; @@ -1653,10 +1626,8 @@ void tst_qsgtextedit::delegateLoading() //A test should be added here with a component which is ready but component.create() returns null //Not sure how to accomplish this with QSGTextEdits cursor delegate //###This was only needed for code coverage, and could be a case of overzealous defensive programming - //delegate = view->rootObject()->findChild<QSGItem*>("delegateErrorB"); + //delegate = view.rootObject()->findChild<QSGItem*>("delegateErrorB"); //QVERIFY(!delegate); - - delete view; } /* @@ -1665,28 +1636,26 @@ the extent of the text, then they should ignore the keys. */ void tst_qsgtextedit::navigation() { - QSGView *canvas = createView(SRCDIR "/data/navigation.qml"); - canvas->show(); - canvas->setFocus(); + QSGView canvas(QUrl::fromLocalFile(SRCDIR "/data/navigation.qml")); + canvas.show(); + canvas.setFocus(); - QVERIFY(canvas->rootObject() != 0); + QVERIFY(canvas.rootObject() != 0); - QSGItem *input = qobject_cast<QSGItem *>(qvariant_cast<QObject *>(canvas->rootObject()->property("myInput"))); + QSGItem *input = qobject_cast<QSGItem *>(qvariant_cast<QObject *>(canvas.rootObject()->property("myInput"))); QVERIFY(input != 0); QTRY_VERIFY(input->hasActiveFocus() == true); - simulateKey(canvas, Qt::Key_Left); + simulateKey(&canvas, Qt::Key_Left); QVERIFY(input->hasActiveFocus() == false); - simulateKey(canvas, Qt::Key_Right); + simulateKey(&canvas, Qt::Key_Right); QVERIFY(input->hasActiveFocus() == true); - simulateKey(canvas, Qt::Key_Right); + simulateKey(&canvas, Qt::Key_Right); QVERIFY(input->hasActiveFocus() == true); - simulateKey(canvas, Qt::Key_Right); + simulateKey(&canvas, Qt::Key_Right); QVERIFY(input->hasActiveFocus() == false); - simulateKey(canvas, Qt::Key_Left); + simulateKey(&canvas, Qt::Key_Left); QVERIFY(input->hasActiveFocus() == true); - - delete canvas; } void tst_qsgtextedit::copyAndPaste() { @@ -1703,7 +1672,7 @@ void tst_qsgtextedit::copyAndPaste() { } #endif - QString componentStr = "import QtQuick 1.0\nTextEdit { text: \"Hello world!\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { text: \"Hello world!\" }"; QDeclarativeComponent textEditComponent(&engine); textEditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEdit = qobject_cast<QSGTextEdit*>(textEditComponent.create()); @@ -1754,7 +1723,7 @@ void tst_qsgtextedit::canPaste() { QApplication::clipboard()->setText("Some text"); - QString componentStr = "import QtQuick 1.0\nTextEdit { text: \"Hello world!\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { text: \"Hello world!\" }"; QDeclarativeComponent textEditComponent(&engine); textEditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEdit = qobject_cast<QSGTextEdit*>(textEditComponent.create()); @@ -1772,7 +1741,7 @@ void tst_qsgtextedit::canPasteEmpty() { QApplication::clipboard()->clear(); - QString componentStr = "import QtQuick 1.0\nTextEdit { text: \"Hello world!\" }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { text: \"Hello world!\" }"; QDeclarativeComponent textEditComponent(&engine); textEditComponent.setData(componentStr.toLatin1(), QUrl()); QSGTextEdit *textEdit = qobject_cast<QSGTextEdit*>(textEditComponent.create()); @@ -1787,26 +1756,24 @@ void tst_qsgtextedit::canPasteEmpty() { void tst_qsgtextedit::readOnly() { - QSGView *canvas = createView(SRCDIR "/data/readOnly.qml"); - canvas->show(); - canvas->setFocus(); + QSGView canvas(QUrl::fromLocalFile(SRCDIR "/data/readOnly.qml")); + canvas.show(); + canvas.setFocus(); - QVERIFY(canvas->rootObject() != 0); + QVERIFY(canvas.rootObject() != 0); - QSGTextEdit *edit = qobject_cast<QSGTextEdit *>(qvariant_cast<QObject *>(canvas->rootObject()->property("myInput"))); + QSGTextEdit *edit = qobject_cast<QSGTextEdit *>(qvariant_cast<QObject *>(canvas.rootObject()->property("myInput"))); QVERIFY(edit != 0); QTRY_VERIFY(edit->hasActiveFocus() == true); QVERIFY(edit->isReadOnly() == true); QString initial = edit->text(); for(int k=Qt::Key_0; k<=Qt::Key_Z; k++) - simulateKey(canvas, k); - simulateKey(canvas, Qt::Key_Return); - simulateKey(canvas, Qt::Key_Space); - simulateKey(canvas, Qt::Key_Escape); + simulateKey(&canvas, k); + simulateKey(&canvas, Qt::Key_Return); + simulateKey(&canvas, Qt::Key_Space); + simulateKey(&canvas, Qt::Key_Escape); QCOMPARE(edit->text(), initial); - - delete canvas; } void tst_qsgtextedit::simulateKey(QSGView *view, int key, Qt::KeyboardModifiers modifiers) @@ -1818,14 +1785,6 @@ void tst_qsgtextedit::simulateKey(QSGView *view, int key, Qt::KeyboardModifiers QApplication::sendEvent(view, &release); } -QSGView *tst_qsgtextedit::createView(const QString &filename) -{ - QSGView *canvas = new QSGView(0); - - canvas->setSource(QUrl::fromLocalFile(filename)); - return canvas; -} - class MyInputContext : public QInputContext { public: @@ -1885,49 +1844,48 @@ public: void tst_qsgtextedit::textInput() { - QGraphicsScene scene; - QGraphicsView view(&scene); - QSGTextEdit edit; - QSGItemPrivate* pri = QSGItemPrivate::get(&edit); - QSGTextEditPrivate *editPrivate = static_cast<QSGTextEditPrivate*>(pri); - edit.setPos(0, 0); - scene.addItem(&edit); + QSGView view(QUrl::fromLocalFile(SRCDIR "/data/inputMethodEvent.qml")); view.show(); QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); - edit.setFocus(true); - QVERIFY(edit.hasActiveFocus() == true); + QSGTextEdit *edit = qobject_cast<QSGTextEdit *>(view.rootObject()); + QVERIFY(edit); + QVERIFY(edit->hasActiveFocus() == true); // test that input method event is committed QInputMethodEvent event; event.setCommitString( "Hello world!", 0, 0); QApplication::sendEvent(&view, &event); - QCOMPARE(edit.text(), QString("Hello world!")); + QCOMPARE(edit->text(), QString("Hello world!")); // QTBUG-12339 // test that document and internal text attribute are in sync + QSGTextEditPrivate *editPrivate = static_cast<QSGTextEditPrivate*>(QSGItemPrivate::get(edit)); QCOMPARE(editPrivate->text, QString("Hello world!")); } void tst_qsgtextedit::openInputPanelOnClick() { - QGraphicsScene scene; - QGraphicsView view(&scene); + QSGView view(QUrl::fromLocalFile(SRCDIR "/data/openInputPanel.qml")); MyInputContext ic; + // QSGCanvas won't set the Qt::WA_InputMethodEnabled flag unless a suitable item has focus + // and QWidget won't allow an input context to be set when the flag is not set. + view.setAttribute(Qt::WA_InputMethodEnabled, true); view.setInputContext(&ic); - QSGTextEdit edit; - QSignalSpy focusOnPressSpy(&edit, SIGNAL(activeFocusOnPressChanged(bool))); - edit.setText("Hello world"); - edit.setPos(0, 0); - scene.addItem(&edit); + view.setAttribute(Qt::WA_InputMethodEnabled, false); view.show(); + qApp->setAutoSipEnabled(true); QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); - QSGItemPrivate* pri = QSGItemPrivate::get(&edit); + QSGTextEdit *edit = qobject_cast<QSGTextEdit *>(view.rootObject()); + QVERIFY(edit); + QSignalSpy focusOnPressSpy(edit, SIGNAL(activeFocusOnPressChanged(bool))); + + QSGItemPrivate* pri = QSGItemPrivate::get(edit); QSGTextEditPrivate *editPrivate = static_cast<QSGTextEditPrivate*>(pri); // input panel on click @@ -1935,11 +1893,11 @@ void tst_qsgtextedit::openInputPanelOnClick() QStyle::RequestSoftwareInputPanel behavior = QStyle::RequestSoftwareInputPanel( view.style()->styleHint(QStyle::SH_RequestSoftwareInputPanel)); - QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); + QTest::mouseClick(&view, Qt::LeftButton, 0, edit->mapToScene(QPointF(0,0)).toPoint()); QApplication::processEvents(); if (behavior == QStyle::RSIP_OnMouseClickAndAlreadyFocused) { QCOMPARE(ic.openInputPanelReceived, false); - QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); + QTest::mouseClick(&view, Qt::LeftButton, 0, edit->mapToScene(QPointF(0,0)).toPoint()); QApplication::processEvents(); QCOMPARE(ic.openInputPanelReceived, true); } else if (behavior == QStyle::RSIP_OnMouseClick) { @@ -1948,11 +1906,11 @@ void tst_qsgtextedit::openInputPanelOnClick() ic.openInputPanelReceived = false; // focus should not cause input panels to open or close - edit.setFocus(false); - edit.setFocus(true); - edit.setFocus(false); - edit.setFocus(true); - edit.setFocus(false); + edit->setFocus(false); + edit->setFocus(true); + edit->setFocus(false); + edit->setFocus(true); + edit->setFocus(false); QApplication::processEvents(); QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, false); @@ -1960,45 +1918,48 @@ void tst_qsgtextedit::openInputPanelOnClick() void tst_qsgtextedit::openInputPanelOnFocus() { - QGraphicsScene scene; - QGraphicsView view(&scene); + QSGView view(QUrl::fromLocalFile(SRCDIR "/data/openInputPanel.qml")); MyInputContext ic; + // QSGCanvas won't set the Qt::WA_InputMethodEnabled flag unless a suitable item has focus + // and QWidget won't allow an input context to be set when the flag is not set. + view.setAttribute(Qt::WA_InputMethodEnabled, true); view.setInputContext(&ic); - QSGTextEdit edit; - QSignalSpy focusOnPressSpy(&edit, SIGNAL(activeFocusOnPressChanged(bool))); - edit.setText("Hello world"); - edit.setPos(0, 0); - scene.addItem(&edit); + view.setAttribute(Qt::WA_InputMethodEnabled, false); view.show(); + qApp->setAutoSipEnabled(true); QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); - QSGItemPrivate* pri = QSGItemPrivate::get(&edit); + QSGTextEdit *edit = qobject_cast<QSGTextEdit *>(view.rootObject()); + QVERIFY(edit); + QSignalSpy focusOnPressSpy(edit, SIGNAL(activeFocusOnPressChanged(bool))); + + QSGItemPrivate* pri = QSGItemPrivate::get(edit); QSGTextEditPrivate *editPrivate = static_cast<QSGTextEditPrivate*>(pri); editPrivate->showInputPanelOnFocus = true; // test default values - QVERIFY(edit.focusOnPress()); + QVERIFY(edit->focusOnPress()); QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, false); // focus on press, input panel on focus - QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); + QTest::mousePress(&view, Qt::LeftButton, 0, edit->mapToScene(QPointF(0,0)).toPoint()); QApplication::processEvents(); - QVERIFY(edit.hasActiveFocus()); + QVERIFY(edit->hasActiveFocus()); QCOMPARE(ic.openInputPanelReceived, true); ic.openInputPanelReceived = false; // no events on release - QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); + QTest::mouseRelease(&view, Qt::LeftButton, 0, edit->mapToScene(QPointF(0,0)).toPoint()); QCOMPARE(ic.openInputPanelReceived, false); ic.openInputPanelReceived = false; // if already focused, input panel can be opened on press - QVERIFY(edit.hasActiveFocus()); - QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); + QVERIFY(edit->hasActiveFocus()); + QTest::mousePress(&view, Qt::LeftButton, 0, edit->mapToScene(QPointF(0,0)).toPoint()); QApplication::processEvents(); QCOMPARE(ic.openInputPanelReceived, true); ic.openInputPanelReceived = false; @@ -2006,7 +1967,7 @@ void tst_qsgtextedit::openInputPanelOnFocus() // input method should stay enabled if focus // is lost to an item that also accepts inputs QSGTextEdit anotherEdit; - scene.addItem(&anotherEdit); + anotherEdit.setParentItem(view.rootObject()); anotherEdit.setFocus(true); QApplication::processEvents(); QCOMPARE(ic.openInputPanelReceived, true); @@ -2017,7 +1978,7 @@ void tst_qsgtextedit::openInputPanelOnFocus() // input method should be disabled if focus // is lost to an item that doesn't accept inputs QSGItem item; - scene.addItem(&item); + item.setParentItem(view.rootObject()); item.setFocus(true); QApplication::processEvents(); QCOMPARE(ic.openInputPanelReceived, false); @@ -2026,38 +1987,38 @@ void tst_qsgtextedit::openInputPanelOnFocus() // no automatic input panel events should // be sent if activeFocusOnPress is false - edit.setFocusOnPress(false); + edit->setFocusOnPress(false); QCOMPARE(focusOnPressSpy.count(),1); - edit.setFocusOnPress(false); + edit->setFocusOnPress(false); QCOMPARE(focusOnPressSpy.count(),1); - edit.setFocus(false); - edit.setFocus(true); - QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); - QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); + edit->setFocus(false); + edit->setFocus(true); + QTest::mousePress(&view, Qt::LeftButton, 0, edit->mapToScene(QPointF(0,0)).toPoint()); + QTest::mouseRelease(&view, Qt::LeftButton, 0, edit->mapToScene(QPointF(0,0)).toPoint()); QApplication::processEvents(); QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, false); // one show input panel event should // be set when openSoftwareInputPanel is called - edit.openSoftwareInputPanel(); + edit->openSoftwareInputPanel(); QCOMPARE(ic.openInputPanelReceived, true); QCOMPARE(ic.closeInputPanelReceived, false); ic.openInputPanelReceived = false; // one close input panel event should // be sent when closeSoftwareInputPanel is called - edit.closeSoftwareInputPanel(); + edit->closeSoftwareInputPanel(); QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, true); ic.closeInputPanelReceived = false; // set activeFocusOnPress back to true - edit.setFocusOnPress(true); + edit->setFocusOnPress(true); QCOMPARE(focusOnPressSpy.count(),2); - edit.setFocusOnPress(true); + edit->setFocusOnPress(true); QCOMPARE(focusOnPressSpy.count(),2); - edit.setFocus(false); + edit->setFocus(false); QApplication::processEvents(); QCOMPARE(ic.openInputPanelReceived, false); QCOMPARE(ic.closeInputPanelReceived, false); @@ -2065,24 +2026,24 @@ void tst_qsgtextedit::openInputPanelOnFocus() // input panel should not re-open // if focus has already been set - edit.setFocus(true); + edit->setFocus(true); QCOMPARE(ic.openInputPanelReceived, true); ic.openInputPanelReceived = false; - edit.setFocus(true); + edit->setFocus(true); QCOMPARE(ic.openInputPanelReceived, false); // input method should be disabled // if TextEdit loses focus - edit.setFocus(false); + edit->setFocus(false); QApplication::processEvents(); QVERIFY(view.inputContext() == 0); QVERIFY(!view.testAttribute(Qt::WA_InputMethodEnabled)); // input method should not be enabled // if TextEdit is read only. - edit.setReadOnly(true); + edit->setReadOnly(true); ic.openInputPanelReceived = false; - edit.setFocus(true); + edit->setFocus(true); QApplication::processEvents(); QCOMPARE(ic.openInputPanelReceived, false); QVERIFY(view.inputContext() == 0); @@ -2102,7 +2063,7 @@ void tst_qsgtextedit::geometrySignals() void tst_qsgtextedit::pastingRichText_QTBUG_14003() { #ifndef QT_NO_CLIPBOARD - QString componentStr = "import QtQuick 1.0\nTextEdit { textFormat: TextEdit.PlainText }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { textFormat: TextEdit.PlainText }"; QDeclarativeComponent component(&engine); component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QSGTextEdit *obj = qobject_cast<QSGTextEdit*>(component.create()); @@ -2134,7 +2095,7 @@ void tst_qsgtextedit::implicitSize() { QFETCH(QString, text); QFETCH(QString, wrap); - QString componentStr = "import QtQuick 1.1\nTextEdit { text: \"" + text + "\"; width: 50; wrapMode: " + wrap + " }"; + QString componentStr = "import QtQuick 2.0\nTextEdit { text: \"" + text + "\"; width: 50; wrapMode: " + wrap + " }"; QDeclarativeComponent textComponent(&engine); textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QSGTextEdit *textObject = qobject_cast<QSGTextEdit*>(textComponent.create()); @@ -2157,7 +2118,7 @@ void tst_qsgtextedit::testQtQuick11Attributes() QObject *obj; QDeclarativeComponent valid(&engine); - valid.setData("import QtQuick 1.1; TextEdit { " + code.toUtf8() + " }", QUrl("")); + valid.setData("import QtQuick 2.0; TextEdit { " + code.toUtf8() + " }", QUrl("")); obj = valid.create(); QVERIFY(obj); QVERIFY(valid.errorString().isEmpty()); @@ -2202,26 +2163,24 @@ void tst_qsgtextedit::preeditMicroFocus() { QString preeditText = "super"; - QGraphicsScene scene; - QGraphicsView view(&scene); + QSGView view(QUrl::fromLocalFile(SRCDIR "/data/inputMethodEvent.qml")); MyInputContext ic; view.setInputContext(&ic); - QSGTextEdit edit; - edit.setFocus(true); - scene.addItem(&edit); view.show(); QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); + QSGTextEdit *edit = qobject_cast<QSGTextEdit *>(view.rootObject()); + QVERIFY(edit); QRect currentRect; - QRect previousRect = edit.inputMethodQuery(Qt::ImMicroFocus).toRect(); + QRect previousRect = edit->inputMethodQuery(Qt::ImMicroFocus).toRect(); // Verify that the micro focus rect is positioned the same for position 0 as // it would be if there was no preedit text. ic.updateReceived = false; ic.sendPreeditText(preeditText, 0); - currentRect = edit.inputMethodQuery(Qt::ImMicroFocus).toRect(); + currentRect = edit->inputMethodQuery(Qt::ImMicroFocus).toRect(); QCOMPARE(currentRect, previousRect); #if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) QCOMPARE(ic.updateReceived, true); @@ -2232,7 +2191,7 @@ void tst_qsgtextedit::preeditMicroFocus() for (int i = 1; i <= 5; ++i) { ic.updateReceived = false; ic.sendPreeditText(preeditText, i); - currentRect = edit.inputMethodQuery(Qt::ImMicroFocus).toRect(); + currentRect = edit->inputMethodQuery(Qt::ImMicroFocus).toRect(); QVERIFY(previousRect.left() < currentRect.left()); #if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) QCOMPARE(ic.updateReceived, true); @@ -2245,7 +2204,7 @@ void tst_qsgtextedit::preeditMicroFocus() ic.sendPreeditText(preeditText, 0); ic.updateReceived = false; ic.sendEvent(QInputMethodEvent(preeditText, QList<QInputMethodEvent::Attribute>())); - currentRect = edit.inputMethodQuery(Qt::ImMicroFocus).toRect(); + currentRect = edit->inputMethodQuery(Qt::ImMicroFocus).toRect(); QCOMPARE(currentRect, previousRect); #if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) QCOMPARE(ic.updateReceived, true); @@ -2256,39 +2215,32 @@ void tst_qsgtextedit::inputContextMouseHandler() { QString text = "supercalifragisiticexpialidocious!"; - QGraphicsScene scene; - QGraphicsView view(&scene); + QSGView view(QUrl::fromLocalFile(SRCDIR "/data/inputContext.qml")); MyInputContext ic; view.setInputContext(&ic); - QSGTextEdit edit; - edit.setPos(0, 0); - edit.setWidth(200); - edit.setText(text.mid(0, 12)); - edit.setPos(0, 0); - edit.setCursorPosition(12); - edit.setFocus(true); - scene.addItem(&edit); view.show(); QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); - view.setFocus(); + QSGTextEdit *edit = qobject_cast<QSGTextEdit *>(view.rootObject()); + QVERIFY(edit); + edit->setCursorPosition(12); - QFontMetricsF fm(edit.font()); + QFontMetricsF fm(edit->font()); const qreal y = fm.height() / 2; - QPoint position2 = view.mapFromScene(edit.mapToScene(QPointF(fm.width(text.mid(0, 2)), y))); - QPoint position8 = view.mapFromScene(edit.mapToScene(QPointF(fm.width(text.mid(0, 8)), y))); - QPoint position20 = view.mapFromScene(edit.mapToScene(QPointF(fm.width(text.mid(0, 20)), y))); - QPoint position27 = view.mapFromScene(edit.mapToScene(QPointF(fm.width(text.mid(0, 27)), y))); - QPoint globalPosition2 = view.viewport()->mapToGlobal(position2); - QPoint globalposition8 = view.viewport()->mapToGlobal(position8); - QPoint globalposition20 = view.viewport()->mapToGlobal(position20); - QPoint globalposition27 = view.viewport()->mapToGlobal(position27); + QPoint position2 = edit->mapToScene(QPointF(fm.width(text.mid(0, 2)), y)).toPoint(); + QPoint position8 = edit->mapToScene(QPointF(fm.width(text.mid(0, 8)), y)).toPoint(); + QPoint position20 = edit->mapToScene(QPointF(fm.width(text.mid(0, 20)), y)).toPoint(); + QPoint position27 = edit->mapToScene(QPointF(fm.width(text.mid(0, 27)), y)).toPoint(); + QPoint globalPosition2 = view.mapToGlobal(position2); + QPoint globalposition8 = view.mapToGlobal(position8); + QPoint globalposition20 = view.mapToGlobal(position20); + QPoint globalposition27 = view.mapToGlobal(position27); ic.sendEvent(QInputMethodEvent(text.mid(12), QList<QInputMethodEvent::Attribute>())); - QTest::mouseDClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, position2); + QTest::mouseDClick(&view, Qt::LeftButton, Qt::NoModifier, position2); QCOMPARE(ic.eventType, QEvent::MouseButtonDblClick); QCOMPARE(ic.eventPosition, position2); QCOMPARE(ic.eventGlobalPosition, globalPosition2); @@ -2297,7 +2249,7 @@ void tst_qsgtextedit::inputContextMouseHandler() QVERIFY(ic.cursor < 0); ic.eventType = QEvent::None; - QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::NoModifier, position2); + QTest::mousePress(&view, Qt::LeftButton, Qt::NoModifier, position2); QCOMPARE(ic.eventType, QEvent::MouseButtonPress); QCOMPARE(ic.eventPosition, position2); QCOMPARE(ic.eventGlobalPosition, globalPosition2); @@ -2307,11 +2259,11 @@ void tst_qsgtextedit::inputContextMouseHandler() ic.eventType = QEvent::None; { QMouseEvent mv(QEvent::MouseMove, position8, globalposition8, Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); - QApplication::sendEvent(view.viewport(), &mv); } + QApplication::sendEvent(&view, &mv); } QCOMPARE(ic.eventType, QEvent::None); { QMouseEvent mv(QEvent::MouseMove, position27, globalposition27, Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); - QApplication::sendEvent(view.viewport(), &mv); } + QApplication::sendEvent(&view, &mv); } QCOMPARE(ic.eventType, QEvent::MouseMove); QCOMPARE(ic.eventPosition, position27); QCOMPARE(ic.eventGlobalPosition, globalposition27); @@ -2320,7 +2272,7 @@ void tst_qsgtextedit::inputContextMouseHandler() QVERIFY(ic.cursor >= 14 && ic.cursor <= 16); // 15 is expected but some platforms may be off by one. ic.eventType = QEvent::None; - QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::NoModifier, position27); + QTest::mouseRelease(&view, Qt::LeftButton, Qt::NoModifier, position27); QCOMPARE(ic.eventType, QEvent::MouseButtonRelease); QCOMPARE(ic.eventPosition, position27); QCOMPARE(ic.eventGlobalPosition, globalposition27); @@ -2330,7 +2282,7 @@ void tst_qsgtextedit::inputContextMouseHandler() ic.eventType = QEvent::None; // And in the other direction. - QTest::mouseDClick(view.viewport(), Qt::LeftButton, Qt::ControlModifier, position27); + QTest::mouseDClick(&view, Qt::LeftButton, Qt::ControlModifier, position27); QCOMPARE(ic.eventType, QEvent::MouseButtonDblClick); QCOMPARE(ic.eventPosition, position27); QCOMPARE(ic.eventGlobalPosition, globalposition27); @@ -2339,7 +2291,7 @@ void tst_qsgtextedit::inputContextMouseHandler() QVERIFY(ic.cursor >= 14 && ic.cursor <= 16); ic.eventType = QEvent::None; - QTest::mousePress(view.viewport(), Qt::RightButton, Qt::ControlModifier, position27); + QTest::mousePress(&view, Qt::RightButton, Qt::ControlModifier, position27); QCOMPARE(ic.eventType, QEvent::MouseButtonPress); QCOMPARE(ic.eventPosition, position27); QCOMPARE(ic.eventGlobalPosition, globalposition27); @@ -2349,7 +2301,7 @@ void tst_qsgtextedit::inputContextMouseHandler() ic.eventType = QEvent::None; { QMouseEvent mv(QEvent::MouseMove, position20, globalposition20, Qt::RightButton, Qt::RightButton,Qt::ControlModifier); - QApplication::sendEvent(view.viewport(), &mv); } + QApplication::sendEvent(&view, &mv); } QCOMPARE(ic.eventType, QEvent::MouseMove); QCOMPARE(ic.eventPosition, position20); QCOMPARE(ic.eventGlobalPosition, globalposition20); @@ -2359,10 +2311,10 @@ void tst_qsgtextedit::inputContextMouseHandler() ic.eventType = QEvent::None; { QMouseEvent mv(QEvent::MouseMove, position2, globalPosition2, Qt::RightButton, Qt::RightButton,Qt::ControlModifier); - QApplication::sendEvent(view.viewport(), &mv); } + QApplication::sendEvent(&view, &mv); } QCOMPARE(ic.eventType, QEvent::None); - QTest::mouseRelease(view.viewport(), Qt::RightButton, Qt::ControlModifier, position2); + QTest::mouseRelease(&view, Qt::RightButton, Qt::ControlModifier, position2); QCOMPARE(ic.eventType, QEvent::MouseButtonRelease); QCOMPARE(ic.eventPosition, position2); QCOMPARE(ic.eventGlobalPosition, globalPosition2); @@ -2376,39 +2328,61 @@ void tst_qsgtextedit::inputMethodComposing() { QString text = "supercalifragisiticexpialidocious!"; - QGraphicsScene scene; - QGraphicsView view(&scene); - MyInputContext ic; - view.setInputContext(&ic); - QSGTextEdit edit; - edit.setWidth(200); - edit.setText(text.mid(0, 12)); - edit.setCursorPosition(12); - edit.setPos(0, 0); - edit.setFocus(true); - scene.addItem(&edit); + QSGView view(QUrl::fromLocalFile(SRCDIR "/data/inputContext.qml")); view.show(); QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); + QSGTextEdit *edit = qobject_cast<QSGTextEdit *>(view.rootObject()); + QVERIFY(edit); + QSignalSpy spy(edit, SIGNAL(inputMethodComposingChanged())); + edit->setCursorPosition(12); - QSignalSpy spy(&edit, SIGNAL(inputMethodComposingChanged())); - - QCOMPARE(edit.isInputMethodComposing(), false); + QCOMPARE(edit->isInputMethodComposing(), false); - ic.sendEvent(QInputMethodEvent(text.mid(3), QList<QInputMethodEvent::Attribute>())); - QCOMPARE(edit.isInputMethodComposing(), true); + { + QInputMethodEvent event(text.mid(3), QList<QInputMethodEvent::Attribute>()); + QApplication::sendEvent(&view, &event); + } + QCOMPARE(edit->isInputMethodComposing(), true); QCOMPARE(spy.count(), 1); - ic.sendEvent(QInputMethodEvent(text.mid(12), QList<QInputMethodEvent::Attribute>())); - QCOMPARE(edit.isInputMethodComposing(), true); + { + QInputMethodEvent event(text.mid(12), QList<QInputMethodEvent::Attribute>()); + QApplication::sendEvent(&view, &event); + } QCOMPARE(spy.count(), 1); - ic.sendEvent(QInputMethodEvent()); - QCOMPARE(edit.isInputMethodComposing(), false); + { + QInputMethodEvent event; + QApplication::sendEvent(&view, &event); + } + QCOMPARE(edit->isInputMethodComposing(), false); QCOMPARE(spy.count(), 2); } +void tst_qsgtextedit::cursorRectangleSize() +{ + QSGView *canvas = new QSGView(QUrl::fromLocalFile(SRCDIR "/data/CursorRect.qml")); + QVERIFY(canvas->rootObject() != 0); + canvas->show(); + canvas->setFocus(); + QApplication::setActiveWindow(canvas); + QTest::qWaitForWindowShown(canvas); + + QSGTextEdit *textEdit = qobject_cast<QSGTextEdit *>(canvas->rootObject()); + QVERIFY(textEdit != 0); + textEdit->setFocus(Qt::OtherFocusReason); + QRectF cursorRect = textEdit->positionToRectangle(textEdit->cursorPosition()); + QRectF microFocusFromScene = canvas->inputMethodQuery(Qt::ImMicroFocus).toRectF(); + QRectF microFocusFromApp= QApplication::focusWidget()->inputMethodQuery(Qt::ImMicroFocus).toRectF(); + + QCOMPARE(microFocusFromScene.size(), cursorRect.size()); + QCOMPARE(microFocusFromApp.size(), cursorRect.size()); + + delete canvas; +} + QTEST_MAIN(tst_qsgtextedit) #include "tst_qsgtextedit.moc" |