mirror of
https://bitbucket.org/smil3y/katie.git
synced 2025-02-24 02:42:55 +00:00
add QDBusInterface test
Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
This commit is contained in:
parent
15a520820e
commit
f1064987fd
4 changed files with 1397 additions and 0 deletions
17
tests/auto/qdbusinterface/CMakeLists.txt
Normal file
17
tests/auto/qdbusinterface/CMakeLists.txt
Normal file
|
@ -0,0 +1,17 @@
|
|||
if(WITH_DBUS AND DBUS_FOUND)
|
||||
katie_test(tst_qdbusinterface
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tst_qdbusinterface.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/myobject.h
|
||||
)
|
||||
|
||||
target_link_libraries(tst_qdbusinterface KtDBus)
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||
katie_setup_target(qmyserver2
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/qmyserver/qmyserver.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/myobject.h
|
||||
)
|
||||
add_executable(qmyserver2 ${qmyserver2_SOURCES})
|
||||
|
||||
target_link_libraries(qmyserver2 KtCore KtDBus)
|
||||
endif()
|
156
tests/auto/qdbusinterface/myobject.h
Normal file
156
tests/auto/qdbusinterface/myobject.h
Normal file
|
@ -0,0 +1,156 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Copyright (C) 2016-2020 Ivailo Monev
|
||||
**
|
||||
** This file is part of the test suite of the Katie Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** 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.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU General Public License version 3.0 requirements will be
|
||||
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef MYOBJECT_H
|
||||
#define MYOBJECT_H
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtDBus/QtDBus>
|
||||
|
||||
Q_DECLARE_METATYPE(QVariantList)
|
||||
|
||||
class MyObject: public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_CLASSINFO("D-Bus Interface", "com.trolltech.QtDBus.MyObject")
|
||||
Q_CLASSINFO("D-Bus Introspection", ""
|
||||
" <interface name=\"com.trolltech.QtDBus.MyObject\" >\n"
|
||||
" <property access=\"readwrite\" type=\"i\" name=\"prop1\" />\n"
|
||||
" <property name=\"complexProp\" type=\"ai\" access=\"readwrite\">\n"
|
||||
" <annotation name=\"org.qtproject.QtDBus.QtTypeName\" value=\"QList<int>\"/>\n"
|
||||
" </property>\n"
|
||||
" <signal name=\"somethingHappened\" >\n"
|
||||
" <arg direction=\"out\" type=\"s\" />\n"
|
||||
" </signal>\n"
|
||||
" <method name=\"ping\" >\n"
|
||||
" <arg direction=\"in\" type=\"v\" name=\"ping\" />\n"
|
||||
" <arg direction=\"out\" type=\"v\" name=\"ping\" />\n"
|
||||
" </method>\n"
|
||||
" <method name=\"ping_invokable\" >\n"
|
||||
" <arg direction=\"in\" type=\"v\" name=\"ping_invokable\" />\n"
|
||||
" <arg direction=\"out\" type=\"v\" name=\"ping_invokable\" />\n"
|
||||
" </method>\n"
|
||||
" <method name=\"ping\" >\n"
|
||||
" <arg direction=\"in\" type=\"v\" name=\"ping1\" />\n"
|
||||
" <arg direction=\"in\" type=\"v\" name=\"ping2\" />\n"
|
||||
" <arg direction=\"out\" type=\"v\" name=\"pong1\" />\n"
|
||||
" <arg direction=\"out\" type=\"v\" name=\"pong2\" />\n"
|
||||
" </method>\n"
|
||||
" <method name=\"ping_invokable\" >\n"
|
||||
" <arg direction=\"in\" type=\"v\" name=\"ping1_invokable\" />\n"
|
||||
" <arg direction=\"in\" type=\"v\" name=\"ping2_invokable\" />\n"
|
||||
" <arg direction=\"out\" type=\"v\" name=\"pong1_invokable\" />\n"
|
||||
" <arg direction=\"out\" type=\"v\" name=\"pong2_invokable\" />\n"
|
||||
" </method>\n"
|
||||
" <method name=\"ping\" >\n"
|
||||
" <arg direction=\"in\" type=\"ai\" name=\"ping\" />\n"
|
||||
" <arg direction=\"out\" type=\"ai\" name=\"ping\" />\n"
|
||||
" <annotation name=\"org.qtproject.QtDBus.QtTypeName.In0\" value=\"QList<int>\"/>\n"
|
||||
" <annotation name=\"org.qtproject.QtDBus.QtTypeName.Out0\" value=\"QList<int>\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"ping_invokable\" >\n"
|
||||
" <arg direction=\"in\" type=\"ai\" name=\"ping_invokable\" />\n"
|
||||
" <arg direction=\"out\" type=\"ai\" name=\"ping_invokable\" />\n"
|
||||
" <annotation name=\"org.qtproject.QtDBus.QtTypeName.In0\" value=\"QList<int>\"/>\n"
|
||||
" <annotation name=\"org.qtproject.QtDBus.QtTypeName.Out0\" value=\"QList<int>\"/>\n"
|
||||
" </method>\n"
|
||||
" </interface>\n"
|
||||
"")
|
||||
Q_PROPERTY(int prop1 READ prop1 WRITE setProp1)
|
||||
Q_PROPERTY(QList<int> complexProp READ complexProp WRITE setComplexProp)
|
||||
|
||||
public:
|
||||
static int callCount;
|
||||
static QVariantList callArgs;
|
||||
MyObject()
|
||||
{
|
||||
QObject *subObject = new QObject(this);
|
||||
subObject->setObjectName("subObject");
|
||||
}
|
||||
|
||||
int m_prop1;
|
||||
int prop1() const
|
||||
{
|
||||
++callCount;
|
||||
return m_prop1;
|
||||
}
|
||||
void setProp1(int value)
|
||||
{
|
||||
++callCount;
|
||||
m_prop1 = value;
|
||||
}
|
||||
|
||||
QList<int> m_complexProp;
|
||||
QList<int> complexProp() const
|
||||
{
|
||||
++callCount;
|
||||
return m_complexProp;
|
||||
}
|
||||
void setComplexProp(const QList<int> &value)
|
||||
{
|
||||
++callCount;
|
||||
m_complexProp = value;
|
||||
}
|
||||
|
||||
Q_INVOKABLE void ping_invokable(QDBusMessage msg)
|
||||
{
|
||||
QDBusConnection sender = QDBusConnection::sender();
|
||||
if (!sender.isConnected())
|
||||
exit(1);
|
||||
|
||||
++callCount;
|
||||
callArgs = msg.arguments();
|
||||
|
||||
msg.setDelayedReply(true);
|
||||
if (!sender.send(msg.createReply(callArgs)))
|
||||
exit(1);
|
||||
}
|
||||
|
||||
public slots:
|
||||
|
||||
void ping(QDBusMessage msg)
|
||||
{
|
||||
QDBusConnection sender = QDBusConnection::sender();
|
||||
if (!sender.isConnected())
|
||||
exit(1);
|
||||
|
||||
++callCount;
|
||||
callArgs = msg.arguments();
|
||||
|
||||
msg.setDelayedReply(true);
|
||||
if (!sender.send(msg.createReply(callArgs)))
|
||||
exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
#endif // INTERFACE_H
|
156
tests/auto/qdbusinterface/qmyserver/qmyserver.cpp
Normal file
156
tests/auto/qdbusinterface/qmyserver/qmyserver.cpp
Normal file
|
@ -0,0 +1,156 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://www.qt.io/contact-us.
|
||||
**
|
||||
** 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 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU General Public License version 3.0 requirements will be
|
||||
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
#include <QtCore/QtCore>
|
||||
#include <QtDBus/QtDBus>
|
||||
|
||||
#include "../myobject.h"
|
||||
|
||||
static const char serviceName[] = "com.trolltech.autotests.qmyserver";
|
||||
static const char objectPath[] = "/com/trolltech/qmyserver";
|
||||
//static const char *interfaceName = serviceName;
|
||||
|
||||
int MyObject::callCount = 0;
|
||||
QVariantList MyObject::callArgs;
|
||||
|
||||
class MyServer : public QDBusServer
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_CLASSINFO("D-Bus Interface", "com.trolltech.autotests.qmyserver")
|
||||
|
||||
public:
|
||||
MyServer(QString addr = "unix:tmpdir=/tmp", QObject* parent = 0)
|
||||
: QDBusServer(addr, parent),
|
||||
m_conn("none")
|
||||
{
|
||||
connect(this, SIGNAL(newConnection(const QDBusConnection&)), SLOT(handleConnection(const QDBusConnection&)));
|
||||
}
|
||||
|
||||
public slots:
|
||||
QString address() const
|
||||
{
|
||||
return QDBusServer::address();
|
||||
}
|
||||
|
||||
bool isConnected() const
|
||||
{
|
||||
return m_conn.isConnected();
|
||||
}
|
||||
|
||||
void emitSignal(const QString &interface, const QString &name, const QString &arg)
|
||||
{
|
||||
QDBusMessage msg = QDBusMessage::createSignal("/", interface, name);
|
||||
msg << arg;
|
||||
m_conn.send(msg);
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
MyObject::callCount = 0;
|
||||
obj.m_complexProp.clear();
|
||||
}
|
||||
|
||||
int callCount()
|
||||
{
|
||||
return MyObject::callCount;
|
||||
}
|
||||
|
||||
QVariantList callArgs()
|
||||
{
|
||||
qDebug() << "callArgs" << MyObject::callArgs.count();
|
||||
return MyObject::callArgs;
|
||||
}
|
||||
|
||||
void setProp1(int val)
|
||||
{
|
||||
obj.m_prop1 = val;
|
||||
}
|
||||
|
||||
int prop1()
|
||||
{
|
||||
return obj.m_prop1;
|
||||
}
|
||||
|
||||
void setComplexProp(QList<int> val)
|
||||
{
|
||||
obj.m_complexProp = val;
|
||||
}
|
||||
|
||||
QList<int> complexProp()
|
||||
{
|
||||
return obj.m_complexProp;
|
||||
}
|
||||
|
||||
|
||||
private slots:
|
||||
void handleConnection(const QDBusConnection& con)
|
||||
{
|
||||
m_conn = con;
|
||||
m_conn.registerObject("/", &obj, QDBusConnection::ExportAllProperties
|
||||
| QDBusConnection::ExportAllSlots
|
||||
| QDBusConnection::ExportAllInvokables);
|
||||
}
|
||||
|
||||
private:
|
||||
QDBusConnection m_conn;
|
||||
MyObject obj;
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
|
||||
QDBusConnection con = QDBusConnection::sessionBus();
|
||||
if (!con.isConnected())
|
||||
exit(1);
|
||||
|
||||
if (!con.registerService(serviceName))
|
||||
exit(2);
|
||||
|
||||
MyServer server;
|
||||
con.registerObject(objectPath, &server, QDBusConnection::ExportAllSlots);
|
||||
|
||||
printf("ready.\n");
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
|
||||
#include "moc_qmyserver.cpp"
|
||||
#include "moc_myobject.h"
|
1068
tests/auto/qdbusinterface/tst_qdbusinterface.cpp
Normal file
1068
tests/auto/qdbusinterface/tst_qdbusinterface.cpp
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue