diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-10-24 01:00:14 +0200 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2019-10-24 10:23:44 +0200 |
commit | b327807c5ed6f151bfb22c2fe204ed289a3b6254 (patch) | |
tree | 880a0e7664e1270f4f51ccf79a3cf2ddbcd7d810 /tests/auto/corelib/tools | |
parent | aa4b0f5cb7e84046530fbc26581f777506fea658 (diff) | |
parent | b61c6164c100defc519b178d73858df59cffc48d (diff) |
Merge remote-tracking branch 'origin/5.13' into 5.14
Conflicts:
src/corelib/io/qstandardpaths_unix.cpp
src/corelib/tools/qsharedpointer_impl.h
tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
Change-Id: Iae95c5778dc091058f16f6db76f04a0178a9e809
Diffstat (limited to 'tests/auto/corelib/tools')
-rw-r--r-- | tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp index f3c647515a..a9fd282ac9 100644 --- a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp +++ b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp @@ -40,6 +40,7 @@ #include "nontracked.h" #include "wrapper.h" +#include <array> #include <memory> #include <stdlib.h> #include <time.h> @@ -106,12 +107,15 @@ private slots: void sharedFromThis(); void constructorThrow(); + void overloads(); void threadStressTest_data(); void threadStressTest(); void validConstructs(); void invalidConstructs_data(); void invalidConstructs(); + + // let invalidConstructs be the last test, because it's the slowest; // add new tests above this block public slots: @@ -2383,6 +2387,11 @@ void tst_QSharedPointer::invalidConstructs_data() QTest::newRow("incompatible-custom-lambda-deleter") << &QTest::QExternalTest::tryCompileFail << "QSharedPointer<Data> ptr(new Data, [](int *) {});\n"; + + QTest::newRow("incompatible-overload") + << &QTest::QExternalTest::tryCompileFail + << "void foo(QSharedPointer<DerivedData>) {}\n" + "void bar() { foo(QSharedPointer<Data>()); }\n"; } void tst_QSharedPointer::invalidConstructs() @@ -2883,5 +2892,50 @@ void tst_QSharedPointer::reentrancyWhileDestructing() ReentrancyWhileDestructing::A obj; } +namespace { +struct Base1 {}; +struct Base2 {}; + +struct Child1 : Base1 {}; +struct Child2 : Base2 {}; + +template<template<typename> class SmartPtr> +struct Overloaded +{ + std::array<int, 1> call(const SmartPtr<const Base1> &) + { + return {}; + } + std::array<int, 2> call(const SmartPtr<const Base2> &) + { + return {}; + } + static const Q_CONSTEXPR uint base1Called = sizeof(std::array<int, 1>); + static const Q_CONSTEXPR uint base2Called = sizeof(std::array<int, 2>); + + void test() + { +#define QVERIFY_CALLS(expr, base) Q_STATIC_ASSERT(sizeof(call(expr)) == base##Called) + QVERIFY_CALLS(SmartPtr<Base1>{}, base1); + QVERIFY_CALLS(SmartPtr<Base2>{}, base2); + QVERIFY_CALLS(SmartPtr<const Base1>{}, base1); + QVERIFY_CALLS(SmartPtr<const Base2>{}, base2); + QVERIFY_CALLS(SmartPtr<Child1>{}, base1); + QVERIFY_CALLS(SmartPtr<Child2>{}, base2); + QVERIFY_CALLS(SmartPtr<const Child1>{}, base1); + QVERIFY_CALLS(SmartPtr<const Child2>{}, base2); +#undef QVERIFY_CALLS + } +}; +} + +void tst_QSharedPointer::overloads() +{ + Overloaded<QSharedPointer> sharedOverloaded; + sharedOverloaded.test(); + Overloaded<QWeakPointer> weakOverloaded; + weakOverloaded.test(); +} + QTEST_MAIN(tst_QSharedPointer) #include "tst_qsharedpointer.moc" |