expanding unit test for QAudioDecoder
authorAngus Cummings <angus.cummings@nokia.com>
Thu, 12 Apr 2012 04:44:28 +0000 (14:44 +1000)
committerQt by Nokia <qt-info@nokia.com>
Sat, 14 Apr 2012 04:57:33 +0000 (06:57 +0200)
Looking for feedback concerning:
implementation of the change
desired functionality of QAudioDecoder

Changed the behaviour of QAudioDecoder for
more sane error output

Change-Id: I82193a94b6fe1ef4202a4ac7bd95c607e0bee9c6
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
src/multimedia/audio/qaudiodecoder.cpp
tests/auto/unit/qaudiodecoder/tst_qaudiodecoder.cpp
tests/auto/unit/qmultimedia_common/mockaudiodecoderservice.h

index 1253deb..1e5983a 100644 (file)
@@ -140,9 +140,7 @@ QAudioDecoder::QAudioDecoder(QObject *parent)
     Q_D(QAudioDecoder);
 
     d->provider = QMediaServiceProvider::defaultServiceProvider();
-    if (d->service == 0) {
-        d->error = ServiceMissingError;
-    } else {
+    if (d->service) {
         d->control = qobject_cast<QAudioDecoderControl*>(d->service->requestControl(QAudioDecoderControl_iid));
         if (d->control != 0) {
             connect(d->control, SIGNAL(stateChanged(QAudioDecoder::State)), SLOT(_q_stateChanged(QAudioDecoder::State)));
@@ -157,6 +155,10 @@ QAudioDecoder::QAudioDecoder(QObject *parent)
             connect(d->control ,SIGNAL(durationChanged(qint64)), this, SIGNAL(durationChanged(qint64)));
         }
     }
+    if (!d->control) {
+       d->error = ServiceMissingError;
+       d->errorString = tr("The QAudioDecoder object does not have a valid service");
+    }
 }
 
 
index 43c51e3..e124710 100644 (file)
@@ -62,6 +62,8 @@ private Q_SLOTS:
     void format();
     void source();
     void readAll();
+    void nullControl();
+    void nullService();
 
 private:
     MockAudioDecoderService  *mockAudioDecoderService;
@@ -338,6 +340,87 @@ void tst_QAudioDecoder::readAll()
     }
 }
 
+void tst_QAudioDecoder::nullControl()
+{
+    mockAudioDecoderService->setControlNull();
+    QAudioDecoder d;
+
+    QVERIFY(d.error() == QAudioDecoder::ServiceMissingError);
+    QVERIFY(!d.errorString().isEmpty());
+
+    QVERIFY(d.hasSupport("MIME") == QtMultimedia::MaybeSupported);
+
+    QVERIFY(d.state() == QAudioDecoder::StoppedState);
+
+    QVERIFY(d.sourceFilename().isEmpty());
+    d.setSourceFilename("test");
+    QVERIFY(d.sourceFilename().isEmpty());
+
+    QFile f;
+    QVERIFY(d.sourceDevice() == 0);
+    d.setSourceDevice(&f);
+    QVERIFY(d.sourceDevice() == 0);
+
+    QAudioFormat format;
+    format.setChannels(2);
+    QVERIFY(!d.audioFormat().isValid());
+    d.setAudioFormat(format);
+    QVERIFY(!d.audioFormat().isValid());
+
+    QVERIFY(!d.read().isValid());
+    QVERIFY(!d.bufferAvailable());
+
+    QVERIFY(d.position() == -1);
+    QVERIFY(d.duration() == -1);
+
+    d.start();
+    QVERIFY(d.error() == QAudioDecoder::ServiceMissingError);
+    QVERIFY(!d.errorString().isEmpty());
+    QVERIFY(d.state() == QAudioDecoder::StoppedState);
+    d.stop();
+}
+
+
+void tst_QAudioDecoder::nullService()
+{
+    mockProvider->service = 0;
+    QAudioDecoder d;
+
+    QVERIFY(d.error() == QAudioDecoder::ServiceMissingError);
+    QVERIFY(!d.errorString().isEmpty());
+
+    QVERIFY(d.hasSupport("MIME") == QtMultimedia::MaybeSupported);
+
+    QVERIFY(d.state() == QAudioDecoder::StoppedState);
+
+    QVERIFY(d.sourceFilename().isEmpty());
+    d.setSourceFilename("test");
+    QVERIFY(d.sourceFilename().isEmpty());
+
+    QFile f;
+    QVERIFY(d.sourceDevice() == 0);
+    d.setSourceDevice(&f);
+    QVERIFY(d.sourceDevice() == 0);
+
+    QAudioFormat format;
+    format.setChannels(2);
+    QVERIFY(!d.audioFormat().isValid());
+    d.setAudioFormat(format);
+    QVERIFY(!d.audioFormat().isValid());
+
+    QVERIFY(!d.read().isValid());
+    QVERIFY(!d.bufferAvailable());
+
+    QVERIFY(d.position() == -1);
+    QVERIFY(d.duration() == -1);
+
+    d.start();
+    QVERIFY(d.error() == QAudioDecoder::ServiceMissingError);
+    QVERIFY(!d.errorString().isEmpty());
+    QVERIFY(d.state() == QAudioDecoder::StoppedState);
+    d.stop();
+}
+
 QTEST_MAIN(tst_QAudioDecoder)
 
 #include "tst_qaudiodecoder.moc"
index 35db819..d322868 100644 (file)
@@ -55,6 +55,7 @@ public:
         : QMediaService(parent)
     {
         mockControl = new MockAudioDecoderControl(this);
+        validControl = mockControl;
     }
 
     ~MockAudioDecoderService()
@@ -74,7 +75,18 @@ public:
         Q_UNUSED(control);
     }
 
+    void setControlNull()
+    {
+        mockControl = 0;
+    }
+
+    void setControlValid()
+    {
+        mockControl = validControl;
+    }
+
     MockAudioDecoderControl *mockControl;
+    MockAudioDecoderControl *validControl;
 };