From edf911e3c162f161ce553d67cfd7f7950f9b435c Mon Sep 17 00:00:00 2001 From: Samuel Mira Date: Mon, 11 Oct 2021 12:46:43 +0300 Subject: Add test for change application state while recording This test tests if the a media recording can finish successfully when the application state changes to a inative state while recording. This can happen in mobile devices when you are recording and user changes the app or if the user gets a popup from the OS like a permission popup. Pick-to: 6.2 Change-Id: I4a4dbca3e47b4aa345be4ea3fa257eac523bb8a1 Reviewed-by: Lars Knoll --- .../qmediarecorder/tst_qmediarecorder.cpp | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp b/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp index 882ef82f2..30ba55c33 100644 --- a/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp +++ b/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp @@ -32,11 +32,13 @@ #include #include #include +#include "private/qguiapplication_p.h" #include #include #include #include +#include "qguiapplication_platform.h" #include "qmockmediacapturesession.h" #include "qmockmediaencoder.h" @@ -70,6 +72,8 @@ private slots: void testVideoSettingsQuality(); void testVideoSettingsEncodingMode(); + void testApplicationInative(); + private: QMockIntegration *mockIntegration = nullptr; QMediaCaptureSession *captureSession; @@ -455,5 +459,32 @@ void tst_QMediaRecorder::testVideoSettingsEncodingMode() QCOMPARE(recorder.encodingMode(), QMediaRecorder::AverageBitRateEncoding); } +void tst_QMediaRecorder::testApplicationInative() +{ + QMediaCaptureSession session; + QMediaRecorder encoder; + session.setRecorder(&encoder); + + encoder.setVideoResolution(640, 480); + encoder.setQuality(QMediaRecorder::VeryHighQuality); + + encoder.setOutputLocation(QUrl("test.tmp")); + QCOMPARE(encoder.outputLocation().toString(), QString("test.tmp")); + QCOMPARE(encoder.actualLocation(), QUrl()); + + encoder.record(); + + QGuiApplicationPrivate::setApplicationState(Qt::ApplicationInactive); + QCoreApplication::processEvents(); + + QGuiApplicationPrivate::setApplicationState(Qt::ApplicationActive); + QCoreApplication::processEvents(); + + encoder.stop(); + + // the actual location is available after record + QCOMPARE(encoder.actualLocation().toString(), QString("test.tmp")); +} + QTEST_GUILESS_MAIN(tst_QMediaRecorder) #include "tst_qmediarecorder.moc" -- cgit v1.2.3