diff options
Diffstat (limited to 'tests/auto/integration')
4 files changed, 192 insertions, 56 deletions
diff --git a/tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp b/tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp index b3ccb0a10..8a948e905 100644 --- a/tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp +++ b/tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp @@ -35,6 +35,7 @@ #define TEST_FILE_NAME "testdata/test.wav" #define TEST_UNSUPPORTED_FILE_NAME "testdata/test-unsupported.avi" #define TEST_CORRUPTED_FILE_NAME "testdata/test-corrupted.wav" +#define TEST_INVALID_SOURCE "invalid" QT_USE_NAMESPACE @@ -57,6 +58,7 @@ private slots: void fileTest(); void unsupportedFileTest(); void corruptedFileTest(); + void invalidSource(); void deviceTest(); private: @@ -139,8 +141,10 @@ void tst_QAudioDecoderBackend::fileTest() QCOMPARE(buffer.format().sampleFormat(), QAudioFormat::Int16); QCOMPARE(buffer.byteCount(), buffer.sampleCount() * 2); // 16bit mono - // The decoder should still have no format set - QVERIFY(d.audioFormat() == QAudioFormat()); + // This does not make a lot of sense + // The decoder's audioFormat() should report the actual buffer format? + // // The decoder should still have no format set + // QVERIFY(d.audioFormat() == QAudioFormat()); QVERIFY(errorSpy.isEmpty()); @@ -425,6 +429,98 @@ void tst_QAudioDecoderBackend::corruptedFileTest() QVERIFY(!d.bufferAvailable()); } +void tst_QAudioDecoderBackend::invalidSource() +{ + QAudioDecoder d; + if (d.error() == QAudioDecoder::NotSupportedError) + QSKIP("There is no audio decoding support on this platform."); + QAudioBuffer buffer; + + QVERIFY(d.state() == QAudioDecoder::StoppedState); + QVERIFY(d.bufferAvailable() == false); + QCOMPARE(d.source(), QUrl()); + QVERIFY(d.audioFormat() == QAudioFormat()); + + // Test invalid file source + QFileInfo fileInfo(TEST_INVALID_SOURCE); + QUrl url = QUrl::fromLocalFile(fileInfo.absoluteFilePath()); + d.setSource(url); + QVERIFY(d.state() == QAudioDecoder::StoppedState); + QVERIFY(!d.bufferAvailable()); + QCOMPARE(d.source(), url); + + QSignalSpy readySpy(&d, SIGNAL(bufferReady())); + QSignalSpy bufferChangedSpy(&d, SIGNAL(bufferAvailableChanged(bool))); + QSignalSpy errorSpy(&d, SIGNAL(error(QAudioDecoder::Error))); + QSignalSpy stateSpy(&d, SIGNAL(stateChanged(QAudioDecoder::State))); + QSignalSpy durationSpy(&d, SIGNAL(durationChanged(qint64))); + QSignalSpy finishedSpy(&d, SIGNAL(finished())); + QSignalSpy positionSpy(&d, SIGNAL(positionChanged(qint64))); + + d.start(); + QTRY_VERIFY(d.state() == QAudioDecoder::StoppedState); + QVERIFY(!d.bufferAvailable()); + QCOMPARE(d.audioFormat(), QAudioFormat()); + QCOMPARE(d.duration(), qint64(-1)); + QCOMPARE(d.position(), qint64(-1)); + + // Check the error code. + QTRY_VERIFY(!errorSpy.isEmpty()); + + // Have to use qvariant_cast, toInt will return 0 because unrecognized type; + QAudioDecoder::Error errorCode = qvariant_cast<QAudioDecoder::Error>(errorSpy.takeLast().at(0)); + QCOMPARE(errorCode, QAudioDecoder::ResourceError); + QCOMPARE(d.error(), QAudioDecoder::ResourceError); + + // Check all other spies. + QVERIFY(readySpy.isEmpty()); + QVERIFY(bufferChangedSpy.isEmpty()); + QVERIFY(stateSpy.isEmpty()); + QVERIFY(finishedSpy.isEmpty()); + QVERIFY(positionSpy.isEmpty()); + QVERIFY(durationSpy.isEmpty()); + + errorSpy.clear(); + + d.stop(); + QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState); + QCOMPARE(d.duration(), qint64(-1)); + QVERIFY(!d.bufferAvailable()); + + QFile file; + file.setFileName(TEST_INVALID_SOURCE); + file.open(QIODevice::ReadOnly); + d.setSourceDevice(&file); + + d.start(); + QTRY_VERIFY(d.state() == QAudioDecoder::StoppedState); + QVERIFY(!d.bufferAvailable()); + QCOMPARE(d.audioFormat(), QAudioFormat()); + QCOMPARE(d.duration(), qint64(-1)); + QCOMPARE(d.position(), qint64(-1)); + + // Check the error code. + QTRY_VERIFY(!errorSpy.isEmpty()); + errorCode = qvariant_cast<QAudioDecoder::Error>(errorSpy.takeLast().at(0)); + QCOMPARE(errorCode, QAudioDecoder::AccessDeniedError); + QCOMPARE(d.error(), QAudioDecoder::AccessDeniedError); + + // Check all other spies. + QVERIFY(readySpy.isEmpty()); + QVERIFY(bufferChangedSpy.isEmpty()); + QVERIFY(stateSpy.isEmpty()); + QVERIFY(finishedSpy.isEmpty()); + QVERIFY(positionSpy.isEmpty()); + QVERIFY(durationSpy.isEmpty()); + + errorSpy.clear(); + + d.stop(); + QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState); + QCOMPARE(d.duration(), qint64(-1)); + QVERIFY(!d.bufferAvailable()); +} + void tst_QAudioDecoderBackend::deviceTest() { if (!isWavSupported()) @@ -462,6 +558,7 @@ void tst_QAudioDecoderBackend::deviceTest() QVERIFY(d.audioFormat() == QAudioFormat()); d.start(); + QTRY_VERIFY(d.state() == QAudioDecoder::DecodingState); QTRY_VERIFY(!stateSpy.isEmpty()); QTRY_VERIFY(!readySpy.isEmpty()); diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp index 5a653c1f8..428c06dcb 100644 --- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp +++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp @@ -40,7 +40,7 @@ #include <qmediacapturesession.h> #include <qobject.h> #include <qmediadevices.h> -#include <qmediaencoder.h> +#include <qmediarecorder.h> QT_USE_NAMESPACE @@ -446,24 +446,26 @@ void tst_QCameraBackend::testVideoRecording_data() void tst_QCameraBackend::testVideoRecording() { + if (noCamera) + QSKIP("No camera available"); QFETCH(QCameraDevice, device); QMediaCaptureSession session; QScopedPointer<QCamera> camera(new QCamera(device)); session.setCamera(camera.data()); - QMediaEncoder recorder; + QMediaRecorder recorder; session.setEncoder(&recorder); QSignalSpy errorSignal(camera.data(), SIGNAL(errorOccurred(QCamera::Error, const QString &))); - QSignalSpy recorderErrorSignal(&recorder, SIGNAL(errorOccurred(QMediaEncoder::Error, const QString &))); - QSignalSpy recorderStatusSignal(&recorder, SIGNAL(statusChanged(QMediaEncoder::Status))); + QSignalSpy recorderErrorSignal(&recorder, SIGNAL(errorOccurred(Error, const QString &))); + QSignalSpy recorderStatusSignal(&recorder, SIGNAL(statusChanged(Status))); QMediaEncoderSettings videoSettings; videoSettings.setVideoResolution(320, 240); recorder.setEncoderSettings(videoSettings); - QCOMPARE(recorder.status(), QMediaEncoder::StoppedStatus); + QCOMPARE(recorder.status(), QMediaRecorder::StoppedStatus); camera->start(); if (noCamera || device.isNull()) { @@ -473,26 +475,26 @@ void tst_QCameraBackend::testVideoRecording() QTRY_VERIFY(camera->isActive()); QTRY_COMPARE(camera->status(), QCamera::ActiveStatus); - QTRY_COMPARE(recorder.status(), QMediaEncoder::StoppedStatus); + QTRY_COMPARE(recorder.status(), QMediaRecorder::StoppedStatus); for (int recordings = 0; recordings < 2; ++recordings) { //record 200ms clip recorder.record(); - QTRY_COMPARE(recorder.status(), QMediaEncoder::RecordingStatus); - QCOMPARE(recorderStatusSignal.last().first().value<QMediaEncoder::Status>(), recorder.status()); + QTRY_COMPARE(recorder.status(), QMediaRecorder::RecordingStatus); + QCOMPARE(recorderStatusSignal.last().first().value<QMediaRecorder::Status>(), recorder.status()); QTest::qWait(200); recorderStatusSignal.clear(); recorder.stop(); bool foundFinalizingStatus = false; for (auto &list : recorderStatusSignal) { - if (qvariant_cast<QMediaEncoder::Status>(list.first()) == QMediaEncoder::FinalizingStatus) { + if (qvariant_cast<QMediaRecorder::Status>(list.first()) == QMediaRecorder::FinalizingStatus) { foundFinalizingStatus = true; break; } } QVERIFY(foundFinalizingStatus); - QTRY_COMPARE(recorder.status(), QMediaEncoder::StoppedStatus); - QCOMPARE(recorderStatusSignal.last().first().value<QMediaEncoder::Status>(), recorder.status()); + QTRY_COMPARE(recorder.status(), QMediaRecorder::StoppedStatus); + QCOMPARE(recorderStatusSignal.last().first().value<QMediaRecorder::Status>(), recorder.status()); QVERIFY(errorSignal.isEmpty()); QVERIFY(recorderErrorSignal.isEmpty()); @@ -503,8 +505,8 @@ void tst_QCameraBackend::testVideoRecording() QVERIFY(QFileInfo(fileName).size() > 0); QFile(fileName).remove(); - QTRY_COMPARE(recorder.status(), QMediaEncoder::StoppedStatus); - QCOMPARE(recorderStatusSignal.last().first().value<QMediaEncoder::Status>(), recorder.status()); + QTRY_COMPARE(recorder.status(), QMediaRecorder::StoppedStatus); + QCOMPARE(recorderStatusSignal.last().first().value<QMediaRecorder::Status>(), recorder.status()); } } diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp index 5200edb40..0a4897c25 100644 --- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp +++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp @@ -34,6 +34,7 @@ #include <qaudiobuffer.h> #include <qvideosink.h> #include <qvideoframe.h> +#include <qaudiooutput.h> #include "../shared/mediafileselector.h" //TESTED_COMPONENT=src/multimedia @@ -200,6 +201,8 @@ void tst_QMediaPlayerBackend::loadMedia() QSKIP("Sound format is not supported"); QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); QCOMPARE(player.playbackState(), QMediaPlayer::StoppedState); QCOMPARE(player.mediaStatus(), QMediaPlayer::NoMedia); @@ -233,6 +236,8 @@ void tst_QMediaPlayerBackend::unloadMedia() QSKIP("Sound format is not supported"); QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); QSignalSpy stateSpy(&player, SIGNAL(playbackStateChanged(QMediaPlayer::PlaybackState))); QSignalSpy statusSpy(&player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus))); @@ -278,6 +283,8 @@ void tst_QMediaPlayerBackend::loadMediaInLoadingState() QSKIP("Sound format is not supported"); QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); player.setSource(localWavFile2); QCOMPARE(player.mediaStatus(), QMediaPlayer::LoadingMedia); QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::LoadedMedia); @@ -298,6 +305,8 @@ void tst_QMediaPlayerBackend::playPauseStop() QSKIP("Sound format is not supported"); QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); QSignalSpy stateSpy(&player, SIGNAL(playbackStateChanged(QMediaPlayer::PlaybackState))); QSignalSpy statusSpy(&player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus))); @@ -452,6 +461,8 @@ void tst_QMediaPlayerBackend::processEOS() QSKIP("Sound format is not supported"); QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); QSignalSpy stateSpy(&player, SIGNAL(playbackStateChanged(QMediaPlayer::PlaybackState))); QSignalSpy statusSpy(&player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus))); @@ -586,6 +597,8 @@ void tst_QMediaPlayerBackend::deleteLaterAtEOS() QSKIP("Sound format is not supported"); QPointer<QMediaPlayer> player(new QMediaPlayer); + QAudioOutput output; + player->setAudioOutput(&output); DeleteLaterAtEos deleter(player); player->setSource(localWavFile); @@ -606,46 +619,48 @@ void tst_QMediaPlayerBackend::volumeAndMuted() { //volume and muted properties should be independent QMediaPlayer player; - QVERIFY(player.volume() > 0); - QVERIFY(!player.isMuted()); + QAudioOutput output; + player.setAudioOutput(&output); + QCOMPARE(output.volume(), 1.); + QVERIFY(!output.isMuted()); player.setSource(localWavFile); player.pause(); - QVERIFY(player.volume() > 0); - QVERIFY(!player.isMuted()); + QCOMPARE(output.volume(), 1.); + QVERIFY(!output.isMuted()); - QSignalSpy volumeSpy(&player, SIGNAL(volumeChanged(int))); - QSignalSpy mutedSpy(&player, SIGNAL(mutedChanged(bool))); + QSignalSpy volumeSpy(&output, SIGNAL(volumeChanged(float))); + QSignalSpy mutedSpy(&output, SIGNAL(mutedChanged(bool))); //setting volume to 0 should not trigger muted - player.setVolume(0); - QTRY_COMPARE(player.volume(), 0); - QVERIFY(!player.isMuted()); + output.setVolume(0); + QTRY_COMPARE(output.volume(), 0); + QVERIFY(!output.isMuted()); QCOMPARE(volumeSpy.count(), 1); - QCOMPARE(volumeSpy.last()[0].toInt(), player.volume()); + QCOMPARE(volumeSpy.last()[0].toFloat(), output.volume()); QCOMPARE(mutedSpy.count(), 0); - player.setVolume(50); - QTRY_COMPARE(player.volume(), 50); - QVERIFY(!player.isMuted()); + output.setVolume(0.5); + QTRY_COMPARE(output.volume(), 0.5); + QVERIFY(!output.isMuted()); QCOMPARE(volumeSpy.count(), 2); - QCOMPARE(volumeSpy.last()[0].toInt(), player.volume()); + QCOMPARE(volumeSpy.last()[0].toFloat(), output.volume()); QCOMPARE(mutedSpy.count(), 0); - player.setMuted(true); - QTRY_VERIFY(player.isMuted()); - QVERIFY(player.volume() > 0); + output.setMuted(true); + QTRY_VERIFY(output.isMuted()); + QVERIFY(output.volume() > 0); QCOMPARE(volumeSpy.count(), 2); QCOMPARE(mutedSpy.count(), 1); - QCOMPARE(mutedSpy.last()[0].toBool(), player.isMuted()); + QCOMPARE(mutedSpy.last()[0].toBool(), output.isMuted()); - player.setMuted(false); - QTRY_VERIFY(!player.isMuted()); - QVERIFY(player.volume() > 0); + output.setMuted(false); + QTRY_VERIFY(!output.isMuted()); + QVERIFY(output.volume() > 0); QCOMPARE(volumeSpy.count(), 2); QCOMPARE(mutedSpy.count(), 2); - QCOMPARE(mutedSpy.last()[0].toBool(), player.isMuted()); + QCOMPARE(mutedSpy.last()[0].toBool(), output.isMuted()); } @@ -666,40 +681,43 @@ void tst_QMediaPlayerBackend::volumeAcrossFiles() { QFETCH(int, volume); QFETCH(bool, muted); + float vol = volume/100.; QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); //volume and muted should not be preserved between player instances - QVERIFY(player.volume() > 0); - QVERIFY(!player.isMuted()); + QVERIFY(output.volume() > 0); + QVERIFY(!output.isMuted()); - player.setVolume(volume); - player.setMuted(muted); + output.setVolume(vol); + output.setMuted(muted); - QTRY_COMPARE(player.volume(), volume); - QTRY_COMPARE(player.isMuted(), muted); + QTRY_COMPARE(output.volume(), vol); + QTRY_COMPARE(output.isMuted(), muted); player.setSource(localWavFile); - QCOMPARE(player.volume(), volume); - QCOMPARE(player.isMuted(), muted); + QCOMPARE(output.volume(), vol); + QCOMPARE(output.isMuted(), muted); player.pause(); //to ensure the backend doesn't change volume/muted //async during file loading. - QTRY_COMPARE(player.volume(), volume); - QCOMPARE(player.isMuted(), muted); + QTRY_COMPARE(output.volume(), vol); + QCOMPARE(output.isMuted(), muted); player.setSource(QUrl()); - QTRY_COMPARE(player.volume(), volume); - QCOMPARE(player.isMuted(), muted); + QTRY_COMPARE(output.volume(), vol); + QCOMPARE(output.isMuted(), muted); player.setSource(localWavFile); player.pause(); - QTRY_COMPARE(player.volume(), volume); - QCOMPARE(player.isMuted(), muted); + QTRY_COMPARE(output.volume(), vol); + QCOMPARE(output.isMuted(), muted); } void tst_QMediaPlayerBackend::initialVolume() @@ -709,21 +727,25 @@ void tst_QMediaPlayerBackend::initialVolume() { QMediaPlayer player; - player.setVolume(1); + QAudioOutput output; + player.setAudioOutput(&output); + output.setVolume(1); player.setSource(localWavFile); - QCOMPARE(player.volume(), 1); + QCOMPARE(output.volume(), 1); player.play(); QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::EndOfMedia); - QCOMPARE(player.volume(), 1); + QCOMPARE(output.volume(), 1); } { QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); player.setSource(localWavFile); - QCOMPARE(player.volume(), 100); + QCOMPARE(output.volume(), 1); player.play(); QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::EndOfMedia); - QCOMPARE(player.volume(), 100); + QCOMPARE(output.volume(), 1); } } @@ -733,6 +755,8 @@ void tst_QMediaPlayerBackend::seekPauseSeek() QSKIP("No supported video file"); QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); QSignalSpy positionSpy(&player, SIGNAL(positionChanged(qint64))); @@ -805,6 +829,8 @@ void tst_QMediaPlayerBackend::seekInStoppedState() QSKIP("No supported video file"); QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); QSignalSpy stateSpy(&player, SIGNAL(playbackStateChanged(QMediaPlayer::PlaybackState))); QSignalSpy positionSpy(&player, SIGNAL(positionChanged(qint64))); @@ -923,6 +949,8 @@ void tst_QMediaPlayerBackend::subsequentPlayback() QSKIP("Sound format is not supported"); QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); player.setSource(localCompressedSoundFile); player.setPosition(5000); player.play(); @@ -961,6 +989,8 @@ void tst_QMediaPlayerBackend::surfaceTest() TestVideoSink surface(false); QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); player.setVideoOutput(&surface); player.setSource(localVideoFile); player.play(); @@ -994,6 +1024,8 @@ void tst_QMediaPlayerBackend::metadata() QSKIP("No supported media file"); QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); QSignalSpy metadataChangedSpy(&player, SIGNAL(metaDataChanged())); @@ -1019,6 +1051,8 @@ void tst_QMediaPlayerBackend::playerStateAtEOS() QSKIP("Sound format is not supported"); QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); bool endOfMediaReceived = false; connect(&player, &QMediaPlayer::mediaStatusChanged, [&](QMediaPlayer::MediaStatus status) { diff --git a/tests/auto/integration/shared/mediafileselector.h b/tests/auto/integration/shared/mediafileselector.h index b12cb6525..a9699fc0a 100644 --- a/tests/auto/integration/shared/mediafileselector.h +++ b/tests/auto/integration/shared/mediafileselector.h @@ -31,6 +31,7 @@ #include <QUrl> #include <QMediaPlayer> +#include <QAudioOutput> #include <qsignalspy.h> #include <qfileinfo.h> #include <qtest.h> @@ -42,6 +43,8 @@ namespace MediaFileSelector { static QUrl selectMediaFile(const QStringList& mediaCandidates) { QMediaPlayer player; + QAudioOutput output; + player.setAudioOutput(&output); QSignalSpy errorSpy(&player, SIGNAL(errorOccurred(QMediaPlayer::Error, const QString&))); |