From ba44c31f4219412a0acfeb199ded44baa6e68896 Mon Sep 17 00:00:00 2001 From: evgeny Date: Wed, 28 Oct 2026 15:06:43 +0100 Subject: [PATCH] Add focused cache and prepared media rendering checks to desktop tests --- tools/chatgui/CMakeLists.txt | 5 +++++ tools/chatgui/tests/test_invite_links.cpp | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/tools/chatgui/CMakeLists.txt b/tools/chatgui/CMakeLists.txt index 953373a5..54ebf8bc 100644 --- a/tools/chatgui/CMakeLists.txt +++ b/tools/chatgui/CMakeLists.txt @@ -145,6 +145,11 @@ target_include_directories(chatgui_preview_cache PRIVATE ${FFMPEG_INCLUDE_DIRS}) if(FFMPEG_FOUND) target_compile_definitions(chatgui_preview_cache PRIVATE HAVE_FFMPEG) endif() +add_executable(test_media_preview_cache tests/test_media_preview_cache.cpp) +target_link_libraries(test_media_preview_cache PRIVATE chatgui_preview_cache ${QT_TEST_LIB}) +target_compile_definitions(test_media_preview_cache PRIVATE TEST_PREVIEW_FFMPEG=$) +add_test(NAME test_media_preview_cache COMMAND test_media_preview_cache) +set_tests_properties(test_media_preview_cache PROPERTIES TIMEOUT 30) add_library(chatgui_live_video STATIC src/live_video_encoder.cpp src/call_video_encoder.cpp src/call_video_decoder.cpp) target_link_libraries(chatgui_live_video PUBLIC ${QT_LIBS} utun PRIVATE ${FFMPEG_TARGET} ${FFMPEG_LIBRARIES}) diff --git a/tools/chatgui/tests/test_invite_links.cpp b/tools/chatgui/tests/test_invite_links.cpp index b34eb6bf..7559f998 100644 --- a/tools/chatgui/tests/test_invite_links.cpp +++ b/tools/chatgui/tests/test_invite_links.cpp @@ -11,6 +11,7 @@ #include #include #include +#include extern "C" { #include "chat/invite_link.h" #include "chat/chat_member.h" @@ -19,6 +20,25 @@ extern "C" { class InviteLinksTest : public QObject { Q_OBJECT private slots: + void preparedMediaPaint_data() { + QTest::addColumn("type"); QTest::newRow("image") << QString("image/png"); QTest::newRow("video") << QString("video/mp4"); + } + void preparedMediaPaint() { + QFETCH(QString, type); QTemporaryDir temporary; QVERIFY(temporary.isValid()); + QStandardItemModel model; auto* item = new QStandardItem; + item->setData(type, MsgContentTypeRole); item->setData("Alice", MsgAuthorRole); item->setData("12:34", MsgTimeRole); + item->setData(temporary.filePath("removed-original"), MsgVoiceFileRole); item->setData(2, MsgFileDownloadStateRole); + item->setData(1234, MsgFileSizeRole); item->setData(120, MsgImageWidthRole); item->setData(80, MsgImageHeightRole); + const QColor green(35, 170, 95); QImage preview(120, 80, QImage::Format_RGB32); preview.fill(green); + item->setData(preview, MsgImagePreviewRole); model.appendRow(item); + MessageDelegate delegate; QStyleOptionViewItem option; option.font = QApplication::font(); option.rect = QRect(0, 0, 600, 400); + QImage output(option.rect.size(), QImage::Format_ARGB32); output.fill(Qt::white); + QPainter painter(&output); delegate.paint(&painter, option, model.index(0, 0)); painter.end(); + int preparedPixels = 0; + for (int y = 0; y < output.height(); ++y) for (int x = 0; x < output.width(); ++x) + if (output.pixelColor(x, y) == green) ++preparedPixels; + QVERIFY(preparedPixels > 100); // Готовые пиксели рисуются даже без оригинала и соседнего .jpg. + } void replyClick_data() { QTest::addColumn("type"); QTest::addColumn("outgoing"); QTest::addColumn("width"); for (const auto* type : {"text/plain", "audio/opus", "image/png", "video/mp4", "application/octet-stream", "poll", "emoji"})