summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp3
-rw-r--r--tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp79
2 files changed, 81 insertions, 1 deletions
diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
index 448e2030bc..95799905de 100644
--- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
@@ -4451,10 +4451,11 @@ void tst_QLineEdit::clearButtonVisibleAfterSettingText_QTBUG_45518()
QTRY_VERIFY(clearButton->opacity() > 0);
QTRY_COMPARE(clearButton->cursor().shape(), Qt::ArrowCursor);
- QTest::mouseClick(clearButton, Qt::LeftButton, 0, clearButton->rect().center());
+ QTest::mouseClick(clearButton, Qt::LeftButton, nullptr, clearButton->rect().center());
QTRY_COMPARE(edit.text(), QString());
QTRY_COMPARE(clearButton->opacity(), qreal(0));
+ QVERIFY(clearButton->isHidden());
QTRY_COMPARE(clearButton->cursor().shape(), clearButton->parentWidget()->cursor().shape());
edit.setClearButtonEnabled(false);
diff --git a/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp b/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp
index 301801ed2e..d6c165642e 100644
--- a/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp
+++ b/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp
@@ -42,6 +42,7 @@
#include <qlineedit.h>
#include <qkeysequence.h>
#include <qmenu.h>
+#include <qlabel.h>
#include <private/qtoolbarextension_p.h>
QT_FORWARD_DECLARE_CLASS(QAction)
@@ -80,6 +81,8 @@ private slots:
void task191727_layout();
void task197996_visibility();
+
+ void extraCpuConsumption(); // QTBUG-54676
};
@@ -1098,5 +1101,81 @@ void tst_QToolBar::task197996_visibility()
QTRY_VERIFY(toolBar->widgetForAction(pAction)->isVisible());
}
+class ShowHideEventCounter : public QObject
+{
+public:
+ using QObject::QObject;
+
+ bool eventFilter(QObject *watched, QEvent *event) override
+ {
+ if (qobject_cast<QLineEdit*>(watched) && !event->spontaneous()) {
+ if (event->type() == QEvent::Show)
+ ++m_showEventsCount;
+
+ if (event->type() == QEvent::Hide)
+ ++m_hideEventsCount;
+ }
+
+ return QObject::eventFilter(watched, event);
+ }
+
+ uint showEventsCount() const { return m_showEventsCount; }
+ uint hideEventsCount() const { return m_hideEventsCount; }
+
+private:
+ uint m_showEventsCount = 0;
+ uint m_hideEventsCount = 0;
+};
+
+void tst_QToolBar::extraCpuConsumption()
+{
+ QMainWindow mainWindow;
+
+ auto tb = new QToolBar(&mainWindow);
+ tb->setMovable(false);
+
+ auto extensions = tb->findChildren<QToolBarExtension *>();
+ QVERIFY(!extensions.isEmpty());
+
+ auto extensionButton = extensions.at(0);
+ QVERIFY(extensionButton);
+
+ tb->addWidget(new QLabel("Lorem ipsum dolor sit amet"));
+
+ auto le = new QLineEdit;
+ le->setClearButtonEnabled(true);
+ le->setText("Lorem ipsum");
+ tb->addWidget(le);
+
+ mainWindow.addToolBar(tb);
+ mainWindow.show();
+ QVERIFY(QTest::qWaitForWindowActive(&mainWindow));
+
+ auto eventCounter = new ShowHideEventCounter(&mainWindow);
+ le->installEventFilter(eventCounter);
+
+ auto defaultSize = mainWindow.size();
+
+ // Line edit should be hidden now and extension button should be displayed
+ for (double p = 0.7; extensionButton->isHidden() || qFuzzyCompare(p, 0.); p -= 0.01) {
+ mainWindow.resize(int(defaultSize.width() * p), defaultSize.height());
+ }
+ QVERIFY(!extensionButton->isHidden());
+
+ // Line edit should be visible, but smaller
+ for (double p = 0.75; !extensionButton->isHidden() || qFuzzyCompare(p, 1.); p += 0.01) {
+ mainWindow.resize(int(defaultSize.width() * p), defaultSize.height());
+ }
+ QVERIFY(extensionButton->isHidden());
+
+ // Dispatch all pending events
+ qApp->sendPostedEvents();
+ qApp->processEvents();
+
+ QCOMPARE(eventCounter->showEventsCount(), eventCounter->hideEventsCount());
+ QCOMPARE(eventCounter->showEventsCount(), uint(1));
+ QCOMPARE(eventCounter->hideEventsCount(), uint(1));
+}
+
QTEST_MAIN(tst_QToolBar)
#include "tst_qtoolbar.moc"