diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2011-10-11 14:21:42 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-10-18 03:20:24 +0200 |
commit | 910cd60ef998a41434105478fb6df6efc0b94113 (patch) | |
tree | 07c4e134bf8bfdc92d89d56520a63ff2ff5b97d9 /tests/auto | |
parent | 277ee9a676cb976b27a7b8667cac1ec0ba1e4ce0 (diff) |
Simplify expression guard logic
Change-Id: I7d191bc8786452c5a1f14d024ff62d223adebd8b
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
Diffstat (limited to 'tests/auto')
4 files changed, 42 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/doubleEvaluate.qml b/tests/auto/declarative/qdeclarativeecmascript/data/doubleEvaluate.qml new file mode 100644 index 0000000000..0532715432 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/doubleEvaluate.qml @@ -0,0 +1,6 @@ +import Qt.test 1.0 + +WriteCounter { + property int x: 0 + value: if (1) x + x +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp b/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp index 5bd0287c1b..513705d697 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp @@ -195,6 +195,7 @@ void registerTypes() qmlRegisterType<CircularReferenceHandle>("Qt.test", 1, 0, "CircularReferenceHandle"); qmlRegisterType<MyDynamicCreationDestructionObject>("Qt.test", 1, 0, "MyDynamicCreationDestructionObject"); + qmlRegisterType<WriteCounter>("Qt.test", 1, 0, "WriteCounter"); } #include "testtypes.moc" diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h index 5357a63678..7684ddd438 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h +++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h @@ -1131,6 +1131,23 @@ private: int *m_dtorCount; }; +class WriteCounter : public QObject +{ + Q_OBJECT + Q_PROPERTY(int value READ value WRITE setValue); +public: + WriteCounter() : m_value(0), m_count(0) {} + + int value() const { return m_value; } + void setValue(int v) { m_value = v; ++m_count; } + + int count() const { return m_count; } + +private: + int m_value; + int m_count; +}; + void registerTypes(); #endif // TESTTYPES_H diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 3feecfc2ac..4f1cdccc04 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -207,6 +207,7 @@ private slots: void dynamicString(); void include(); void signalHandlers(); + void doubleEvaluate(); void callQtInvokables(); void invokableObjectArg(); @@ -4763,6 +4764,23 @@ void tst_qdeclarativeecmascript::automaticSemicolon() QVERIFY(object != 0); } +// Makes sure that a binding isn't double re-evaluated when it depends on the same variable twice +void tst_qdeclarativeecmascript::doubleEvaluate() +{ + QDeclarativeComponent component(&engine, TEST_FILE("doubleEvaluate.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + WriteCounter *wc = qobject_cast<WriteCounter *>(object); + QVERIFY(wc != 0); + QCOMPARE(wc->count(), 1); + + wc->setProperty("x", 9); + + QCOMPARE(wc->count(), 2); + + delete object; +} + QTEST_MAIN(tst_qdeclarativeecmascript) #include "tst_qdeclarativeecmascript.moc" |