tst_qsignalblocker: simplify test
This test can assume that the QObject::signalsBlocked property works as advertized, so just check signalsBlocked() in repsonse to QSignalBlocker manipulations. Change-Id: I99e4ef9c4ed05c3840233d92a587636d2d78f59a Reviewed-by: Olivier Goffart <ogoffart@woboq.com>bb10
parent
8d721b3c56
commit
6afc34a72f
|
|
@ -48,161 +48,36 @@ class tst_QSignalBlocker : public QObject
|
|||
Q_OBJECT
|
||||
private slots:
|
||||
void signalBlocking();
|
||||
void signalBlockingMoveAssignment();
|
||||
void moveAssignment();
|
||||
};
|
||||
|
||||
class SenderObject : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
SenderObject() : aPublicSlotCalled(0), recursionCount(0) {}
|
||||
|
||||
void emitSignal1AfterRecursion()
|
||||
{
|
||||
if (recursionCount++ < 100)
|
||||
emitSignal1AfterRecursion();
|
||||
else
|
||||
emitSignal1();
|
||||
}
|
||||
|
||||
void emitSignal1() { emit signal1(); }
|
||||
void emitSignal2() { emit signal2(); }
|
||||
void emitSignal3() { emit signal3(); }
|
||||
void emitSignal4() { emit signal4(); }
|
||||
|
||||
signals:
|
||||
void signal1();
|
||||
void signal2();
|
||||
void signal3();
|
||||
void signal4();
|
||||
QT_MOC_COMPAT void signal5();
|
||||
void signal6(void);
|
||||
void signal7(int, const QString &);
|
||||
|
||||
public slots:
|
||||
void aPublicSlot() { aPublicSlotCalled++; }
|
||||
|
||||
public:
|
||||
Q_INVOKABLE void invoke1(){}
|
||||
Q_SCRIPTABLE void sinvoke1(){}
|
||||
int aPublicSlotCalled;
|
||||
protected:
|
||||
Q_INVOKABLE QT_MOC_COMPAT void invoke2(){}
|
||||
Q_INVOKABLE QT_MOC_COMPAT void invoke2(int){}
|
||||
Q_SCRIPTABLE QT_MOC_COMPAT void sinvoke2(){}
|
||||
private:
|
||||
Q_INVOKABLE void invoke3(int hinz = 0, int kunz = 0){Q_UNUSED(hinz) Q_UNUSED(kunz)}
|
||||
Q_SCRIPTABLE void sinvoke3(){}
|
||||
|
||||
int recursionCount;
|
||||
};
|
||||
|
||||
class ReceiverObject : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ReceiverObject()
|
||||
: sequence_slot1( 0 )
|
||||
, sequence_slot2( 0 )
|
||||
, sequence_slot3( 0 )
|
||||
, sequence_slot4( 0 )
|
||||
{}
|
||||
|
||||
void reset()
|
||||
{
|
||||
sequence_slot4 = 0;
|
||||
sequence_slot3 = 0;
|
||||
sequence_slot2 = 0;
|
||||
sequence_slot1 = 0;
|
||||
count_slot1 = 0;
|
||||
count_slot2 = 0;
|
||||
count_slot3 = 0;
|
||||
count_slot4 = 0;
|
||||
}
|
||||
|
||||
int sequence_slot1;
|
||||
int sequence_slot2;
|
||||
int sequence_slot3;
|
||||
int sequence_slot4;
|
||||
int count_slot1;
|
||||
int count_slot2;
|
||||
int count_slot3;
|
||||
int count_slot4;
|
||||
|
||||
bool called(int slot)
|
||||
{
|
||||
switch (slot) {
|
||||
case 1: return sequence_slot1;
|
||||
case 2: return sequence_slot2;
|
||||
case 3: return sequence_slot3;
|
||||
case 4: return sequence_slot4;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
static int sequence;
|
||||
|
||||
public slots:
|
||||
void slot1() { sequence_slot1 = ++sequence; count_slot1++; }
|
||||
void slot2() { sequence_slot2 = ++sequence; count_slot2++; }
|
||||
void slot3() { sequence_slot3 = ++sequence; count_slot3++; }
|
||||
void slot4() { sequence_slot4 = ++sequence; count_slot4++; }
|
||||
|
||||
};
|
||||
|
||||
int ReceiverObject::sequence = 0;
|
||||
|
||||
void tst_QSignalBlocker::signalBlocking()
|
||||
{
|
||||
SenderObject sender;
|
||||
ReceiverObject receiver;
|
||||
QObject o;
|
||||
|
||||
receiver.connect(&sender, SIGNAL(signal1()), SLOT(slot1()));
|
||||
|
||||
sender.emitSignal1();
|
||||
QVERIFY(receiver.called(1));
|
||||
receiver.reset();
|
||||
QVERIFY(!o.signalsBlocked());
|
||||
|
||||
{
|
||||
QSignalBlocker blocker(&sender);
|
||||
QSignalBlocker blocker(&o);
|
||||
QVERIFY(o.signalsBlocked());
|
||||
|
||||
sender.emitSignal1();
|
||||
QVERIFY(!receiver.called(1));
|
||||
receiver.reset();
|
||||
o.blockSignals(false);
|
||||
QVERIFY(!o.signalsBlocked());
|
||||
|
||||
sender.blockSignals(false);
|
||||
|
||||
sender.emitSignal1();
|
||||
QVERIFY(receiver.called(1));
|
||||
receiver.reset();
|
||||
|
||||
sender.blockSignals(true);
|
||||
|
||||
sender.emitSignal1();
|
||||
QVERIFY(!receiver.called(1));
|
||||
receiver.reset();
|
||||
o.blockSignals(true);
|
||||
QVERIFY(o.signalsBlocked());
|
||||
|
||||
blocker.unblock();
|
||||
|
||||
sender.emitSignal1();
|
||||
QVERIFY(receiver.called(1));
|
||||
receiver.reset();
|
||||
QVERIFY(!o.signalsBlocked());
|
||||
|
||||
blocker.reblock();
|
||||
|
||||
sender.emitSignal1();
|
||||
QVERIFY(!receiver.called(1));
|
||||
receiver.reset();
|
||||
QVERIFY(o.signalsBlocked());
|
||||
}
|
||||
|
||||
sender.emitSignal1();
|
||||
QVERIFY(receiver.called(1));
|
||||
receiver.reset();
|
||||
QVERIFY(!o.signalsBlocked());
|
||||
}
|
||||
|
||||
void tst_QSignalBlocker::signalBlockingMoveAssignment()
|
||||
void tst_QSignalBlocker::moveAssignment()
|
||||
{
|
||||
#ifdef Q_COMPILER_RVALUE_REFS
|
||||
QObject o1, o2;
|
||||
|
|
|
|||
Loading…
Reference in New Issue