summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2009-05-14 04:49:39 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2009-05-14 04:49:39 (GMT)
commita598867353ed121e0b55e82af69253d0e94bb487 (patch)
tree1cdbd3cef513010d706fa6218abc43b9d78eac15
parentb1008e6a4f660866265083f6f4bd321a85cff377 (diff)
downloadQt-a598867353ed121e0b55e82af69253d0e94bb487.zip
Qt-a598867353ed121e0b55e82af69253d0e94bb487.tar.gz
Qt-a598867353ed121e0b55e82af69253d0e94bb487.tar.bz2
Array expressions test
-rw-r--r--src/declarative/qml/qmlengine.cpp4
-rw-r--r--tests/auto/declarative/qmlbindengine/qmlbindengine.pro4
-rw-r--r--tests/auto/declarative/qmlbindengine/testtypes.cpp4
-rw-r--r--tests/auto/declarative/qmlbindengine/testtypes.h116
-rw-r--r--tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp133
5 files changed, 149 insertions, 112 deletions
diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp
index 227aeb0..b2d3a9c 100644
--- a/src/declarative/qml/qmlengine.cpp
+++ b/src/declarative/qml/qmlengine.cpp
@@ -1027,9 +1027,7 @@ QVariant QmlExpression::value()
}
rv = QVariant::fromValue(list);
}
- } /*else if (svalue.isVariant()) {
- rv = svalue.toVariant();
- }*/ else if (svalue.isObject()) {
+ } else if (svalue.isObject()) {
QScriptValue objValue = svalue.data();
if (objValue.isValid())
rv = objValue.toVariant();
diff --git a/tests/auto/declarative/qmlbindengine/qmlbindengine.pro b/tests/auto/declarative/qmlbindengine/qmlbindengine.pro
index 800d9a0..4a38ac9 100644
--- a/tests/auto/declarative/qmlbindengine/qmlbindengine.pro
+++ b/tests/auto/declarative/qmlbindengine/qmlbindengine.pro
@@ -1,7 +1,9 @@
load(qttest_p4)
contains(QT_CONFIG,declarative): QT += declarative
macx:CONFIG -= app_bundle
-SOURCES += tst_qmlbindengine.cpp
+SOURCES += tst_qmlbindengine.cpp \
+ testtypes.cpp
+HEADERS += testtypes.h
# QMAKE_CXXFLAGS = -fprofile-arcs -ftest-coverage
# LIBS += -lgcov
diff --git a/tests/auto/declarative/qmlbindengine/testtypes.cpp b/tests/auto/declarative/qmlbindengine/testtypes.cpp
new file mode 100644
index 0000000..4bb0dc8
--- /dev/null
+++ b/tests/auto/declarative/qmlbindengine/testtypes.cpp
@@ -0,0 +1,4 @@
+#include "testtypes.h"
+
+QML_DEFINE_TYPE(MyQmlObject,MyQmlObject);
+QML_DEFINE_TYPE(MyQmlContainer,MyQmlContainer);
diff --git a/tests/auto/declarative/qmlbindengine/testtypes.h b/tests/auto/declarative/qmlbindengine/testtypes.h
new file mode 100644
index 0000000..5ba6216
--- /dev/null
+++ b/tests/auto/declarative/qmlbindengine/testtypes.h
@@ -0,0 +1,116 @@
+#ifndef TESTTYPES_H
+#define TESTTYPES_H
+
+#include <QtCore/qobject.h>
+#include <QtDeclarative/qml.h>
+#include <QtDeclarative/qmlexpression.h>
+
+class MyQmlObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(bool trueProperty READ trueProperty)
+ Q_PROPERTY(bool falseProperty READ falseProperty)
+ Q_PROPERTY(QString stringProperty READ stringProperty WRITE setStringProperty NOTIFY stringChanged)
+public:
+ MyQmlObject(): m_methodCalled(false), m_methodIntCalled(false) {}
+
+ bool trueProperty() const { return true; }
+ bool falseProperty() const { return false; }
+
+ QString stringProperty() const { return m_string; }
+ void setStringProperty(const QString &s)
+ {
+ if (s == m_string)
+ return;
+ m_string = s;
+ emit stringChanged();
+ }
+
+ bool methodCalled() const { return m_methodCalled; }
+ bool methodIntCalled() const { return m_methodIntCalled; }
+
+ QString string() const { return m_string; }
+signals:
+ void basicSignal();
+ void argumentSignal(int a, QString b, qreal c);
+ void stringChanged();
+
+public slots:
+ void method() { m_methodCalled = true; }
+ void method(int a) { if(a == 163) m_methodIntCalled = true; }
+ void setString(const QString &s) { m_string = s; }
+
+private:
+ friend class tst_qmlbindengine;
+ bool m_methodCalled;
+ bool m_methodIntCalled;
+
+ QString m_string;
+};
+
+QML_DECLARE_TYPE(MyQmlObject);
+
+class MyQmlContainer : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QList<MyQmlContainer*>* children READ children)
+public:
+ MyQmlContainer() {}
+
+ QList<MyQmlContainer*> *children() { return &m_children; }
+
+private:
+ QList<MyQmlContainer*> m_children;
+};
+
+QML_DECLARE_TYPE(MyQmlContainer);
+
+class MyExpression : public QmlExpression
+{
+public:
+ MyExpression(QmlContext *ctxt, const QString &expr)
+ : QmlExpression(ctxt, expr, 0), changed(false)
+ {
+ }
+
+ virtual void valueChanged() {
+ changed = true;
+ }
+ bool changed;
+};
+
+
+class MyDefaultObject1 : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int horseLegs READ horseLegs);
+ Q_PROPERTY(int antLegs READ antLegs);
+public:
+ int horseLegs() const { return 4; }
+ int antLegs() const { return 6; }
+};
+
+class MyDefaultObject2 : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int antLegs READ antLegs);
+ Q_PROPERTY(int emuLegs READ emuLegs);
+public:
+ int antLegs() const { return 5; } // Had an accident
+ int emuLegs() const { return 2; }
+};
+
+class MyDefaultObject3 : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int antLegs READ antLegs);
+ Q_PROPERTY(int humanLegs READ humanLegs);
+public:
+ int antLegs() const { return 7; } // Mutant
+ int humanLegs() const { return 2; }
+ int millipedeLegs() const { return 1000; }
+};
+
+
+#endif // TESTTYPES_H
+
diff --git a/tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp b/tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp
index 72c8953..16f52c5 100644
--- a/tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp
+++ b/tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp
@@ -3,68 +3,7 @@
#include <QtDeclarative/qmlengine.h>
#include <QtDeclarative/qmlexpression.h>
#include <QtDeclarative/qmlcontext.h>
-
-class MyQmlObject : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(bool trueProperty READ trueProperty)
- Q_PROPERTY(bool falseProperty READ falseProperty)
- Q_PROPERTY(QString stringProperty READ stringProperty WRITE setStringProperty NOTIFY stringChanged)
-public:
- MyQmlObject(): m_methodCalled(false), m_methodIntCalled(false) {}
-
- bool trueProperty() const { return true; }
- bool falseProperty() const { return false; }
-
- QString stringProperty() const { return m_string; }
- void setStringProperty(const QString &s)
- {
- if (s == m_string)
- return;
- m_string = s;
- emit stringChanged();
- }
-
- bool methodCalled() const { return m_methodCalled; }
- bool methodIntCalled() const { return m_methodIntCalled; }
-
- QString string() const { return m_string; }
-signals:
- void basicSignal();
- void argumentSignal(int a, QString b, qreal c);
- void stringChanged();
-
-public slots:
- void method() { m_methodCalled = true; }
- void method(int a) { if(a == 163) m_methodIntCalled = true; }
- void setString(const QString &s) { m_string = s; }
-
-private:
- friend class tst_qmlbindengine;
- bool m_methodCalled;
- bool m_methodIntCalled;
-
- QString m_string;
-};
-
-QML_DECLARE_TYPE(MyQmlObject);
-QML_DEFINE_TYPE(MyQmlObject,MyQmlObject);
-
-class MyQmlContainer : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QList<MyQmlContainer*>* children READ children)
-public:
- MyQmlContainer() {}
-
- QList<MyQmlContainer*> *children() { return &m_children; }
-
-private:
- QList<MyQmlContainer*> m_children;
-};
-
-QML_DECLARE_TYPE(MyQmlContainer);
-QML_DEFINE_TYPE(MyQmlContainer,MyQmlContainer);
+#include "testtypes.h"
#define TEST_FILE(filename) \
QUrl::fromLocalFile(QApplication::applicationDirPath() + "/" + filename)
@@ -82,6 +21,7 @@ private slots:
void bindingLoop();
void basicExpressions();
void basicExpressions_data();
+ void arrayExpressions();
void contextPropertiesTriggerReeval();
private:
@@ -158,52 +98,6 @@ void tst_qmlbindengine::bindingLoop()
QVERIFY(object != 0);
}
-class MyExpression : public QmlExpression
-{
-public:
- MyExpression(QmlContext *ctxt, const QString &expr)
- : QmlExpression(ctxt, expr, 0), changed(false)
- {
- }
-
- virtual void valueChanged() {
- changed = true;
- }
- bool changed;
-};
-
-
-class MyDefaultObject1 : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int horseLegs READ horseLegs);
- Q_PROPERTY(int antLegs READ antLegs);
-public:
- int horseLegs() const { return 4; }
- int antLegs() const { return 6; }
-};
-
-class MyDefaultObject2 : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int antLegs READ antLegs);
- Q_PROPERTY(int emuLegs READ emuLegs);
-public:
- int antLegs() const { return 5; } // Had an accident
- int emuLegs() const { return 2; }
-};
-
-class MyDefaultObject3 : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int antLegs READ antLegs);
- Q_PROPERTY(int humanLegs READ humanLegs);
-public:
- int antLegs() const { return 7; } // Mutant
- int humanLegs() const { return 2; }
- int millipedeLegs() const { return 1000; }
-};
-
void tst_qmlbindengine::basicExpressions_data()
{
QTest::addColumn<QString>("expression");
@@ -264,6 +158,29 @@ void tst_qmlbindengine::basicExpressions()
QCOMPARE(expr.value(), result);
}
+Q_DECLARE_METATYPE(QList<QObject *>);
+void tst_qmlbindengine::arrayExpressions()
+{
+ QObject obj1;
+ QObject obj2;
+ QObject obj3;
+
+ QmlContext context(engine.rootContext());
+ context.setContextProperty("a", &obj1);
+ context.setContextProperty("b", &obj2);
+ context.setContextProperty("c", &obj3);
+
+ MyExpression expr(&context, "[a, b, c, 10]");
+ QVariant result = expr.value();
+ QCOMPARE(result.userType(), qMetaTypeId<QList<QObject *> >());
+ QList<QObject *> list = qvariant_cast<QList<QObject *> >(result);
+ QCOMPARE(list.count(), 4);
+ QCOMPARE(list.at(0), &obj1);
+ QCOMPARE(list.at(1), &obj2);
+ QCOMPARE(list.at(2), &obj3);
+ QCOMPARE(list.at(3), (QObject *)0);
+}
+
// Tests that modifying a context property will reevaluate expressions
void tst_qmlbindengine::contextPropertiesTriggerReeval()
{