aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-03-29 01:00:40 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-03-29 01:00:40 +0100
commitf385f6b39f2b60f1f6c59973a030b03437abbef2 (patch)
treec0ec45ee3f20b82b7f42e784fb10616edb8a2c75 /tests
parentd9f849b33591458fbb66724e4e6d59a1b87678f2 (diff)
parent4407f1f81813216bf64021eab7dcecc88d3056fe (diff)
Merge remote-tracking branch 'origin/5.13' into dev
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qml/qjsengine/tst_qjsengine.cpp13
-rw-r--r--tests/auto/qml/qqmlengine/tst_qqmlengine.cpp13
-rw-r--r--tests/auto/qml/qquickfolderlistmodel/BLACKLIST3
-rw-r--r--tests/auto/qml/qv4mm/tst_qv4mm.cpp54
-rw-r--r--tests/auto/quick/qquickpathview/data/pathview5.qml65
-rw-r--r--tests/auto/quick/qquickpathview/tst_qquickpathview.cpp23
-rw-r--r--tests/manual/scenegraph_lancelot/data/text/text_wrap_elide_maxlines.qml133
7 files changed, 284 insertions, 20 deletions
diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
index 4af5e1d850..4cc37f0380 100644
--- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp
+++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
@@ -243,6 +243,7 @@ private slots:
void importExportErrors();
void equality();
+ void aggressiveGc();
public:
Q_INVOKABLE QJSValue throwingCppMethod1();
@@ -4798,6 +4799,18 @@ void tst_QJSEngine::equality()
QCOMPARE(ok.toString(), QString("ok"));
}
+void tst_QJSEngine::aggressiveGc()
+{
+ const QByteArray origAggressiveGc = qgetenv("QV4_MM_AGGRESSIVE_GC");
+ qputenv("QV4_MM_AGGRESSIVE_GC", "true");
+ {
+ QJSEngine engine; // ctor crashes if core allocation methods don't properly scope things.
+ QJSValue obj = engine.newObject();
+ QVERIFY(obj.isObject());
+ }
+ qputenv("QV4_MM_AGGRESSIVE_GC", origAggressiveGc);
+}
+
QTEST_MAIN(tst_QJSEngine)
#include "tst_qjsengine.moc"
diff --git a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
index f58ae38264..b9cb6b70d2 100644
--- a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
+++ b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
@@ -80,6 +80,7 @@ private slots:
void qrcUrls();
void cppSignalAndEval();
void singletonInstance();
+ void aggressiveGc();
public slots:
QObject *createAQObjectForOwnershipTest ()
@@ -1043,6 +1044,18 @@ void tst_qqmlengine::singletonInstance()
}
}
+void tst_qqmlengine::aggressiveGc()
+{
+ const QByteArray origAggressiveGc = qgetenv("QV4_MM_AGGRESSIVE_GC");
+ qputenv("QV4_MM_AGGRESSIVE_GC", "true");
+ {
+ QQmlEngine engine; // freezing should not run into infinite recursion
+ QJSValue obj = engine.newObject();
+ QVERIFY(obj.isObject());
+ }
+ qputenv("QV4_MM_AGGRESSIVE_GC", origAggressiveGc);
+}
+
QTEST_MAIN(tst_qqmlengine)
#include "tst_qqmlengine.moc"
diff --git a/tests/auto/qml/qquickfolderlistmodel/BLACKLIST b/tests/auto/qml/qquickfolderlistmodel/BLACKLIST
new file mode 100644
index 0000000000..642fdea741
--- /dev/null
+++ b/tests/auto/qml/qquickfolderlistmodel/BLACKLIST
@@ -0,0 +1,3 @@
+[nameFilters]
+msvc-2015
+msvc-2017
diff --git a/tests/auto/qml/qv4mm/tst_qv4mm.cpp b/tests/auto/qml/qv4mm/tst_qv4mm.cpp
index b57b716ed6..1e34b79954 100644
--- a/tests/auto/qml/qv4mm/tst_qv4mm.cpp
+++ b/tests/auto/qml/qv4mm/tst_qv4mm.cpp
@@ -112,26 +112,40 @@ void tst_qv4mm::accessParentOnDestruction()
void tst_qv4mm::clearICParent()
{
- QJSEngine engine;
- QJSValue value = engine.evaluate(
- "(function() {\n"
- " var test = Object.create(null);\n"
- " for (var i = 0; i < 100; i++)\n"
- " test[(\"key_\"+i)] = true;\n"
- " for (var i = 0; i < 100; i++)\n"
- " delete test[\"key_\" + i];\n"
- " return test;\n"
- "})();"
- );
- engine.collectGarbage();
- QV4::Value *v4Value = QJSValuePrivate::getValue(&value);
- QVERIFY(v4Value);
- QV4::Heap::Object *v4Object = v4Value->toObject(engine.handle());
- QVERIFY(v4Object);
-
- // It should garbage collect the parents of the internalClass,
- // as those aren't used anywhere else.
- QCOMPARE(v4Object->internalClass->parent, nullptr);
+ QV4::ExecutionEngine engine;
+ QV4::Scope scope(engine.rootContext());
+ QV4::ScopedObject object(scope, engine.newObject());
+
+ // Keep identifiers in a separate array so that we don't have to allocate them in the loop that
+ // should test the GC on InternalClass allocations.
+ QV4::ScopedArrayObject identifiers(scope, engine.newArrayObject());
+ for (uint i = 0; i < 16 * 1024; ++i) {
+ QV4::Scope scope(&engine);
+ QV4::ScopedString s(scope);
+ s = engine.newIdentifier(QString::fromLatin1("key%1").arg(i));
+ identifiers->push_back(s);
+
+ QV4::ScopedValue v(scope);
+ v->setDouble(i);
+ object->insertMember(s, v);
+ }
+
+ // When allocating the InternalClass objects required for deleting properties, the GC should
+ // eventually run and remove all but the last two.
+ // If we ever manage to avoid allocating the InternalClasses in the first place we will need
+ // to change this test.
+ for (uint i = 0; i < 16 * 1024; ++i) {
+ QV4::Scope scope(&engine);
+ QV4::ScopedString s(scope, identifiers->getIndexed(i));
+ QV4::Scoped<QV4::InternalClass> ic(scope, object->internalClass());
+ QVERIFY(ic->d()->parent != nullptr);
+ object->deleteProperty(s->toPropertyKey());
+ QVERIFY(object->internalClass() != ic->d());
+ QCOMPARE(object->internalClass()->parent, ic->d());
+ if (ic->d()->parent == nullptr)
+ return;
+ }
+ QFAIL("Garbage collector was not triggered by large amount of InternalClasses");
}
QTEST_MAIN(tst_qv4mm)
diff --git a/tests/auto/quick/qquickpathview/data/pathview5.qml b/tests/auto/quick/qquickpathview/data/pathview5.qml
new file mode 100644
index 0000000000..479c5dc500
--- /dev/null
+++ b/tests/auto/quick/qquickpathview/data/pathview5.qml
@@ -0,0 +1,65 @@
+import QtQuick 2.0
+
+PathView {
+ property int countclick: 0
+ id: pathview
+ y: 0
+ width: 348
+ height: 480
+
+ interactive: false
+
+ cacheItemCount: 10
+ currentIndex: 2
+ pathItemCount: 4
+ highlightMoveDuration: 1000
+ highlightRangeMode : PathView.StrictlyEnforceRange
+ preferredHighlightBegin: 0.5
+ preferredHighlightEnd: 0.5
+ snapMode : PathView.SnapOneItem
+
+ path: Path {
+ id: leftPath
+ startX: pathview.width / 2 - 800
+ startY: pathview.height / 2 - 800
+
+ PathArc {
+ x: pathview.width / 2 - 800
+ y: pathview.height / 2 + 800
+ radiusX: 800
+ radiusY: 800
+ direction: PathArc.Clockwise
+ }
+ }
+
+ model: ListModel {
+ id: model
+ ListElement { objectName:"aqua"; name: "aqua" ;mycolor:"aqua"}
+ ListElement { objectName:"blue"; name: "blue" ;mycolor:"blue"}
+ ListElement { objectName:"blueviolet"; name: "blueviolet" ;mycolor:"blueviolet"}
+ ListElement { objectName:"brown"; name: "brown" ;mycolor:"brown"}
+ ListElement { objectName:"chartreuse"; name: "chartreuse" ;mycolor:"chartreuse"}
+ }
+
+ delegate: Item {
+ id: revolveritem
+ objectName: model.objectName
+
+ width: pathview.width
+ height: pathview.height
+
+ Rectangle
+ {
+ id:myRectangle
+ color: mycolor
+ width: pathview.width -20
+ height: pathview.height -20
+
+ Text {
+ anchors.centerIn: parent
+ text: "index:"+index
+ color: "white"
+ }
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp b/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
index bf38d2d926..1a5ce39318 100644
--- a/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
+++ b/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
@@ -104,6 +104,7 @@ private slots:
void offset_data();
void offset();
void setCurrentIndex();
+ void setCurrentIndexWrap();
void resetModel();
void propertyChanges();
void pathChanges();
@@ -1138,6 +1139,28 @@ void tst_QQuickPathView::setCurrentIndex()
QCOMPARE(currentIndexSpy.count(), 1);
}
+void tst_QQuickPathView::setCurrentIndexWrap()
+{
+ QScopedPointer<QQuickView> window(createView());
+ window->setSource(testFileUrl("pathview5.qml"));
+ window->show();
+ qApp->processEvents();
+
+ QQuickPathView *pathview = qobject_cast<QQuickPathView*>(window->rootObject());
+ QVERIFY(pathview);
+
+ // set current index to last item
+ pathview->setCurrentIndex(4);
+ // set currentIndex to first item, then quickly set it back (QTBUG-74508)
+ QSignalSpy currentIndexSpy(pathview, SIGNAL(currentIndexChanged()));
+ QSignalSpy movementStartedSpy(pathview, SIGNAL(movementStarted()));
+ pathview->setCurrentIndex(0);
+ pathview->setCurrentIndex(4);
+ QCOMPARE(pathview->currentIndex(), 4);
+ QCOMPARE(currentIndexSpy.count(), 2);
+ QCOMPARE(movementStartedSpy.count(), 0);
+}
+
void tst_QQuickPathView::resetModel()
{
QScopedPointer<QQuickView> window(createView());
diff --git a/tests/manual/scenegraph_lancelot/data/text/text_wrap_elide_maxlines.qml b/tests/manual/scenegraph_lancelot/data/text/text_wrap_elide_maxlines.qml
new file mode 100644
index 0000000000..927f2b3148
--- /dev/null
+++ b/tests/manual/scenegraph_lancelot/data/text/text_wrap_elide_maxlines.qml
@@ -0,0 +1,133 @@
+import QtQuick 2.0
+
+//test wrapping and elision when maximumLineCount is set
+
+Item {
+ width: 320
+ height: 480
+ Rectangle {
+ id: text_area
+ color: "light yellow"
+ x: 50
+ y: 0
+ height: parent.height
+ width: 150
+ }
+ Text {
+ id: text_0000
+ wrapMode: Text.WrapAnywhere
+ text: "The quick brown fox jumps over the lazy dog."
+ x: text_area.x
+ y: text_area.y
+ width: text_area.width
+ maximumLineCount: 2
+ elide: Text.ElideRight
+ color: "red"
+ font.family: "Arial"
+ font.pixelSize: 22
+ }
+ Text {
+ id: text_0001
+ wrapMode: Text.Wrap
+ text: text_0000.text
+ anchors.top: text_0000.bottom
+ anchors.left: text_0000.left
+ width: text_0000.width
+ maximumLineCount: text_0000.maximumLineCount
+ elide: Text.ElideRight
+ color: "blue"
+ font.family: text_0000.font.family
+ font.pixelSize: text_0000.font.pixelSize
+ }
+ Text {
+ id: text_0002
+ wrapMode: Text.WordWrap
+ text: text_0000.text
+ anchors.top: text_0001.bottom
+ anchors.left: text_0000.left
+ width: text_0000.width
+ maximumLineCount: text_0000.maximumLineCount
+ elide: Text.ElideRight
+ color: "green"
+ font.family: text_0000.font.family
+ font.pixelSize: text_0000.font.pixelSize
+ }
+ Text {
+ id: text_0003
+ wrapMode: Text.WrapAnywhere
+ text: "ABCDEFGHIJKL 1234567890123"
+ anchors.top: text_0002.bottom
+ anchors.left: text_0000.left
+ width: 150
+ maximumLineCount: 2
+ elide: Text.ElideRight
+ color: "red"
+ font.family: text_0000.font.family
+ font.pixelSize: text_0000.font.pixelSize
+ }
+ Text {
+ id: text_0004
+ wrapMode: Text.Wrap
+ text: text_0003.text
+ anchors.top: text_0003.bottom
+ anchors.left: text_0000.left
+ width: text_0000.width
+ maximumLineCount: text_0000.maximumLineCount
+ elide: Text.ElideRight
+ color: "blue"
+ font.family: text_0000.font.family
+ font.pixelSize: text_0000.font.pixelSize
+ }
+ Text {
+ id: text_0005
+ wrapMode: Text.WordWrap
+ text: text_0003.text
+ anchors.top: text_0004.bottom
+ anchors.left: text_0000.left
+ width: text_0000.width
+ maximumLineCount: text_0000.maximumLineCount
+ elide: Text.ElideRight
+ color: "green"
+ font.family: text_0000.font.family
+ font.pixelSize: text_0000.font.pixelSize
+ }
+ Text {
+ id: text_0006
+ wrapMode: Text.WrapAnywhere
+ text: "The quick brown 1234567890123"
+ anchors.top: text_0005.bottom
+ anchors.left: text_0000.left
+ width: 150
+ maximumLineCount: 2
+ elide: Text.ElideRight
+ color: "red"
+ font.family: text_0000.font.family
+ font.pixelSize: text_0000.font.pixelSize
+ }
+ Text {
+ id: text_0007
+ wrapMode: Text.Wrap
+ text: text_0006.text
+ anchors.top: text_0006.bottom
+ anchors.left: text_0000.left
+ width: text_0000.width
+ maximumLineCount: text_0000.maximumLineCount
+ elide: Text.ElideRight
+ color: "blue"
+ font.family: text_0000.font.family
+ font.pixelSize: text_0000.font.pixelSize
+ }
+ Text {
+ id: text_0008
+ wrapMode: Text.WordWrap
+ text: text_0006.text
+ anchors.top: text_0007.bottom
+ anchors.left: text_0000.left
+ width: text_0000.width
+ maximumLineCount: text_0000.maximumLineCount
+ elide: Text.ElideRight
+ color: "green"
+ font.family: text_0000.font.family
+ font.pixelSize: text_0000.font.pixelSize
+ }
+}