summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2009-05-14 05:42:25 (GMT)
committerMartin Jones <martin.jones@nokia.com>2009-05-14 05:42:25 (GMT)
commit3de4816d054b92a9dbac3c7830b52ca66fa052e3 (patch)
tree43e1587790ec132f9dcd036e53feee72a07d0065
parent309e8a96af899c612ea26b73fc97d9d377bc9819 (diff)
parentb1008e6a4f660866265083f6f4bd321a85cff377 (diff)
downloadQt-3de4816d054b92a9dbac3c7830b52ca66fa052e3.zip
Qt-3de4816d054b92a9dbac3c7830b52ca66fa052e3.tar.gz
Qt-3de4816d054b92a9dbac3c7830b52ca66fa052e3.tar.bz2
Merge branch 'kinetic-declarativeui' of git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
-rw-r--r--tests/auto/declarative/qmlbindengine/bindingLoop.txt12
-rw-r--r--tests/auto/declarative/qmlbindengine/boolPropertiesEvaluateAsBool.1.txt3
-rw-r--r--tests/auto/declarative/qmlbindengine/boolPropertiesEvaluateAsBool.2.txt3
-rw-r--r--tests/auto/declarative/qmlbindengine/methods.1.txt4
-rw-r--r--tests/auto/declarative/qmlbindengine/methods.2.txt4
-rw-r--r--tests/auto/declarative/qmlbindengine/qmlbindengine.pro4
-rw-r--r--tests/auto/declarative/qmlbindengine/signalAssignment.1.txt3
-rw-r--r--tests/auto/declarative/qmlbindengine/signalAssignment.2.txt3
-rw-r--r--tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp117
9 files changed, 142 insertions, 11 deletions
diff --git a/tests/auto/declarative/qmlbindengine/bindingLoop.txt b/tests/auto/declarative/qmlbindengine/bindingLoop.txt
new file mode 100644
index 0000000..e27a76c
--- /dev/null
+++ b/tests/auto/declarative/qmlbindengine/bindingLoop.txt
@@ -0,0 +1,12 @@
+MyQmlContainer {
+ children : [
+ MyQmlObject {
+ id: Object1
+ stringProperty: "hello" + Object2.stringProperty
+ },
+ MyQmlObject {
+ id: Object2
+ stringProperty: "hello" + Object1.stringProperty
+ }
+ ]
+}
diff --git a/tests/auto/declarative/qmlbindengine/boolPropertiesEvaluateAsBool.1.txt b/tests/auto/declarative/qmlbindengine/boolPropertiesEvaluateAsBool.1.txt
new file mode 100644
index 0000000..7368ff6
--- /dev/null
+++ b/tests/auto/declarative/qmlbindengine/boolPropertiesEvaluateAsBool.1.txt
@@ -0,0 +1,3 @@
+MyQmlObject {
+ stringProperty: trueProperty?'pass':'fail'
+}
diff --git a/tests/auto/declarative/qmlbindengine/boolPropertiesEvaluateAsBool.2.txt b/tests/auto/declarative/qmlbindengine/boolPropertiesEvaluateAsBool.2.txt
new file mode 100644
index 0000000..c74493e
--- /dev/null
+++ b/tests/auto/declarative/qmlbindengine/boolPropertiesEvaluateAsBool.2.txt
@@ -0,0 +1,3 @@
+MyQmlObject {
+ stringProperty: falseProperty?'fail':'pass'
+}
diff --git a/tests/auto/declarative/qmlbindengine/methods.1.txt b/tests/auto/declarative/qmlbindengine/methods.1.txt
new file mode 100644
index 0000000..35279e0
--- /dev/null
+++ b/tests/auto/declarative/qmlbindengine/methods.1.txt
@@ -0,0 +1,4 @@
+MyQmlObject {
+ id: MyObject
+ onBasicSignal: MyObject.method()
+}
diff --git a/tests/auto/declarative/qmlbindengine/methods.2.txt b/tests/auto/declarative/qmlbindengine/methods.2.txt
new file mode 100644
index 0000000..352913a
--- /dev/null
+++ b/tests/auto/declarative/qmlbindengine/methods.2.txt
@@ -0,0 +1,4 @@
+MyQmlObject {
+ id: MyObject
+ onBasicSignal: MyObject.method(163)
+}
diff --git a/tests/auto/declarative/qmlbindengine/qmlbindengine.pro b/tests/auto/declarative/qmlbindengine/qmlbindengine.pro
index 6d84931..800d9a0 100644
--- a/tests/auto/declarative/qmlbindengine/qmlbindengine.pro
+++ b/tests/auto/declarative/qmlbindengine/qmlbindengine.pro
@@ -1,3 +1,7 @@
load(qttest_p4)
contains(QT_CONFIG,declarative): QT += declarative
+macx:CONFIG -= app_bundle
SOURCES += tst_qmlbindengine.cpp
+
+# QMAKE_CXXFLAGS = -fprofile-arcs -ftest-coverage
+# LIBS += -lgcov
diff --git a/tests/auto/declarative/qmlbindengine/signalAssignment.1.txt b/tests/auto/declarative/qmlbindengine/signalAssignment.1.txt
new file mode 100644
index 0000000..ca682fa
--- /dev/null
+++ b/tests/auto/declarative/qmlbindengine/signalAssignment.1.txt
@@ -0,0 +1,3 @@
+MyQmlObject {
+ onBasicSignal: setString('pass')
+}
diff --git a/tests/auto/declarative/qmlbindengine/signalAssignment.2.txt b/tests/auto/declarative/qmlbindengine/signalAssignment.2.txt
new file mode 100644
index 0000000..5efd583
--- /dev/null
+++ b/tests/auto/declarative/qmlbindengine/signalAssignment.2.txt
@@ -0,0 +1,3 @@
+MyQmlObject {
+ onArgumentSignal: setString('pass ' + a + ' ' + b + ' ' + c)
+}
diff --git a/tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp b/tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp
index 9a14abb..72c8953 100644
--- a/tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp
+++ b/tests/auto/declarative/qmlbindengine/tst_qmlbindengine.cpp
@@ -66,6 +66,9 @@ private:
QML_DECLARE_TYPE(MyQmlContainer);
QML_DEFINE_TYPE(MyQmlContainer,MyQmlContainer);
+#define TEST_FILE(filename) \
+ QUrl::fromLocalFile(QApplication::applicationDirPath() + "/" + filename)
+
class tst_qmlbindengine : public QObject
{
Q_OBJECT
@@ -77,6 +80,8 @@ private slots:
void methods();
void signalAssignment();
void bindingLoop();
+ void basicExpressions();
+ void basicExpressions_data();
void contextPropertiesTriggerReeval();
private:
@@ -86,13 +91,13 @@ private:
void tst_qmlbindengine::boolPropertiesEvaluateAsBool()
{
{
- QmlComponent component(&engine, "MyQmlObject { stringProperty: trueProperty?'pass':'fail' }");
+ QmlComponent component(&engine, TEST_FILE("boolPropertiesEvaluateAsBool.1.txt"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->stringProperty(), QLatin1String("pass"));
}
{
- QmlComponent component(&engine, "MyQmlObject { stringProperty: falseProperty?'fail':'pass' }");
+ QmlComponent component(&engine, TEST_FILE("boolPropertiesEvaluateAsBool.2.txt"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->stringProperty(), QLatin1String("pass"));
@@ -102,7 +107,7 @@ void tst_qmlbindengine::boolPropertiesEvaluateAsBool()
void tst_qmlbindengine::signalAssignment()
{
{
- QmlComponent component(&engine, "MyQmlObject { onBasicSignal: setString('pass') }");
+ QmlComponent component(&engine, TEST_FILE("signalAssignment.1.txt"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->string(), QString());
@@ -111,7 +116,7 @@ void tst_qmlbindengine::signalAssignment()
}
{
- QmlComponent component(&engine, "MyQmlObject { onArgumentSignal: setString('pass ' + a + ' ' + b + ' ' + c) }");
+ QmlComponent component(&engine, TEST_FILE("signalAssignment.2.txt"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->string(), QString());
@@ -123,7 +128,7 @@ void tst_qmlbindengine::signalAssignment()
void tst_qmlbindengine::methods()
{
{
- QmlComponent component(&engine, "MyQmlObject { id: MyObject; onBasicSignal: MyObject.method() }");
+ QmlComponent component(&engine, TEST_FILE("methods.1.txt"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->methodCalled(), false);
@@ -134,7 +139,7 @@ void tst_qmlbindengine::methods()
}
{
- QmlComponent component(&engine, "MyQmlObject { id: MyObject; onBasicSignal: MyObject.method(163) }");
+ QmlComponent component(&engine, TEST_FILE("methods.2.txt"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->methodCalled(), false);
@@ -147,11 +152,8 @@ void tst_qmlbindengine::methods()
void tst_qmlbindengine::bindingLoop()
{
- QmlComponent component(&engine, "MyQmlContainer { children : [ "\
- "MyQmlObject { id: Object1; stringProperty: \"hello\" + Object2.stringProperty }, "\
- "MyQmlObject { id: Object2; stringProperty: \"hello\" + Object1.stringProperty } ] }");
- //### ignoreMessage doesn't seem to work here
- //QTest::ignoreMessage(QtWarningMsg, "QML MyQmlObject (unknown location): Binding loop detected for property \"stringProperty\"");
+ QmlComponent component(&engine, TEST_FILE("bindingLoop.txt"));
+ QTest::ignoreMessage(QtWarningMsg, "QML MyQmlObject (unknown location): Binding loop detected for property \"stringProperty\" ");
QObject *object = component.create();
QVERIFY(object != 0);
}
@@ -170,6 +172,99 @@ public:
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");
+ QTest::addColumn<QVariant>("result");
+ QTest::addColumn<bool>("nest");
+
+ QTest::newRow("Context property") << "a" << QVariant(1944) << false;
+ QTest::newRow("Context property") << "a" << QVariant(1944) << true;
+ QTest::newRow("Context property expression") << "a * 2" << QVariant(3888) << false;
+ QTest::newRow("Context property expression") << "a * 2" << QVariant(3888) << true;
+ QTest::newRow("Overridden context property") << "b" << QVariant("Milk") << false;
+ QTest::newRow("Overridden context property") << "b" << QVariant("Cow") << true;
+ QTest::newRow("Object property") << "object.stringProperty" << QVariant("Object1") << false;
+ QTest::newRow("Object property") << "object.stringProperty" << QVariant("Object1") << true;
+ QTest::newRow("Overridden object property") << "objectOverride.stringProperty" << QVariant("Object2") << false;
+ QTest::newRow("Overridden object property") << "objectOverride.stringProperty" << QVariant("Object3") << true;
+ QTest::newRow("Default object property") << "horseLegs" << QVariant(4) << false;
+ QTest::newRow("Default object property") << "antLegs" << QVariant(6) << false;
+ QTest::newRow("Default object property") << "emuLegs" << QVariant(2) << false;
+ QTest::newRow("Nested default object property") << "horseLegs" << QVariant(4) << true;
+ QTest::newRow("Nested default object property") << "antLegs" << QVariant(7) << true;
+ QTest::newRow("Nested default object property") << "emuLegs" << QVariant(2) << true;
+ QTest::newRow("Nested default object property") << "humanLegs" << QVariant(2) << true;
+ QTest::newRow("Context property override default object property") << "millipedeLegs" << QVariant(100) << true;
+}
+
+void tst_qmlbindengine::basicExpressions()
+{
+ QFETCH(QString, expression);
+ QFETCH(QVariant, result);
+ QFETCH(bool, nest);
+
+ MyQmlObject object1;
+ MyQmlObject object2;
+ MyQmlObject object3;
+ MyDefaultObject1 default1;
+ MyDefaultObject2 default2;
+ MyDefaultObject3 default3;
+ object1.setStringProperty("Object1");
+ object2.setStringProperty("Object2");
+ object3.setStringProperty("Object3");
+
+ QmlContext context(engine.rootContext());
+ QmlContext nestedContext(&context);
+
+ context.addDefaultObject(&default1);
+ context.addDefaultObject(&default2);
+ context.setContextProperty("a", QVariant(1944));
+ context.setContextProperty("b", QVariant("Milk"));
+ context.setContextProperty("object", &object1);
+ context.setContextProperty("objectOverride", &object2);
+ nestedContext.addDefaultObject(&default3);
+ nestedContext.setContextProperty("b", QVariant("Cow"));
+ nestedContext.setContextProperty("objectOverride", &object3);
+ nestedContext.setContextProperty("millipedeLegs", QVariant(100));
+
+ MyExpression expr(nest?&nestedContext:&context, expression);
+ QCOMPARE(expr.value(), result);
+}
+
+// Tests that modifying a context property will reevaluate expressions
void tst_qmlbindengine::contextPropertiesTriggerReeval()
{
QmlContext context(engine.rootContext());