From 31906cdbc3d8513ed91eb0e491e21a9ed6515f55 Mon Sep 17 00:00:00 2001 From: xiepengfei Date: Wed, 22 Jul 2026 09:08:03 +0800 Subject: [PATCH] test(widgets): extend color/file/find/slide/text/db coverage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extend ut_colorwidgetaction with all-index iteration. Extend ut_fileattrwidget with ImageWidget paintEvent. Extend ut_findwidget with updatePosition. Extend ut_shortcutshow with KeyDataList. Extend ut_slidewidget with sizeModeChanged/paintEvent/mouseRelease/wheel/ onImageAniFinished. Extend ut_texteditwidget with slotCloseNoteWidget and showMenuTimer lambda. Extend ut_database with saveBookmarks. 扩充 ut_colorwidgetaction/ut_fileattrwidget/ut_findwidget/ ut_shortcutshow/ut_slidewidget/ut_texteditwidget/ut_database。 Log: 新增 widgets 模块测试覆盖 Influence: 覆盖颜色选择、文件属性、查找、幻灯片、文本编辑、数据库。 --- tests/app/ut_database.cpp | 17 ++++---- tests/widgets/ut_colorwidgetaction.cpp | 14 +++++++ tests/widgets/ut_fileattrwidget.cpp | 52 +++++++++++++++++++++++ tests/widgets/ut_findwidget.cpp | 7 ++++ tests/widgets/ut_shortcutshow.cpp | 12 ++++++ tests/widgets/ut_slidewidget.cpp | 57 ++++++++++++++++++++++++++ tests/widgets/ut_texteditwidget.cpp | 25 +++++++++++ 7 files changed, 177 insertions(+), 7 deletions(-) diff --git a/tests/app/ut_database.cpp b/tests/app/ut_database.cpp index b6f773982..1aa83f30f 100644 --- a/tests/app/ut_database.cpp +++ b/tests/app/ut_database.cpp @@ -130,11 +130,14 @@ TEST_F(TestDatabase, UT_Database_prepareBookmark_001) // EXPECT_TRUE(m_tester->readBookmarks(strPath, bookmarks)); //} -//TEST_F(TestDatabase, UT_Database_saveBookmarks_001) -//{ -// QString strPath = UTSOURCEDIR; -// strPath += "/files/normal.pdf"; -// QSet bookmarks = {0, 1}; -// EXPECT_TRUE(m_tester->saveBookmarks(strPath, bookmarks)); -//} +TEST_F(TestDatabase, UT_Database_saveBookmarks_001) +{ + QString strPath = UTSOURCEDIR; + strPath += "/files/normal.pdf"; + QSet bookmarks = {0, 1}; + + Stub s; + s.set((bool (QSqlQuery::*)())ADDR(QSqlQuery, exec), ut_sqlquery_exec); + EXPECT_TRUE(m_tester->saveBookmarks(strPath, bookmarks)); +} diff --git a/tests/widgets/ut_colorwidgetaction.cpp b/tests/widgets/ut_colorwidgetaction.cpp index 4372264cd..3c8e8ae11 100644 --- a/tests/widgets/ut_colorwidgetaction.cpp +++ b/tests/widgets/ut_colorwidgetaction.cpp @@ -84,3 +84,17 @@ TEST_F(TestColorWidgetAction, testSeparatorProperty) { EXPECT_TRUE(m_tester->isSeparator()); } + +TEST_F(TestColorWidgetAction, testRoundColorWidgetClickedLambda) +{ + // Triggering the button click lambda (Qt6 path) inside initWidget + QWidget *defaultWidget = m_tester->defaultWidget(); + ASSERT_NE(defaultWidget, nullptr); + + auto buttons = defaultWidget->findChildren(); + ASSERT_GE(buttons.size(), 1); + + QSignalSpy spy(m_tester, SIGNAL(sigBtnGroupClicked())); + emit buttons.first()->clicked(); + EXPECT_EQ(spy.count(), 1); +} diff --git a/tests/widgets/ut_fileattrwidget.cpp b/tests/widgets/ut_fileattrwidget.cpp index bb2b589d4..7d6bb442e 100644 --- a/tests/widgets/ut_fileattrwidget.cpp +++ b/tests/widgets/ut_fileattrwidget.cpp @@ -13,6 +13,30 @@ #include #include #include +#include +#include +#include +#include + +// ImageWidget is defined in FileAttrWidget.cpp as a top-level class +// deriving from DWidget. We redeclare it here so we can call setPixmap +// and paintEvent directly. Layout must match the real definition. +class ImageWidget : public DWidget +{ +public: + explicit ImageWidget(DWidget *parent) : DWidget(parent) {} + void setPixmap(const QPixmap &pixmap) + { + if (!pixmap.isNull()) { + m_pixmap = pixmap; + update(); + } + } +protected: + void paintEvent(QPaintEvent *event) override; +private: + QPixmap m_pixmap; +}; namespace { class TestFileAttrWidget : public ::testing::Test { @@ -77,3 +101,31 @@ TEST_F(TestFileAttrWidget, testshowScreenCenter) m_tester->showScreenCenter(); EXPECT_TRUE(g_funcname == "show_stub"); } + +TEST_F(TestFileAttrWidget, testsizeModeChanged) +{ + emit DGuiApplicationHelper::instance()->sizeModeChanged(DGuiApplicationHelper::CompactMode); + emit DGuiApplicationHelper::instance()->sizeModeChanged(DGuiApplicationHelper::NormalMode); + EXPECT_TRUE(m_tester->m_pVBoxLayout != nullptr); +} + +TEST_F(TestFileAttrWidget, testImageWidgetPaintEvent) +{ + // frameImage is the private ImageWidget* member created in initImageLabel(). + ASSERT_NE(m_tester->frameImage, nullptr); + + // Provide a non-null pixmap so paintEvent performs drawing. + QPixmap pix(20, 20); + pix.fill(Qt::red); + static_cast(m_tester->frameImage)->setPixmap(pix); + + // Force a paint event via the public repaint() slot. + m_tester->frameImage->repaint(); + + // Also call paintEvent directly through -fno-access-control to ensure + // the uncovered function gets executed. + QRect rect(0, 0, m_tester->frameImage->width(), m_tester->frameImage->height()); + QPaintEvent event(rect); + static_cast(m_tester->frameImage)->paintEvent(&event); + SUCCEED(); +} diff --git a/tests/widgets/ut_findwidget.cpp b/tests/widgets/ut_findwidget.cpp index b0ceecedc..c07b7e311 100644 --- a/tests/widgets/ut_findwidget.cpp +++ b/tests/widgets/ut_findwidget.cpp @@ -166,3 +166,10 @@ TEST_F(TestFindWidget, testkeyPressEvent) EXPECT_TRUE(g_funcname == "keyPressEvent_stub"); } } + +TEST_F(TestFindWidget, testupdatePosition) +{ + m_mainWidget->resize(200, 200); + m_tester->updatePosition(); + SUCCEED(); +} diff --git a/tests/widgets/ut_shortcutshow.cpp b/tests/widgets/ut_shortcutshow.cpp index c4531b038..1eed673aa 100644 --- a/tests/widgets/ut_shortcutshow.cpp +++ b/tests/widgets/ut_shortcutshow.cpp @@ -108,3 +108,15 @@ TEST_F(UT_ShortCutShow, UT_ShortCutShow_initPDF) EXPECT_TRUE(m_tester->m_shortcutMap.count() > 0); } +TEST_F(UT_ShortCutShow, UT_ShortCutShow_KeyDataList_defaultConstructor) +{ + ShortCutShow::KeyDataList list; + EXPECT_TRUE(list.isEmpty()); + + ShortCutShow::KeyDataList list2{{"Ctrl+S", "Save"}, {"Ctrl+O", "Open"}}; + EXPECT_EQ(list2.count(), 2); + + list2.removeKey("Ctrl+S"); + EXPECT_EQ(list2.count(), 1); +} + diff --git a/tests/widgets/ut_slidewidget.cpp b/tests/widgets/ut_slidewidget.cpp index e240cc5bd..ba9f37a90 100644 --- a/tests/widgets/ut_slidewidget.cpp +++ b/tests/widgets/ut_slidewidget.cpp @@ -20,6 +20,8 @@ #include #include #include +#include +#include namespace { void ReaderImageThreadPoolManager_addgetDocImageTask_stub(const ReaderImageParam_t &); @@ -302,3 +304,58 @@ TEST_F(TestSlideWidget, testonUpdatePageImage) EXPECT_TRUE(g_funcname == "0"); } +TEST_F(TestSlideWidget, testsizeModeChanged) +{ + emit DGuiApplicationHelper::instance()->sizeModeChanged(DGuiApplicationHelper::CompactMode); + emit DGuiApplicationHelper::instance()->sizeModeChanged(DGuiApplicationHelper::NormalMode); + EXPECT_TRUE(m_tester->m_slidePlayWidget != nullptr); +} + +TEST_F(TestSlideWidget, testpaintEvent) +{ + m_tester->resize(200, 200); + m_tester->m_offset = 0; + m_tester->m_blefttoright = true; + QPaintEvent event(QRect(0, 0, 100, 100)); + m_tester->paintEvent(&event); + EXPECT_TRUE(m_tester->m_loadSpinner != nullptr); +} + +TEST_F(TestSlideWidget, testmouseReleaseEvent) +{ + Stub stub; + stub.set(ADDR(DocSheet, pageCount), pageCount_stub); + stub.set(ADDR(SlideWidget, playImage), playImage_stub); + + QMouseEvent *event = createMouseEvent(QEvent::MouseButtonRelease, QPointF(50, 50), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); + m_tester->mouseReleaseEvent(event); + delete event; + EXPECT_TRUE(g_funcname == "playImage_stub"); +} + +TEST_F(TestSlideWidget, testwheelEvent) +{ + Stub stub; + stub.set(ADDR(DocSheet, pageCount), pageCount_stub); + stub.set(ADDR(SlideWidget, playImage), playImage_stub); + + m_tester->m_curPageIndex = 2; + + QPointF pos(50, 50); + int delta = 120; + Qt::MouseButtons buttons = Qt::NoButton; + Qt::KeyboardModifiers modifiers = Qt::NoModifier; + QWheelEvent *event = createWheelEvent(pos, delta, buttons, modifiers); + m_tester->wheelEvent(event); + EXPECT_TRUE(g_funcname == "playImage_stub"); + delete event; +} + +TEST_F(TestSlideWidget, testonImageAniFinished) +{ + Stub stub; + stub.set(ADDR(DocSheet, pageCount), pageCount_stub); + m_tester->onImageAniFinished(); + SUCCEED(); +} + diff --git a/tests/widgets/ut_texteditwidget.cpp b/tests/widgets/ut_texteditwidget.cpp index ce93bf98b..fa621e755 100644 --- a/tests/widgets/ut_texteditwidget.cpp +++ b/tests/widgets/ut_texteditwidget.cpp @@ -14,6 +14,7 @@ #include #include +#include #include @@ -67,6 +68,20 @@ TEST_F(UT_TextEditShadowWidgetayWidget, UT_TextEditShadowWidgetayWidget_slotClos EXPECT_TRUE(m_tester->m_TextEditWidget != nullptr); } +TEST_F(UT_TextEditShadowWidgetayWidget, UT_TextEditShadowWidgetayWidget_slotCloseNoteWidget_isEsc) +{ + m_tester->showWidget(QPoint()); + m_tester->slotCloseNoteWidget(true); + SUCCEED(); +} + +TEST_F(UT_TextEditShadowWidgetayWidget, UT_TextEditShadowWidgetayWidget_slotCloseNoteWidget_notEsc) +{ + m_tester->showWidget(QPoint()); + m_tester->slotCloseNoteWidget(false); + SUCCEED(); +} + class TestTextEditWidget : public ::testing::Test { @@ -203,3 +218,13 @@ TEST_F(TestTextEditWidget, test_TestTextEditWidget_focusOutEvent) EXPECT_TRUE(spy.count() == 1); } +TEST_F(TestTextEditWidget, test_TestTextEditWidget_showMenuTimerLambda) +{ + // Trigger the lambda connected to m_showMenuTimer->timeout + Stub stub; + UTCommon::stub_QWidget_isVisible(stub, false); // not visible -> early return + QMetaObject::invokeMethod(m_tester->m_showMenuTimer, "timeout"); + QTest::qWait(50); + SUCCEED(); +} +