diff options
author | Olivier Goffart <olivier.goffart@nokia.com> | 2010-08-13 08:09:53 (GMT) |
---|---|---|
committer | Olivier Goffart <olivier.goffart@nokia.com> | 2010-08-13 08:33:13 (GMT) |
commit | 5114fcb45d584ea50da7397088f084dfd74922b9 (patch) | |
tree | 18cb40f048186ebf0eac568e2ae53ec092044c55 /tests | |
parent | 55e47566dd1ac83ff674401dfd6284f07490cd8b (diff) | |
parent | ee62807198a2525577c14f718b98d07ae0ec7bec (diff) | |
download | Qt-5114fcb45d584ea50da7397088f084dfd74922b9.zip Qt-5114fcb45d584ea50da7397088f084dfd74922b9.tar.gz Qt-5114fcb45d584ea50da7397088f084dfd74922b9.tar.bz2 |
Merge remote branch 'origin/4.7' into qt-master-from-4.7
Conflicts:
src/gui/painting/qpainter.cpp
src/gui/text/qtextengine.cpp
tests/auto/qimage/tst_qimage.cpp
tests/auto/qpainter/tst_qpainter.cpp
tools/qdoc3/test/assistant.qdocconf
tools/qdoc3/test/designer.qdocconf
tools/qdoc3/test/linguist.qdocconf
tools/qdoc3/test/qmake.qdocconf
tools/qdoc3/test/qt-build-docs.qdocconf
tools/qdoc3/test/qt-html-templates.qdocconf
tools/qdoc3/test/qt-html-templates_zh_CN.qdocconf
tools/qdoc3/test/qt.qdocconf
Diffstat (limited to 'tests')
73 files changed, 2938 insertions, 521 deletions
diff --git a/tests/auto/compilerwarnings/test_cpp.txt b/tests/auto/compilerwarnings/test_cpp.txt index 62b35eb..1d317b8 100644 --- a/tests/auto/compilerwarnings/test_cpp.txt +++ b/tests/auto/compilerwarnings/test_cpp.txt @@ -58,6 +58,9 @@ #include <QtDBus/QtDBus> #endif +#include <QtDeclarative/QtDeclarative> + + #ifndef Q_OS_MAC int main(int, char **) { diff --git a/tests/auto/compilerwarnings/tst_compilerwarnings.cpp b/tests/auto/compilerwarnings/tst_compilerwarnings.cpp index 82c327a..8d344d8 100644 --- a/tests/auto/compilerwarnings/tst_compilerwarnings.cpp +++ b/tests/auto/compilerwarnings/tst_compilerwarnings.cpp @@ -114,6 +114,9 @@ void tst_CompilerWarnings::warnings_data() QTest::addColumn<QStringList>("cflags"); QTest::newRow("standard") << QStringList(); + QTest::newRow("warn deprecated, fast plus, no debug") << (QStringList() << "-DQT_DEPRECATED_WARNINGS" + << "-DQT_USE_FAST_OPERATOR_PLUS" << "-DQT_NU_DEBUG" << "-DQT_NO_DEBUG_STREAM" << "-DQT_NO_WARNING_OUTPUT"); + QTest::newRow("no deprecated, no keywords") << (QStringList() << "-DQT_NO_DEPRECATED" << "-DQT_NO_KEYWORDS"); #if 0 #ifdef Q_WS_QWS @@ -136,14 +139,14 @@ void tst_CompilerWarnings::warnings() QSKIP("gcc 3.x outputs too many bogus warnings", SkipAll); #endif - static QString tmpFile; + /*static*/ QString tmpFile; if (tmpFile.isEmpty()) { QTemporaryFile tmpQFile; tmpQFile.open(); tmpFile = tmpQFile.fileName(); tmpQFile.close(); } - static QString tmpSourceFile; + /*static*/ QString tmpSourceFile; bool openResult = true; const QString tmpBaseName("XXXXXX-test.cpp"); QString templatePath = QDir::temp().absoluteFilePath(tmpBaseName); diff --git a/tests/auto/declarative/qdeclarativeanimations/data/propertiesTransition7.qml b/tests/auto/declarative/qdeclarativeanimations/data/propertiesTransition7.qml new file mode 100644 index 0000000..b47b5f2 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeanimations/data/propertiesTransition7.qml @@ -0,0 +1,29 @@ +import Qt 4.7 + +Rectangle { + width: 400 + height: 400 + Rectangle { + id: theRect + objectName: "TheRect" + color: "red" + width: 50; height: 50 + x: 100; y: 100 + } + + states: State { + name: "moved" + PropertyChanges { + target: theRect + x: 200 + } + } + transitions: Transition { + SpringAnimation { targets: theRect; properties: "x"; velocity: 10000 } + } + + MouseArea { + anchors.fill: parent + onClicked: parent.state = "moved" + } +} diff --git a/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp b/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp index 3e80c2c..ec867fe 100644 --- a/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp +++ b/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp @@ -551,6 +551,20 @@ void tst_qdeclarativeanimations::propertiesTransition() QTest::qWait(waitDuration); QTIMED_COMPARE(myRect->x(),qreal(100)); }*/ + + { + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/propertiesTransition7.qml")); + QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create()); + QVERIFY(rect); + + QDeclarativeItemPrivate::get(rect)->setState("moved"); + QDeclarativeRectangle *myRect = rect->findChild<QDeclarativeRectangle*>("TheRect"); + QVERIFY(myRect); + QTest::qWait(waitDuration); + QTIMED_COMPARE(myRect->x(),qreal(200)); + } + } void tst_qdeclarativeanimations::invalidDuration() diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/signalEmission.qml b/tests/auto/declarative/qdeclarativefocusscope/data/signalEmission.qml new file mode 100644 index 0000000..07601c7 --- /dev/null +++ b/tests/auto/declarative/qdeclarativefocusscope/data/signalEmission.qml @@ -0,0 +1,33 @@ +import Qt 4.7 + +Rectangle { + width: 200 + height: 200 + + FocusScope { + focus: true + Rectangle { + objectName: "item1" + color: "blue" + onFocusChanged: focus ? color = "red" : color = "blue" + } + Rectangle { + objectName: "item2" + color: "blue" + onFocusChanged: focus ? color = "red" : color = "blue" + } + } + + FocusScope { + Rectangle { + objectName: "item3" + color: "blue" + onFocusChanged: focus ? color = "red" : color = "blue" + } + Rectangle { + objectName: "item4" + color: "blue" + onFocusChanged: focus ? color = "red" : color = "blue" + } + } +} diff --git a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp index b0c9c03..ec8f048 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp +++ b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp @@ -69,6 +69,7 @@ private slots: void textEdit(); void forceFocus(); void noParentFocus(); + void signalEmission(); }; /* @@ -335,7 +336,7 @@ void tst_qdeclarativefocusscope::noParentFocus() view->setSource(QUrl::fromLocalFile(SRCDIR "/data/chain.qml")); QVERIFY(view->rootObject()); - QVERIFY(view->rootObject()->property("focus1") == true); + QVERIFY(view->rootObject()->property("focus1") == false); QVERIFY(view->rootObject()->property("focus2") == false); QVERIFY(view->rootObject()->property("focus3") == true); QVERIFY(view->rootObject()->property("focus4") == true); @@ -344,6 +345,61 @@ void tst_qdeclarativefocusscope::noParentFocus() delete view; } +void tst_qdeclarativefocusscope::signalEmission() +{ + QDeclarativeView *view = new QDeclarativeView; + view->setSource(QUrl::fromLocalFile(SRCDIR "/data/signalEmission.qml")); + + QDeclarativeRectangle *item1 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item1")); + QDeclarativeRectangle *item2 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item2")); + QDeclarativeRectangle *item3 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item3")); + QDeclarativeRectangle *item4 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item4")); + QVERIFY(item1 != 0); + QVERIFY(item2 != 0); + QVERIFY(item3 != 0); + QVERIFY(item4 != 0); + + view->show(); + qApp->setActiveWindow(view); + qApp->processEvents(); + +#ifdef Q_WS_X11 + // to be safe and avoid failing setFocus with window managers + qt_x11_wait_for_window_manager(view); +#endif + + QVariant blue(QColor("blue")); + QVariant red(QColor("red")); + + QVERIFY(view->hasFocus()); + QVERIFY(view->scene()->hasFocus()); + item1->setFocus(true); + QCOMPARE(item1->property("color"), red); + QCOMPARE(item2->property("color"), blue); + QCOMPARE(item3->property("color"), blue); + QCOMPARE(item4->property("color"), blue); + + item2->setFocus(true); + QCOMPARE(item1->property("color"), blue); + QCOMPARE(item2->property("color"), red); + QCOMPARE(item3->property("color"), blue); + QCOMPARE(item4->property("color"), blue); + + item3->setFocus(true); + QCOMPARE(item1->property("color"), blue); + QCOMPARE(item2->property("color"), red); + QCOMPARE(item3->property("color"), red); + QCOMPARE(item4->property("color"), blue); + + item4->setFocus(true); + QCOMPARE(item1->property("color"), blue); + QCOMPARE(item2->property("color"), red); + QCOMPARE(item3->property("color"), blue); + QCOMPARE(item4->property("color"), red); + + delete view; +} + QTEST_MAIN(tst_qdeclarativefocusscope) #include "tst_qdeclarativefocusscope.moc" diff --git a/tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp b/tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp index d5a911a..db1f191 100644 --- a/tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp +++ b/tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp @@ -585,7 +585,7 @@ void tst_qdeclarativeinstruction::dump() << "45\t\t48\tDEFER\t\t\t7" << "46\t\tNA\tDEFER\t\t\t7" << "47\t\t48\tSTORE_IMPORTED_SCRIPT\t2" - << "48\t\t50\tXXX UNKOWN INSTRUCTION\t1234" + << "48\t\t50\tXXX UNKNOWN INSTRUCTION\t1234" << "49\t\t51\tSTORE_VARIANT_INTEGER\t\t32\t11" << "50\t\t52\tSTORE_VARIANT_DOUBLE\t\t19\t33.7" << "-------------------------------------------------------------------------------"; diff --git a/tests/auto/declarative/qdeclarativeitem/data/childrenRectBug3.qml b/tests/auto/declarative/qdeclarativeitem/data/childrenRectBug3.qml new file mode 100644 index 0000000..54b5b68 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeitem/data/childrenRectBug3.qml @@ -0,0 +1,15 @@ +import Qt 4.7 + +Rectangle { + width: 300 + height: 300 + + Rectangle { + height: childrenRect.height + + Repeater { + model: 1 + Rectangle { } + } + } +} diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index d76d360..25ca157 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -75,6 +75,7 @@ private slots: void childrenRect(); void childrenRectBug(); void childrenRectBug2(); + void childrenRectBug3(); void childrenProperty(); void resourcesProperty(); @@ -780,6 +781,17 @@ void tst_QDeclarativeItem::childrenRectBug2() delete canvas; } +// QTBUG-12722 +void tst_QDeclarativeItem::childrenRectBug3() +{ + QDeclarativeView *canvas = new QDeclarativeView(0); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/childrenRectBug3.qml")); + canvas->show(); + + //don't crash on delete + delete canvas; +} + template<typename T> T *tst_QDeclarativeItem::findItem(QGraphicsObject *parent, const QString &objectName) { diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp index 858c26d..10805b4 100644 --- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp +++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp @@ -271,6 +271,9 @@ void tst_qdeclarativelistmodel::dynamic_data() QTest::newRow("nested-insert") << "{append({'foo':123});insert(0,{'bars':[{'a':1},{'b':2},{'c':3}]});get(0).bars.get(0).a}" << 1 << ""; QTest::newRow("nested-set") << "{append({'foo':123});set(0,{'foo':[{'x':123}]});get(0).foo.get(0).x}" << 123 << ""; + QTest::newRow("nested-count") << "{append({'foo':123,'bars':[{'a':1},{'a':2},{'a':3}]}); get(0).bars.count}" << 3 << ""; + QTest::newRow("nested-clear") << "{append({'foo':123,'bars':[{'a':1},{'a':2},{'a':3}]}); get(0).bars.clear(); get(0).bars.count}" << 0 << ""; + // XXX //QTest::newRow("nested-setprop") << "{append({'foo':123});setProperty(0,'foo',[{'x':123}]);get(0).foo.get(0).x}" << 123 << ""; } @@ -344,9 +347,7 @@ void tst_qdeclarativelistmodel::dynamic_worker() waitForWorker(item); QDeclarativeExpression e(eng.rootContext(), &model, operations.last().toString()); - if (QByteArray(QTest::currentDataTag()).startsWith("nested")) - QVERIFY(e.evaluate().toInt() != result); - else + if (!QByteArray(QTest::currentDataTag()).startsWith("nested")) QCOMPARE(e.evaluate().toInt(), result); } diff --git a/tests/auto/declarative/qdeclarativepixmapcache/data/massive.png b/tests/auto/declarative/qdeclarativepixmapcache/data/massive.png Binary files differnew file mode 100644 index 0000000..bc6cc9e --- /dev/null +++ b/tests/auto/declarative/qdeclarativepixmapcache/data/massive.png diff --git a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp index 0c7780c..6b36224 100644 --- a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp +++ b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp @@ -70,6 +70,8 @@ private slots: void single_data(); void parallel(); void parallel_data(); + void massive(); + void cancelcrash(); private: QDeclarativeEngine engine; @@ -276,6 +278,54 @@ void tst_qdeclarativepixmapcache::parallel() qDeleteAll(pixmaps); } +void tst_qdeclarativepixmapcache::massive() +{ + QUrl url = thisfile.resolved(QUrl("data/massive.png")); + + // Confirm that massive images remain in the cache while they are + // in use by the application. + { + qint64 cachekey = 0; + QDeclarativePixmap p(0, url); + QVERIFY(p.isReady()); + QVERIFY(p.pixmap().size() == QSize(10000, 1000)); + cachekey = p.pixmap().cacheKey(); + + QDeclarativePixmap p2(0, url); + QVERIFY(p2.isReady()); + QVERIFY(p2.pixmap().size() == QSize(10000, 1000)); + + QVERIFY(p2.pixmap().cacheKey() == cachekey); + } + + // Confirm that massive images are removed from the cache when + // they become unused + { + qint64 cachekey = 0; + { + QDeclarativePixmap p(0, url); + QVERIFY(p.isReady()); + QVERIFY(p.pixmap().size() == QSize(10000, 1000)); + cachekey = p.pixmap().cacheKey(); + } + + QDeclarativePixmap p2(0, url); + QVERIFY(p2.isReady()); + QVERIFY(p2.pixmap().size() == QSize(10000, 1000)); + + QVERIFY(p2.pixmap().cacheKey() != cachekey); + } +} + +// QTBUG-12729 +void tst_qdeclarativepixmapcache::cancelcrash() +{ + QUrl url("http://127.0.0.1:14452/cancelcrash_notexist.png"); + for (int ii = 0; ii < 1000; ++ii) { + QDeclarativePixmap pix(&engine, url); + } +} + QTEST_MAIN(tst_qdeclarativepixmapcache) #include "tst_qdeclarativepixmapcache.moc" diff --git a/tests/auto/declarative/qdeclarativescriptdebugging/data/backtrace1.js b/tests/auto/declarative/qdeclarativescriptdebugging/data/backtrace1.js new file mode 100644 index 0000000..8decbf0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativescriptdebugging/data/backtrace1.js @@ -0,0 +1,11 @@ + +function function2InScript(a) +{ + mainRectangle.foo = a; +} + + +function functionInScript(a , b) +{ + function2InScript(a + b); +} diff --git a/tests/auto/declarative/qdeclarativescriptdebugging/data/backtrace1.qml b/tests/auto/declarative/qdeclarativescriptdebugging/data/backtrace1.qml new file mode 100644 index 0000000..ad627ef --- /dev/null +++ b/tests/auto/declarative/qdeclarativescriptdebugging/data/backtrace1.qml @@ -0,0 +1,27 @@ +import Qt 4.7 +import Qt.test 1.0 +import "backtrace1.js" as Script + +Rectangle { + id: mainRectangle + + property string foo: "Default"; + width: 200 + height: 200 + + + MyTestObject { + + function append(a, b) { + return a + " " + b; + } + + + id: testObject; + someProperty: append("Hello", mainRectangle.foo) + + onSignaled: { + Script.functionInScript(value , "b"); + } + } +} diff --git a/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro b/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro new file mode 100644 index 0000000..c2d30a0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro @@ -0,0 +1,20 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative script +macx:CONFIG -= app_bundle + +SOURCES += tst_qdeclarativescriptdebugging.cpp +INCLUDEPATH += ../shared + +# QMAKE_CXXFLAGS = -fprofile-arcs -ftest-coverage +# LIBS += -lgcov + +symbian: { + importFiles.sources = data + importFiles.path = . + DEPLOYMENT = importFiles +} else { + DEFINES += SRCDIR=\\\"$$PWD\\\" +} + +CONFIG += parallel_test + diff --git a/tests/auto/declarative/qdeclarativescriptdebugging/tst_qdeclarativescriptdebugging.cpp b/tests/auto/declarative/qdeclarativescriptdebugging/tst_qdeclarativescriptdebugging.cpp new file mode 100644 index 0000000..b0743c0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativescriptdebugging/tst_qdeclarativescriptdebugging.cpp @@ -0,0 +1,154 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include <qtest.h> +#include <QtDeclarative/qdeclarativecomponent.h> +#include <QtDeclarative/qdeclarativeengine.h> +#include <QtDeclarative/qdeclarativeitem.h> +#include <QtDeclarative/qdeclarativecontext.h> +#include <QtCore/QDir> +#include <QtScript/QScriptEngineAgent> +#include <private/qdeclarativeengine_p.h> + +class MyTestObject : public QObject { + Q_OBJECT + Q_PROPERTY(QString someProperty READ someProperty WRITE setSomeProperty NOTIFY somePropertyChanged) + +public: + QString someProperty() { return _someProperty; } + void setSomeProperty(const QString &p) { _someProperty = p; } + QString _someProperty; + + void emitSignal(const QString &value) { emit signaled(value); } + +signals: + void signaled(const QString &value); + void somePropertyChanged(); +}; + + +class BtAgent : public QScriptEngineAgent { +public: + BtAgent(QScriptEngine *engine) : QScriptEngineAgent(engine) + { count = 0; engine->setAgent(this); } + + QStringList bt; + int count; + int breakpoint; + void positionChange(qint64 , int lineNumber, int ) + { + if(lineNumber == breakpoint) { + count++; + bt = engine()->currentContext()->backtrace(); + } + } +}; + + + +/* +This test covers evaluation of ECMAScript expressions and bindings from within +QML. This does not include static QML language issues. + +Static QML language issues are covered in qmllanguage +*/ +inline QUrl TEST_FILE(const QString &filename) +{ + QFileInfo fileInfo(__FILE__); + return QUrl::fromLocalFile(fileInfo.absoluteDir().filePath("data/" + filename)); +} + +inline QUrl TEST_FILE(const char *filename) +{ + return TEST_FILE(QLatin1String(filename)); +} + +class tst_qdeclarativescriptdebugging : public QObject +{ + Q_OBJECT +public: + tst_qdeclarativescriptdebugging() {} + +private slots: + void initTestCase(); + void backtrace1(); +}; + +void tst_qdeclarativescriptdebugging::initTestCase() +{ + qmlRegisterType<MyTestObject>("Qt.test", 1,0, "MyTestObject"); +} + +void tst_qdeclarativescriptdebugging::backtrace1() +{ + { + QDeclarativeEngine engine; + QUrl file = TEST_FILE("backtrace1.qml"); + QDeclarativeComponent component(&engine, file); + QDeclarativeItem *item = qobject_cast<QDeclarativeItem *>(component.create()); + QVERIFY(item); + MyTestObject *obj = item->findChild<MyTestObject *>(); + QVERIFY(obj); + QCOMPARE(obj->someProperty(), QString("Hello Default")); + + QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(&engine); + BtAgent agent(&ep->scriptEngine); + agent.breakpoint = 16; + + obj->emitSignal("blah"); + QCOMPARE(obj->someProperty(), QString("Hello blahb")); + QCOMPARE(agent.count, 1); + + QStringList expected; + expected << "append(a = 'Hello', b = 'blahb') at @PREFIX@/backtrace1.qml:16" + << "$someProperty() at @PREFIX@/backtrace1.qml:21" + << "function2InScript(a = 'blahb') at @PREFIX@/backtrace1.js:4" + << "functionInScript(a = 'blah', b = 'b') at @PREFIX@/backtrace1.js:10" + << "onSignaled() at @PREFIX@/backtrace1.qml:24" + << "<global>() at -1"; + expected.replaceInStrings("@PREFIX@", file.toString().section('/', 0, -2)); + QCOMPARE(agent.bt, expected); + } +} + + +QTEST_MAIN(tst_qdeclarativescriptdebugging) + +#include "tst_qdeclarativescriptdebugging.moc" diff --git a/tests/auto/declarative/qdeclarativestates/data/extendsBug.qml b/tests/auto/declarative/qdeclarativestates/data/extendsBug.qml new file mode 100644 index 0000000..a3c4827 --- /dev/null +++ b/tests/auto/declarative/qdeclarativestates/data/extendsBug.qml @@ -0,0 +1,26 @@ +import Qt 4.7 + +Rectangle { + width: 200 + height: 200 + + Rectangle { + id: rect + objectName: "greenRect" + width: 100 + height: 100 + color: "green" + } + + states:[ + State { + name: "a" + PropertyChanges { target: rect; x: 100 } + }, + State { + name: "b" + extend:"a" + PropertyChanges { target: rect; y: 100 } + } + ] +} diff --git a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp index 3b6a420..6ae2759 100644 --- a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp +++ b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp @@ -139,6 +139,7 @@ private slots: void urlResolution(); void unnamedWhen(); void returnToBase(); + void extendsBug(); }; void tst_qdeclarativestates::initTestCase() @@ -1186,6 +1187,21 @@ void tst_qdeclarativestates::returnToBase() QCOMPARE(rect->property("stateString").toString(), QLatin1String("originalState")); } +//QTBUG-12559 +void tst_qdeclarativestates::extendsBug() +{ + QDeclarativeEngine engine; + + QDeclarativeComponent c(&engine, SRCDIR "/data/extendsBug.qml"); + QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create()); + QVERIFY(rect != 0); + QDeclarativeItemPrivate *rectPrivate = QDeclarativeItemPrivate::get(rect); + QDeclarativeRectangle *greenRect = rect->findChild<QDeclarativeRectangle*>("greenRect"); + + rectPrivate->setState("b"); + QCOMPARE(greenRect->x(), qreal(100)); + QCOMPARE(greenRect->y(), qreal(100)); +} QTEST_MAIN(tst_qdeclarativestates) diff --git a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp index de8d222..1c1c04b 100644 --- a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp +++ b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp @@ -43,9 +43,11 @@ #include <QtDeclarative/qdeclarativeengine.h> #include <QtDeclarative/qdeclarativeview.h> #include <QtDeclarative/qdeclarativeitem.h> +#include <QtDeclarative/qdeclarativecontext.h> #include <QtGui/qmenubar.h> #include "../../../shared/util.h" #include "qmlruntime.h" +#include "deviceorientation.h" #include "../../../shared/util.h" #ifdef Q_OS_SYMBIAN @@ -67,7 +69,7 @@ public: tst_QDeclarativeViewer(); private slots: - void orientation(); + void runtimeContextProperty(); void loading(); void fileBrowser(); void resizing(); @@ -94,7 +96,7 @@ tst_QDeclarativeViewer::tst_QDeclarativeViewer() QCOMPARE(viewer->size(), viewer->sizeHint()); \ } -void tst_QDeclarativeViewer::orientation() +void tst_QDeclarativeViewer::runtimeContextProperty() { QDeclarativeViewer *viewer = new QDeclarativeViewer(); QVERIFY(viewer); @@ -103,17 +105,30 @@ void tst_QDeclarativeViewer::orientation() QVERIFY(viewer->menuBar()); QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject()); QVERIFY(rootItem); + QObject *runtimeObject = qvariant_cast<QObject*>(viewer->view()->engine()->rootContext()->contextProperty("runtime")); + QVERIFY(runtimeObject); + + // test isActiveWindow property + QVERIFY(!runtimeObject->property("isActiveWindow").toBool()); + viewer->show(); - QApplication::setActiveWindow(viewer); QTest::qWaitForWindowShown(viewer); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(viewer)); + QVERIFY(runtimeObject->property("isActiveWindow").toBool()); + TEST_INITIAL_SIZES(viewer); + // test orientation property + QCOMPARE(runtimeObject->property("orientation").toInt(), int(DeviceOrientation::Portrait)); + viewer->rotateOrientation(); qApp->processEvents(); + QCOMPARE(runtimeObject->property("orientation").toInt(), int(DeviceOrientation::Landscape)); + QCOMPARE(rootItem->width(), 300.0); + QCOMPARE(rootItem->width(), 300.0); QCOMPARE(rootItem->height(), 200.0); QTRY_COMPARE(viewer->view()->size(), QSize(300, 200)); @@ -124,6 +139,8 @@ void tst_QDeclarativeViewer::orientation() viewer->rotateOrientation(); qApp->processEvents(); + QCOMPARE(runtimeObject->property("orientation").toInt(), int(DeviceOrientation::PortraitInverted)); + QCOMPARE(rootItem->width(), 200.0); QCOMPARE(rootItem->height(), 300.0); QTRY_COMPARE(viewer->view()->size(), QSize(200, 300)); @@ -131,6 +148,19 @@ void tst_QDeclarativeViewer::orientation() QCOMPARE(viewer->size(), QSize(200, 300 + MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->size(), viewer->sizeHint()); + viewer->rotateOrientation(); + qApp->processEvents(); + + QCOMPARE(runtimeObject->property("orientation").toInt(), int(DeviceOrientation::LandscapeInverted)); + + viewer->rotateOrientation(); + qApp->processEvents(); + + QCOMPARE(runtimeObject->property("orientation").toInt(), int(DeviceOrientation::Portrait)); + + viewer->hide(); + QVERIFY(!runtimeObject->property("isActiveWindow").toBool()); + delete viewer; } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png Binary files differindex 442ba9f..16a7e10 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png Binary files differindex a9ff20f..116ce88 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png Binary files differindex 157bb99..13896d4 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png Binary files differindex 8c49acb..5d18003 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png Binary files differindex eb2bf54..cd3387f 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png Binary files differnew file mode 100644 index 0000000..9f31c69 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml index 9595a5c..06d32b6 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml @@ -6,409 +6,437 @@ VisualTest { } Frame { msec: 16 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 32 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 48 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 64 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 80 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 96 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 112 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 128 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 144 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 160 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 176 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 192 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 208 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 224 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 240 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 256 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 272 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 288 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 304 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 320 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 336 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 352 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 368 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 384 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 400 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 416 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 432 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 448 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 464 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 480 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 496 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 512 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 528 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 544 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 560 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 576 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 592 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 608 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 624 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 640 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 656 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 672 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 688 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 704 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 720 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 736 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 752 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 768 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 784 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 800 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 816 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 832 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 848 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 864 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 880 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 896 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 623; y: 222 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 621; y: 222 + modifiers: 0 + sendToViewport: true } Frame { msec: 912 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "1c2d4a99e7e2f5e945c05857d6a463a2" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 609; y: 230 + modifiers: 0 + sendToViewport: true } Frame { msec: 928 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "d69c0678ce2025a8921b089311d219ea" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 583; y: 248 + modifiers: 0 + sendToViewport: true } Frame { msec: 944 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "55a852b268151d660e4945da88b04022" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 559; y: 258 + modifiers: 0 + sendToViewport: true } Frame { msec: 960 image: "test-pathview.0.png" } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 547; y: 264 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 547; y: 264 + modifiers: 0 + sendToViewport: true + } Frame { msec: 976 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "55ab61911405e762b39b38d1371ef845" } Frame { msec: 992 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "be3de45165f2f0916f734fecf3f48c47" } Frame { msec: 1008 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "0a523daec6b591a2b5030c6c0b95cb24" } Frame { msec: 1024 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "22da168e523fa385cce1f2e6a05e1332" } Frame { msec: 1040 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "464cb37780cf126df6dad4169445c7bc" } Frame { msec: 1056 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "666b06a0fbe2d10fbf3e15883a166c60" } Frame { msec: 1072 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "223732cd526e09155ca99c80780bc3fa" } Frame { msec: 1088 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "c74cc48188b05c5426a6b955ed9f09a3" } Frame { msec: 1104 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "8d09a95ab09f87277fcc727e9c5da0fb" } Frame { msec: 1120 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "71b7d4ec45270158ba4ca96817d8f231" } Frame { msec: 1136 - hash: "89bb697bb7b7fab38d3ff56e23e43959" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 734; y: 177 - modifiers: 0 - sendToViewport: true + hash: "4847a1e7d792ed58e3476112b02c6fab" } Frame { msec: 1152 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "ef444a3a960bdc176e004b949e5c89ce" } Frame { msec: 1168 - hash: "89bb697bb7b7fab38d3ff56e23e43959" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 732; y: 177 - modifiers: 0 - sendToViewport: true + hash: "1ebf4badb7f4ef3938868a74740fcbce" } Frame { msec: 1184 - hash: "89bb697bb7b7fab38d3ff56e23e43959" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 726; y: 179 - modifiers: 0 - sendToViewport: true + hash: "022918cd4b54750b0ad28bcb00108f51" } Frame { msec: 1200 - hash: "89bb697bb7b7fab38d3ff56e23e43959" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 716; y: 183 - modifiers: 0 - sendToViewport: true + hash: "1ea398b2b7c52b35981c98b60d5d7a02" } Frame { msec: 1216 - hash: "42c141399fda1cbb2ae117788d87092a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 700; y: 190 - modifiers: 0 - sendToViewport: true + hash: "05d7619ed0154fa414686522a7ca86c4" } Frame { msec: 1232 - hash: "4d44343eb91838e3eb73e2e5326b5ac2" + hash: "03274e26ea57d1264f21d306533476ef" } Frame { msec: 1248 - hash: "4d44343eb91838e3eb73e2e5326b5ac2" + hash: "5109372d6c62225aaf971aa53c708bee" + } + Frame { + msec: 1264 + hash: "71f10446437963eccb87dd40c172118f" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 708; y: 240 + modifiers: 0 + sendToViewport: true } Mouse { type: 5 button: 0 buttons: 1 - x: 677; y: 200 + x: 707; y: 240 modifiers: 0 sendToViewport: true } Frame { - msec: 1264 - hash: "15aaccb4f7961a4e3e6fe57260779d00" + msec: 1280 + hash: "e47426491548162622f9a281c3d062ec" } Mouse { type: 5 button: 0 buttons: 1 - x: 651; y: 209 + x: 685; y: 252 modifiers: 0 sendToViewport: true } Frame { - msec: 1280 - hash: "5628fa3ac9893f5c9690013aad4b881a" + msec: 1296 + hash: "e889fba64d9f94fe18c3750dd6ad9d00" } Mouse { type: 5 button: 0 buttons: 1 - x: 619; y: 219 + x: 635; y: 264 modifiers: 0 sendToViewport: true } Frame { - msec: 1296 - hash: "384db58b6de773ac39ae81e6af4d547d" + msec: 1312 + hash: "7fe200757a6bf752906d195fe341be14" } Mouse { type: 5 button: 0 buttons: 1 - x: 579; y: 229 + x: 569; y: 280 modifiers: 0 sendToViewport: true } Frame { - msec: 1312 - hash: "2a15a27a138b9d3d646b827d026e8843" + msec: 1328 + hash: "aa1f4147dc3fd66f6d9e2605d0759951" } Mouse { type: 5 button: 0 buttons: 1 - x: 535; y: 237 + x: 533; y: 294 modifiers: 0 sendToViewport: true } @@ -416,157 +444,193 @@ VisualTest { type: 3 button: 1 buttons: 0 - x: 535; y: 237 + x: 533; y: 294 modifiers: 0 sendToViewport: true } Frame { - msec: 1328 - hash: "098176f48a148eb2bc5ef67c307baa1c" - } - Frame { msec: 1344 - hash: "f838ab4301bf9d3106cec529f855cecd" + hash: "2b7163ea45860cf81f208c2b68c418b5" } Frame { msec: 1360 - hash: "9725322067a04f83717b059d4970d610" + hash: "a89bd1204fb17d9d8ce7b7f4279e9b1f" } Frame { msec: 1376 - hash: "3605cfbebc3a9eb4460efb2d4b9b6da2" + hash: "683e52637fd5d96ded35f5ade9679822" } Frame { msec: 1392 - hash: "4503a368d8db25d112503dbc3934541d" + hash: "2aa16f06e8bed201746558b1003f7d63" } Frame { msec: 1408 - hash: "80894cc06c82264bf527398ea235da12" + hash: "f2e40e75ddb8004917ae5b8cf144a322" } Frame { msec: 1424 - hash: "d4f9b90f886fc667309b33c9a296410c" + hash: "0f7f64373b065a454c02c32c52a5ef79" } Frame { msec: 1440 - hash: "889d01025cff679b61bff182a1ac9cbc" + hash: "fb4fbd2b3696bfb6135797b1f0158b5c" } Frame { msec: 1456 - hash: "6147bc4455e7cb5ae55cd47be8dc4ad6" + hash: "7a8eafad65ff191a97dcf910393ba4e4" } Frame { msec: 1472 - hash: "ddd10a294eb6b19698c4e9fe4f1508fe" + hash: "3362deae62ba96853d85827f21cec589" } Frame { msec: 1488 - hash: "748e8d9c1971f6258acee5133b7f114b" + hash: "0653838fa3fb5b32e561adc20becc9d2" } Frame { msec: 1504 - hash: "1ef3f32ec9ef950588266bacbe3554a0" + hash: "482e78e6b54cabe007f7e7f4f27a07ee" } Frame { msec: 1520 - hash: "57853ff47b65aba9e76f90b2efec4f8f" + hash: "b51f60864896808c6e41d8a0a990676d" } Frame { msec: 1536 - hash: "3985fea21d89d223c1461d5e96364c76" + hash: "d77e59d69b7c21c82bce9a25d548358c" } Frame { msec: 1552 - hash: "cb5f6a3caeeaed12e91efe43867f2c1f" + hash: "b3dddbb1eee0e2f222434511073c4620" } Frame { msec: 1568 - hash: "cdd4176776d5969373e0fc9a117e3c87" + hash: "d5e0d191582291b269b9e93241d9ac03" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 637; y: 218 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 621; y: 240 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 613; y: 248 + modifiers: 0 + sendToViewport: true } Frame { msec: 1584 - hash: "3bac2e7506472db2ae11734240f1c3f4" + hash: "8c12000da88abb70cbc370d2a2ca21d7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 551; y: 288 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 551; y: 288 + modifiers: 0 + sendToViewport: true } Frame { msec: 1600 - hash: "bb572659d79ebda7134c039e40cf2633" + hash: "2854533fd50f5ebb8fc43cf0041883e4" } Frame { msec: 1616 - hash: "e610181bfa17a85281f9c7417088f04f" + hash: "0b3782e842a6c54585d6a266314025d8" } Frame { msec: 1632 - hash: "eb23ff021909589b6d8ce47ebff2c3ed" + hash: "02409885b82ebac931df18d8e23238d7" } Frame { msec: 1648 - hash: "c321dda3878c4b97cc63246c47368224" + hash: "edcbd91ad267c125c431367be3e4a8a3" } Frame { msec: 1664 - hash: "6a65cdfd50e1455356040d4cbc09905e" + hash: "47641fd7ec919b3c041c5acc04b0d083" } Frame { msec: 1680 - hash: "f2a44b12e4e5bae8283c4d227949e4e8" + hash: "ea8f026fee0fba2c27a8df1e1e531acb" } Frame { msec: 1696 - hash: "55418d661f3257b5b79a7dbb172b5b70" + hash: "e2e8a398760be380f9b2b7dbcb03c0e8" } Frame { msec: 1712 - hash: "483d7111c86951918746d6ebe0dd9655" + hash: "a1767f2e10f9ab87050ef246a4a29bbb" } Frame { msec: 1728 - hash: "85c83ac3a294a9320bb04a6721ecf7d5" + hash: "f60cccf793bd6d356d69b1394638a201" } Frame { msec: 1744 - hash: "0d658b897b8e03397ddd8ffe475c2fc0" + hash: "31dc8c50a99164c19445a089223c8813" } Frame { msec: 1760 - hash: "6ed9d7ea344b3c1b1d9196ee36b2f89a" + hash: "78ff726b7da5ba03fa74f66b39bf1006" } Frame { msec: 1776 - hash: "6a1e7f6c03769c2c88e6343fb6c1a2a4" + hash: "6f8a540dccf7182f6aed8903a0afb109" } Frame { msec: 1792 - hash: "9dc51f46e072eac4494d7318f2ecb39b" + hash: "c914c500507b9c7180dcf25e985135e9" } Frame { msec: 1808 - hash: "59e833981c3fcd8a71f4a16d1c454b3a" + hash: "39702ce38bcfca46ef3a8dbb7299c725" } Frame { msec: 1824 - hash: "29b953efdda00548d8cf6fb49fa60d13" + hash: "969b71ee88a1d244e62af1cecc105234" } Frame { msec: 1840 - hash: "fd4611f703f94ebefcc64781993ca85c" + hash: "11c8397fb9d7b993761b08ba8c9958e5" } Frame { msec: 1856 - hash: "aa4789ede618963157b40f099ce84987" + hash: "79ad4a90ab449e3232db993b30786d89" } Frame { msec: 1872 - hash: "8a326b46ec536a67626ee2d2bc06aa9f" + hash: "daf979fd50e0860bf30f377a059d89dc" } Frame { msec: 1888 - hash: "011ff557672d47591e4f0f5c5ee418f1" + hash: "5412e7524dc22e8064c8a8c684092802" } Frame { msec: 1904 - hash: "d72fba857bdc128ddcb5971b86aadcb2" + hash: "2c3bea8bf10ecf6c19b93e94cb7ac0ea" } Frame { msec: 1920 @@ -574,807 +638,919 @@ VisualTest { } Frame { msec: 1936 - hash: "49182b7ae9ef5fb4b9234969abd05960" + hash: "bbfa2f8aaab0abaff9d771d5ec546d96" } Frame { msec: 1952 - hash: "53de60f682574b7a9e6ffaee175fc9ff" + hash: "be2811bf369bc9dd8c5d9deec3b84788" } Frame { msec: 1968 - hash: "2de74fe5b8848c5c781b796146871f45" + hash: "779838915f48eb917d36c3f2b65eedae" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 595; y: 236 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 565; y: 256 + modifiers: 0 + sendToViewport: true } Frame { msec: 1984 - hash: "33c87146d8c24dd9c2271d16a8ff5b53" + hash: "d20b5fe14b47dfb1e73f8ef44802da11" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 507; y: 286 + modifiers: 0 + sendToViewport: true } Frame { msec: 2000 - hash: "fdb29214e20d744d9776907061f50358" + hash: "5312dd1f9d309ab5134b8bb67685488e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 461; y: 288 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 461; y: 288 + modifiers: 0 + sendToViewport: true } Frame { msec: 2016 - hash: "8c7c920416c9b775e790e6da24c32927" + hash: "8d6b6cbb74cc654bc5aff10a807dd3cb" } Frame { msec: 2032 - hash: "86b456059e4701379447fffaf9e072f0" + hash: "dee717869177d1de4a26599b120f1c3d" } Frame { msec: 2048 - hash: "f92cc485ee03ef5bce3c4cdc35e00318" + hash: "2b2c60f42024784ceed5c68505dfa5ca" } Frame { msec: 2064 - hash: "2fad58883cb20273cfd79ebca345a66d" + hash: "1a6a108fd6cf607ec08dbedd804d12f7" } Frame { msec: 2080 - hash: "84505ebbc6e12817f11f64aa6f61a0bf" + hash: "10bc4d0a1dc400fedc9a68b68c6525fd" } Frame { msec: 2096 - hash: "ded83cacb89838cc0f3ba14bcc69b66b" + hash: "dc6a4abfbfb38e90af2308320d0f795b" } Frame { msec: 2112 - hash: "5bb37e75bb45eaa6067c604b83ae13d7" + hash: "82c61d8461001c19af7c2b458d427e0b" } Frame { msec: 2128 - hash: "4ee9e4c90c40dbc25a0ce884d9c2c37f" + hash: "e455d9ccffedaa708532bb69ad15871e" } Frame { msec: 2144 - hash: "cb7148ff6f611038c29af36c8552b8c2" + hash: "b9c6169ad08724fc70df30668dfe7509" } Frame { msec: 2160 - hash: "a591d8cb42570272dd264d5f1ce595ab" + hash: "a3fe5862be470470854d4157c1c027db" } Frame { msec: 2176 - hash: "4e61657405d32dbcd39d3637f8af0958" + hash: "6a3804bd5f4fd5f1c424615ceb620525" } Frame { msec: 2192 - hash: "9c7c1411dd5d3c1c8fb78e63e14061fe" + hash: "df0d72248310654a9cf47e707fe9e414" } Frame { msec: 2208 - hash: "ae83a37e99b578fa0872ed6bc2776bc0" + hash: "beb19f2b2979ab40b5ccf8c0fbe9b72f" } Frame { msec: 2224 - hash: "e8cb5a8a40c1e78c87c616f77d8de270" + hash: "be3449b49048b764bea68a76baa0fc75" } Frame { msec: 2240 - hash: "9df093e4bcfa32be5924a0ca70bdaa3b" + hash: "4a615cae9c8f85e7b8aecd4c9014f1eb" } Frame { msec: 2256 - hash: "40c358066d508143bee1446d12fe7b89" + hash: "b3c274f1a9d65684c0a55a544bf77810" } Frame { msec: 2272 - hash: "a929ed6efc7fc68b38635f3c74242f52" + hash: "31456b01fcfb60a77d2b9662c2fff7b6" } Frame { msec: 2288 - hash: "86ff721a3178b689ea47b6bc274a2b41" + hash: "2be5cf3f6158bf09659acc68b134846f" } Frame { msec: 2304 - hash: "ed1f680f6d05f54ceb75c9bae3a0716a" + hash: "5f9c725a11305f3e6c48ab332faabf50" } Frame { msec: 2320 - hash: "3f09a565df2beb51f366a1b3fb6adfe9" + hash: "277c2733c7245d045665198984b74224" } Frame { msec: 2336 - hash: "13468347bd26bab60f1db826fb17631c" + hash: "265b8342bc747fb43a5291df0f4ce48b" } Frame { msec: 2352 - hash: "9f7d085fea5788a457098973f17c36cb" + hash: "803b49ec31955b481009a51c64bcce65" } Frame { msec: 2368 - hash: "4114b93246155b3434200831b2995330" + hash: "a717b30ad50746cdf0fae82212ac88f0" } Frame { msec: 2384 - hash: "487171bd1430f74e3d51b5e215c34b5c" + hash: "65f46c8e69f24d060b5da6f866867f51" } Frame { msec: 2400 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "52f9e5d1106d00a950470076a50e4239" } Frame { msec: 2416 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "058a787aae2845308e68bb93f6a811e4" } Frame { msec: 2432 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "621985111c25994c0c0fe3635be67c1d" } Frame { msec: 2448 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2949b8185cefbaaf587a043d805cc670" } Frame { msec: 2464 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "d4a03127ae5047184c736617deeac92d" } Frame { msec: 2480 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "876c6c5ac4500de6234423bf6f3511d6" } Frame { msec: 2496 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "eb08aa172cfbdb696b6f672dfa7b6fff" } Frame { msec: 2512 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "a60c13b8f46faa0a35dbb539010550d4" } Frame { msec: 2528 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "c6f8786506e0326a5734ab8aea782f95" } Frame { msec: 2544 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "a49927f2aae24e692fc379f0ab6f4ee9" } Frame { msec: 2560 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2f1a2d50e1090b34ad1ea6a36eec4fe0" } Frame { msec: 2576 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "a5ee24d37be960a88684748b73dc75fe" } Frame { msec: 2592 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "28682389395b47ae33ceec1ba3beef4e" } Frame { msec: 2608 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "1869667b50b76d99716dd0d7849901fa" } Frame { msec: 2624 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2806ee1005193f55825aa6147583985f" } Frame { msec: 2640 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "c00589dce90e3ab2f2c8890f30f80d3d" } Frame { msec: 2656 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "1f1881f0a29525e380ecbcce15499fa4" } Frame { msec: 2672 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2a4c3ff764545a3899c864680f22f0a3" } Frame { msec: 2688 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2704 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2720 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2736 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2752 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2768 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2784 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2800 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2816 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2832 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2848 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2864 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2880 image: "test-pathview.2.png" } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 310; y: 277 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 324; y: 279 + modifiers: 0 + sendToViewport: true + } Frame { msec: 2896 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "ce00c77e8ff1768b41f5585344af1c58" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 330; y: 281 + modifiers: 0 + sendToViewport: true } Frame { msec: 2912 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "24f401275fa6ec7d26234609792fe0b8" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 346; y: 283 + modifiers: 0 + sendToViewport: true } Frame { msec: 2928 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "d3c74863c627a1b922a6b6c4a24f8c40" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 358; y: 285 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 358; y: 285 + modifiers: 0 + sendToViewport: true } Frame { msec: 2944 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "64a3209e6adc737065e5d5c3202a7283" } Frame { msec: 2960 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "cf936ffe4330edefddb31c59368491fc" } Frame { msec: 2976 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "a67213db044bb876f737cd355fe54444" } Frame { msec: 2992 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "0f9e97057cbbd8071e0f5f61318bdf9c" } Frame { msec: 3008 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "c5f38d334df86ebb6ac4600c83eced20" } Frame { msec: 3024 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "6d8e6049a36eac4136dbdb5fb18d0650" } Frame { msec: 3040 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "8ee97cff4a632e6e297bd3bdac27b8d4" } Frame { msec: 3056 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "aca1fcd005d211d35245e64a44002c01" } Frame { msec: 3072 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "7076180bf0eb14a5e733be9320f1f009" } Frame { msec: 3088 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 728; y: 181 - modifiers: 0 - sendToViewport: true + hash: "e0a0545b3a0b6a0b07d3fa987e1d58b6" } Frame { msec: 3104 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "0294b098ce7f0d381542776320e52d2e" } Frame { msec: 3120 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "36f8bcc42add38fe149e34a703cf8a02" } Frame { msec: 3136 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 727; y: 181 - modifiers: 0 - sendToViewport: true + hash: "631426bde50fd35d1da1c30d9878253e" } Frame { msec: 3152 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 723; y: 181 - modifiers: 0 - sendToViewport: true + hash: "a4d64c9d378138bedf63389e58d8f1d6" } Frame { msec: 3168 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 717; y: 184 - modifiers: 0 - sendToViewport: true + hash: "17fdf61bffd947c2e9898f5c4517fdf8" } Frame { msec: 3184 - hash: "6dcec6cdaa35eba74607ba64d6ea2ec0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 705; y: 188 - modifiers: 0 - sendToViewport: true + hash: "653b8c7a55bc4ca763238098711eafa1" } Frame { msec: 3200 - hash: "16b7b4847fe86b25d8d6136106a4c400" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 686; y: 197 - modifiers: 0 - sendToViewport: true + hash: "89e15b3ee1b1fc945801e08cfcdba62c" } Frame { msec: 3216 - hash: "d946d55b19c99fa25bf1c04f2b71026a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 661; y: 207 - modifiers: 0 - sendToViewport: true + hash: "7ea615af67336895e6cee6d3a39ff7de" } Frame { msec: 3232 - hash: "96f40f5071365cde769c733fd1ef5a24" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 626; y: 221 - modifiers: 0 - sendToViewport: true + hash: "88faee45db80f04ef1120c35057a5f7d" } Frame { msec: 3248 - hash: "7004058b95b7eab3ebba5c80c0923982" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 582; y: 235 - modifiers: 0 - sendToViewport: true + hash: "8cfe34047b29ac85e58d55e0f6e0b195" } Frame { msec: 3264 - hash: "2c78880237c414182f97f1709f1eef0f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 532; y: 246 - modifiers: 0 - sendToViewport: true + hash: "39255546502fcb882005fe4c38c21fb0" } Frame { msec: 3280 - hash: "c90a15ec9f88008ca8b0ec0185444d71" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 532; y: 246 - modifiers: 0 - sendToViewport: true + hash: "6bf7a959a05fc27f651b2a3ba07de30d" } Frame { msec: 3296 - hash: "c90a15ec9f88008ca8b0ec0185444d71" + hash: "c2c61cb8dbbbd38827277ab32579c6da" } Frame { msec: 3312 - hash: "36461e2a4cd860cac32223b8ee73c657" + hash: "ff370d4b4e44c4cbacca96107105df21" } Frame { msec: 3328 - hash: "5f9b3ad9202fb02a4c6fea28c248ad22" + hash: "ccadd9e070d54de21c76397d18ad3de8" } Frame { msec: 3344 - hash: "d0d23c4e1ddb2d9ffa0ecc38030ae15c" + hash: "6302c39de00070b0a23f9dc87f74dd8d" } Frame { msec: 3360 - hash: "8e2e2d3eaf557c453f34016b6614e495" + hash: "7ab69e6d9809c78dc723609bd2761206" } Frame { msec: 3376 - hash: "7402c747fa7276293a0a72d48d342782" + hash: "c429cc724b39891805cf4c1448de60b3" } Frame { msec: 3392 - hash: "6090c30e4d722a32c083a25171fb11ff" + hash: "396ddf0b01e9fe7c2bfb220e64a0c7ec" } Frame { msec: 3408 - hash: "f770d940cf287fec4b0803f7310292a8" + hash: "7a519a4efeecef5e7623a270e458fb13" } Frame { msec: 3424 - hash: "558e4ce32df69357b70a8285b00fe347" + hash: "869d174a939e0638a1a22d5c8a010c14" } Frame { msec: 3440 - hash: "8814168503c9a72ea8d3fa1e503f33d9" + hash: "9ecd2cf4e3b42ff93bcbf4db9829666c" } Frame { msec: 3456 - hash: "6f5513d22e545096fadc6f5c4112902e" + hash: "b06b58b250d3df365806a3f8991d57f3" } Frame { msec: 3472 - hash: "43f11d8ac16fd3e8199e555528817e14" + hash: "7a6fb03feb2ae0af1f143daedd22a88b" } Frame { msec: 3488 - hash: "d64bafdbd26878a323dae918d5e0a36d" + hash: "e9fe338dbe7afb69f3870743b0a18805" } Frame { msec: 3504 - hash: "1c70bdddfc3751ae3864f008170f8b06" + hash: "04b8def2085e9ce4065b02b938915557" } Frame { msec: 3520 - hash: "bb7a18691fcd371e9d382b5bba4a0573" + hash: "7e6942f72012875ba83a1c9121e1f786" } Frame { msec: 3536 - hash: "547e15f5dea2d9aa3ed44640b25028b9" + hash: "291e2d79a79959d9c8c586b6bdc31689" } Frame { msec: 3552 - hash: "c11b86a256fac6be10b9a54564903d6f" + hash: "e490bc7fd92f486b964cca967bd33b38" } Frame { msec: 3568 - hash: "0ada2dc586894d5e37de2632d2b37b15" + hash: "0c9858e0445e25d2b12c84801de441cb" } Frame { msec: 3584 - hash: "0ae1a39ea196a0e734d80dbdea67b285" + hash: "72ba7a4aacb150e1e9c6de72cff82258" } Frame { msec: 3600 - hash: "3cb70e64f9ab8aad841326dc2d2f1615" + hash: "1daca95256842545a5b77bcc46782478" } Frame { msec: 3616 - hash: "a8f8b5ff19df9163ea628b589b675a5e" + hash: "869f3d16e203ad47f1ae7ca83e369b75" } Frame { msec: 3632 - hash: "26fcc73f477db0ea731bc18b00b4c791" + hash: "9cc9cb20aab3369f4e3c5259d291708c" } Frame { msec: 3648 - hash: "8702e49f3f26e1e21970e78c8aa4040a" + hash: "a507b957bab3efe2023a65f8c8b3540a" } Frame { msec: 3664 - hash: "1a482a39d02779d8733e348b713f2312" + hash: "9fce2a6cddd8b06a80ce16599b56caa6" } Frame { msec: 3680 - hash: "c728cc4a8e4d0a8d983514f86a92eae0" + hash: "2f85d3064968e3e7b669f733fad58459" } Frame { msec: 3696 - hash: "82360ab373b08bf6a5d9e9ea9d0d18aa" + hash: "6dd6fad85dc5317a22a05a8486317767" } Frame { msec: 3712 - hash: "6231a4bce6cfc1e26a9606cc041acdbc" + hash: "b0faa2ec225cd96fb6d2fd05dc66bed1" } Frame { msec: 3728 - hash: "6e3b48862fc749f15aa2dec1c17d1de0" + hash: "3188219f095c2a9ac7c0f6034463d769" } Frame { msec: 3744 - hash: "6c9e79a5692a3810b2a9058790f54cd7" + hash: "b269e9fe4d14537c8bef0b66effe7319" } Frame { msec: 3760 - hash: "0652c67fedda0d5e55858ddefff2da9e" + hash: "b269e9fe4d14537c8bef0b66effe7319" } Frame { msec: 3776 - hash: "3b058c0efeb3a9da54a1de72a1792a83" + hash: "b269e9fe4d14537c8bef0b66effe7319" } Frame { msec: 3792 - hash: "96e6fb39c8dbfe4a00bf116bf80aac4d" + hash: "b269e9fe4d14537c8bef0b66effe7319" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 174; y: 234 + modifiers: 0 + sendToViewport: true } Frame { msec: 3808 - hash: "979c0c78c41e0f337cfe1b384fbbe51a" + hash: "9480eb8761d4ce90971903fcfab1e09e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 176; y: 236 + modifiers: 0 + sendToViewport: true } Frame { msec: 3824 - hash: "8be0d6987a6d12864f30336b249e4b16" + hash: "30a6ac631e1a3433f252f56ee4337cdc" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 179; y: 238 + modifiers: 0 + sendToViewport: true } Frame { msec: 3840 image: "test-pathview.3.png" } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 184; y: 243 + modifiers: 0 + sendToViewport: true + } Frame { msec: 3856 - hash: "31e665f804a52a4dc88eab5dba78ae5a" + hash: "ed07f9eea6cd2cd78a3e2479137f843d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 185; y: 244 + modifiers: 0 + sendToViewport: true } Frame { msec: 3872 - hash: "b7d4cf5a6a3ac79da3be101b50b38bc2" + hash: "7a5b201cc8725dbf15d89907fffd4ee3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 197; y: 250 + modifiers: 0 + sendToViewport: true } Frame { msec: 3888 - hash: "559b1b8467b611cdeb7f2ae660e3bf51" + hash: "bc2433b9e5f03cdbd35922d145a4ce59" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 213; y: 256 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 213; y: 256 + modifiers: 0 + sendToViewport: true } Frame { msec: 3904 - hash: "66abb5af85e793569382efb04744d0de" + hash: "d443f23aa5449d5f2b11c47feab5a0ae" } Frame { msec: 3920 - hash: "b64eff8bbea5a953d146333363825724" + hash: "c43f00d3ae4c8abbd20fc7157363b19d" } Frame { msec: 3936 - hash: "47b794c971c4d47baf15e1d63d65ac03" + hash: "22d6f5e9fdfe44e73020e6f504002b7c" } Frame { msec: 3952 - hash: "b3882fa14f3cb7428c660737656d7ea2" + hash: "4a9a285834aad5795adbefbe167028e2" } Frame { msec: 3968 - hash: "a6bd71c7d3a0f3f53674ea8e1334e560" + hash: "561a6c005950830acf2a45ab9a207346" } Frame { msec: 3984 - hash: "0926d3cd53aabb789686e34d91ef23dc" + hash: "b0387e3cfd455e1144d0bce9b51d6767" } Frame { msec: 4000 - hash: "914c4fa7264111b4a42c82a60701d652" + hash: "610237f67aa7e5f8d5b363b1612b4966" } Frame { msec: 4016 - hash: "84c1fa22440a61126b79c38605b6f9ca" + hash: "8034a5a7e0558d73051ea6c5bc750866" } Frame { msec: 4032 - hash: "b684fcf9f4725cfc02af0187454dfaf8" + hash: "0e4dc8a9c124b51c5f1225f4c6a9ec63" } Frame { msec: 4048 - hash: "2e94c1ca74af4eb836a0c505d131f263" + hash: "dc4e94522e8c64e9f2dbbf12a1f1aa3e" } Frame { msec: 4064 - hash: "5f04912674e1bcdb16176976d10ce995" + hash: "7466c076a95f2f6bbc2b6ce306773337" } Frame { msec: 4080 - hash: "aaf0bcef4a15aa1c699eaa1ce817c8ed" + hash: "787e2749905b97159fd0922c6cb388e2" } Frame { msec: 4096 - hash: "97fd5bdcfa367191fbd3689658ab3273" + hash: "1e510d01afad190ec21de253bd8b4821" } Frame { msec: 4112 - hash: "d76d6c59411636a0e9ac2e0c847b3fe3" + hash: "d740f40eb21be71ec70c00411d2ee76b" } Frame { msec: 4128 - hash: "9cb88a76c962623b1a9cf4e7093d6e54" + hash: "887a6f445af8fccf4932eed575a09cbb" } Frame { msec: 4144 - hash: "ec3d7075680296905b1bdd6fdd9fcc40" + hash: "fbb7e1d8cb9dd9016df0c33c69b1451a" } Frame { msec: 4160 - hash: "43c70dabc45ed059e8b876eb2ba5c66e" + hash: "5025e5f04a0807cb298037d6dda8c3af" } Frame { msec: 4176 - hash: "8f97ca5c3092a20009c5d00139105a22" + hash: "b9924f24f60c24087be165e8e385ebb0" } Frame { msec: 4192 - hash: "d0f225d4b03495218f7916698e254338" + hash: "2bab970787ac8b056401c8a73cb1a3c5" } Frame { msec: 4208 - hash: "f8725467353a8f27bc5570af157c93c7" + hash: "bda954bfafaa2915d760cf7a602b326f" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 187; y: 242 + modifiers: 0 + sendToViewport: true } Frame { msec: 4224 - hash: "749c8ca5c0a7774c81805b792e6b70e3" + hash: "9b109bb9e786a45a78849436ea32a484" } Frame { msec: 4240 - hash: "d353c4a8a5eecb1dce30f4a5b85b1ef4" + hash: "9b109bb9e786a45a78849436ea32a484" } Frame { msec: 4256 - hash: "a7105f3f1ddace730d0b4a12a3560208" + hash: "9b109bb9e786a45a78849436ea32a484" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 243 + modifiers: 0 + sendToViewport: true } Frame { msec: 4272 - hash: "918f480af8a35f6074ff1e202dae2660" + hash: "9b109bb9e786a45a78849436ea32a484" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 199; y: 252 + modifiers: 0 + sendToViewport: true } Frame { msec: 4288 - hash: "ed98d08eb30db1b41aaf2a58f3b59398" + hash: "cc3c61f49a7b3c395670b86c8078a337" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 223; y: 262 + modifiers: 0 + sendToViewport: true } Frame { msec: 4304 - hash: "c362cf053b3749a44d1fc33483f9952b" + hash: "464d09b53b78fe5474d9c1d022bee9fd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 251; y: 272 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 251; y: 272 + modifiers: 0 + sendToViewport: true } Frame { msec: 4320 - hash: "9b01b2c771ef86ff4a8ee3f6a4676e3c" + hash: "aab17f48ff506cda84543cbe0d8a1ce4" } Frame { msec: 4336 - hash: "70ccec3c9db95206b5589d43dcd52b13" + hash: "b7ba6c107f4085822a738120a913ba0c" } Frame { msec: 4352 - hash: "57e7397c6aadd0d4d5c9d9d5fcdd8fde" + hash: "751b79e202a70dcc9a86c3a1450172b8" } Frame { msec: 4368 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "bb03f969fd6987255ff113ef98ed2bb1" } Frame { msec: 4384 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "c33302b366441fa2d8753d5ce314cd37" } Frame { msec: 4400 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "4cdf32004382bcaca5a68cb92761caa2" } Frame { msec: 4416 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "d3fe18ea7dcbee0709a2041e50b87154" } Frame { msec: 4432 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "ac58a7adb0e7a354a058d7e9a7010c06" } Frame { msec: 4448 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "bdf8a8934a372ab49f4b6e9c95c7f591" } Frame { msec: 4464 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "d2e8b417b74ec5f6e23f0935a4d0aa98" } Frame { msec: 4480 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "0f94c6ca3ffbd730c2d813a991d21ca3" } Frame { msec: 4496 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "fb7728eebb2fa8f5255dc7435d20bbb6" } Frame { msec: 4512 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "c8211e8adcef525c296531a3d369f717" } Frame { msec: 4528 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "f24de36c85b87953977fa8b6456209dc" } Frame { msec: 4544 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "9ce7cf389af08cb1ba2534418f51857b" } Frame { msec: 4560 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "17d1f3ae0dba0bde222bb2483a403fbd" } Frame { msec: 4576 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "1748d75e229945012ece689b3784a02c" } Frame { msec: 4592 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "6786fa9e31d6f0a71a285c790aa5b008" } Frame { msec: 4608 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "f2a2ba33b41d8d522e8aab34c7da8f7b" } Frame { msec: 4624 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "aa53142d1b433ae9f748aef5cb7bef46" } Frame { msec: 4640 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "9c6802b2b0a419a4aaf9909c0f88c66e" } Frame { msec: 4656 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "206b11f2acd742d55ddd8acf7415bbeb" } Frame { msec: 4672 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "36876cf600cbf9c3b15f243617c9474e" } Frame { msec: 4688 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "1f5daf97294b490546657c5d9e12022e" } Frame { msec: 4704 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "637fc34fc2cf6139ba8809be54a2a0fc" } Frame { msec: 4720 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "9f824bd9e156980873619b1978f226bb" } Frame { msec: 4736 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "7002444129a5077ce5be44a5e2530328" } Frame { msec: 4752 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "42b7a44030ad4fc50ceb6a60bc97991e" } Frame { msec: 4768 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "ae986cac541033398076fb918136212e" } Frame { msec: 4784 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "6bdd9f764b1675e5b0feced8c2d831a6" } Frame { msec: 4800 @@ -1382,114 +1558,278 @@ VisualTest { } Frame { msec: 4816 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "07dfffe85adc4b52565e9ed156fa3ed6" } Frame { msec: 4832 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "c987bbe9fbf74bb6cf2686a5ee97c59a" } Frame { msec: 4848 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "19568159ec2282d5f150583baa0a8a94" } Frame { msec: 4864 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "5b176ef6bf70ff1a9805ca85b1b0c1a2" } Frame { msec: 4880 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "de716a8c15a46bf1621878794e968c53" } Frame { msec: 4896 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "241af9ab77c86cdb75f73339548604ad" } Frame { msec: 4912 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "afc7168ecb7fa7e3310ca818b75f7a1c" } Frame { msec: 4928 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "83bff911b502a34d139a724f686bb1f9" } Frame { msec: 4944 - hash: "299b24eae7720e1711744b23335bca8c" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "f4d3fb54ae5be2b13065cd4316b06837" } Frame { msec: 4960 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "d29c7dfedf9dd355d60e394528b3b938" } Frame { msec: 4976 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "ddf23d860ea71ab4b407de1a5f913f74" } Frame { msec: 4992 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "a0dbb6ecbfd08f9ebdd641fea5dae16c" } Frame { msec: 5008 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "7ed3170e55e3c3c9561959ad4c56d326" } Frame { msec: 5024 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "dbde5f508aabc2d1f2ccfaf135efeca9" } Frame { msec: 5040 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "72039739be41bf63b3959bdc90ce25bb" } Frame { msec: 5056 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "417789daefe6bc01320db7803ae31d61" } Frame { msec: 5072 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "7e57dbddaf379f4316182048fa9e2d6f" } Frame { msec: 5088 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "aeca9a4df94d2b9ac2a713531a7d98f1" } Frame { msec: 5104 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "98ad6694f23678819020d6ac0161651c" } Frame { msec: 5120 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "b6eba3872da19ec677eee419ae9cccbc" } Frame { msec: 5136 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "e824909bfe7b6d54773bb218ba93e884" } Frame { msec: 5152 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "3be04f3ff6d948538f4472bc6bfadb0f" } Frame { msec: 5168 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "e05ff21dda1d978a2ac2eedd3826b6f7" } Frame { msec: 5184 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "8ee970b2b197c8d879a7b1703cbd4dcd" } Frame { msec: 5200 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "e583845e7719d2776c6362c34f77937c" } Frame { msec: 5216 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5232 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5248 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5264 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5280 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5296 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5312 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5328 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5344 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5360 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5376 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5392 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5408 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5424 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5440 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5456 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5472 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5488 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5504 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5520 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5536 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5552 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5568 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5584 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5600 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5616 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5632 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5648 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5664 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5680 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5696 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5712 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5728 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5744 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5760 + image: "test-pathview.5.png" + } + Frame { + msec: 5776 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5792 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5808 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5824 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5840 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5856 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5872 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5888 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5904 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml index 3bcab5a..e6e1a70 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml @@ -59,4 +59,9 @@ Rectangle { PathAttribute { name: "angle"; value: 45 } } } + + Column { + Rectangle { width: 20; height: 20; color: "red"; opacity: photoPathView.moving ? 1 : 0 } + Rectangle { width: 20; height: 20; color: "blue"; opacity: photoPathView.flicking ? 1 : 0 } + } } diff --git a/tests/auto/mediaobject/tst_mediaobject.cpp b/tests/auto/mediaobject/tst_mediaobject.cpp index 2f98521..322e2e4 100644 --- a/tests/auto/mediaobject/tst_mediaobject.cpp +++ b/tests/auto/mediaobject/tst_mediaobject.cpp @@ -201,9 +201,6 @@ void tst_MediaObject::stateChanged(Phonon::State newstate, Phonon::State oldstat void tst_MediaObject::testPlayFromResource() { -#ifdef Q_OS_SYMBIAN - QSKIP("Not implemented yet.", SkipAll); -#else MediaObject media; media.setCurrentSource(QString(MEDIA_FILEPATH)); QVERIFY(media.state() != Phonon::ErrorState); @@ -214,7 +211,6 @@ void tst_MediaObject::testPlayFromResource() if (media.state() != Phonon::PlayingState) QTest::waitForSignal(&media, SIGNAL(stateChanged(Phonon::State, Phonon::State)), 10000); QCOMPARE(media.state(), Phonon::PlayingState); -#endif } void tst_MediaObject::testPlayIllegalFile() diff --git a/tests/auto/qdatetime/tst_qdatetime.cpp b/tests/auto/qdatetime/tst_qdatetime.cpp index 1a82a4c..1841487 100644 --- a/tests/auto/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/qdatetime/tst_qdatetime.cpp @@ -959,7 +959,9 @@ void tst_QDateTime::currentDateTime() #endif QDateTime upperBound; upperBound.setTime_t(buf2); - upperBound = upperBound.addSecs(1); + // Note we must add 2 seconds here because time() may return up to + // 1 second difference from the more accurate method used by QDateTime::currentDateTime() + upperBound = upperBound.addSecs(2); QString details = QString("\n" "lowerBound: %1\n" @@ -1010,7 +1012,9 @@ void tst_QDateTime::currentDateTimeUtc() #endif QDateTime upperBound; upperBound.setTime_t(buf2); - upperBound = upperBound.addSecs(1); + // Note we must add 2 seconds here because time() may return up to + // 1 second difference from the more accurate method used by QDateTime::currentDateTime() + upperBound = upperBound.addSecs(2); QString details = QString("\n" "lowerBound: %1\n" diff --git a/tests/auto/qdom/qdom.pro b/tests/auto/qdom/qdom.pro index 5434ada..9040b91 100644 --- a/tests/auto/qdom/qdom.pro +++ b/tests/auto/qdom/qdom.pro @@ -9,7 +9,9 @@ wince*|symbian: { addFiles.path = . DEPLOYMENT += addFiles - DEPLOYMENT_PLUGIN += qcncodecs qjpcodecs qkrcodecs qtwcodecs + wince*|qt_not_deployed { + DEPLOYMENT_PLUGIN += qcncodecs qjpcodecs qkrcodecs qtwcodecs + } !symbian:DEFINES += SRCDIR=\\\"\\\" } else { diff --git a/tests/auto/qdom/tst_qdom.cpp b/tests/auto/qdom/tst_qdom.cpp index 0f6cdaa..8bf7620 100644 --- a/tests/auto/qdom/tst_qdom.cpp +++ b/tests/auto/qdom/tst_qdom.cpp @@ -1776,6 +1776,7 @@ void tst_QDom::crashInSetContent() const QDomImplementation::setInvalidDataPolicy(QDomImplementation::ReturnNullNode); QDomDocument docImport; + QCOMPARE(docImport.setContent(QLatin1String("<a:>text</a:>"), true), false); QVERIFY(docImport.setContent(QLatin1String("<?xml version=\"1.0\"?><e/>"))); } diff --git a/tests/auto/qfile/qfile.pro b/tests/auto/qfile/qfile.pro index 0383e30..727f660 100644 --- a/tests/auto/qfile/qfile.pro +++ b/tests/auto/qfile/qfile.pro @@ -1,5 +1,5 @@ TEMPLATE = subdirs -wince*:{ +wince*|symbian:{ SUBDIRS = test } else { SUBDIRS = test stdinprocess diff --git a/tests/auto/qfileinfo/qfileinfo.pro b/tests/auto/qfileinfo/qfileinfo.pro index ef5ed22..30656e2 100644 --- a/tests/auto/qfileinfo/qfileinfo.pro +++ b/tests/auto/qfileinfo/qfileinfo.pro @@ -16,6 +16,7 @@ wince*:|symbian: { symbian { TARGET.CAPABILITY=AllFiles LIBS *= -lefsrv + INCLUDEPATH *= $$MW_LAYER_SYSTEMINCLUDE # Needed for e32svr.h in S^3 envs } # support for running test from shadow build directory diff --git a/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp b/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp index 55d75af..7346f07 100644 --- a/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp +++ b/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp @@ -108,12 +108,13 @@ private slots: void avoidRecursionInInsertItem(); void styleInfoLeak(); void task236367_maxSizeHint(); + void heightForWidth(); }; class RectWidget : public QGraphicsWidget { public: - RectWidget(QGraphicsItem *parent = 0) : QGraphicsWidget(parent){} + RectWidget(QGraphicsItem *parent = 0) : QGraphicsWidget(parent), m_fnConstraint(0) {} void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { @@ -126,9 +127,12 @@ public: QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const { - if (m_sizeHints[which].isValid()) { + if (constraint.width() < 0 && constraint.height() < 0 && m_sizeHints[which].isValid()) { return m_sizeHints[which]; } + if (m_fnConstraint) { + return m_fnConstraint(which, constraint); + } return QGraphicsWidget::sizeHint(which, constraint); } @@ -137,7 +141,13 @@ public: updateGeometry(); } + void setConstraintFunction(QSizeF (*fnConstraint)(Qt::SizeHint, const QSizeF &)) { + m_fnConstraint = fnConstraint; + } + QSizeF m_sizeHints[Qt::NSizeHints]; + QSizeF (*m_fnConstraint)(Qt::SizeHint, const QSizeF &); + }; struct ItemDesc @@ -147,7 +157,8 @@ struct ItemDesc m_rowSpan(1), m_colSpan(1), m_sizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred)), - m_align(0) + m_align(0), + m_fnConstraint(0) { } @@ -214,8 +225,20 @@ struct ItemDesc return (*this); } + ItemDesc &heightForWidth(QSizeF (*fnConstraint)(Qt::SizeHint, const QSizeF &)) { + m_fnConstraint = fnConstraint; + m_constraintOrientation = Qt::Vertical; + return (*this); + } + void apply(QGraphicsGridLayout *layout, QGraphicsWidget *item) { - item->setSizePolicy(m_sizePolicy); + QSizePolicy sp = m_sizePolicy; + if (m_fnConstraint) { + sp.setHeightForWidth(m_constraintOrientation == Qt::Vertical); + //sp.setWidthForHeight(m_constraintOrientation == Qt::Horizontal); + } + + item->setSizePolicy(sp); for (int i = 0; i < Qt::NSizeHints; ++i) { if (!m_sizes[i].isValid()) continue; @@ -234,6 +257,7 @@ struct ItemDesc break; } } + layout->addItem(item, m_pos.first, m_pos.second, m_rowSpan, m_colSpan); layout->setAlignment(item, m_align); } @@ -241,6 +265,7 @@ struct ItemDesc void apply(QGraphicsGridLayout *layout, RectWidget *item) { for (int i = 0; i < Qt::NSizeHints; ++i) item->setSizeHint((Qt::SizeHint)i, m_sizeHints[i]); + item->setConstraintFunction(m_fnConstraint); apply(layout, static_cast<QGraphicsWidget*>(item)); } @@ -252,6 +277,9 @@ struct ItemDesc QSizeF m_sizeHints[Qt::NSizeHints]; QSizeF m_sizes[Qt::NSizeHints]; Qt::Alignment m_align; + + Qt::Orientation m_constraintOrientation; + QSizeF (*m_fnConstraint)(Qt::SizeHint, const QSizeF &); }; typedef QList<ItemDesc> ItemList; @@ -486,12 +514,12 @@ void tst_QGraphicsGridLayout::alignment() widget->resize(widget->effectiveSizeHint(Qt::MaximumSize)); QApplication::processEvents(); - QCOMPARE(layout->itemAt(0,0)->geometry(), QRectF(0, 0, 50, 25)); - QCOMPARE(layout->itemAt(1,0)->geometry(), QRectF(0, 25, 50, 25)); - QCOMPARE(layout->itemAt(0,1)->geometry(), QRectF(125, 0, 50, 25)); - QCOMPARE(layout->itemAt(1,1)->geometry(), QRectF(125, 25, 50, 25)); - QCOMPARE(layout->itemAt(0,2)->geometry(), QRectF(250, 0, 50, 25)); - QCOMPARE(layout->itemAt(1,2)->geometry(), QRectF(250, 25, 50, 25)); + QCOMPARE(layout->itemAt(0,0)->geometry(), QRectF(0, 0, 50, 50)); + QCOMPARE(layout->itemAt(1,0)->geometry(), QRectF(0, 50, 50, 50)); + QCOMPARE(layout->itemAt(0,1)->geometry(), QRectF(125, 0, 50, 50)); + QCOMPARE(layout->itemAt(1,1)->geometry(), QRectF(125, 50, 50, 50)); + QCOMPARE(layout->itemAt(0,2)->geometry(), QRectF(250, 0, 50, 50)); + QCOMPARE(layout->itemAt(1,2)->geometry(), QRectF(250, 50, 50, 50)); delete widget; } @@ -545,12 +573,12 @@ void tst_QGraphicsGridLayout::columnAlignment() | HCenter | Right | Left | +---------------------------------+ */ - QCOMPARE(layout->itemAt(0,0)->geometry(), QRectF(0, 0, 50, 25)); - QCOMPARE(layout->itemAt(1,0)->geometry(), QRectF(25, 26, 50, 25)); // item is king - QCOMPARE(layout->itemAt(0,1)->geometry(), QRectF(126, 0, 50, 25)); - QCOMPARE(layout->itemAt(1,1)->geometry(), QRectF(151, 26, 50, 25)); // item is king - QCOMPARE(layout->itemAt(0,2)->geometry(), QRectF(252, 0, 50, 25)); - QCOMPARE(layout->itemAt(1,2)->geometry(), QRectF(202, 26, 50, 25)); // item is king + QCOMPARE(layout->itemAt(0,0)->geometry(), QRectF(0, 0, 50, 50)); + QCOMPARE(layout->itemAt(1,0)->geometry(), QRectF(25, 51, 50, 50)); // item is king + QCOMPARE(layout->itemAt(0,1)->geometry(), QRectF(126, 0, 50, 50)); + QCOMPARE(layout->itemAt(1,1)->geometry(), QRectF(151, 51, 50, 50)); // item is king + QCOMPARE(layout->itemAt(0,2)->geometry(), QRectF(252, 0, 50, 50)); + QCOMPARE(layout->itemAt(1,2)->geometry(), QRectF(202, 51, 50, 50)); // item is king delete widget; } @@ -2143,6 +2171,17 @@ void tst_QGraphicsGridLayout::alignment2() delete widget; } +static QSizeF hfw1(Qt::SizeHint, const QSizeF &constraint) +{ + QSizeF result(constraint); + if (constraint.width() < 0 && constraint.height() < 0) { + return QSizeF(50, 400); + } else if (constraint.width() >= 0) { + result.setHeight(20000./constraint.width()); + } + return result; +} + void tst_QGraphicsGridLayout::geometries_data() { @@ -2172,6 +2211,186 @@ void tst_QGraphicsGridLayout::geometries_data() << QRectF(0, 0, 60,10) << QRectF(0, 10, 60,10) ); + // change layout height and verify + QTest::newRow("hfw-h401") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(0,1) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,1) + .minSize(QSizeF(40,40)) + .preferredSize(QSizeF(50,400)) + .maxSize(QSizeF(500, 500)) + .heightForWidth(hfw1) + ) + << QSizeF(100, 401) + << (RectList() + << QRectF(0, 0, 50, 1) << QRectF(50, 0, 50, 1) + << QRectF(0, 1, 50,100) << QRectF(50, 1, 50,400) + ); + + + QTest::newRow("hfw-h408") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(0,1) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,1) + .minSize(QSizeF(40,40)) + .preferredSize(QSizeF(50,400)) + .maxSize(QSizeF(500, 500)) + .heightForWidth(hfw1) + ) + << QSizeF(100, 408) + << (RectList() + << QRectF(0, 0, 50, 8) << QRectF(50, 0, 50, 8) + << QRectF(0, 8, 50,100) << QRectF(50, 8, 50,400) + ); + + QTest::newRow("hfw-h410") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(0,1) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,1) + .minSize(QSizeF(40,40)) + .preferredSize(QSizeF(50,400)) + .maxSize(QSizeF(500, 500)) + .heightForWidth(hfw1) + ) + << QSizeF(100, 410) + << (RectList() + << QRectF(0, 0, 50,10) << QRectF(50, 0, 50,10) + << QRectF(0, 10, 50,100) << QRectF(50, 10, 50,400) + ); + + QTest::newRow("hfw-h470") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(0,1) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,1) + .minSize(QSizeF(40,40)) + .preferredSize(QSizeF(50,400)) + .maxSize(QSizeF(500, 500)) + .heightForWidth(hfw1) + ) + << QSizeF(100, 470) + << (RectList() + << QRectF(0, 0, 50,70) << QRectF(50, 0, 50,70) + << QRectF(0, 70, 50,100) << QRectF(50, 70, 50,400) + ); + + + // change layout width and verify + QTest::newRow("hfw-w100") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(0,1) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,1) + .minSize(QSizeF(40,40)) + .preferredSize(QSizeF(50,400)) + .maxSize(QSizeF(5000, 5000)) + .heightForWidth(hfw1) + ) + << QSizeF(100, 401) + << (RectList() + << QRectF( 0, 0, 50, 1) << QRectF( 50, 0, 50, 1) + << QRectF( 0, 1, 50, 100) << QRectF( 50, 1, 50, 400) + ); + + QTest::newRow("hfw-w160") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(0,1) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,1) + .minSize(QSizeF(40,40)) + .preferredSize(QSizeF(50,400)) + .maxSize(QSizeF(5000, 5000)) + .heightForWidth(hfw1) + ) + << QSizeF(160, 401) + << (RectList() + << QRectF( 0, 0, 80, 100) << QRectF( 80, 0, 80, 100) + << QRectF( 0, 100, 80, 100) << QRectF( 80, 100, 80, 250) + ); + + + QTest::newRow("hfw-w500") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(0,1) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,1) + .minSize(QSizeF(40,40)) + .preferredSize(QSizeF(50,400)) + .maxSize(QSizeF(5000, 5000)) + .heightForWidth(hfw1) + ) + << QSizeF(500, 401) + << (RectList() + << QRectF( 0, 0, 100, 100) << QRectF(100, 0, 100, 100) + << QRectF( 0, 100, 100, 100) << QRectF(100, 100, 400, 50) + ); + } void tst_QGraphicsGridLayout::geometries() @@ -2242,6 +2461,143 @@ void tst_QGraphicsGridLayout::task236367_maxSizeHint() QCOMPARE(widget->size(), QSizeF(w, h)); } +/* +static qreal hfw(qreal w) +{ + if (w == 0) + return 20000; + return 20000/w; +} +*/ +static QSizeF hfw(Qt::SizeHint /*which*/, const QSizeF &constraint) +{ + QSizeF result(constraint); + const qreal cw = constraint.width(); + const qreal ch = constraint.height(); + if (cw < 0 && ch < 0) { + return QSizeF(200, 100); + } else if (cw >= 0) { + result.setHeight(20000./cw); + } else if (cw == 0) { + result.setHeight(20000); + } else if (ch >= 0) { + result.setWidth(20000./ch); + } else if (ch == 0) { + result.setWidth(20000); + } + + return result; +} + +static qreal growthFactorBelowPreferredSize(qreal desired, qreal sumAvailable, qreal sumDesired) +{ + Q_ASSERT(sumDesired != 0.0); + return desired * qPow(sumAvailable / sumDesired, desired / sumDesired); +} + +static void expectedWidth(qreal minSize1, qreal prefSize1, + qreal minSize2, qreal prefSize2, + qreal targetSize, qreal *width1, qreal *width2) +{ + qreal sumAvail,factor1,factor2; + // stretch behaviour is different below and above preferred size... + if (targetSize < prefSize1 + prefSize2) { + sumAvail = targetSize - minSize1 - minSize2; + const qreal desired1 = prefSize1 - minSize1; + const qreal desired2 = prefSize2 - minSize2; + const qreal sumDesired = desired1 + desired2; + factor1 = growthFactorBelowPreferredSize(desired1, sumAvail, sumDesired); + factor2 = growthFactorBelowPreferredSize(desired2, sumAvail, sumDesired); + const qreal sumFactors = factor1 + factor2; + *width1 = sumAvail*factor1/sumFactors + minSize1; + *width2 = sumAvail*factor2/sumFactors + minSize2; + } else { + sumAvail = targetSize - prefSize1 - prefSize2; + factor1 = prefSize1; + factor2 = prefSize2; + const qreal sumFactors = factor1 + factor2; + *width1 = sumAvail*factor1/sumFactors + prefSize1; + *width2 = sumAvail*factor2/sumFactors + prefSize2; + } +} + + +bool qFuzzyCompare(const QSizeF &a, const QSizeF &b) +{ + return qFuzzyCompare(a.width(), b.width()) && qFuzzyCompare(a.height(), b.height()); +} + +void tst_QGraphicsGridLayout::heightForWidth() +{ + QGraphicsWidget *widget = new QGraphicsWidget; + QGraphicsGridLayout *layout = new QGraphicsGridLayout; + widget->setLayout(layout); + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); + RectWidget *w00 = new RectWidget; + w00->setSizeHint(Qt::MinimumSize, QSizeF(1,1)); + w00->setSizeHint(Qt::PreferredSize, QSizeF(10,10)); + w00->setSizeHint(Qt::MaximumSize, QSizeF(100,100)); + layout->addItem(w00, 0, 0); + + RectWidget *w01 = new RectWidget; + w01->setSizeHint(Qt::MinimumSize, QSizeF(1,1)); + w01->setSizeHint(Qt::PreferredSize, QSizeF(10,10)); + w01->setSizeHint(Qt::MaximumSize, QSizeF(100,100)); + layout->addItem(w01, 0, 1); + + RectWidget *w10 = new RectWidget; + w10->setSizeHint(Qt::MinimumSize, QSizeF(1,1)); + w10->setSizeHint(Qt::PreferredSize, QSizeF(10,10)); + w10->setSizeHint(Qt::MaximumSize, QSizeF(100,100)); + layout->addItem(w10, 1, 0); + + RectWidget *w11 = new RectWidget; + w11->setSizeHint(Qt::MinimumSize, QSizeF(1,1)); + w11->setSizeHint(Qt::MaximumSize, QSizeF(30000,30000)); + w11->setConstraintFunction(hfw); + QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::Preferred); + sp.setHeightForWidth(true); + w11->setSizePolicy(sp); + layout->addItem(w11, 1, 1); + + QSizeF prefSize = layout->effectiveSizeHint(Qt::PreferredSize, QSizeF(-1, -1)); + QCOMPARE(prefSize, QSizeF(10+200, 10+100)); + + QCOMPARE(layout->effectiveSizeHint(Qt::MinimumSize, QSizeF(2, -1)), QSizeF(2, 20001)); + QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize, QSizeF(2, -1)), QSizeF(2, 20010)); + QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(2, -1)), QSizeF(2, 20100)); + qreal width1; + qreal width2; + expectedWidth(1, 10, 1, 200, 20, &width1, &width2); + QSizeF expectedSize = hfw(Qt::MinimumSize, QSizeF(width2, -1)) + QSizeF(width1, 1); + QCOMPARE(layout->effectiveSizeHint(Qt::MinimumSize, QSizeF(20, -1)), expectedSize); + expectedSize.rheight()+=9; + QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize, QSizeF(20, -1)), expectedSize); + expectedSize.rheight()+=90; + QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(20, -1)), expectedSize); + + expectedWidth(1, 10, 1, 200, 300, &width1, &width2); + expectedSize = hfw(Qt::MinimumSize, QSizeF(width2, -1)) + QSizeF(width1, 1); + QCOMPARE(layout->effectiveSizeHint(Qt::MinimumSize, QSizeF(300, -1)), expectedSize); + expectedSize.rheight()+=9; + QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize, QSizeF(300, -1)), expectedSize); + // the height of the hfw widget is shorter than the one to the left, which is 100, so + // the total height of the last row is 100 (which leaves the layout height to be 200) + QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(300, -1)), QSizeF(300, 200)); + + // the hfw item is shorter than the item to the left + expectedWidth(1, 10, 1, 200, 500, &width1, &width2); + expectedSize = hfw(Qt::MinimumSize, QSizeF(width2, -1)) + QSizeF(width1, 1); + QCOMPARE(layout->effectiveSizeHint(Qt::MinimumSize, QSizeF(500, -1)), expectedSize); + expectedSize.rheight()+=9; + QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize, QSizeF(500, -1)), expectedSize); + // the height of the hfw widget is shorter than the one to the left, which is 100, so + // the total height of the last row is 100 (which leaves the layout height to be 200) + QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(500, -1)), QSizeF(500, 200)); + +} + QTEST_MAIN(tst_QGraphicsGridLayout) #include "tst_qgraphicsgridlayout.moc" diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp index a771332..bda22eb 100644 --- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp +++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp @@ -111,6 +111,7 @@ private slots: void fontPropagationSceneChange(); void geometry_data(); void geometry(); + void geometryChanged(); void width(); void height(); void getContentsMargins_data(); @@ -776,11 +777,28 @@ void tst_QGraphicsWidget::geometry() QFETCH(QSizeF, size); widget.setPos(pos); widget.resize(size); - if (!size.isNull()) + if (!size.isNull() && !pos.isNull()) + QCOMPARE(spy.count(), 2); + if (!size.isNull() && pos.isNull()) QCOMPARE(spy.count(), 1); QCOMPARE(widget.geometry(), QRectF(pos, size)); } +void tst_QGraphicsWidget::geometryChanged() +{ + QGraphicsWidget w; + w.setGeometry(0, 0, 200, 200); + QCOMPARE(w.geometry(), QRectF(0, 0, 200, 200)); + QSignalSpy spy(&w, SIGNAL(geometryChanged())); + w.setGeometry(0, 0, 100, 100); + QCOMPARE(spy.count(), 1); + QCOMPARE(w.geometry(), QRectF(0, 0, 100, 100)); + w.setPos(10, 10); + QCOMPARE(spy.count(), 2); + QCOMPARE(w.geometry(), QRectF(10, 10, 100, 100)); + +} + void tst_QGraphicsWidget::width() { QGraphicsWidget w; diff --git a/tests/auto/qimage/tst_qimage.cpp b/tests/auto/qimage/tst_qimage.cpp index 63320b2..46bc6e7 100644 --- a/tests/auto/qimage/tst_qimage.cpp +++ b/tests/auto/qimage/tst_qimage.cpp @@ -145,6 +145,9 @@ private slots: void fillColor(); void fillColorWithAlpha(); + + void rgbSwapped_data(); + void rgbSwapped(); }; tst_QImage::tst_QImage() @@ -1932,6 +1935,68 @@ void tst_QImage::fillColorWithAlpha() QCOMPARE(argb32pm.pixel(0, 0), 0x7f7f0000u); } +void tst_QImage::rgbSwapped_data() +{ + QTest::addColumn<QImage::Format>("format"); + + QTest::newRow("Format_Indexed8") << QImage::Format_Indexed8; + QTest::newRow("Format_RGB32") << QImage::Format_RGB32; + QTest::newRow("Format_ARGB32") << QImage::Format_ARGB32; + QTest::newRow("Format_ARGB32_Premultiplied") << QImage::Format_ARGB32_Premultiplied; + QTest::newRow("Format_RGB16") << QImage::Format_RGB16; + QTest::newRow("Format_ARGB8565_Premultiplied") << QImage::Format_ARGB8565_Premultiplied; + QTest::newRow("Format_ARGB6666_Premultiplied") << QImage::Format_ARGB6666_Premultiplied; + QTest::newRow("Format_ARGB4444_Premultiplied") << QImage::Format_ARGB4444_Premultiplied; + QTest::newRow("Format_RGB666") << QImage::Format_RGB666; + QTest::newRow("Format_RGB555") << QImage::Format_RGB555; + QTest::newRow("Format_ARGB8555_Premultiplied") << QImage::Format_ARGB8555_Premultiplied; + QTest::newRow("Format_RGB888") << QImage::Format_RGB888; + QTest::newRow("Format_RGB444") << QImage::Format_RGB444; +} + +void tst_QImage::rgbSwapped() +{ + QFETCH(QImage::Format, format); + + QImage image(100, 1, format); + image.fill(0); + + QVector<QColor> testColor(image.width()); + + for (int i = 0; i < image.width(); ++i) + testColor[i] = QColor(i, 10 + i, 20 + i * 2, 30 + i); + + if (format != QImage::Format_Indexed8) { + QPainter p(&image); + p.setCompositionMode(QPainter::CompositionMode_Source); + for (int i = 0; i < image.width(); ++i) + p.fillRect(QRect(i, 0, 1, 1), testColor[i].rgb()); + } else { + image.setColorCount(image.width()); + for (int i = 0; i < image.width(); ++i) { + image.setColor(0, testColor[i].rgba()); + image.setPixel(i, 0, i); + } + } + + QImage imageSwapped = image.rgbSwapped(); + + for (int i = 0; i < image.width(); ++i) { + QColor referenceColor = QColor(image.pixel(i, 0)); + QColor swappedColor = QColor(imageSwapped.pixel(i, 0)); + + QCOMPARE(swappedColor.alpha(), referenceColor.alpha()); + QCOMPARE(swappedColor.red(), referenceColor.blue()); + QCOMPARE(swappedColor.green(), referenceColor.green()); + QCOMPARE(swappedColor.blue(), referenceColor.red()); + } + + QImage imageSwappedTwice = imageSwapped.rgbSwapped(); + + QCOMPARE(image, imageSwappedTwice); + + QCOMPARE(memcmp(image.constBits(), imageSwappedTwice.constBits(), image.numBytes()), 0); +} QTEST_MAIN(tst_QImage) #include "tst_qimage.moc" diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp index 330f803..425ac89 100644 --- a/tests/auto/qlistview/tst_qlistview.cpp +++ b/tests/auto/qlistview/tst_qlistview.cpp @@ -45,6 +45,7 @@ #include <qabstractitemmodel.h> #include <qapplication.h> #include <qlistview.h> +#include <qlistwidget.h> #include <qitemdelegate.h> #include <qstandarditemmodel.h> #include <qstringlistmodel.h> @@ -125,6 +126,8 @@ private slots: void taskQTBUG_5877_skippingItemInPageDownUp(); void taskQTBUG_9455_wrongScrollbarRanges(); void styleOptionViewItem(); + void taskQTBUG_12308_artihmeticException(); + void taskQTBUG_12308_wrongFlowLayout(); }; // Testing get/set functions @@ -1653,8 +1656,8 @@ void tst_QListView::task254449_draggingItemToNegativeCoordinates() //we'll make sure the item is repainted delegate.numPaints = 0; QApplication::processEvents(); + QTRY_COMPARE(delegate.numPaints, 1); QCOMPARE(list.visualRect(index).topLeft(), topLeft); - QCOMPARE(delegate.numPaints, 1); } @@ -2002,5 +2005,53 @@ void tst_QListView::styleOptionViewItem() QApplication::processEvents(); } +void tst_QListView::taskQTBUG_12308_artihmeticException() +{ + QListWidget lw; + lw.setLayoutMode(QListView::Batched); + lw.setViewMode(QListView::IconMode); + for (int i = 0; i < lw.batchSize() + 1; i++) { + QListWidgetItem *item = new QListWidgetItem(); + item->setText(QString("Item %L1").arg(i)); + lw.addItem(item); + item->setHidden(true); + } + lw.show(); + QTest::qWaitForWindowShown(&lw); + // No crash, it's all right. +} + +class Delegate12308 : public QStyledItemDelegate +{ + Q_OBJECT +public: + Delegate12308(QObject *parent = 0) : QStyledItemDelegate(parent) + { } + + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const + { + QVERIFY(option.rect.topLeft() != QPoint(-1, -1)); + QStyledItemDelegate::paint(painter, option, index); + } +}; + +void tst_QListView::taskQTBUG_12308_wrongFlowLayout() +{ + QListWidget lw; + Delegate12308 delegate; + lw.setLayoutMode(QListView::Batched); + lw.setViewMode(QListView::IconMode); + lw.setItemDelegate(&delegate); + for (int i = 0; i < lw.batchSize() + 1; i++) { + QListWidgetItem *item = new QListWidgetItem(); + item->setText(QString("Item %L1").arg(i)); + lw.addItem(item); + if (!item->text().contains(QString::fromAscii("1"))) + item->setHidden(true); + } + lw.show(); + QTest::qWaitForWindowShown(&lw); +} + QTEST_MAIN(tst_QListView) #include "tst_qlistview.moc" diff --git a/tests/auto/qlocale/test/test.pro b/tests/auto/qlocale/test/test.pro index e33d0fe..6512e19 100644 --- a/tests/auto/qlocale/test/test.pro +++ b/tests/auto/qlocale/test/test.pro @@ -37,3 +37,5 @@ symbian:contains(S60_VERSION,3.2) { "$${LITERAL_HASH}endif" MMP_RULES += custom_paged_rule } + +symbian: INCLUDEPATH *= $$MW_LAYER_SYSTEMINCLUDE # Needed for e32svr.h in S^3 envs diff --git a/tests/auto/qmetaobject/tst_qmetaobject.cpp b/tests/auto/qmetaobject/tst_qmetaobject.cpp index df75ae8..ff39842 100644 --- a/tests/auto/qmetaobject/tst_qmetaobject.cpp +++ b/tests/auto/qmetaobject/tst_qmetaobject.cpp @@ -850,6 +850,8 @@ void tst_QMetaObject::normalizedSignature_data() QTest::newRow("const12") << "void foo(Foo<Bar>const*const *const)" << "void foo(Foo<Bar>*const*const)"; QTest::newRow("const13") << "void foo(const Foo<Bar>&)" << "void foo(Foo<Bar>)"; QTest::newRow("const14") << "void foo(Foo<Bar>const&)" << "void foo(Foo<Bar>)"; + + QTest::newRow("invalid1") << "a( b" << "a(b"; } void tst_QMetaObject::normalizedSignature() @@ -857,7 +859,7 @@ void tst_QMetaObject::normalizedSignature() QFETCH(QString, signature); QFETCH(QString, result); - QCOMPARE(QString::fromLatin1(QMetaObject::normalizedSignature(signature.toLatin1())), result); + QCOMPARE(QMetaObject::normalizedSignature(signature.toLatin1()), result.toLatin1()); } void tst_QMetaObject::normalizedType_data() @@ -895,7 +897,7 @@ void tst_QMetaObject::normalizedType() QFETCH(QString, type); QFETCH(QString, result); - QCOMPARE(QString::fromLatin1(QMetaObject::normalizedType(type.toLatin1())), result); + QCOMPARE(QMetaObject::normalizedType(type.toLatin1()), result.toLatin1()); } void tst_QMetaObject::customPropertyType() diff --git a/tests/auto/qnetworkreply/test/test.pro b/tests/auto/qnetworkreply/test/test.pro index b9ece38..6e1b1e3 100644 --- a/tests/auto/qnetworkreply/test/test.pro +++ b/tests/auto/qnetworkreply/test/test.pro @@ -31,7 +31,7 @@ symbian:{ DEPLOYMENT += certFiles # Symbian toolchain does not support correct include semantics - INCPATH+=..\\..\\..\\..\\include\\QtNetwork\\private + INCLUDEPATH+=..\\..\\..\\..\\include\\QtNetwork\\private # bigfile test case requires more heap TARGET.EPOCHEAPSIZE="0x100 0x1000000" TARGET.CAPABILITY="ALL -TCB" diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp index 9ed212f..a35e38e 100644 --- a/tests/auto/qpainter/tst_qpainter.cpp +++ b/tests/auto/qpainter/tst_qpainter.cpp @@ -118,10 +118,12 @@ private slots: void drawLine_task190634(); void drawLine_task229459(); void drawLine_task234891(); + void drawHorizontalLineF(); void drawRect_data() { fillData(); } void drawRect(); void drawRect2(); + void drawRectFHorizontalLine(); void fillRect(); void fillRect2(); @@ -253,6 +255,7 @@ private slots: void setPenColorOnPixmap(); void QTBUG5939_attachPainterPrivate(); + void drawHorizontalLine(); private: void fillData(); @@ -1220,6 +1223,26 @@ void tst_QPainter::drawLine_task234891() QCOMPARE(expected, img); } +void tst_QPainter::drawHorizontalLineF() +{ + QPixmap pixmap(100, 3); + pixmap.fill(); + + { + QPainter painter(&pixmap); + painter.drawLine(QLineF(1.5f, 1.5f, 98.5f, 1.5f)); + } + + QImage refImage(100, 3, QImage::Format_ARGB32); + refImage.fill(0xFFFFFFFF); + { + QPainter painter(&refImage); + painter.drawLine(QLineF(1.5f, 1.5f, 98.5f, 1.5f)); + } + + QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32), refImage); +} + void tst_QPainter::drawLine_task216948() { QImage img(1, 10, QImage::Format_ARGB32_Premultiplied); @@ -1304,6 +1327,26 @@ void tst_QPainter::drawRect2() } } +void tst_QPainter::drawRectFHorizontalLine() +{ + QPixmap pixmap(100, 3); + pixmap.fill(); + + { + QPainter painter(&pixmap); + painter.drawRect(QRectF(1.5f, 1.5f, 98.5f, 1.5f)); + } + + QImage refImage(100, 3, QImage::Format_ARGB32); + refImage.fill(0xFFFFFFFF); + { + QPainter painter(&refImage); + painter.drawRect(QRectF(1.5f, 1.5f, 98.5f, 1.5f)); + } + + QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32), refImage); +} + void tst_QPainter::fillRect() { QImage image(100, 100, QImage::Format_ARGB32_Premultiplied); @@ -4559,6 +4602,28 @@ void tst_QPainter::clipBoundingRect() } +void tst_QPainter::drawHorizontalLine() +{ + QPixmap pixmap(100, 3); + pixmap.fill(); + + { + QPainter painter(&pixmap); + painter.translate(0.3, 0.3); + painter.drawLine(QLine(1, 1, 99, 1)); + } + + QImage refImage(100, 3, QImage::Format_ARGB32); + refImage.fill(0xFFFFFFFF); + { + QPainter painter(&refImage); + painter.translate(0.3, 0.3); + painter.drawLine(QLine(1, 1, 99, 1)); + } + + QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32), refImage); +} + QTEST_MAIN(tst_QPainter) #include "tst_qpainter.moc" diff --git a/tests/auto/qpluginloader/lib/lib.pro b/tests/auto/qpluginloader/lib/lib.pro index 96a9732..ce9bf13 100644 --- a/tests/auto/qpluginloader/lib/lib.pro +++ b/tests/auto/qpluginloader/lib/lib.pro @@ -2,7 +2,7 @@ TEMPLATE = lib CONFIG += dll CONFIG -= staticlib SOURCES = mylib.c -TARGET = mylib +TARGET = tst_qpluginloaderlib DESTDIR = ../bin QT = core diff --git a/tests/auto/qpluginloader/tst/tst.pro b/tests/auto/qpluginloader/tst/tst.pro index 2de0912..2d757e7 100644 --- a/tests/auto/qpluginloader/tst/tst.pro +++ b/tests/auto/qpluginloader/tst/tst.pro @@ -20,7 +20,7 @@ wince*: { } symbian: { - libDep.sources = mylib.dll + libDep.sources = tst_qpluginloaderlib.dll libDep.path = /sys/bin pluginDep.sources = theplugin.dll pluginDep.path = bin diff --git a/tests/auto/qpluginloader/tst_qpluginloader.cpp b/tests/auto/qpluginloader/tst_qpluginloader.cpp index 61d59a1..1e382b8 100644 --- a/tests/auto/qpluginloader/tst_qpluginloader.cpp +++ b/tests/auto/qpluginloader/tst_qpluginloader.cpp @@ -169,7 +169,7 @@ void tst_QPluginLoader::errorString() QCOMPARE(loader.errorString(), unknown); } { - QPluginLoader loader( sys_qualifiedLibraryName("mylib")); //not a plugin + QPluginLoader loader( sys_qualifiedLibraryName("tst_qpluginloaderlib")); //not a plugin bool loaded = loader.load(); #ifdef SHOW_ERRORS qDebug() << loader.errorString(); diff --git a/tests/auto/qregexp/tst_qregexp.cpp b/tests/auto/qregexp/tst_qregexp.cpp index ea07323..d0d26ee 100644 --- a/tests/auto/qregexp/tst_qregexp.cpp +++ b/tests/auto/qregexp/tst_qregexp.cpp @@ -105,6 +105,7 @@ private slots: void QTBUG_7049_data(); void QTBUG_7049(); + void interval(); }; // Testing get/set functions @@ -1426,5 +1427,22 @@ void tst_QRegExp::QTBUG_7049() QCOMPARE( re.cap(2), cap2 ); } +void tst_QRegExp::interval() +{ + { + QRegExp exp("a{0,1}"); + QVERIFY(exp.isValid()); + } + { + QRegExp exp("a{1,1}"); + QVERIFY(exp.isValid()); + } + { + QRegExp exp("a{1,0}"); + QVERIFY(!exp.isValid()); + } +} + + QTEST_APPLESS_MAIN(tst_QRegExp) #include "tst_qregexp.moc" diff --git a/tests/auto/qsocks5socketengine/qsocks5socketengine.pro b/tests/auto/qsocks5socketengine/qsocks5socketengine.pro index 62c0c87..171d428 100644 --- a/tests/auto/qsocks5socketengine/qsocks5socketengine.pro +++ b/tests/auto/qsocks5socketengine/qsocks5socketengine.pro @@ -10,7 +10,7 @@ MOC_DIR=tmp QT = core network # Symbian toolchain does not support correct include semantics -symbian:INCPATH+=..\\..\\..\\include\\QtNetwork\\private +symbian:INCLUDEPATH+=..\\..\\..\\include\\QtNetwork\\private symbian: TARGET.CAPABILITY = NetworkServices diff --git a/tests/auto/qsslcertificate/more-certificates/cert-large-expiration-date.pem b/tests/auto/qsslcertificate/more-certificates/cert-large-expiration-date.pem new file mode 100644 index 0000000..416dd4d --- /dev/null +++ b/tests/auto/qsslcertificate/more-certificates/cert-large-expiration-date.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICWjCCAcOgAwIBAgIJAM7bMShFxAVAMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQwIBcNMTAwODA0MDk1MzQxWhgPMjA1MTA4MjkwOTUzNDFa +MEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJ +bnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ +AoGBAM2q22/WNMmn8cC+5EEYGeICySLmp9W6Ay6eKHr0Xxp3X3epETuPfvAuxp7r +OtkS18EMUegkUj8jw0IMEcbyHKFC/rTCaYOt93CxGBXMIChiMPAsFeYzGa/D6xzA +kfcRaJRQ+Ek3CDLXPnXfo7xpABXezYcPXAJrgsgBfWrwHdxzAgMBAAGjUDBOMB0G +A1UdDgQWBBSKbhnnl5uP2X+zuwFP6GovUpUN2TAfBgNVHSMEGDAWgBSKbhnnl5uP +2X+zuwFP6GovUpUN2TAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAKF0 +jl02liwFfupmzC5oxz2T3IyjEa21fm7QBMQJvQr5OTuX1/C7DAl7g/6/h7BH6JS3 +qpx5rXGet8SZmG8dODL4o3U4xOXnNzch7HtQixWwlx4XnFAXPMHflFX7YC5QQNHq +I8Y8IW+XjAYWpYJywWMUZIbr1/9y9gn1beYEE3pq +-----END CERTIFICATE----- diff --git a/tests/auto/qsslcertificate/tst_qsslcertificate.cpp b/tests/auto/qsslcertificate/tst_qsslcertificate.cpp index d0509bb..963bf11 100644 --- a/tests/auto/qsslcertificate/tst_qsslcertificate.cpp +++ b/tests/auto/qsslcertificate/tst_qsslcertificate.cpp @@ -110,6 +110,7 @@ private slots: void nulInCN(); void nulInSan(); void largeSerialNumber(); + void largeExpirationDate(); // ### add tests for certificate bundles (multiple certificates concatenated into a single // structure); both PEM and DER formatted #endif @@ -802,6 +803,20 @@ void tst_QSslCertificate::largeSerialNumber() QCOMPARE(cert.serialNumber(), QByteArray("01:02:03:04:05:06:07:08:09:10:aa:bb:cc:dd:ee:ff:17:18:19:20")); } +void tst_QSslCertificate::largeExpirationDate() // QTBUG-12489 +{ + QList<QSslCertificate> certList = + QSslCertificate::fromPath(SRCDIR "more-certificates/cert-large-expiration-date.pem"); + + QCOMPARE(certList.size(), 1); + + const QSslCertificate &cert = certList.at(0); + QVERIFY(!cert.isNull()); + QCOMPARE(cert.effectiveDate().toUTC(), QDateTime(QDate(2010, 8, 4), QTime(9, 53, 41), Qt::UTC)); + // if the date is larger than 2049, then the generalized time format is used + QCOMPARE(cert.expiryDate().toUTC(), QDateTime(QDate(2051, 8, 29), QTime(9, 53, 41), Qt::UTC)); +} + #endif // QT_NO_OPENSSL QTEST_MAIN(tst_QSslCertificate) diff --git a/tests/auto/qsslsocket/qsslsocket.pro b/tests/auto/qsslsocket/qsslsocket.pro index 3557fc8..accfa89 100644 --- a/tests/auto/qsslsocket/qsslsocket.pro +++ b/tests/auto/qsslsocket/qsslsocket.pro @@ -29,6 +29,7 @@ wince* { certFiles.sources = certs ssl.tar.gz certFiles.path = . DEPLOYMENT += certFiles + INCLUDEPATH *= $$MW_LAYER_SYSTEMINCLUDE # Needed for e32svr.h in S^3 envs } else { DEFINES += SRCDIR=\\\"$$PWD/\\\" } diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp index 0c12974..6c1dd8f 100644 --- a/tests/auto/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp @@ -1072,6 +1072,7 @@ void tst_QSslSocket::wildcardCertificateNames() QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*.example.com"), QString("www.example.com")), true ); QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("xxx*.example.com"), QString("xxxwww.example.com")), true ); QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("f*.example.com"), QString("foo.example.com")), true ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("192.168.0.0"), QString("192.168.0.0")), true ); // Failing CN matches QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("xxx.example.com"), QString("www.example.com")), false ); @@ -1085,6 +1086,7 @@ void tst_QSslSocket::wildcardCertificateNames() QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*.example."), QString("www.example")), false ); QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString(""), QString("www")), false ); QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*"), QString("www")), false ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*.168.0.0"), QString("192.168.0.0")), false ); } void tst_QSslSocket::wildcard() diff --git a/tests/auto/qstatictext/tst_qstatictext.cpp b/tests/auto/qstatictext/tst_qstatictext.cpp index 1d166f4..0ae5320 100644 --- a/tests/auto/qstatictext/tst_qstatictext.cpp +++ b/tests/auto/qstatictext/tst_qstatictext.cpp @@ -85,6 +85,10 @@ private slots: void setPenPlainText(); void setPenRichText(); void richTextOverridesPen(); + + void drawStruckOutText(); + void drawOverlinedText(); + void drawUnderlinedText(); }; void tst_QStaticText::init() @@ -620,5 +624,107 @@ void tst_QStaticText::richTextOverridesPen() } } +void tst_QStaticText::drawStruckOutText() +{ + QPixmap imageDrawText(1000, 1000); + QPixmap imageDrawStaticText(1000, 1000); + + imageDrawText.fill(Qt::white); + imageDrawStaticText.fill(Qt::white); + + QString s = QString::fromLatin1("Foobar"); + + QFont font; + font.setStrikeOut(true); + + { + QPainter p(&imageDrawText); + p.setFont(font); + p.drawText(QPointF(50, 50), s); + } + + { + QPainter p(&imageDrawStaticText); + QStaticText text = QStaticText(s); + p.setFont(font); + p.drawStaticText(QPointF(50, 50 - QFontMetricsF(p.font()).ascent()), text); + } + +#if defined(DEBUG_SAVE_IMAGE) + imageDrawText.save("drawStruckOutText_imageDrawText.png"); + imageDrawStaticText.save("drawStruckOutText_imageDrawStaticText.png"); +#endif + + QCOMPARE(imageDrawText, imageDrawStaticText); +} + +void tst_QStaticText::drawOverlinedText() +{ + QPixmap imageDrawText(1000, 1000); + QPixmap imageDrawStaticText(1000, 1000); + + imageDrawText.fill(Qt::white); + imageDrawStaticText.fill(Qt::white); + + QString s = QString::fromLatin1("Foobar"); + + QFont font; + font.setOverline(true); + + { + QPainter p(&imageDrawText); + p.setFont(font); + p.drawText(QPointF(50, 50), s); + } + + { + QPainter p(&imageDrawStaticText); + QStaticText text = QStaticText(s); + p.setFont(font); + p.drawStaticText(QPointF(50, 50 - QFontMetricsF(p.font()).ascent()), text); + } + +#if defined(DEBUG_SAVE_IMAGE) + imageDrawText.save("drawOverlinedText_imageDrawText.png"); + imageDrawStaticText.save("drawOverlinedText_imageDrawStaticText.png"); +#endif + + QCOMPARE(imageDrawText, imageDrawStaticText); +} + +void tst_QStaticText::drawUnderlinedText() +{ + QPixmap imageDrawText(1000, 1000); + QPixmap imageDrawStaticText(1000, 1000); + + imageDrawText.fill(Qt::white); + imageDrawStaticText.fill(Qt::white); + + QString s = QString::fromLatin1("Foobar"); + + QFont font; + font.setUnderline(true); + + { + QPainter p(&imageDrawText); + p.setFont(font); + p.drawText(QPointF(50, 50), s); + } + + { + QPainter p(&imageDrawStaticText); + QStaticText text = QStaticText(s); + p.setFont(font); + p.drawStaticText(QPointF(50, 50 - QFontMetricsF(p.font()).ascent()), text); + } + +#if defined(DEBUG_SAVE_IMAGE) + imageDrawText.save("drawUnderlinedText_imageDrawText.png"); + imageDrawStaticText.save("drawUnderlinedText_imageDrawStaticText.png"); +#endif + + QCOMPARE(imageDrawText, imageDrawStaticText); +} + QTEST_MAIN(tst_QStaticText) #include "tst_qstatictext.moc" diff --git a/tests/auto/qstring/tst_qstring.cpp b/tests/auto/qstring/tst_qstring.cpp index 9d8c0b2..a3f7f15 100644 --- a/tests/auto/qstring/tst_qstring.cpp +++ b/tests/auto/qstring/tst_qstring.cpp @@ -213,6 +213,7 @@ private slots: void repeated_data() const; void task262677remove(); void QTBUG10404_compareRef(); + void QTBUG9281_arg_locale(); }; typedef QList<int> IntList; @@ -4932,6 +4933,17 @@ void tst_QString::QTBUG10404_compareRef() QVERIFY(QStringRef(&a2, 1, 2).compare(QStringRef(&a, 1, 3), Qt::CaseInsensitive) < 0); } +void tst_QString::QTBUG9281_arg_locale() +{ + QLocale l(QLocale::English, QLocale::UnitedKingdom); + l.setNumberOptions(QLocale::OmitGroupSeparator); + QLocale::setDefault(l); + QString str("*%L1*%L2*"); + str = str.arg(123456).arg(1234.56); + QCOMPARE(str, QString::fromLatin1("*123456*1234.56*")); + QLocale::setDefault(QLocale::C); +} + QTEST_APPLESS_MAIN(tst_QString) diff --git a/tests/auto/qsvgrenderer/qsvgrenderer.pro b/tests/auto/qsvgrenderer/qsvgrenderer.pro index 8cfbcce..0b785e3 100644 --- a/tests/auto/qsvgrenderer/qsvgrenderer.pro +++ b/tests/auto/qsvgrenderer/qsvgrenderer.pro @@ -13,6 +13,8 @@ wince*|symbian { addFiles.path = . DEPLOYMENT += addFiles - DEPLOYMENT_PLUGIN += qsvg + wince*|qt_not_deployed { + DEPLOYMENT_PLUGIN += qsvg + } } diff --git a/tests/auto/qtextcodec/qtextcodec.pro b/tests/auto/qtextcodec/qtextcodec.pro index 0bcf067..6cb13a9 100644 --- a/tests/auto/qtextcodec/qtextcodec.pro +++ b/tests/auto/qtextcodec/qtextcodec.pro @@ -1,4 +1,4 @@ TEMPLATE = subdirs SUBDIRS = test -!wince*:SUBDIRS += echo +!wince*:!symbian:SUBDIRS += echo diff --git a/tests/auto/qtextcodec/test/test.pro b/tests/auto/qtextcodec/test/test.pro index efa2e85..b85032a 100644 --- a/tests/auto/qtextcodec/test/test.pro +++ b/tests/auto/qtextcodec/test/test.pro @@ -20,7 +20,9 @@ wince*|symbian { addFiles.sources = ../*.txt addFiles.path = . DEPLOYMENT += addFiles - DEPLOYMENT_PLUGIN += qcncodecs qjpcodecs qkrcodecs qtwcodecs + wince*|qt_not_deployed { + DEPLOYMENT_PLUGIN += qcncodecs qjpcodecs qkrcodecs qtwcodecs + } } wince*: { diff --git a/tests/auto/qtextcodec/tst_qtextcodec.cpp b/tests/auto/qtextcodec/tst_qtextcodec.cpp index 0946c93..cc41591 100644 --- a/tests/auto/qtextcodec/tst_qtextcodec.cpp +++ b/tests/auto/qtextcodec/tst_qtextcodec.cpp @@ -1946,6 +1946,8 @@ void tst_QTextCodec::toLocal8Bit() { #ifdef QT_NO_PROCESS QSKIP("This test requires QProcess", SkipAll); +#elif defined(Q_OS_SYMBIAN) + QSKIP("This test requires streams support in QProcess", SkipAll); #else QProcess process; process.start("echo/echo"); diff --git a/tests/auto/qtextlayout/tst_qtextlayout.cpp b/tests/auto/qtextlayout/tst_qtextlayout.cpp index 079e69f..dcc43d0 100644 --- a/tests/auto/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/qtextlayout/tst_qtextlayout.cpp @@ -123,6 +123,7 @@ private slots: void smallTextLengthWrapAtWordBoundaryOrAnywhere(); void testLineBreakingAllSpaces(); void lineWidthFromBOM(); + void textWidthVsWIdth(); private: @@ -1383,5 +1384,34 @@ void tst_QTextLayout::glyphLessItems() } } +void tst_QTextLayout::textWidthVsWIdth() +{ + QTextLayout layout; + QTextOption opt; + opt.setWrapMode(QTextOption::WrapAnywhere); + layout.setTextOption(opt); + layout.setText(QString::fromLatin1( + "g++ -c -m64 -pipe -g -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -D_REENTRANT -fPIC -DCORE_LIBRARY -DIDE_LIBRARY_BASENAME=\"lib\" -DWITH_TESTS " + "-DQT_NO_CAST_TO_ASCII -DQT_USE_FAST_OPERATOR_PLUS -DQT_USE_FAST_CONCATENATION -DQT_PLUGIN -DQT_TESTLIB_LIB -DQT_SCRIPT_LIB -DQT_SVG_LIB -DQT_SQL_LIB -DQT_XM" + "L_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../../qt-qml/mkspecs/linux-g++-64 -I. -I../../../../qt-qml/include/QtCore -I../../../." + "./qt-qml/include/QtNetwork -I../../../../qt-qml/include/QtGui -I../../../../qt-qml/include/QtXml -I../../../../qt-qml/include/QtSql -I../../../../qt-qml/inc" + "lude/QtSvg -I../../../../qt-qml/include/QtScript -I../../../../qt-qml/include/QtTest -I../../../../qt-qml/include -I../../../../qt-qml/include/QtHelp -I../." + "./libs -I/home/ettrich/dev/creator/tools -I../../plugins -I../../shared/scriptwrapper -I../../libs/3rdparty/botan/build -Idialogs -Iactionmanager -Ieditorma" + "nager -Iprogressmanager -Iscriptmanager -I.moc/debug-shared -I.uic -o .obj/debug-shared/sidebar.o sidebar.cpp")); + + // textWidth includes right bearing, but it should never be LARGER than width if there is space for at least one character + for (int width = 100; width < 1000; ++width) { + layout.beginLayout(); + QTextLine line = layout.createLine(); + line.setLineWidth(width); + layout.endLayout(); + + qreal textWidthIsLargerBy = qMax(qreal(0), line.naturalTextWidth() - line.width()); + qreal thisMustBeZero = 0; + QCOMPARE(textWidthIsLargerBy, thisMustBeZero); + } +} + + QTEST_MAIN(tst_QTextLayout) #include "tst_qtextlayout.moc" diff --git a/tests/auto/qtextstream/qtextstream.pro b/tests/auto/qtextstream/qtextstream.pro index 8346d7f..a2dcc81 100644 --- a/tests/auto/qtextstream/qtextstream.pro +++ b/tests/auto/qtextstream/qtextstream.pro @@ -1,5 +1,6 @@ TEMPLATE = subdirs -SUBDIRS = test stdinProcess readAllStdinProcess readLineStdinProcess +SUBDIRS = test +!symbian: SUBDIRS += stdinProcess readAllStdinProcess readLineStdinProcess diff --git a/tests/auto/qtimer/tst_qtimer.cpp b/tests/auto/qtimer/tst_qtimer.cpp index a0408ef..8d213ed 100644 --- a/tests/auto/qtimer/tst_qtimer.cpp +++ b/tests/auto/qtimer/tst_qtimer.cpp @@ -86,6 +86,7 @@ private slots: void timerIdPersistsAfterThreadExit(); void cancelLongTimer(); void singleShotStaticFunctionZeroTimeout(); + void recurseOnTimeoutAndStopTimer(); }; class TimerHelper : public QObject @@ -623,5 +624,48 @@ void tst_QTimer::singleShotStaticFunctionZeroTimeout() QCOMPARE(helper.count, 1); } +class RecursOnTimeoutAndStopTimerTimer : public QObject +{ + Q_OBJECT + +public: + QTimer *one; + QTimer *two; + +public slots: + void onetrigger() + { + QCoreApplication::processEvents(); + } + + void twotrigger() + { + one->stop(); + } +}; + +void tst_QTimer::recurseOnTimeoutAndStopTimer() +{ + QEventLoop eventLoop; + QTimer::singleShot(1000, &eventLoop, SLOT(quit())); + + RecursOnTimeoutAndStopTimerTimer t; + t.one = new QTimer(&t); + t.two = new QTimer(&t); + + QObject::connect(t.one, SIGNAL(timeout()), &t, SLOT(onetrigger())); + QObject::connect(t.two, SIGNAL(timeout()), &t, SLOT(twotrigger())); + + t.two->setSingleShot(true); + + t.one->start(); + t.two->start(); + + (void) eventLoop.exec(); + + QVERIFY(!t.one->isActive()); + QVERIFY(!t.two->isActive()); +} + QTEST_MAIN(tst_QTimer) #include "tst_qtimer.moc" diff --git a/tests/auto/qvideosurfaceformat/tst_qvideosurfaceformat.cpp b/tests/auto/qvideosurfaceformat/tst_qvideosurfaceformat.cpp index 8a4307e..a4bfb89 100644 --- a/tests/auto/qvideosurfaceformat/tst_qvideosurfaceformat.cpp +++ b/tests/auto/qvideosurfaceformat/tst_qvideosurfaceformat.cpp @@ -127,16 +127,37 @@ void tst_QVideoSurfaceFormat::construct_data() QTest::addColumn<QSize>("frameSize"); QTest::addColumn<QVideoFrame::PixelFormat>("pixelFormat"); QTest::addColumn<QAbstractVideoBuffer::HandleType>("handleType"); + QTest::addColumn<bool>("valid"); QTest::newRow("32x32 rgb32 no handle") << QSize(32, 32) << QVideoFrame::Format_RGB32 - << QAbstractVideoBuffer::NoHandle; + << QAbstractVideoBuffer::NoHandle + << true; QTest::newRow("1024x768 YUV444 GL texture") << QSize(32, 32) << QVideoFrame::Format_YUV444 - << QAbstractVideoBuffer::GLTextureHandle; + << QAbstractVideoBuffer::GLTextureHandle + << true; + + QTest::newRow("32x32 invalid no handle") + << QSize(32, 32) + << QVideoFrame::Format_Invalid + << QAbstractVideoBuffer::NoHandle + << false; + + QTest::newRow("invalid size, rgb32 no handle") + << QSize() + << QVideoFrame::Format_RGB32 + << QAbstractVideoBuffer::NoHandle + << false; + + QTest::newRow("0x0 rgb32 no handle") + << QSize(0,0) + << QVideoFrame::Format_RGB32 + << QAbstractVideoBuffer::NoHandle + << true; } void tst_QVideoSurfaceFormat::construct() @@ -144,6 +165,7 @@ void tst_QVideoSurfaceFormat::construct() QFETCH(QSize, frameSize); QFETCH(QVideoFrame::PixelFormat, pixelFormat); QFETCH(QAbstractVideoBuffer::HandleType, handleType); + QFETCH(bool, valid); QRect viewport(QPoint(0, 0), frameSize); @@ -154,6 +176,7 @@ void tst_QVideoSurfaceFormat::construct() QCOMPARE(format.frameSize(), frameSize); QCOMPARE(format.frameWidth(), frameSize.width()); QCOMPARE(format.frameHeight(), frameSize.height()); + QCOMPARE(format.isValid(), valid); QCOMPARE(format.viewport(), viewport); QCOMPARE(format.scanLineDirection(), QVideoSurfaceFormat::TopToBottom); QCOMPARE(format.frameRate(), 0.0); diff --git a/tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xml b/tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xml new file mode 100644 index 0000000..b17739a --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xml @@ -0,0 +1 @@ +<date>2009-12-16T23:14:10.823218Z</date> diff --git a/tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xsd b/tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xsd new file mode 100644 index 0000000..55557f1 --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:element name="date" type="xsd:dateTime"/> + + <xsd:simpleType name="microsecondsType"> + <xsd:restriction base="xsd:dateTime"> + <xsd:pattern value="\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\d\d\d\dZ"/> + </xsd:restriction> + </xsd:simpleType> + +</xsd:schema> diff --git a/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp b/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp index 3517b5a..092e966 100644 --- a/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp +++ b/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp @@ -216,6 +216,12 @@ void tst_XmlPatternsValidator::xsdSupport_data() const << 0 << (QStringList() << QLatin1String("files/complex-type-including-anonymous-type.xsd")) << QString(); + + QTest::newRow("QTBUG-11559 A schema and instance with a dateTime containing microseconds") + << 0 + << (QStringList() << QLatin1String("files/dateTime-with-microseconds.xml") + << QLatin1String("files/dateTime-with-microseconds.xsd")) + << QString(); } QTEST_MAIN(tst_XmlPatternsValidator) diff --git a/tests/benchmarks/corelib/tools/qregexp/main.cpp b/tests/benchmarks/corelib/tools/qregexp/main.cpp index ab9ed71..51cde95 100644 --- a/tests/benchmarks/corelib/tools/qregexp/main.cpp +++ b/tests/benchmarks/corelib/tools/qregexp/main.cpp @@ -38,16 +38,27 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + #include <QDebug> #include <QRegExp> #include <QString> +#include <QFile> #include <qtest.h> +#ifdef HAVE_BOOST +#include <boost/regex.hpp> +#endif + +#include <QtScript> +#include "pcre/pcre.h" +#define ZLIB_VERSION "1.2.3.4" class tst_qregexp : public QObject { Q_OBJECT +public: + tst_qregexp(); private slots: void escape_old(); void escape_old_data() { escape_data(); } @@ -59,10 +70,56 @@ private slots: void escape_new3_data() { escape_data(); } void escape_new4(); void escape_new4_data() { escape_data(); } +/* + JSC outperforms everything. + Boost is less impressive then expected. + */ + void simpleFind1(); + void rangeReplace1(); + void matchReplace1(); + + void simpleFind2(); + void rangeReplace2(); + void matchReplace2(); + + void simpleFindJSC(); + void rangeReplaceJSC(); + void matchReplaceJSC(); + +#ifdef HAVE_BOOST + void simpleFindBoost(); + void rangeReplaceBoost(); + void matchReplaceBoost(); +#endif + +/* those apply an (incorrect) regexp on entire source + (this main.cpp). JSC appears to handle this + (ab)use case best. QRegExp performs extremly bad. + */ + void horribleWrongReplace1(); + void horribleReplace1(); + void horribleReplace2(); + void horribleWrongReplace2(); + void horribleWrongReplaceJSC(); + void horribleReplaceJSC(); +#ifdef HAVE_BOOST + void horribleWrongReplaceBoost(); + void horribleReplaceBoost(); +#endif private: + QString str1; + QString str2; void escape_data(); }; +tst_qregexp::tst_qregexp() + :QObject() + ,str1("We are all happy monkeys") +{ + QFile f(":/main.cpp"); + f.open(QFile::ReadOnly); + str2=f.readAll(); +} static void verify(const QString "ed, const QString &expected) { @@ -285,6 +342,253 @@ void tst_qregexp::escape_new4() // "return quoted" } } + + +void tst_qregexp::simpleFind1() +{ + int roff; + QRegExp rx("happy"); + rx.setPatternSyntax(QRegExp::RegExp); + QBENCHMARK{ + roff = rx.indexIn(str1); + } + QCOMPARE(roff, 11); +} + +void tst_qregexp::rangeReplace1() +{ + QString r; + QRegExp rx("[a-f]"); + rx.setPatternSyntax(QRegExp::RegExp); + QBENCHMARK{ + r = QString(str1).replace(rx, "-"); + } + QCOMPARE(r, QString("W- -r- -ll h-ppy monk-ys")); +} + +void tst_qregexp::matchReplace1() +{ + QString r; + QRegExp rx("[^a-f]*([a-f]+)[^a-f]*"); + rx.setPatternSyntax(QRegExp::RegExp); + QBENCHMARK{ + r = QString(str1).replace(rx, "\\1"); + } + QCOMPARE(r, QString("eaeaae")); +} + +void tst_qregexp::horribleWrongReplace1() +{ + QString r; + QRegExp rx(".*#""define ZLIB_VERSION \"([0-9]+)\\.([0-9]+)\\.([0-9]+)\".*"); + rx.setPatternSyntax(QRegExp::RegExp); + QBENCHMARK{ + r = QString(str2).replace(rx, "\\1.\\2.\\3"); + } + QCOMPARE(r, str2); +} + +void tst_qregexp::horribleReplace1() +{ + QString r; + QRegExp rx(".*#""define ZLIB_VERSION \"([0-9]+)\\.([0-9]+)\\.([0-9]+).*"); + rx.setPatternSyntax(QRegExp::RegExp); + QBENCHMARK{ + r = QString(str2).replace(rx, "\\1.\\2.\\3"); + } + QCOMPARE(r, QString("1.2.3")); +} + + +void tst_qregexp::simpleFind2() +{ + int roff; + QRegExp rx("happy"); + rx.setPatternSyntax(QRegExp::RegExp2); + QBENCHMARK{ + roff = rx.indexIn(str1); + } + QCOMPARE(roff, 11); +} + +void tst_qregexp::rangeReplace2() +{ + QString r; + QRegExp rx("[a-f]"); + rx.setPatternSyntax(QRegExp::RegExp2); + QBENCHMARK{ + r = QString(str1).replace(rx, "-"); + } + QCOMPARE(r, QString("W- -r- -ll h-ppy monk-ys")); +} + +void tst_qregexp::matchReplace2() +{ + QString r; + QRegExp rx("[^a-f]*([a-f]+)[^a-f]*"); + rx.setPatternSyntax(QRegExp::RegExp2); + QBENCHMARK{ + r = QString(str1).replace(rx, "\\1"); + } + QCOMPARE(r, QString("eaeaae")); +} + +void tst_qregexp::horribleWrongReplace2() +{ + QString r; + QRegExp rx(".*#""define ZLIB_VERSION \"([0-9]+)\\.([0-9]+)\\.([0-9]+)\".*"); + rx.setPatternSyntax(QRegExp::RegExp2); + QBENCHMARK{ + r = QString(str2).replace(rx, "\\1.\\2.\\3"); + } + QCOMPARE(r, str2); +} + +void tst_qregexp::horribleReplace2() +{ + QString r; + QRegExp rx(".*#""define ZLIB_VERSION \"([0-9]+)\\.([0-9]+)\\.([0-9]+).*"); + rx.setPatternSyntax(QRegExp::RegExp2); + QBENCHMARK{ + r = QString(str2).replace(rx, "\\1.\\2.\\3"); + } + QCOMPARE(r, QString("1.2.3")); +} + + +void tst_qregexp::simpleFindJSC() +{ + int numr; + const char * errmsg=" "; + QString rxs("happy"); + JSRegExp *rx = jsRegExpCompile(rxs.utf16(), rxs.length(), JSRegExpDoNotIgnoreCase, JSRegExpSingleLine, 0, &errmsg); + QVERIFY(rx != 0); + QString s(str1); + int offsetVector[3]; + QBENCHMARK{ + numr = jsRegExpExecute(rx, s.utf16(), s.length(), 0, offsetVector, 3); + } + jsRegExpFree(rx); + QCOMPARE(numr, 1); + QCOMPARE(offsetVector[0], 11); +} + +void tst_qregexp::rangeReplaceJSC() +{ + QScriptValue r; + QScriptEngine engine; + engine.globalObject().setProperty("s", str1); + QScriptValue replaceFunc = engine.evaluate("(function() { return s.replace(/[a-f]/g, '-') } )"); + QVERIFY(replaceFunc.isFunction()); + QBENCHMARK{ + r = replaceFunc.call(QScriptValue()); + } + QCOMPARE(r.toString(), QString("W- -r- -ll h-ppy monk-ys")); +} + +void tst_qregexp::matchReplaceJSC() +{ + QScriptValue r; + QScriptEngine engine; + engine.globalObject().setProperty("s", str1); + QScriptValue replaceFunc = engine.evaluate("(function() { return s.replace(/[^a-f]*([a-f]+)[^a-f]*/g, '$1') } )"); + QVERIFY(replaceFunc.isFunction()); + QBENCHMARK{ + r = replaceFunc.call(QScriptValue()); + } + QCOMPARE(r.toString(), QString("eaeaae")); +} + +void tst_qregexp::horribleWrongReplaceJSC() +{ + QScriptValue r; + QScriptEngine engine; + engine.globalObject().setProperty("s", str2); + QScriptValue replaceFunc = engine.evaluate("(function() { return s.replace(/.*#""define ZLIB_VERSION \"([0-9]+)\\.([0-9]+)\\.([0-9]+)\".*/gm, '$1.$2.$3') } )"); + QVERIFY(replaceFunc.isFunction()); + QBENCHMARK{ + r = replaceFunc.call(QScriptValue()); + } + QCOMPARE(r.toString(), str2); +} + +void tst_qregexp::horribleReplaceJSC() +{ + QScriptValue r; + QScriptEngine engine; + // the m flag doesnt actually work here; dunno + engine.globalObject().setProperty("s", str2.replace('\n', ' ')); + QScriptValue replaceFunc = engine.evaluate("(function() { return s.replace(/.*#""define ZLIB_VERSION \"([0-9]+)\\.([0-9]+)\\.([0-9]+).*/gm, '$1.$2.$3') } )"); + QVERIFY(replaceFunc.isFunction()); + QBENCHMARK{ + r = replaceFunc.call(QScriptValue()); + } + QCOMPARE(r.toString(), QString("1.2.3")); +} + + +#ifdef HAVE_BOOST +void tst_qregexp::simpleFindBoost(){ + int roff; + boost::regex rx ("happy", boost::regex_constants::perl); + std::string s = str1.toStdString(); + std::string::const_iterator start, end; + start = s.begin(); + end = s.end(); + boost::match_flag_type flags = boost::match_default; + QBENCHMARK{ + boost::match_results<std::string::const_iterator> what; + regex_search(start, end, what, rx, flags); + roff = (what[0].first)-start; + } + QCOMPARE(roff, 11); +} + +void tst_qregexp::rangeReplaceBoost() +{ + boost::regex pattern ("[a-f]", boost::regex_constants::perl); + std::string s = str1.toStdString(); + std::string r; + QBENCHMARK{ + r = boost::regex_replace (s, pattern, "-"); + } + QCOMPARE(r, std::string("W- -r- -ll h-ppy monk-ys")); +} + +void tst_qregexp::matchReplaceBoost() +{ + boost::regex pattern ("[^a-f]*([a-f]+)[^a-f]*",boost::regex_constants::perl); + std::string s = str1.toStdString(); + std::string r; + QBENCHMARK{ + r = boost::regex_replace (s, pattern, "$1"); + } + QCOMPARE(r, std::string("eaeaae")); +} + +void tst_qregexp::horribleWrongReplaceBoost() +{ + boost::regex pattern (".*#""define ZLIB_VERSION \"([0-9]+)\\.([0-9]+)\\.([0-9]+)\".*", boost::regex_constants::perl); + std::string s = str2.toStdString(); + std::string r; + QBENCHMARK{ + r = boost::regex_replace (s, pattern, "$1.$2.$3"); + } + QCOMPARE(r, s); +} + +void tst_qregexp::horribleReplaceBoost() +{ + boost::regex pattern (".*#""define ZLIB_VERSION \"([0-9]+)\\.([0-9]+)\\.([0-9]+).*", boost::regex_constants::perl); + std::string s = str2.toStdString(); + std::string r; + QBENCHMARK{ + r = boost::regex_replace (s, pattern, "$1.$2.$3"); + } + QCOMPARE(r, std::string("1.2.3")); +} +#endif //HAVE_BOOST + QTEST_MAIN(tst_qregexp) #include "main.moc" diff --git a/tests/benchmarks/corelib/tools/qregexp/qregexp.pro b/tests/benchmarks/corelib/tools/qregexp/qregexp.pro index e0f47c9..ffdad12 100644 --- a/tests/benchmarks/corelib/tools/qregexp/qregexp.pro +++ b/tests/benchmarks/corelib/tools/qregexp/qregexp.pro @@ -3,10 +3,19 @@ TEMPLATE = app TARGET = tst_bench_qregexp DEPENDPATH += . INCLUDEPATH += . - +RESOURCES+=qregexp.qrc QT -= gui +QT += script CONFIG += release # Input SOURCES += main.cpp + +include( $${QT_SOURCE_TREE}/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri ) + +exists( /usr/include/boost/regex.hpp ){ +DEFINES+=HAVE_BOOST +LIBS+=-lboost_regex +} + diff --git a/tests/benchmarks/corelib/tools/qregexp/qregexp.qrc b/tests/benchmarks/corelib/tools/qregexp/qregexp.qrc new file mode 100644 index 0000000..a7fe13c --- /dev/null +++ b/tests/benchmarks/corelib/tools/qregexp/qregexp.qrc @@ -0,0 +1,6 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file>main.cpp</file> +</qresource> +</RCC> + diff --git a/tests/benchmarks/gui/image/blendbench/main.cpp b/tests/benchmarks/gui/image/blendbench/main.cpp index 92d1633..f53654b 100644 --- a/tests/benchmarks/gui/image/blendbench/main.cpp +++ b/tests/benchmarks/gui/image/blendbench/main.cpp @@ -103,6 +103,9 @@ class BlendBench : public QObject private slots: void blendBench_data(); void blendBench(); + + void blendBenchAlpha_data(); + void blendBenchAlpha(); }; void BlendBench::blendBench_data() @@ -147,6 +150,35 @@ void BlendBench::blendBench() } } +void BlendBench::blendBenchAlpha_data() +{ + blendBench_data(); +} + +void BlendBench::blendBenchAlpha() +{ + QFETCH(int, brushType); + QFETCH(int, compositionMode); + + QImage img(512, 512, QImage::Format_ARGB32_Premultiplied); + QImage src(512, 512, QImage::Format_ARGB32_Premultiplied); + paint(&src); + QPainter p(&img); + p.setPen(Qt::NoPen); + + p.setCompositionMode(QPainter::CompositionMode(compositionMode)); + if (brushType == ImageBrush) { + p.setBrush(QBrush(src)); + } else if (brushType == SolidBrush) { + p.setBrush(QColor(127, 127, 127, 127)); + } + p.setOpacity(0.7f); + + QBENCHMARK { + p.drawRect(0, 0, 512, 512); + } +} + QTEST_MAIN(BlendBench) #include "main.moc" diff --git a/tests/benchmarks/network/network.pro b/tests/benchmarks/network/network.pro index 4e83db2..ea0f821 100644 --- a/tests/benchmarks/network/network.pro +++ b/tests/benchmarks/network/network.pro @@ -1,5 +1,5 @@ TEMPLATE = subdirs -SUBDIRS = \ +SUBDIRS = \ access \ kernel \ socket diff --git a/tests/manual/inputmethodhints/inputmethodhints.cpp b/tests/manual/inputmethodhints/inputmethodhints.cpp new file mode 100644 index 0000000..0c00b8d --- /dev/null +++ b/tests/manual/inputmethodhints/inputmethodhints.cpp @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "inputmethodhints.h" + +inputmethodhints::inputmethodhints(QWidget *parent) + : QMainWindow(parent) +{ + ui.setupUi(this); + connect(ui.cbDialableOnly, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); + connect(ui.cbDigitsOnly, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); + connect(ui.cbEmailOnly, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); + connect(ui.cbFormattedNumbersOnly, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); + connect(ui.cbHiddenText, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); + connect(ui.cbLowercaseOnly, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); + connect(ui.cbNoAutoUppercase, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); + connect(ui.cbNoPredictiveText, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); + connect(ui.cbPreferLowercase, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); + connect(ui.cbPreferNumbers, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); + connect(ui.cbPreferUpperCase, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); + connect(ui.cbUppercaseOnly, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); + connect(ui.cbUrlOnly, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); +} + +inputmethodhints::~inputmethodhints() +{ + +} + +void inputmethodhints::checkboxChanged(int) +{ + int flags = 0; + if (ui.cbDialableOnly->isChecked()) + flags |= Qt::ImhDialableCharactersOnly; + if (ui.cbDigitsOnly->isChecked()) + flags |= Qt::ImhDigitsOnly; + if (ui.cbEmailOnly->isChecked()) + flags |= Qt::ImhEmailCharactersOnly; + if (ui.cbFormattedNumbersOnly->isChecked()) + flags |= Qt::ImhFormattedNumbersOnly; + if (ui.cbHiddenText->isChecked()) + flags |= Qt::ImhHiddenText; + if (ui.cbLowercaseOnly->isChecked()) + flags |= Qt::ImhLowercaseOnly; + if (ui.cbNoAutoUppercase->isChecked()) + flags |= Qt::ImhNoAutoUppercase; + if (ui.cbNoPredictiveText->isChecked()) + flags |= Qt::ImhNoPredictiveText; + if (ui.cbPreferLowercase->isChecked()) + flags |= Qt::ImhPreferLowercase; + if (ui.cbPreferNumbers->isChecked()) + flags |= Qt::ImhPreferNumbers; + if (ui.cbPreferUpperCase->isChecked()) + flags |= Qt::ImhPreferUppercase; + if (ui.cbUppercaseOnly->isChecked()) + flags |= Qt::ImhUppercaseOnly; + if (ui.cbUrlOnly->isChecked()) + flags |= Qt::ImhUrlCharactersOnly; + ui.lineEdit->clear(); + ui.lineEdit->setInputMethodHints(Qt::InputMethodHints(flags)); +} diff --git a/tests/manual/inputmethodhints/inputmethodhints.h b/tests/manual/inputmethodhints/inputmethodhints.h new file mode 100644 index 0000000..988a4be --- /dev/null +++ b/tests/manual/inputmethodhints/inputmethodhints.h @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef INPUTMETHODHINTS_H +#define INPUTMETHODHINTS_H + +#include <QtGui/QMainWindow> +#include "ui_tst_inputmethodhints.h" + +class inputmethodhints : public QMainWindow +{ + Q_OBJECT + +public: + inputmethodhints(QWidget *parent = 0); + ~inputmethodhints(); + +public slots: + void checkboxChanged(int); + +private: + Ui::MainWindow ui; +}; + +#endif // INPUTMETHODHINTS_H diff --git a/tests/manual/inputmethodhints/inputmethodhints.pro b/tests/manual/inputmethodhints/inputmethodhints.pro new file mode 100644 index 0000000..7298ec6 --- /dev/null +++ b/tests/manual/inputmethodhints/inputmethodhints.pro @@ -0,0 +1,13 @@ +TEMPLATE = app +TARGET = tst_inputmethodhints + +QT += core \ + gui + +HEADERS += inputmethodhints.h +SOURCES += main.cpp \ + inputmethodhints.cpp +FORMS += inputmethodhints.ui +RESOURCES += + +symbian:TARGET.UID3 = 0xE4938ABC diff --git a/tests/manual/inputmethodhints/inputmethodhints.ui b/tests/manual/inputmethodhints/inputmethodhints.ui new file mode 100644 index 0000000..d0dc01d --- /dev/null +++ b/tests/manual/inputmethodhints/inputmethodhints.ui @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>360</width> + <height>640</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QTabWidget" name="tabWidget"> + <property name="currentIndex"> + <number>1</number> + </property> + <widget class="QWidget" name="tab"> + <attribute name="title"> + <string>behaviour</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QCheckBox" name="cbHiddenText"> + <property name="text"> + <string>ImhHiddenText</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="cbNoAutoUppercase"> + <property name="text"> + <string>ImhNoAutoUppercase</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="cbPreferNumbers"> + <property name="text"> + <string>ImhPreferNumbers</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="cbPreferUpperCase"> + <property name="text"> + <string>ImhPreferUppercase</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="cbPreferLowercase"> + <property name="text"> + <string>ImhPreferLowercase</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="cbNoPredictiveText"> + <property name="text"> + <string>ImhNoPredictiveText</string> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_2"> + <attribute name="title"> + <string>restrictions</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QCheckBox" name="cbDigitsOnly"> + <property name="text"> + <string>ImhDigitsOnly</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="cbFormattedNumbersOnly"> + <property name="text"> + <string>ImhFormattedNumbersOnly</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="cbUppercaseOnly"> + <property name="text"> + <string>ImhUppercaseOnly</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="cbLowercaseOnly"> + <property name="text"> + <string>ImhLowercaseOnly</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="cbDialableOnly"> + <property name="text"> + <string>ImhDialableCharactersOnly</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="cbEmailOnly"> + <property name="text"> + <string>ImhEmailCharactersOnly</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="cbUrlOnly"> + <property name="text"> + <string>ImhUrlCharactersOnly</string> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + <item> + <widget class="QLineEdit" name="lineEdit"/> + </item> + </layout> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/tests/manual/inputmethodhints/main.cpp b/tests/manual/inputmethodhints/main.cpp new file mode 100644 index 0000000..022bf3f --- /dev/null +++ b/tests/manual/inputmethodhints/main.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "inputmethodhints.h" + +#include <QtGui> +#include <QApplication> + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + inputmethodhints w; + w.showMaximized(); + return a.exec(); +} |