diff options
Diffstat (limited to 'tests/auto/widgets/widgets/qtoolbutton')
-rw-r--r-- | tests/auto/widgets/widgets/qtoolbutton/CMakeLists.txt | 6 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp | 20 |
2 files changed, 25 insertions, 1 deletions
diff --git a/tests/auto/widgets/widgets/qtoolbutton/CMakeLists.txt b/tests/auto/widgets/widgets/qtoolbutton/CMakeLists.txt index 7d4c36ddb2..7c8b41b5e6 100644 --- a/tests/auto/widgets/widgets/qtoolbutton/CMakeLists.txt +++ b/tests/auto/widgets/widgets/qtoolbutton/CMakeLists.txt @@ -5,6 +5,12 @@ ## tst_qtoolbutton Test: ##################################################################### +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qtoolbutton LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + qt_internal_add_test(tst_qtoolbutton SOURCES tst_qtoolbutton.cpp diff --git a/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp b/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp index c5ed718edb..20472861d9 100644 --- a/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp +++ b/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> @@ -34,6 +34,7 @@ private slots: void qtbug_26956_popupTimerDone(); void qtbug_34759_sizeHintResetWhenSettingMenu(); void defaultActionSynced(); + void deleteInHandler(); protected slots: void sendMouseClick(); @@ -316,5 +317,22 @@ void tst_QToolButton::defaultActionSynced() QCOMPARE(bSpy.size(), ++bToggledCount); } +void tst_QToolButton::deleteInHandler() +{ + // Tests that if something deletes the button + // while its event handler is still on the callstack, we don't crash + + QPointer<QToolButton> tb = new QToolButton(); + tb->show(); + QVERIFY(QTest::qWaitForWindowActive(tb)); + + connect(tb, &QToolButton::clicked, this, [tb] { + delete tb; + }); + + QTest::mouseClick(tb, Qt::LeftButton); + QVERIFY(!tb); +} + QTEST_MAIN(tst_QToolButton) #include "tst_qtoolbutton.moc" |