tst_QSharedPointer: check QWeakPointer vs. virtual bases
This fell out of my tracking of a failure of the new QPointer conversion feature, and it would be a waste to throw it away unused. Pick-to: 6.7 6.5 6.2 5.15 Change-Id: Ie255b4a6432b4763071e5712d92e9ccd57927052 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> (cherry picked from commit 0e40a3f6645a684458cbb09bef1353df2eec5e0b) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
3b1d3db793
commit
44a94e03dd
@ -59,6 +59,7 @@ private slots:
|
||||
void objectCastStdSharedPtr();
|
||||
void differentPointers();
|
||||
void virtualBaseDifferentPointers();
|
||||
void virtualBaseWeakPointerConversions();
|
||||
#ifndef QTEST_NO_RTTI
|
||||
void dynamicCast();
|
||||
void dynamicCastDifferentPointers();
|
||||
@ -1294,6 +1295,67 @@ void tst_QSharedPointer::virtualBaseDifferentPointers()
|
||||
safetyCheck();
|
||||
}
|
||||
|
||||
void tst_QSharedPointer::virtualBaseWeakPointerConversions()
|
||||
{
|
||||
struct Base { virtual ~Base() = default; };
|
||||
struct Derived : virtual Base {};
|
||||
|
||||
{
|
||||
QSharedPointer<Derived> d(new Derived);
|
||||
QSharedPointer<const Base> cb = d;
|
||||
QCOMPARE(cb, d);
|
||||
QCOMPARE(cb.get(), d.get());
|
||||
}
|
||||
safetyCheck();
|
||||
|
||||
{
|
||||
QSharedPointer<Derived> d(new Derived);
|
||||
QWeakPointer<const Base> wcb = d;
|
||||
QCOMPARE(wcb, d);
|
||||
QCOMPARE(wcb.lock().get(), d.get());
|
||||
}
|
||||
safetyCheck();
|
||||
|
||||
{
|
||||
QSharedPointer<Derived> d(new Derived);
|
||||
QWeakPointer<Derived> wd = d;
|
||||
QCOMPARE(wd, d);
|
||||
QCOMPARE(wd.lock().get(), d.get());
|
||||
QWeakPointer<const Base> wcb = wd;
|
||||
QCOMPARE(wcb, wd);
|
||||
QCOMPARE(wcb.lock().get(), d.get());
|
||||
}
|
||||
safetyCheck();
|
||||
|
||||
{
|
||||
auto raw = new Derived;
|
||||
QSharedPointer<Derived> d(raw);
|
||||
QSharedPointer<const Base> cb = std::move(d);
|
||||
QCOMPARE(d, nullptr);
|
||||
QCOMPARE(cb.get(), raw);
|
||||
}
|
||||
safetyCheck();
|
||||
|
||||
{
|
||||
QSharedPointer<Derived> d(new Derived);
|
||||
QWeakPointer<const Base> wcb = std::move(d);
|
||||
QCOMPARE(wcb, d);
|
||||
QCOMPARE(wcb.lock().get(), d.get());
|
||||
}
|
||||
safetyCheck();
|
||||
|
||||
{
|
||||
QSharedPointer<Derived> d(new Derived);
|
||||
QWeakPointer<Derived> wd = std::move(d);
|
||||
QCOMPARE(wd, d);
|
||||
QCOMPARE(wd.lock().get(), d.get());
|
||||
QWeakPointer<const Base> wcb = std::move(wd);
|
||||
QCOMPARE(wd, nullptr);
|
||||
QCOMPARE(wcb.lock().get(), d.get());
|
||||
}
|
||||
safetyCheck();
|
||||
}
|
||||
|
||||
#ifndef QTEST_NO_RTTI
|
||||
void tst_QSharedPointer::dynamicCast()
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user