We now have a current svn snapshot of libqxt in our contrib dir, and
[quassel.git] / src / contrib / libqxt-2007-10-24 / tests / bind / main.cpp
diff --git a/src/contrib/libqxt-2007-10-24/tests/bind/main.cpp b/src/contrib/libqxt-2007-10-24/tests/bind/main.cpp
new file mode 100644 (file)
index 0000000..ece8b8e
--- /dev/null
@@ -0,0 +1,97 @@
+#include <QTest>
+#include <QObject>
+#include <qxtmetaobject.h>
+#include <qxtboundcfunction.h>
+#include <QSignalSpy>
+
+void unaryVoidFunction(QObject* obj);
+
+void nullaryVoidFunction() {
+    qDebug() << "If you don't see this, it's broken.";
+}
+
+int nullaryIntFunction()
+{
+    return 5;
+}
+
+int unaryIntFunction(int x)
+{
+    return x * 2;
+}
+
+class QxtMetaObjectTest: public QObject
+{
+    Q_OBJECT 
+
+signals:
+    void say(QString);
+    void doit();
+    void success();
+
+public:
+    void unaryVoidFunctionSuccess() {
+        emit success();
+    }
+
+private slots:
+    void readwrite()
+    {
+        QxtMetaObject::connect(this, SIGNAL(doit()), QxtMetaObject::bind(this, SLOT(say(QString)), Q_ARG(QString,"hello")));
+        QSignalSpy spy(this, SIGNAL(say(QString)));
+        emit(doit());
+        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()=="hello","argument missmatch");
+
+        QxtBoundFunction* nullaryVoid = QxtMetaObject::bind<void>(qxtFuncPtr(nullaryVoidFunction));
+        QxtBoundFunction* unaryVoid = QxtMetaObject::bind<void, QObject*>(qxtFuncPtr(unaryVoidFunction), Q_ARG(QObject*, this));
+        QxtBoundFunction* nullaryInt = QxtMetaObject::bind<int>(qxtFuncPtr(nullaryIntFunction));
+        QxtBoundFunction* unaryIntFixed = QxtMetaObject::bind<int, int>(qxtFuncPtr(unaryIntFunction), Q_ARG(int, 7));
+        QxtBoundFunction* unaryIntBound = QxtMetaObject::bind<int, int>(qxtFuncPtr(unaryIntFunction), QXT_BIND(1));
+        QVERIFY2(nullaryVoid != 0, "nullaryVoidFunction bind failed");
+        QVERIFY2(unaryVoid != 0, "unaryVoidFunction bind failed");
+        QVERIFY2(nullaryInt != 0, "nullaryIntFunction bind failed");
+        QVERIFY2(unaryIntFixed != 0, "unaryIntFunction bind failed with Q_ARG");
+        QVERIFY2(unaryIntBound != 0, "unaryIntFunction bind failed with QXT_BIND");
+
+        bool ok;
+        ok = nullaryVoid->invoke();
+        QVERIFY2(ok, "nullaryVoid invoke failed");
+
+        QSignalSpy spy2(this, SIGNAL(success()));
+        ok = unaryVoid->invoke(this);
+        QVERIFY2(ok, "unaryVoid invoke failed");
+        QVERIFY2(spy2.count() == 1, "unaryVoid did not emit success");
+
+        int v1 = nullaryIntFunction();
+        int v2 = nullaryInt->invoke<int>();
+        QVERIFY2(v1 == v2, "nullaryInt returned wrong value");
+
+        v1 = unaryIntFunction(7);
+        v2 = unaryIntFixed->invoke<int>();
+        QVERIFY2(v1 == v2, "unaryIntFixed returned wrong value");
+
+        v1 = unaryIntFunction(12);
+        v2 = unaryIntBound->invoke<int>(12);
+        QVERIFY2(v1 == v2, "unaryIntBound returned wrong value");
+        
+
+    }
+
+};
+
+void unaryVoidFunction(QObject* obj)
+{
+    QxtMetaObjectTest* o = qobject_cast<QxtMetaObjectTest*>(obj);
+    if(!o) return;
+    o->unaryVoidFunctionSuccess();
+}
+
+
+
+QTEST_MAIN(QxtMetaObjectTest)
+#include "main.moc"
+