Test cached media geometry and stable video windows across file loads

This commit is contained in:
evgeny committed 2026-10-31 17:56:34 +01:00
1 parent c0d5aac41c
commit db1c2f0da7
2 files changed
+59

No files matched your search

@@ -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");
@@ -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<VideoPlayerEngine*>(); 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)