ece8b8e938f0a83b709f566b7b6aee5561305ee0
[quassel.git] / src / contrib / libqxt-2007-10-24 / tests / bind / main.cpp
1 #include <QTest>
2 #include <QObject>
3 #include <qxtmetaobject.h>
4 #include <qxtboundcfunction.h>
5 #include <QSignalSpy>
6
7 void unaryVoidFunction(QObject* obj);
8
9 void nullaryVoidFunction() {
10     qDebug() << "If you don't see this, it's broken.";
11 }
12
13 int nullaryIntFunction()
14 {
15     return 5;
16 }
17
18 int unaryIntFunction(int x)
19 {
20     return x * 2;
21 }
22
23 class QxtMetaObjectTest: public QObject
24 {
25     Q_OBJECT 
26
27 signals:
28     void say(QString);
29     void doit();
30     void success();
31
32 public:
33     void unaryVoidFunctionSuccess() {
34         emit success();
35     }
36
37 private slots:
38     void readwrite()
39     {
40         QxtMetaObject::connect(this, SIGNAL(doit()), QxtMetaObject::bind(this, SLOT(say(QString)), Q_ARG(QString,"hello")));
41         QSignalSpy spy(this, SIGNAL(say(QString)));
42         emit(doit());
43         QVERIFY2 (spy.count()> 0, "no signal received" );
44         QVERIFY2 (spy.count()< 2, "wtf, two signals received?" );
45
46         QList<QVariant> arguments = spy.takeFirst();
47         QVERIFY2(arguments.at(0).toString()=="hello","argument missmatch");
48
49         QxtBoundFunction* nullaryVoid = QxtMetaObject::bind<void>(qxtFuncPtr(nullaryVoidFunction));
50         QxtBoundFunction* unaryVoid = QxtMetaObject::bind<void, QObject*>(qxtFuncPtr(unaryVoidFunction), Q_ARG(QObject*, this));
51         QxtBoundFunction* nullaryInt = QxtMetaObject::bind<int>(qxtFuncPtr(nullaryIntFunction));
52         QxtBoundFunction* unaryIntFixed = QxtMetaObject::bind<int, int>(qxtFuncPtr(unaryIntFunction), Q_ARG(int, 7));
53         QxtBoundFunction* unaryIntBound = QxtMetaObject::bind<int, int>(qxtFuncPtr(unaryIntFunction), QXT_BIND(1));
54         QVERIFY2(nullaryVoid != 0, "nullaryVoidFunction bind failed");
55         QVERIFY2(unaryVoid != 0, "unaryVoidFunction bind failed");
56         QVERIFY2(nullaryInt != 0, "nullaryIntFunction bind failed");
57         QVERIFY2(unaryIntFixed != 0, "unaryIntFunction bind failed with Q_ARG");
58         QVERIFY2(unaryIntBound != 0, "unaryIntFunction bind failed with QXT_BIND");
59
60         bool ok;
61         ok = nullaryVoid->invoke();
62         QVERIFY2(ok, "nullaryVoid invoke failed");
63
64         QSignalSpy spy2(this, SIGNAL(success()));
65         ok = unaryVoid->invoke(this);
66         QVERIFY2(ok, "unaryVoid invoke failed");
67         QVERIFY2(spy2.count() == 1, "unaryVoid did not emit success");
68
69         int v1 = nullaryIntFunction();
70         int v2 = nullaryInt->invoke<int>();
71         QVERIFY2(v1 == v2, "nullaryInt returned wrong value");
72
73         v1 = unaryIntFunction(7);
74         v2 = unaryIntFixed->invoke<int>();
75         QVERIFY2(v1 == v2, "unaryIntFixed returned wrong value");
76
77         v1 = unaryIntFunction(12);
78         v2 = unaryIntBound->invoke<int>(12);
79         QVERIFY2(v1 == v2, "unaryIntBound returned wrong value");
80         
81
82     }
83
84 };
85
86 void unaryVoidFunction(QObject* obj)
87 {
88     QxtMetaObjectTest* o = qobject_cast<QxtMetaObjectTest*>(obj);
89     if(!o) return;
90     o->unaryVoidFunctionSuccess();
91 }
92
93
94
95 QTEST_MAIN(QxtMetaObjectTest)
96 #include "main.moc"
97