Add some tests to note that private signals can't be overloads.

This is just for completeness of the understanding of the limitations
of private signals. There are no private signals in Qt which have
overloads.

Change-Id: Ic34c555aea360ee34beec796e597657888573da9
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
This commit is contained in:
Stephen Kelly 2012-07-13 11:48:09 +02:00 committed by Qt by Nokia
parent 90657f9236
commit 6f540691c4

View File

@ -1813,12 +1813,25 @@ public:
emit privateSignal1(QPrivateSignal());
emit privateSignalWith1Arg(42, QPrivateSignal());
emit privateSignalWith2Args(42, "Hello", QPrivateSignal());
emit privateOverloadedSignal(QPrivateSignal());
emit privateOverloadedSignal(42, QPrivateSignal());
emit overloadedMaybePrivate();
emit overloadedMaybePrivate(42, QPrivateSignal());
}
Q_SIGNALS:
void privateSignal1(QPrivateSignal);
void privateSignalWith1Arg(int arg1, QPrivateSignal);
void privateSignalWith2Args(int arg1, const QString &arg2, QPrivateSignal);
void privateOverloadedSignal(QPrivateSignal);
void privateOverloadedSignal(int, QPrivateSignal);
void overloadedMaybePrivate();
void overloadedMaybePrivate(int, QPrivateSignal);
};
class SubClassFromPrivateSignals : public ClassWithPrivateSignals
@ -1845,6 +1858,14 @@ public:
// emit privateSignal1(ClassWithPrivateSignals::QPrivateSignal());
// emit privateSignalWith1Arg(42, ClassWithPrivateSignals::QPrivateSignal());
// emit privateSignalWith2Args(42, "Hello", ClassWithPrivateSignals::QPrivateSignal());
// emit privateOverloadedSignal();
// emit privateOverloadedSignal(42);
// emit overloadedMaybePrivate();
// emit overloadedMaybePrivate(42);
}
};
@ -2135,6 +2156,73 @@ void tst_Moc::privateSignalConnection()
QVERIFY(tester.testPassed);
}
// Overloaded private signals
{
ClassWithPrivateSignals classWithPrivateSignals;
SignalConnectionTester tester;
QObject::connect(&classWithPrivateSignals, SIGNAL(privateOverloadedSignal()), &tester, SLOT(testSlot()));
QVERIFY(!tester.testPassed);
classWithPrivateSignals.emitPrivateSignals();
QVERIFY(tester.testPassed);
}
{
ClassWithPrivateSignals classWithPrivateSignals;
SignalConnectionTester tester;
QObject::connect(&classWithPrivateSignals, SIGNAL(privateOverloadedSignal(int)), &tester, SLOT(testSlotWith1Arg(int)));
QVERIFY(!tester.testPassed);
classWithPrivateSignals.emitPrivateSignals();
QVERIFY(tester.testPassed);
}
// We can't use function pointer connections to private signals which are overloaded because we would have to cast in this case to:
// static_cast<void (ClassWithPrivateSignals::*)(int, ClassWithPrivateSignals::QPrivateSignal)>(&ClassWithPrivateSignals::privateOverloadedSignal)
// Which doesn't work as ClassWithPrivateSignals::QPrivateSignal is private.
// Overload with either private or not private signals
{
ClassWithPrivateSignals classWithPrivateSignals;
SignalConnectionTester tester;
QObject::connect(&classWithPrivateSignals, SIGNAL(overloadedMaybePrivate()), &tester, SLOT(testSlot()));
QVERIFY(!tester.testPassed);
classWithPrivateSignals.emitPrivateSignals();
QVERIFY(tester.testPassed);
}
{
ClassWithPrivateSignals classWithPrivateSignals;
SignalConnectionTester tester;
QObject::connect(&classWithPrivateSignals, SIGNAL(privateOverloadedSignal(int)), &tester, SLOT(testSlotWith1Arg(int)));
QVERIFY(!tester.testPassed);
classWithPrivateSignals.emitPrivateSignals();
QVERIFY(tester.testPassed);
}
{
ClassWithPrivateSignals classWithPrivateSignals;
SignalConnectionTester tester;
QObject::connect(&classWithPrivateSignals,
static_cast<void (ClassWithPrivateSignals::*)()>(&ClassWithPrivateSignals::overloadedMaybePrivate),
&tester, &SignalConnectionTester::testSlot);
QVERIFY(!tester.testPassed);
classWithPrivateSignals.emitPrivateSignals();
QVERIFY(tester.testPassed);
}
// We can't use function pointer connections to private signals which are overloaded because we would have to cast in this case to:
// static_cast<void (ClassWithPrivateSignals::*)(int, ClassWithPrivateSignals::QPrivateSignal)>(&ClassWithPrivateSignals::overloadedMaybePrivate)
// Which doesn't work as ClassWithPrivateSignals::QPrivateSignal is private.
}