Remove "All rights reserved" line from license headers.
[profile/ivi/qtdeclarative.git] / tests / auto / declarative / qdeclarativeconnection / tst_qdeclarativeconnection.cpp
index f0edf40..0474b43 100644 (file)
@@ -1,8 +1,7 @@
 /****************************************************************************
 **
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
 **
 ** This file is part of the test suite of the Qt Toolkit.
 **
@@ -35,6 +34,7 @@
 **
 **
 **
+**
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
 #include <QtDeclarative/qdeclarativeengine.h>
 #include <QtDeclarative/qdeclarativecomponent.h>
 #include <private/qdeclarativeconnections_p.h>
-#include <private/qdeclarativeitem_p.h>
-#include "../../../shared/util.h"
+#include <private/qquickitem_p.h>
+#include "../../shared/util.h"
 #include <QtDeclarative/qdeclarativescriptstring.h>
 
-#ifdef Q_OS_SYMBIAN
-// In Symbian OS test data is located in applications private dir
-#define SRCDIR "."
-#endif
-
-class tst_qdeclarativeconnection : public QObject
-
+class tst_qdeclarativeconnection : public QDeclarativeDataTest
 {
     Q_OBJECT
 public:
@@ -68,6 +62,7 @@ private slots:
     void unknownSignals();
     void errors_data();
     void errors();
+    void moduleApiTarget();
 
 private:
     QDeclarativeEngine engine;
@@ -80,7 +75,7 @@ tst_qdeclarativeconnection::tst_qdeclarativeconnection()
 void tst_qdeclarativeconnection::defaultValues()
 {
     QDeclarativeEngine engine;
-    QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-connection3.qml"));
+    QDeclarativeComponent c(&engine, testFileUrl("test-connection3.qml"));
     QDeclarativeConnections *item = qobject_cast<QDeclarativeConnections*>(c.create());
 
     QVERIFY(item != 0);
@@ -92,7 +87,7 @@ void tst_qdeclarativeconnection::defaultValues()
 void tst_qdeclarativeconnection::properties()
 {
     QDeclarativeEngine engine;
-    QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-connection2.qml"));
+    QDeclarativeComponent c(&engine, testFileUrl("test-connection2.qml"));
     QDeclarativeConnections *item = qobject_cast<QDeclarativeConnections*>(c.create());
 
     QVERIFY(item != 0);
@@ -106,8 +101,8 @@ void tst_qdeclarativeconnection::properties()
 void tst_qdeclarativeconnection::connection()
 {
     QDeclarativeEngine engine;
-    QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/test-connection.qml"));
-    QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(c.create());
+    QDeclarativeComponent c(&engine, testFileUrl("test-connection.qml"));
+    QQuickItem *item = qobject_cast<QQuickItem*>(c.create());
 
     QVERIFY(item != 0);
 
@@ -123,8 +118,8 @@ void tst_qdeclarativeconnection::connection()
 void tst_qdeclarativeconnection::trimming()
 {
     QDeclarativeEngine engine;
-    QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/trimming.qml"));
-    QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(c.create());
+    QDeclarativeComponent c(&engine, testFileUrl("trimming.qml"));
+    QQuickItem *item = qobject_cast<QQuickItem*>(c.create());
 
     QVERIFY(item != 0);
 
@@ -144,19 +139,19 @@ void tst_qdeclarativeconnection::trimming()
 void tst_qdeclarativeconnection::targetChanged()
 {
     QDeclarativeEngine engine;
-    QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/connection-targetchange.qml"));
-    QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(c.create());
+    QDeclarativeComponent c(&engine, testFileUrl("connection-targetchange.qml"));
+    QQuickItem *item = qobject_cast<QQuickItem*>(c.create());
     QVERIFY(item != 0);
 
     QDeclarativeConnections *connections = item->findChild<QDeclarativeConnections*>("connections");
     QVERIFY(connections);
 
-    QDeclarativeItem *item1 = item->findChild<QDeclarativeItem*>("item1");
+    QQuickItem *item1 = item->findChild<QQuickItem*>("item1");
     QVERIFY(item1);
 
     item1->setWidth(200);
 
-    QDeclarativeItem *item2 = item->findChild<QDeclarativeItem*>("item2");
+    QQuickItem *item2 = item->findChild<QQuickItem*>("item2");
     QVERIFY(item2);
     QVERIFY(connections->target() == item2);
 
@@ -181,7 +176,7 @@ void tst_qdeclarativeconnection::unknownSignals()
     QFETCH(QString, file);
     QFETCH(QString, error);
 
-    QUrl url = QUrl::fromLocalFile(SRCDIR "/data/" + file);
+    QUrl url = testFileUrl(file);
     if (!error.isEmpty()) {
         QTest::ignoreMessage(QtWarningMsg, (url.toString() + error).toLatin1());
     } else {
@@ -190,7 +185,7 @@ void tst_qdeclarativeconnection::unknownSignals()
 
     QDeclarativeEngine engine;
     QDeclarativeComponent c(&engine, url);
-    QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(c.create());
+    QQuickItem *item = qobject_cast<QQuickItem*>(c.create());
     QVERIFY(item != 0);
 
     // check that connection is created (they are all runtime errors)
@@ -219,7 +214,7 @@ void tst_qdeclarativeconnection::errors()
     QFETCH(QString, file);
     QFETCH(QString, error);
 
-    QUrl url = QUrl::fromLocalFile(SRCDIR "/data/" + file);
+    QUrl url = testFileUrl(file);
 
     QDeclarativeEngine engine;
     QDeclarativeComponent c(&engine, url);
@@ -229,6 +224,69 @@ void tst_qdeclarativeconnection::errors()
     QCOMPARE(errors.at(0).description(), error);
 }
 
+
+class MyTestModuleApi : public QObject
+{
+Q_OBJECT
+Q_PROPERTY(int intProp READ intProp WRITE setIntProp NOTIFY intPropChanged)
+
+public:
+    MyTestModuleApi(QObject *parent = 0) : QObject(parent), m_intProp(0), m_changeCount(0) {}
+    ~MyTestModuleApi() {}
+
+    Q_INVOKABLE int otherMethod(int val) { return val + 4; }
+
+    int intProp() const { return m_intProp; }
+    void setIntProp(int val)
+    {
+        if (++m_changeCount % 3 == 0) emit otherSignal();
+        m_intProp = val; emit intPropChanged();
+    }
+
+signals:
+    void intPropChanged();
+    void otherSignal();
+
+private:
+    int m_intProp;
+    int m_changeCount;
+};
+
+static QObject *module_api_factory(QDeclarativeEngine *engine, QJSEngine *scriptEngine)
+{
+   Q_UNUSED(engine)
+   Q_UNUSED(scriptEngine)
+   MyTestModuleApi *api = new MyTestModuleApi();
+   return api;
+}
+
+// QTBUG-20937
+void tst_qdeclarativeconnection::moduleApiTarget()
+{
+    qmlRegisterModuleApi("MyTestModuleApi", 1, 0, module_api_factory);
+    QDeclarativeComponent component(&engine, testFileUrl("moduleapi-target.qml"));
+    QObject *object = component.create();
+    QVERIFY(object != 0);
+
+    QCOMPARE(object->property("moduleIntPropChangedCount").toInt(), 0);
+    QCOMPARE(object->property("moduleOtherSignalCount").toInt(), 0);
+
+    QMetaObject::invokeMethod(object, "setModuleIntProp");
+    QCOMPARE(object->property("moduleIntPropChangedCount").toInt(), 1);
+    QCOMPARE(object->property("moduleOtherSignalCount").toInt(), 0);
+
+    QMetaObject::invokeMethod(object, "setModuleIntProp");
+    QCOMPARE(object->property("moduleIntPropChangedCount").toInt(), 2);
+    QCOMPARE(object->property("moduleOtherSignalCount").toInt(), 0);
+
+    // the module API emits otherSignal every 3 times the int property changes.
+    QMetaObject::invokeMethod(object, "setModuleIntProp");
+    QCOMPARE(object->property("moduleIntPropChangedCount").toInt(), 3);
+    QCOMPARE(object->property("moduleOtherSignalCount").toInt(), 1);
+
+    delete object;
+}
+
 QTEST_MAIN(tst_qdeclarativeconnection)
 
 #include "tst_qdeclarativeconnection.moc"