How to test if type of data emitted by signal is quint8 using QSignalSpy?
Using Qt 5.4.x
QVariant::type()(still?) doesn't support basic C++ (and their respective Qt
typedefs) so the following will always fail:
Obj* o = new Obj(); // A class that contains signalFoo(quint8) QSignalSpy* oS = new QSignalSpy(o, SIGNAL(signalFoo(quint8))); // Trigger signalFoo(quint8) QCOMPARE(this->oS->count(), 1); QList<QVariant> oSArgs = this->oS->takeFirst(); QVERIFY(oSArgs->at(0).type() == QVariant::UInt);
The same applies if I use
So my question is how exactly am I supposed to test the type of the returned data if the type is not supported?
unsigned int(as per
QMetaType::UInt), which is 4 bytes and not 1 that the
I know that in the case above it's not actually required if I have just a single
signalthat the instance of
Objcan emit but still it's something I'd like to know.
Out of curiosity, why do you need to test the datatype ?
I wanted to make sure that if someone changes my code (the value range of the data carried by that signal; for example from quint8 to quint16) the respective unit test will detect this and fail. On multiple occasions I had to waste several hours hunting down bugs related to generating a numeric value with one range and then silently converting it to another (less accurate or with a different (usually smaller) value range).
It's not that necessary but since I gave it a shot and found out that
QVariantdoesn't support it I decided to ask here. :)
It's much easier that you think.
oS->isValid()will return false if someone changes the argument of
signalFooto anything other than