From f6d5b57a759133f20d9c74bf9770b1bcacbef6aa Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Thu, 14 May 2009 17:58:38 +1000 Subject: Add another binding test --- tests/auto/declarative/qmlbindengine/testtypes.h | 13 ++++- .../qmlbindengine/tst_qmlbindengine.cpp | 55 ++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/tests/auto/declarative/qmlbindengine/testtypes.h b/tests/auto/declarative/qmlbindengine/testtypes.h index 5ba6216..6a4bda6 100644 --- a/tests/auto/declarative/qmlbindengine/testtypes.h +++ b/tests/auto/declarative/qmlbindengine/testtypes.h @@ -11,8 +11,9 @@ class MyQmlObject : public QObject Q_PROPERTY(bool trueProperty READ trueProperty) Q_PROPERTY(bool falseProperty READ falseProperty) Q_PROPERTY(QString stringProperty READ stringProperty WRITE setStringProperty NOTIFY stringChanged) + Q_PROPERTY(QObject *objectProperty READ objectProperty WRITE setObjectProperty NOTIFY objectChanged); public: - MyQmlObject(): m_methodCalled(false), m_methodIntCalled(false) {} + MyQmlObject(): m_methodCalled(false), m_methodIntCalled(false), m_object(0) {} bool trueProperty() const { return true; } bool falseProperty() const { return false; } @@ -26,6 +27,14 @@ public: emit stringChanged(); } + QObject *objectProperty() const { return m_object; } + void setObjectProperty(QObject *obj) { + if (obj == m_object) + return; + m_object = obj; + emit objectChanged(); + } + bool methodCalled() const { return m_methodCalled; } bool methodIntCalled() const { return m_methodIntCalled; } @@ -34,6 +43,7 @@ signals: void basicSignal(); void argumentSignal(int a, QString b, qreal c); void stringChanged(); + void objectChanged(); public slots: void method() { m_methodCalled = true; } @@ -45,6 +55,7 @@ private: bool m_methodCalled; bool m_methodIntCalled; + QObject *m_object; QString m_string; }; diff --git a/tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp b/tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp index deaac00..dd82d4f 100644 --- a/tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp +++ b/tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp @@ -23,6 +23,7 @@ private slots: void basicExpressions_data(); void arrayExpressions(); void contextPropertiesTriggerReeval(); + void objectPropertiesTriggerReeval(); private: QmlEngine engine; @@ -249,6 +250,60 @@ void tst_qmlbindengine::contextPropertiesTriggerReeval() } +void tst_qmlbindengine::objectPropertiesTriggerReeval() +{ + QmlContext context(engine.rootContext()); + MyQmlObject object1; + MyQmlObject object2; + MyQmlObject object3; + context.setContextProperty("testObj", &object1); + + object1.setStringProperty(QLatin1String("Hello")); + object2.setStringProperty(QLatin1String("Dog")); + object3.setStringProperty(QLatin1String("Cat")); + + { + MyExpression expr(&context, "testObj.stringProperty"); + QCOMPARE(expr.changed, false); + QCOMPARE(expr.value(), QVariant("Hello")); + + object1.setStringProperty(QLatin1String("World")); + QCOMPARE(expr.changed, true); + QCOMPARE(expr.value(), QVariant("World")); + } + + { + MyExpression expr(&context, "testObj.objectProperty.stringProperty"); + QCOMPARE(expr.changed, false); + QCOMPARE(expr.value(), QVariant()); + + object1.setObjectProperty(&object2); + QCOMPARE(expr.changed, true); + expr.changed = false; + QCOMPARE(expr.value(), QVariant("Dog")); + + object1.setObjectProperty(&object3); + QCOMPARE(expr.changed, true); + expr.changed = false; + QCOMPARE(expr.value(), QVariant("Cat")); + + object1.setObjectProperty(0); + QCOMPARE(expr.changed, true); + expr.changed = false; + QCOMPARE(expr.value(), QVariant()); + + object1.setObjectProperty(&object3); + QCOMPARE(expr.changed, true); + expr.changed = false; + QCOMPARE(expr.value(), QVariant("Cat")); + + object3.setStringProperty("Donkey"); + QCOMPARE(expr.changed, true); + expr.changed = false; + QCOMPARE(expr.value(), QVariant("Donkey")); + } +} + QTEST_MAIN(tst_qmlbindengine) #include "tst_qmlbindengine.moc" -- cgit v0.12