Extended integration test for QSoundEffect
- setting the source while loading, and while playing; - supported mimetypes; - loading corrupt wave files; Change-Id: Iff27921aaf3a67bcf88807b2a5656deb8cf2d77e Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
This commit is contained in:
committed by
Qt by Nokia
parent
cd5e90f00a
commit
81e3c112e2
BIN
tests/auto/integration/qsoundeffect/test_corrupted.wav
Normal file
BIN
tests/auto/integration/qsoundeffect/test_corrupted.wav
Normal file
Binary file not shown.
BIN
tests/auto/integration/qsoundeffect/test_tone.wav
Normal file
BIN
tests/auto/integration/qsoundeffect/test_tone.wav
Normal file
Binary file not shown.
@@ -48,13 +48,16 @@
|
||||
#include <qaudio.h>
|
||||
#include "qsoundeffect.h"
|
||||
|
||||
|
||||
class tst_QSoundEffect : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
tst_QSoundEffect(QObject* parent=0) : QObject(parent) {}
|
||||
|
||||
public slots:
|
||||
void init();
|
||||
void cleanup();
|
||||
|
||||
private slots:
|
||||
void initTestCase();
|
||||
void testSource();
|
||||
@@ -68,19 +71,48 @@ private slots:
|
||||
void testDestroyWhilePlaying();
|
||||
void testDestroyWhileRestartPlaying();
|
||||
|
||||
void testSetSourceWhileLoading();
|
||||
void testSetSourceWhilePlaying();
|
||||
void testSupportedMimeTypes();
|
||||
void testCorruptFile();
|
||||
|
||||
private:
|
||||
QSoundEffect* sound;
|
||||
QUrl url;
|
||||
QUrl url; // test.wav: pcm_s16le, 48000 Hz, stereo, s16
|
||||
QUrl url2; // test_tone.wav: pcm_s16le, 44100 Hz, mono
|
||||
QUrl urlCorrupted; // test_corrupted.wav: corrupted
|
||||
};
|
||||
|
||||
void tst_QSoundEffect::init()
|
||||
{
|
||||
sound->stop();
|
||||
sound->setSource(QUrl());
|
||||
sound->setLoopCount(1);
|
||||
sound->setVolume(1.0);
|
||||
sound->setMuted(false);
|
||||
}
|
||||
|
||||
void tst_QSoundEffect::cleanup()
|
||||
{
|
||||
}
|
||||
|
||||
void tst_QSoundEffect::initTestCase()
|
||||
{
|
||||
const QString testFileName = QStringLiteral("test.wav");
|
||||
const QString fullPath = QFINDTESTDATA(testFileName);
|
||||
QString testFileName = QStringLiteral("test.wav");
|
||||
QString fullPath = QFINDTESTDATA(testFileName);
|
||||
QVERIFY2(!fullPath.isEmpty(), qPrintable(QStringLiteral("Unable to locate ") + testFileName));
|
||||
|
||||
url = QUrl::fromLocalFile(fullPath);
|
||||
|
||||
testFileName = QStringLiteral("test_tone.wav");
|
||||
fullPath = QFINDTESTDATA(testFileName);
|
||||
QVERIFY2(!fullPath.isEmpty(), qPrintable(QStringLiteral("Unable to locate ") + testFileName));
|
||||
url2 = QUrl::fromLocalFile(fullPath);
|
||||
|
||||
testFileName = QStringLiteral("test_corrupted.wav");
|
||||
fullPath = QFINDTESTDATA(testFileName);
|
||||
QVERIFY2(!fullPath.isEmpty(), qPrintable(QStringLiteral("Unable to locate ") + testFileName));
|
||||
urlCorrupted = QUrl::fromLocalFile(fullPath);
|
||||
|
||||
sound = new QSoundEffect(this);
|
||||
|
||||
QVERIFY(sound->source().isEmpty());
|
||||
@@ -107,6 +139,9 @@ void tst_QSoundEffect::testSource()
|
||||
|
||||
void tst_QSoundEffect::testLooping()
|
||||
{
|
||||
sound->setSource(url);
|
||||
QTRY_COMPARE(sound->status(), QSoundEffect::Ready);
|
||||
|
||||
QSignalSpy readSignal_Count(sound, SIGNAL(loopCountChanged()));
|
||||
QSignalSpy readSignal_Remaining(sound, SIGNAL(loopsRemainingChanged()));
|
||||
|
||||
@@ -118,7 +153,7 @@ void tst_QSoundEffect::testLooping()
|
||||
sound->play();
|
||||
|
||||
// test.wav is about 200ms, wait until it has finished playing 5 times
|
||||
QTest::qWait(3000);
|
||||
QTestEventLoop::instance().enterLoop(3);
|
||||
|
||||
QCOMPARE(sound->loopsRemaining(), 0);
|
||||
QCOMPARE(readSignal_Remaining.count(),5);
|
||||
@@ -170,9 +205,9 @@ void tst_QSoundEffect::testPlaying()
|
||||
QTestEventLoop::instance().enterLoop(1);
|
||||
sound->play();
|
||||
QTestEventLoop::instance().enterLoop(1);
|
||||
QCOMPARE(sound->isPlaying(), false);
|
||||
QTRY_VERIFY(!sound->isPlaying());
|
||||
|
||||
sound->setLoopCount(1);
|
||||
sound->setLoopCount(1); // TODO: What if one of the tests fail?
|
||||
}
|
||||
|
||||
void tst_QSoundEffect::testStatus()
|
||||
@@ -225,6 +260,95 @@ void tst_QSoundEffect::testDestroyWhileRestartPlaying()
|
||||
QTestEventLoop::instance().enterLoop(1);
|
||||
}
|
||||
|
||||
void tst_QSoundEffect::testSetSourceWhileLoading()
|
||||
{
|
||||
for (int i = 0; i < 10; i++) {
|
||||
sound->setSource(url);
|
||||
QVERIFY(sound->status() == QSoundEffect::Loading || sound->status() == QSoundEffect::Ready);
|
||||
sound->setSource(url); // set same source again
|
||||
QVERIFY(sound->status() == QSoundEffect::Loading || sound->status() == QSoundEffect::Ready);
|
||||
QTRY_COMPARE(sound->status(), QSoundEffect::Ready); // make sure it switches to ready state
|
||||
sound->play();
|
||||
QVERIFY(sound->isPlaying());
|
||||
|
||||
sound->setSource(QUrl());
|
||||
QCOMPARE(sound->status(), QSoundEffect::Null);
|
||||
|
||||
sound->setSource(url2);
|
||||
QVERIFY(sound->status() == QSoundEffect::Loading || sound->status() == QSoundEffect::Ready);
|
||||
sound->setSource(url); // set different source
|
||||
QVERIFY(sound->status() == QSoundEffect::Loading || sound->status() == QSoundEffect::Ready);
|
||||
QTRY_COMPARE(sound->status(), QSoundEffect::Ready);
|
||||
sound->play();
|
||||
QVERIFY(sound->isPlaying());
|
||||
sound->stop();
|
||||
|
||||
sound->setSource(QUrl());
|
||||
QCOMPARE(sound->status(), QSoundEffect::Null);
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QSoundEffect::testSetSourceWhilePlaying()
|
||||
{
|
||||
for (int i = 0; i < 10; i++) {
|
||||
sound->setSource(url);
|
||||
QTRY_COMPARE(sound->status(), QSoundEffect::Ready);
|
||||
sound->play();
|
||||
QVERIFY(sound->isPlaying());
|
||||
sound->setSource(url); // set same source again
|
||||
QCOMPARE(sound->status(), QSoundEffect::Ready);
|
||||
QVERIFY(sound->isPlaying()); // playback doesn't stop, URL is the same
|
||||
sound->play();
|
||||
QVERIFY(sound->isPlaying());
|
||||
|
||||
sound->setSource(QUrl());
|
||||
QCOMPARE(sound->status(), QSoundEffect::Null);
|
||||
|
||||
sound->setSource(url2);
|
||||
QTRY_COMPARE(sound->status(), QSoundEffect::Ready);
|
||||
sound->play();
|
||||
QVERIFY(sound->isPlaying());
|
||||
sound->setSource(url); // set different source
|
||||
QTRY_COMPARE(sound->status(), QSoundEffect::Ready);
|
||||
QVERIFY(!sound->isPlaying()); // playback stops, URL is different
|
||||
sound->play();
|
||||
QVERIFY(sound->isPlaying());
|
||||
sound->stop();
|
||||
|
||||
sound->setSource(QUrl());
|
||||
QCOMPARE(sound->status(), QSoundEffect::Null);
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QSoundEffect::testSupportedMimeTypes()
|
||||
{
|
||||
QStringList mimeTypes = sound->supportedMimeTypes();
|
||||
QVERIFY(!mimeTypes.empty());
|
||||
QVERIFY(mimeTypes.indexOf(QLatin1String("audio/wav")) != -1 ||
|
||||
mimeTypes.indexOf(QLatin1String("audio/x-wav")) != -1 ||
|
||||
mimeTypes.indexOf(QLatin1String("audio/wave")) != -1 ||
|
||||
mimeTypes.indexOf(QLatin1String("audio/x-pn-wav")) != -1);
|
||||
}
|
||||
|
||||
void tst_QSoundEffect::testCorruptFile()
|
||||
{
|
||||
for (int i = 0; i < 10; i++) {
|
||||
QSignalSpy statusSpy(sound, SIGNAL(statusChanged()));
|
||||
sound->setSource(urlCorrupted);
|
||||
QVERIFY(!sound->isPlaying());
|
||||
QVERIFY(sound->status() == QSoundEffect::Loading || sound->status() == QSoundEffect::Error);
|
||||
QTRY_COMPARE(sound->status(), QSoundEffect::Error);
|
||||
QCOMPARE(statusSpy.count(), 2);
|
||||
sound->play();
|
||||
QVERIFY(!sound->isPlaying());
|
||||
|
||||
sound->setSource(url);
|
||||
QTRY_COMPARE(sound->status(), QSoundEffect::Ready);
|
||||
sound->play();
|
||||
QVERIFY(sound->isPlaying());
|
||||
}
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QSoundEffect)
|
||||
|
||||
#include "tst_qsoundeffect.moc"
|
||||
|
||||
Reference in New Issue
Block a user