summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorOlivier Goffart <olivier.goffart@nokia.com>2010-08-13 10:09:53 +0200
committerOlivier Goffart <olivier.goffart@nokia.com>2010-08-13 10:33:13 +0200
commit5114fcb45d584ea50da7397088f084dfd74922b9 (patch)
tree18cb40f048186ebf0eac568e2ae53ec092044c55 /tests
parent55e47566dd1ac83ff674401dfd6284f07490cd8b (diff)
parentee62807198a2525577c14f718b98d07ae0ec7bec (diff)
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')
-rw-r--r--tests/auto/compilerwarnings/test_cpp.txt3
-rw-r--r--tests/auto/compilerwarnings/tst_compilerwarnings.cpp7
-rw-r--r--tests/auto/declarative/qdeclarativeanimations/data/propertiesTransition7.qml29
-rw-r--r--tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp14
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/data/signalEmission.qml33
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp58
-rw-r--r--tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativeitem/data/childrenRectBug3.qml15
-rw-r--r--tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp12
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp7
-rw-r--r--tests/auto/declarative/qdeclarativepixmapcache/data/massive.pngbin0 -> 31834 bytes
-rw-r--r--tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp50
-rw-r--r--tests/auto/declarative/qdeclarativescriptdebugging/data/backtrace1.js11
-rw-r--r--tests/auto/declarative/qdeclarativescriptdebugging/data/backtrace1.qml27
-rw-r--r--tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro20
-rw-r--r--tests/auto/declarative/qdeclarativescriptdebugging/tst_qdeclarativescriptdebugging.cpp154
-rw-r--r--tests/auto/declarative/qdeclarativestates/data/extendsBug.qml26
-rw-r--r--tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp16
-rw-r--r--tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp36
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.pngbin2321 -> 2412 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.pngbin2380 -> 2443 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.pngbin2315 -> 2398 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.pngbin2372 -> 2390 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.pngbin2327 -> 2416 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.pngbin0 -> 2395 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml1280
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml5
-rw-r--r--tests/auto/mediaobject/tst_mediaobject.cpp4
-rw-r--r--tests/auto/qdatetime/tst_qdatetime.cpp8
-rw-r--r--tests/auto/qdom/qdom.pro4
-rw-r--r--tests/auto/qdom/tst_qdom.cpp1
-rw-r--r--tests/auto/qfile/qfile.pro2
-rw-r--r--tests/auto/qfileinfo/qfileinfo.pro1
-rw-r--r--tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp388
-rw-r--r--tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp20
-rw-r--r--tests/auto/qimage/tst_qimage.cpp65
-rw-r--r--tests/auto/qlistview/tst_qlistview.cpp53
-rw-r--r--tests/auto/qlocale/test/test.pro2
-rw-r--r--tests/auto/qmetaobject/tst_qmetaobject.cpp6
-rw-r--r--tests/auto/qnetworkreply/test/test.pro2
-rw-r--r--tests/auto/qpainter/tst_qpainter.cpp65
-rw-r--r--tests/auto/qpluginloader/lib/lib.pro2
-rw-r--r--tests/auto/qpluginloader/tst/tst.pro2
-rw-r--r--tests/auto/qpluginloader/tst_qpluginloader.cpp2
-rw-r--r--tests/auto/qregexp/tst_qregexp.cpp18
-rw-r--r--tests/auto/qsocks5socketengine/qsocks5socketengine.pro2
-rw-r--r--tests/auto/qsslcertificate/more-certificates/cert-large-expiration-date.pem15
-rw-r--r--tests/auto/qsslcertificate/tst_qsslcertificate.cpp15
-rw-r--r--tests/auto/qsslsocket/qsslsocket.pro1
-rw-r--r--tests/auto/qsslsocket/tst_qsslsocket.cpp2
-rw-r--r--tests/auto/qstatictext/tst_qstatictext.cpp106
-rw-r--r--tests/auto/qstring/tst_qstring.cpp12
-rw-r--r--tests/auto/qsvgrenderer/qsvgrenderer.pro4
-rw-r--r--tests/auto/qtextcodec/qtextcodec.pro2
-rw-r--r--tests/auto/qtextcodec/test/test.pro4
-rw-r--r--tests/auto/qtextcodec/tst_qtextcodec.cpp2
-rw-r--r--tests/auto/qtextlayout/tst_qtextlayout.cpp30
-rw-r--r--tests/auto/qtextstream/qtextstream.pro3
-rw-r--r--tests/auto/qtimer/tst_qtimer.cpp44
-rw-r--r--tests/auto/qvideosurfaceformat/tst_qvideosurfaceformat.cpp27
-rw-r--r--tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xml1
-rw-r--r--tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xsd12
-rw-r--r--tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp6
-rw-r--r--tests/benchmarks/corelib/tools/qregexp/main.cpp304
-rw-r--r--tests/benchmarks/corelib/tools/qregexp/qregexp.pro11
-rw-r--r--tests/benchmarks/corelib/tools/qregexp/qregexp.qrc6
-rw-r--r--tests/benchmarks/gui/image/blendbench/main.cpp32
-rw-r--r--tests/benchmarks/network/network.pro2
-rw-r--r--tests/manual/inputmethodhints/inputmethodhints.cpp99
-rw-r--r--tests/manual/inputmethodhints/inputmethodhints.h63
-rw-r--r--tests/manual/inputmethodhints/inputmethodhints.pro13
-rw-r--r--tests/manual/inputmethodhints/inputmethodhints.ui138
-rw-r--r--tests/manual/inputmethodhints/main.cpp53
73 files changed, 2938 insertions, 521 deletions
diff --git a/tests/auto/compilerwarnings/test_cpp.txt b/tests/auto/compilerwarnings/test_cpp.txt
index 62b35eb169..1d317b8ed8 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 82c327a677..8d344d86e1 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 0000000000..b47b5f26e7
--- /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 3e80c2c50d..ec867fefdb 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 0000000000..07601c709a
--- /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 b0c9c03b67..ec8f0485e2 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 d5a911aeb5..db1f1911d9 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 0000000000..54b5b68adb
--- /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 d76d360cbc..25ca157810 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 858c26d188..10805b44c7 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
new file mode 100644
index 0000000000..bc6cc9e6ca
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativepixmapcache/data/massive.png
Binary files differ
diff --git a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp
index 0c7780ce97..6b3622495e 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 0000000000..8decbf03a4
--- /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 0000000000..ad627ef1af
--- /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 0000000000..c2d30a0c11
--- /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 0000000000..b0743c0083
--- /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 0000000000..a3c4827828
--- /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 3b6a42018a..6ae27592b4 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 de8d222eca..1c1c04bf64 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
index 442ba9f1a9..16a7e108b7 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png
index a9ff20fa4e..116ce88627 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png
index 157bb991eb..13896d4e0a 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png
index 8c49acb576..5d180031e2 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png
index eb2bf54803..cd3387f99f 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png
new file mode 100644
index 0000000000..9f31c69893
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml
index 9595a5cc5b..06d32b6128 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 3bcab5aa2b..e6e1a70bae 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 2f985213d3..322e2e4586 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 1a82a4c47b..184148754d 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 5434ada4d8..9040b91d6d 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 0f6cdaa76f..8bf76208e5 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 0383e30f04..727f660b30 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 ef5ed22a30..30656e25da 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 55d75afd9a..7346f07aae 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 a771332b31..bda22ebf28 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 63320b2092..46bc6e7592 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 330f803b3b..425ac8984f 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 e33d0fe4fc..6512e19465 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 df75ae8540..ff398422cd 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 b9ece3849c..6e1b1e3e14 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 9ed212fd8c..a35e38e31d 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 96a97325bb..ce9bf13c25 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 2de09126c4..2d757e7e5d 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 61d59a10cb..1e382b8d4d 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 ea07323f3b..d0d26ee519 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 62c0c875a2..171d428e15 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 0000000000..416dd4da04
--- /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 d0509bb35e..963bf11d53 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 3557fc8969..accfa89e53 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 0c12974455..6c1dd8f30d 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 1d166f49e5..0ae5320b82 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 9d8c0b2b0d..a3f7f15781 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 8cfbcceed3..0b785e3dfe 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 0bcf067c4f..6cb13a9e06 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 efa2e856b3..b85032a942 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 0946c93ed5..cc41591756 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 079e69f4d4..dcc43d01e3 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 8346d7f132..a2dcc8108d 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 a0408ef509..8d213ed853 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 8a4307eb28..a4bfb8999c 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 0000000000..b17739ab7d
--- /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 0000000000..55557f1a81
--- /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 3517b5a426..092e966eff 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 ab9ed71e65..51cde95605 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 &quoted, 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 e0f47c98a1..ffdad12cef 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 0000000000..a7fe13c035
--- /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 92d1633686..f53654b9bd 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 4e83db27f1..ea0f821d5c 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 0000000000..0c00b8d209
--- /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 0000000000..988a4be0d2
--- /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 0000000000..7298ec66e1
--- /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 0000000000..d0dc01d61f
--- /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 0000000000..022bf3fbeb
--- /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();
+}