File: main.cpp

package info (click to toggle)
libqxt 0.6.2-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 19,000 kB
  • ctags: 6,583
  • sloc: cpp: 57,582; xml: 296; sh: 256; makefile: 60; php: 14
file content (98 lines) | stat: -rw-r--r-- 3,018 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#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(QVariant::fromValue(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");
        

    }

};
Q_DECLARE_METATYPE(QxtMetaObjectTest*)

void unaryVoidFunction(QObject* obj)
{
    QxtMetaObjectTest* o = qobject_cast<QxtMetaObjectTest*>(obj);
    if(!o) return;
    o->unaryVoidFunctionSuccess();
}



QTEST_MAIN(QxtMetaObjectTest)
#include "main.moc"