summaryrefslogtreecommitdiffstats
path: root/tests/auto/declarative/debugger
diff options
context:
space:
mode:
authorBea Lam <bea.lam@nokia.com>2009-11-10 06:36:43 (GMT)
committerBea Lam <bea.lam@nokia.com>2009-11-10 06:36:43 (GMT)
commitc411c39557d31b94efb5813be9e9ef43c05a9093 (patch)
treedcc9d361b7320186ca15d4936265a8cd64a84716 /tests/auto/declarative/debugger
parent223618527a4d59bce1c373b1cae5a0627884efc0 (diff)
downloadQt-c411c39557d31b94efb5813be9e9ef43c05a9093.zip
Qt-c411c39557d31b94efb5813be9e9ef43c05a9093.tar.gz
Qt-c411c39557d31b94efb5813be9e9ef43c05a9093.tar.bz2
Add QmlDebugClient and QmlDebugService tests and move debugger-related
tests to debugger subdir.
Diffstat (limited to 'tests/auto/declarative/debugger')
-rw-r--r--tests/auto/declarative/debugger/debugger.pro4
-rw-r--r--tests/auto/declarative/debugger/debuggerutil.cpp102
-rw-r--r--tests/auto/declarative/debugger/debuggerutil_p.h84
-rw-r--r--tests/auto/declarative/debugger/qmldebugclient/qmldebugclient.pro7
-rw-r--r--tests/auto/declarative/debugger/qmldebugclient/tst_qmldebugclient.cpp190
-rw-r--r--tests/auto/declarative/debugger/qmldebugservice/qmldebugservice.pro7
-rw-r--r--tests/auto/declarative/debugger/qmldebugservice/tst_qmldebugservice.cpp222
7 files changed, 616 insertions, 0 deletions
diff --git a/tests/auto/declarative/debugger/debugger.pro b/tests/auto/declarative/debugger/debugger.pro
new file mode 100644
index 0000000..f4a4476
--- /dev/null
+++ b/tests/auto/declarative/debugger/debugger.pro
@@ -0,0 +1,4 @@
+TEMPLATE = subdirs
+SUBDIRS += qmldebug \
+ qmldebugclient \
+ qmldebugservice
diff --git a/tests/auto/declarative/debugger/debuggerutil.cpp b/tests/auto/declarative/debugger/debuggerutil.cpp
new file mode 100644
index 0000000..8e93407
--- /dev/null
+++ b/tests/auto/declarative/debugger/debuggerutil.cpp
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QSignalSpy>
+#include <QEventLoop>
+#include <QTimer>
+
+#include <private/qmldebugclient_p.h>
+#include <private/qmldebugservice_p.h>
+
+#include "debuggerutil_p.h"
+
+namespace QmlDebuggerTest {
+
+ void waitForSignal(QObject *receiver, const char *member) {
+ QEventLoop loop;
+ QTimer timer;
+ QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
+ QObject::connect(receiver, member, &loop, SLOT(quit()));
+ timer.start(5000);
+ loop.exec();
+ }
+
+}
+
+
+EchoService::EchoService(const QString &s, QObject *parent)
+ : QmlDebugService(s, parent), enabled(false)
+{
+}
+
+void EchoService::messageReceived(const QByteArray &ba)
+{
+ sendMessage(ba);
+}
+
+void EchoService::enabledChanged(bool e)
+{
+ emit enabledStateChanged();
+ enabled = e;
+}
+
+
+MyQmlDebugClient::MyQmlDebugClient(const QString &s, QmlDebugConnection *c)
+ : QmlDebugClient(s, c)
+{
+}
+
+QByteArray MyQmlDebugClient::waitForResponse()
+{
+ QSignalSpy spy(this, SIGNAL(serverMessage(QByteArray)));
+ QmlDebuggerTest::waitForSignal(this, SIGNAL(serverMessage(QByteArray)));
+ if (spy.count() == 0) {
+ qWarning() << "tst_QmlDebugClient: no response from server!";
+ return QByteArray();
+ }
+ return spy.at(0).at(0).value<QByteArray>();
+}
+
+void MyQmlDebugClient::messageReceived(const QByteArray &ba)
+{
+ emit serverMessage(ba);
+}
+
+
diff --git a/tests/auto/declarative/debugger/debuggerutil_p.h b/tests/auto/declarative/debugger/debuggerutil_p.h
new file mode 100644
index 0000000..155d550
--- /dev/null
+++ b/tests/auto/declarative/debugger/debuggerutil_p.h
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QSignalSpy>
+#include <QEventLoop>
+#include <QTimer>
+
+#include <private/qmldebugclient_p.h>
+#include <private/qmldebugservice_p.h>
+
+namespace QmlDebuggerTest {
+
+ void waitForSignal(QObject *receiver, const char *member);
+}
+
+class EchoService : public QmlDebugService
+{
+ Q_OBJECT
+public:
+ EchoService(const QString &s, QObject *parent = 0);
+ bool enabled;
+
+signals:
+ void enabledStateChanged();
+
+protected:
+ virtual void messageReceived(const QByteArray &ba);
+
+ virtual void enabledChanged(bool e);
+};
+
+class MyQmlDebugClient : public QmlDebugClient
+{
+ Q_OBJECT
+public:
+ MyQmlDebugClient(const QString &s, QmlDebugConnection *c);
+
+ QByteArray waitForResponse();
+
+signals:
+ void serverMessage(const QByteArray &);
+
+protected:
+ virtual void messageReceived(const QByteArray &ba);
+};
+
+
diff --git a/tests/auto/declarative/debugger/qmldebugclient/qmldebugclient.pro b/tests/auto/declarative/debugger/qmldebugclient/qmldebugclient.pro
new file mode 100644
index 0000000..6e68cd5
--- /dev/null
+++ b/tests/auto/declarative/debugger/qmldebugclient/qmldebugclient.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += network declarative
+macx:CONFIG -= app_bundle
+
+HEADERS += ../debuggerutil_p.h
+SOURCES += tst_qmldebugclient.cpp \
+ ../debuggerutil.cpp
diff --git a/tests/auto/declarative/debugger/qmldebugclient/tst_qmldebugclient.cpp b/tests/auto/declarative/debugger/qmldebugclient/tst_qmldebugclient.cpp
new file mode 100644
index 0000000..db33061
--- /dev/null
+++ b/tests/auto/declarative/debugger/qmldebugclient/tst_qmldebugclient.cpp
@@ -0,0 +1,190 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QSignalSpy>
+#include <QTimer>
+#include <QHostAddress>
+#include <QDebug>
+#include <QThread>
+
+#include <QtDeclarative/qmlengine.h>
+
+#include <private/qmldebug_p.h>
+#include <private/qmlenginedebug_p.h>
+#include <private/qmldebugclient_p.h>
+#include <private/qmldebugservice_p.h>
+
+#include "../debuggerutil_p.h"
+
+class tst_QmlDebugClient : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QmlDebugClient(QmlDebugConnection *conn, QmlEngine *engine)
+ : m_conn(conn), m_engine(engine) {}
+
+ QmlDebugConnection *m_conn;
+ QmlEngine *m_engine;
+
+private slots:
+ void name();
+ void isEnabled();
+ void setEnabled();
+ void isConnected();
+ void sendMessage();
+};
+
+void tst_QmlDebugClient::name()
+{
+ QString name = "tst_QmlDebugClient::name()";
+
+ QmlDebugClient client(name, m_conn);
+ QCOMPARE(client.name(), name);
+}
+
+void tst_QmlDebugClient::isEnabled()
+{
+ QmlDebugClient client("tst_QmlDebugClient::isEnabled()", m_conn);
+ QCOMPARE(client.isEnabled(), false);
+}
+
+void tst_QmlDebugClient::setEnabled()
+{
+ EchoService service("tst_QmlDebugClient::setEnabled()");
+ MyQmlDebugClient client("tst_QmlDebugClient::setEnabled()", m_conn);
+
+ QCOMPARE(service.isEnabled(), false);
+
+ client.setEnabled(true);
+ QCOMPARE(client.isEnabled(), true);
+ QmlDebuggerTest::waitForSignal(&service, SIGNAL(enabledStateChanged()));
+ QCOMPARE(service.isEnabled(), true);
+
+ client.setEnabled(false);
+ QCOMPARE(client.isEnabled(), false);
+ QmlDebuggerTest::waitForSignal(&service, SIGNAL(enabledStateChanged()));
+ QCOMPARE(service.isEnabled(), false);
+}
+
+void tst_QmlDebugClient::isConnected()
+{
+ QmlDebugClient client1("tst_QmlDebugClient::isConnected() A", m_conn);
+ QCOMPARE(client1.isConnected(), true);
+
+ QmlDebugConnection conn;
+ QmlDebugClient client2("tst_QmlDebugClient::isConnected() B", &conn);
+ QCOMPARE(client2.isConnected(), false);
+
+ QmlDebugClient client3("tst_QmlDebugClient::isConnected() C", 0);
+ QCOMPARE(client3.isConnected(), false);
+
+ // duplicate plugin name
+ QTest::ignoreMessage(QtWarningMsg, "QmlDebugClient: Conflicting plugin name \"tst_QmlDebugClient::isConnected() A\" ");
+ QmlDebugClient client4("tst_QmlDebugClient::isConnected() A", m_conn);
+ QCOMPARE(client4.isConnected(), false);
+}
+
+void tst_QmlDebugClient::sendMessage()
+{
+ EchoService service("tst_QmlDebugClient::sendMessage()");
+ MyQmlDebugClient client("tst_QmlDebugClient::sendMessage()", m_conn);
+
+ QByteArray msg = "hello!";
+
+ client.sendMessage(msg);
+ QByteArray resp = client.waitForResponse();
+ QCOMPARE(resp, msg);
+}
+
+
+
+class tst_QmlDebugClient_Thread : public QThread
+{
+ Q_OBJECT
+public:
+ void run() {
+ QTest::qWait(1000);
+ connectToEngine();
+ }
+
+ QPointer<QmlEngine> m_engine;
+
+signals:
+ void testsFinished();
+
+public slots:
+
+ void connectToEngine()
+ {
+ QmlDebugConnection conn;
+ conn.connectToHost("127.0.0.1", 3768);
+ bool ok = conn.waitForConnected(5000);
+ Q_ASSERT(ok);
+ while (!m_engine)
+ QTest::qWait(50);
+
+ tst_QmlDebugClient test(&conn, m_engine);
+ QTest::qExec(&test);
+ emit testsFinished();
+ }
+};
+
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ qputenv("QML_DEBUG_SERVER_PORT", "3768");
+
+ tst_QmlDebugClient_Thread thread;
+ QObject::connect(&thread, SIGNAL(testsFinished()), qApp, SLOT(quit()));
+ thread.start();
+
+ QmlEngine engine; // blocks until client connects
+
+ // start the test
+ thread.m_engine = &engine;
+
+ return app.exec();
+
+}
+
+#include "tst_qmldebugclient.moc"
diff --git a/tests/auto/declarative/debugger/qmldebugservice/qmldebugservice.pro b/tests/auto/declarative/debugger/qmldebugservice/qmldebugservice.pro
new file mode 100644
index 0000000..1b6762c
--- /dev/null
+++ b/tests/auto/declarative/debugger/qmldebugservice/qmldebugservice.pro
@@ -0,0 +1,7 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += network declarative
+macx:CONFIG -= app_bundle
+
+HEADERS += ../debuggerutil_p.h
+SOURCES += tst_qmldebugservice.cpp \
+ ../debuggerutil.cpp
diff --git a/tests/auto/declarative/debugger/qmldebugservice/tst_qmldebugservice.cpp b/tests/auto/declarative/debugger/qmldebugservice/tst_qmldebugservice.cpp
new file mode 100644
index 0000000..224e7e1
--- /dev/null
+++ b/tests/auto/declarative/debugger/qmldebugservice/tst_qmldebugservice.cpp
@@ -0,0 +1,222 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <QSignalSpy>
+#include <QTimer>
+#include <QHostAddress>
+#include <QDebug>
+#include <QThread>
+
+#include <QtDeclarative/qmlengine.h>
+
+#include <private/qmldebug_p.h>
+#include <private/qmlenginedebug_p.h>
+#include <private/qmldebugclient_p.h>
+#include <private/qmldebugservice_p.h>
+
+#include "../debuggerutil_p.h"
+
+class tst_QmlDebugService : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QmlDebugService(QmlDebugConnection *conn, QmlEngine *engine)
+ : m_conn(conn), m_engine(engine) {}
+
+ QmlDebugConnection *m_conn;
+ QmlEngine *m_engine;
+
+private slots:
+ void name();
+ void isEnabled();
+ void enabledChanged();
+ void sendMessage();
+ void idForObject();
+ void objectForId();
+ void objectToString();
+};
+
+void tst_QmlDebugService::name()
+{
+ QString name = "tst_QmlDebugService::name()";
+
+ QmlDebugService service(name);
+ QCOMPARE(service.name(), name);
+}
+
+void tst_QmlDebugService::isEnabled()
+{
+ EchoService service("tst_QmlDebugService::isEnabled()", m_conn);
+ QCOMPARE(service.isEnabled(), false);
+
+ MyQmlDebugClient client("tst_QmlDebugService::isEnabled()", m_conn);
+ client.setEnabled(true);
+ QmlDebuggerTest::waitForSignal(&service, SIGNAL(enabledStateChanged()));
+ QCOMPARE(service.isEnabled(), true);
+
+ QTest::ignoreMessage(QtWarningMsg, "QmlDebugService: Conflicting plugin name \"tst_QmlDebugService::isEnabled()\" ");
+ QmlDebugService duplicate("tst_QmlDebugService::isEnabled()", m_conn);
+ QCOMPARE(duplicate.isEnabled(), false);
+}
+
+void tst_QmlDebugService::enabledChanged()
+{
+ EchoService service("tst_QmlDebugService::enabledChanged()");
+ MyQmlDebugClient client("tst_QmlDebugService::enabledChanged()", m_conn);
+
+ QCOMPARE(service.enabled, false);
+
+ client.setEnabled(true);
+ QmlDebuggerTest::waitForSignal(&service, SIGNAL(enabledStateChanged()));
+ QCOMPARE(service.enabled, true);
+}
+
+void tst_QmlDebugService::sendMessage()
+{
+ EchoService service("tst_QmlDebugService::sendMessage()");
+ MyQmlDebugClient client("tst_QmlDebugService::sendMessage()", m_conn);
+
+ QByteArray msg = "hello!";
+
+ client.sendMessage(msg);
+ QByteArray resp = client.waitForResponse();
+ QCOMPARE(resp, msg);
+}
+
+void tst_QmlDebugService::idForObject()
+{
+ QCOMPARE(QmlDebugService::idForObject(0), -1);
+
+ QObject *objA = new QObject;
+
+ int idA = QmlDebugService::idForObject(objA);
+ QVERIFY(idA >= 0);
+ QCOMPARE(QmlDebugService::objectForId(idA), objA);
+
+ int idAA = QmlDebugService::idForObject(objA);
+ QCOMPARE(idAA, idA);
+
+ QObject *objB = new QObject;
+ int idB = QmlDebugService::idForObject(objB);
+ QVERIFY(idB != idA);
+ QCOMPARE(QmlDebugService::objectForId(idB), objB);
+
+ delete objA;
+ delete objB;
+}
+
+void tst_QmlDebugService::objectForId()
+{
+ QCOMPARE(QmlDebugService::objectForId(-1), static_cast<QObject*>(0));
+ QCOMPARE(QmlDebugService::objectForId(1), static_cast<QObject*>(0));
+
+ QObject *obj = new QObject;
+ int id = QmlDebugService::idForObject(obj);
+ QCOMPARE(QmlDebugService::objectForId(id), obj);
+
+ delete obj;
+ QCOMPARE(QmlDebugService::objectForId(id), static_cast<QObject*>(0));
+}
+
+void tst_QmlDebugService::objectToString()
+{
+ QCOMPARE(QmlDebugService::objectToString(0), QString("NULL"));
+
+ QObject *obj = new QObject;
+ QCOMPARE(QmlDebugService::objectToString(obj), QString("QObject: <unnamed>"));
+
+ obj->setObjectName("Hello");
+ QCOMPARE(QmlDebugService::objectToString(obj), QString("QObject: Hello"));
+}
+
+
+class tst_QmlDebugService_Thread : public QThread
+{
+ Q_OBJECT
+public:
+ void run() {
+ QTest::qWait(1000);
+ connectToEngine();
+ }
+
+ QPointer<QmlEngine> m_engine;
+
+signals:
+ void testsFinished();
+
+public slots:
+
+ void connectToEngine()
+ {
+ QmlDebugConnection conn;
+ conn.connectToHost("127.0.0.1", 3768);
+ bool ok = conn.waitForConnected(5000);
+ Q_ASSERT(ok);
+ while (!m_engine)
+ QTest::qWait(50);
+
+ tst_QmlDebugService test(&conn, m_engine);
+ QTest::qExec(&test);
+ emit testsFinished();
+ }
+};
+
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ qputenv("QML_DEBUG_SERVER_PORT", "3768");
+
+ tst_QmlDebugService_Thread thread;
+ QObject::connect(&thread, SIGNAL(testsFinished()), qApp, SLOT(quit()));
+ thread.start();
+
+ QmlEngine engine; // blocks until client connects
+
+ // start the test
+ thread.m_engine = &engine;
+
+ return app.exec();
+
+}
+
+#include "tst_qmldebugservice.moc"