aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/qml/qqmlecmascript/data/bindingOnQPropertyContextProperty.qml17
-rw-r--r--tests/auto/qml/qqmlecmascript/testtypes.cpp6
-rw-r--r--tests/auto/qml/qqmlecmascript/testtypes.h9
-rw-r--r--tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp18
4 files changed, 47 insertions, 3 deletions
diff --git a/tests/auto/qml/qqmlecmascript/data/bindingOnQPropertyContextProperty.qml b/tests/auto/qml/qqmlecmascript/data/bindingOnQPropertyContextProperty.qml
new file mode 100644
index 0000000000..85d5f34e69
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/bindingOnQPropertyContextProperty.qml
@@ -0,0 +1,17 @@
+import Qt.test 1.0
+import QtQuick 2
+
+Item {
+ id: root
+ property ClassWithQProperty2 testee: null
+ Repeater {
+ model: 2
+ Item {
+ ClassWithQProperty2 {
+ id: myself
+ value: index+1
+ Component.onCompleted: {if (index == 1) {root.testee = myself}}
+ }
+ }
+ }
+}
diff --git a/tests/auto/qml/qqmlecmascript/testtypes.cpp b/tests/auto/qml/qqmlecmascript/testtypes.cpp
index 2059650584..e7f2756ec3 100644
--- a/tests/auto/qml/qqmlecmascript/testtypes.cpp
+++ b/tests/auto/qml/qqmlecmascript/testtypes.cpp
@@ -456,6 +456,11 @@ void FloatingQObject::componentComplete()
Q_ASSERT(!parent());
}
+void ClassWithQProperty2::callback()
+{
+ Q_UNUSED(this->value.value()); // force evaluation
+}
+
void registerTypes()
{
qmlRegisterType<MyQmlObject>("Qt.test", 1,0, "MyQmlObjectAlias");
@@ -550,6 +555,7 @@ void registerTypes()
qmlRegisterType<ClashingNames>("Qt.test", 1, 0, "ClashingNames");
qmlRegisterType<ClassWithQProperty>("Qt.test", 1, 0, "ClassWithQProperty");
+ qmlRegisterType<ClassWithQProperty2>("Qt.test", 1, 0, "ClassWithQProperty2");
}
#include "testtypes.moc"
diff --git a/tests/auto/qml/qqmlecmascript/testtypes.h b/tests/auto/qml/qqmlecmascript/testtypes.h
index 514dfb6f8f..725624781b 100644
--- a/tests/auto/qml/qqmlecmascript/testtypes.h
+++ b/tests/auto/qml/qqmlecmascript/testtypes.h
@@ -1746,6 +1746,15 @@ public slots:
void selection(const QItemSelection &is, int n = 0) { funcCalled = QLatin1String("QItemSelection"); }
};
+struct ClassWithQProperty2 : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(float value)
+public:
+ void callback();
+ QNotifiedProperty<float, &ClassWithQProperty2::callback> value;
+};
+
void registerTypes();
#endif // TESTTYPES_H
diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
index 52b2afe727..deb949e7a5 100644
--- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
+++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
@@ -383,6 +383,7 @@ private slots:
void semicolonAfterProperty();
void hugeStack();
void bindingOnQProperty();
+ void bindingOnQPropertyContextProperty();
void urlConstruction();
void urlPropertyInvalid();
void urlPropertySet();
@@ -9279,17 +9280,28 @@ void tst_qqmlecmascript::bindingOnQProperty()
QScopedPointer<QObject> test(component.create());
test->setProperty("externalValue", 42);
QCOMPARE(test->property("value").toInt(), 42);
- // Value hasn't changed yet...
- QCOMPARE(test->property("changeHandlerCount").toInt(), 0);
+ QCOMPARE(test->property("changeHandlerCount").toInt(), 1);
test->setProperty("externalValue", 100);
QCOMPARE(test->property("value").toInt(), 100);
- QCOMPARE(test->property("changeHandlerCount").toInt(), 1);
+ QCOMPARE(test->property("changeHandlerCount").toInt(), 2);
QVERIFY(qobject_cast<ClassWithQProperty*>(test.data()));
QProperty<float> &qprop = static_cast<ClassWithQProperty*>(test.data())->value;
QVERIFY(qprop.hasBinding());
}
+void tst_qqmlecmascript::bindingOnQPropertyContextProperty()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("bindingOnQPropertyContextProperty.qml"));
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+ QScopedPointer<QObject> test(component.create());
+ QVERIFY(!test.isNull());
+ auto classWithQProperty = test->property("testee").value<ClassWithQProperty2 *>();
+ QVERIFY(classWithQProperty);
+ QCOMPARE(classWithQProperty->value.value(), 2);
+}
+
void tst_qqmlecmascript::urlConstruction()
{
QQmlEngine qmlengine;