3 #include <qxtmetaobject.h>
4 #include <qxtboundcfunction.h>
7 void unaryVoidFunction(QObject* obj);
9 void nullaryVoidFunction() {
10 qDebug() << "If you don't see this, it's broken.";
13 int nullaryIntFunction()
18 int unaryIntFunction(int x)
23 class QxtMetaObjectTest: public QObject
33 void unaryVoidFunctionSuccess() {
40 QxtMetaObject::connect(this, SIGNAL(doit()), QxtMetaObject::bind(this, SLOT(say(QString)), Q_ARG(QString,"hello")));
41 QSignalSpy spy(this, SIGNAL(say(QString)));
43 QVERIFY2 (spy.count()> 0, "no signal received" );
44 QVERIFY2 (spy.count()< 2, "wtf, two signals received?" );
46 QList<QVariant> arguments = spy.takeFirst();
47 QVERIFY2(arguments.at(0).toString()=="hello","argument missmatch");
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");
61 ok = nullaryVoid->invoke();
62 QVERIFY2(ok, "nullaryVoid invoke failed");
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");
69 int v1 = nullaryIntFunction();
70 int v2 = nullaryInt->invoke<int>();
71 QVERIFY2(v1 == v2, "nullaryInt returned wrong value");
73 v1 = unaryIntFunction(7);
74 v2 = unaryIntFixed->invoke<int>();
75 QVERIFY2(v1 == v2, "unaryIntFixed returned wrong value");
77 v1 = unaryIntFunction(12);
78 v2 = unaryIntBound->invoke<int>(12);
79 QVERIFY2(v1 == v2, "unaryIntBound returned wrong value");
86 void unaryVoidFunction(QObject* obj)
88 QxtMetaObjectTest* o = qobject_cast<QxtMetaObjectTest*>(obj);
90 o->unaryVoidFunctionSuccess();
95 QTEST_MAIN(QxtMetaObjectTest)