From db1c2f0da7001c0e1d0d55eaa5c2c3fa26538b8b Mon Sep 17 00:00:00 2001 From: evgeny Date: Sat, 31 Oct 2026 17:56:34 +0100 Subject: [PATCH] Test cached media geometry and stable video windows across file loads --- tools/chatgui/tests/test_settings_save.cpp | 35 +++++++++++++++++++++ tools/chatgui/tests/test_video_playback.cpp | 24 ++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/tools/chatgui/tests/test_settings_save.cpp b/tools/chatgui/tests/test_settings_save.cpp index bc42d664c..ab7a07dd4 100644 --- a/tools/chatgui/tests/test_settings_save.cpp +++ b/tools/chatgui/tests/test_settings_save.cpp @@ -4,6 +4,8 @@ #include "../src/settingsdialog.h" #include "../src/bluetoothsettingspage.h" #include "../src/mainwindow.h" +#include "../src/imageviewer_window.h" +#include "../src/videoplayer_window.h" #include "../src/radio_audio_engine.h" #include "../src/radiosettingspage.h" #include "../src/voicemessageencoder.h" @@ -173,6 +175,39 @@ class SettingsSaveTest : public QObject { } } private slots: + void mediaGeometryCachedBeforeDatabaseWrite() { + SettingsCore core; QVERIFY(core.start()); + MainWindow window(nullptr, nullptr, QString()); + const QString photo = core.directory.filePath("photo.png"); + QImage image(32, 24, QImage::Format_RGB32); image.fill(Qt::green); QVERIFY(image.save(photo)); + auto findWindow = [](const QString& name) -> QWidget* { + for (auto* widget : QApplication::topLevelWidgets()) + if (widget->objectName() == name && widget->isVisible()) return widget; + return nullptr; + }; + QVERIFY(QMetaObject::invokeMethod(&window, "openImage", Q_ARG(QString, photo))); + auto* viewer = findWindow("chatImageViewer"); QVERIFY(viewer && !viewer->isFullScreen()); + viewer->setGeometry(90, 70, 540, 360); QCoreApplication::processEvents(); + const QRect expected = viewer->normalGeometry(); + QVERIFY(viewer->close()); + QVERIFY(core.db.getUiState("media_window_geometry").isEmpty()); // uasync ещё не исполнил запись. + QVERIFY(QMetaObject::invokeMethod(&window, "openVideo", Q_ARG(QString, core.directory.filePath("missing.mp4")))); + auto* player = findWindow("chatVideoPlayer"); QVERIFY(player); + QCOMPARE(player->normalGeometry(), expected); + QVERIFY(QMetaObject::invokeMethod(player, "onEngineOpened", Q_ARG(int, 3840), Q_ARG(int, 2160), + Q_ARG(qint64, 60000), Q_ARG(bool, false))); + QCOMPARE(player->normalGeometry(), expected); QVERIFY(!player->isFullScreen()); + QVERIFY(player->close()); + QVERIFY(QMetaObject::invokeMethod(&window, "openImage", Q_ARG(QString, photo))); + viewer = findWindow("chatImageViewer"); QVERIFY(viewer); + QCOMPARE(viewer->normalGeometry(), expected); + uasync_poll(core.ua, 0); + const auto saved = QJsonDocument::fromJson(core.db.getUiState("media_window_geometry").toUtf8()).object(); + QCOMPARE(saved.value("x").toInt(), expected.x()); QCOMPARE(saved.value("y").toInt(), expected.y()); + QCOMPARE(saved.value("width").toInt(), expected.width()); QCOMPARE(saved.value("height").toInt(), expected.height()); + QVERIFY(viewer->close()); uasync_poll(core.ua, 0); + } + void bluetoothSettingsPersistAllPermissions() { QTemporaryDir directory; QVERIFY(directory.isValid()); const QString path = directory.filePath("bluetooth.cfg"); diff --git a/tools/chatgui/tests/test_video_playback.cpp b/tools/chatgui/tests/test_video_playback.cpp index 940051813..99d163373 100644 --- a/tools/chatgui/tests/test_video_playback.cpp +++ b/tools/chatgui/tests/test_video_playback.cpp @@ -224,6 +224,30 @@ private slots: QVERIFY(elapsed.elapsed() >= 380); QVERIFY(frames.count() >= 10); QCOMPARE(errors.count(), 0); QVERIFY(!window.isVisible()); } + + void windowKeepsGeometryAcrossFiles() { + VideoPlayerWindow window; + auto* engine = window.findChild(); QVERIFY(engine); + QSignalSpy opened(engine, &VideoPlayerEngine::opened); + window.setGeometry(60, 70, 560, 320); + window.playFile(video("long")); + const QRect expected = window.geometry(); + QTRY_COMPARE_WITH_TIMEOUT(opened.count(), 1, 1500); + QCOMPARE(window.geometry(), expected); QVERIFY(!window.isFullScreen()); + window.setGeometry(90, 100, 480, 360); + const QRect moved = window.geometry(); + window.playFile(video("long")); + QTRY_COMPARE_WITH_TIMEOUT(opened.count(), 2, 1500); + QCOMPARE(window.geometry(), moved); + window.showFullScreen(); + window.playFile(video("long")); + QTRY_COMPARE_WITH_TIMEOUT(opened.count(), 3, 1500); + QVERIFY(window.isFullScreen()); + QTest::keyClick(&window, Qt::Key_Escape); + QVERIFY(!window.isFullScreen()); + QCOMPARE(window.geometry(), moved); + window.close(); + } }; QTEST_MAIN(VideoPlaybackTest)