--- /dev/null
+/** ***** QxtRPCPeer loopback test ******/
+#include <QxtRPCPeer>
+#include <qxtfifo.h>
+#include <QCoreApplication>
+#include <QTest>
+#include <QSignalSpy>
+#include <QBuffer>
+#include <QDebug>
+#include <QByteArray>
+#include <QTcpSocket>
+
+class RPCTest: public QObject
+{
+ Q_OBJECT
+private:
+ QxtRPCPeer* peer;
+signals:
+ void wave(QString);
+ void counterwave(QString);
+ void networkedwave(quint64,QString);
+
+
+private slots:
+ void initTestCase()
+ {}
+
+
+
+ void loopback()
+ {
+ QxtFifo io;
+ QxtRPCPeer peer(&io);
+ QVERIFY2(peer.attachSignal (this, SIGNAL( wave ( QString ) ) ),"cannot attach signal");
+ QVERIFY2(peer.attachSlot ( SIGNAL( wave ( QString ) ),this, SIGNAL( counterwave(QString )) ),"cannot attach slot");
+
+ QSignalSpy spy(this, SIGNAL(counterwave(QString)));
+ QSignalSpy spyr(&io, SIGNAL(readyRead()));
+
+ emit(wave("world"));
+
+ QCoreApplication::processEvents ();
+ QCoreApplication::processEvents ();
+
+ QVERIFY2 (spyr.count()> 0, "buffer not emitting readyRead" );
+
+ QVERIFY2 (spy.count()> 0, "no signal received" );
+ QVERIFY2 (spy.count()< 2, "wtf, two signals received?" );
+
+ QList<QVariant> arguments = spy.takeFirst();
+ QVERIFY2(arguments.at(0).toString()=="world","argument missmatch");
+ }
+ void directcall()
+ {
+ QxtFifo io;
+ QxtRPCPeer peer(&io);
+ QVERIFY2(peer.attachSlot ( SIGNAL( wave ( QString ) ),this, SIGNAL( counterwave(QString )) ),"cannot attach slot");
+
+ QSignalSpy spy(this, SIGNAL(counterwave(QString)));
+ QSignalSpy spyr(&io, SIGNAL(readyRead()));
+ peer.call(SIGNAL(wave ( QString ) ),QString("world"));
+
+ QCoreApplication::processEvents ();
+ QCoreApplication::processEvents ();
+
+
+ QVERIFY2 (spyr.count()> 0, "buffer not emitting readyRead" );
+
+ QVERIFY2 (spy.count()> 0, "no signal received" );
+ QVERIFY2 (spy.count()< 2, "wtf, two signals received?" );
+
+ QList<QVariant> arguments = spy.takeFirst();
+ QVERIFY2(arguments.at(0).toString()=="world","argument missmatch");
+ }
+
+ void TcpServerIo()
+ {
+ QxtRPCPeer server(QxtRPCPeer::Server);
+ QVERIFY2(server.attachSlot (SIGNAL(wave(QString)),this,SIGNAL(networkedwave(quint64,QString))),"cannot attach slot");
+
+
+ QVERIFY(server.listen (QHostAddress::LocalHost, 23444));
+
+
+ QxtRPCPeer client(QxtRPCPeer::Client);
+ client.connect (QHostAddress::LocalHost, 23444);
+ QVERIFY(qobject_cast<QTcpSocket*>(client.socket())->waitForConnected ( 30000 ));
+
+
+ QSignalSpy spy(this, SIGNAL(networkedwave(quint64,QString)));
+ client.call(SIGNAL(wave(QString)),QString("world"));
+
+
+ QCoreApplication::processEvents ();
+ QCoreApplication::processEvents ();
+ QCoreApplication::processEvents ();
+
+ QVERIFY2 (spy.count()> 0, "no signal received" );
+ QVERIFY2 (spy.count()< 2, "wtf, two signals received?" );
+
+ QList<QVariant> arguments = spy.takeFirst();
+ QVERIFY2(arguments.at(1).toString()=="world","argument missmatch");
+ }
+ void cleanupTestCase()
+ {}
+};
+
+QTEST_MAIN(RPCTest)
+#include "main.moc"