qtmobility/tests/auto/qmediaserviceprovider/tst_qmediaserviceprovider.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 5 453da2cfceef
--- a/qtmobility/tests/auto/qmediaserviceprovider/tst_qmediaserviceprovider.cpp	Fri Apr 16 15:51:22 2010 +0300
+++ b/qtmobility/tests/auto/qmediaserviceprovider/tst_qmediaserviceprovider.cpp	Mon May 03 13:18:40 2010 +0300
@@ -49,7 +49,6 @@
 #include <qmediaobject.h>
 #include <qmediaservice.h>
 #include <qmediaplayer.h>
-#include <experimental/qcamera.h>
 #include <qaudiocapturesource.h>
 
 QTM_USE_NAMESPACE
@@ -75,8 +74,7 @@
     QStringList keys() const
     {
         return QStringList() <<
-                QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER) <<
-                QLatin1String(Q_MEDIASERVICE_CAMERA);
+                QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER);
     }
 
     QMediaService* create(QString const& key)
@@ -112,8 +110,6 @@
     QList<QByteArray> devices(const QByteArray &service) const
     {
         QList<QByteArray> res;
-        if (service == QByteArray(Q_MEDIASERVICE_CAMERA))
-            res << "camera1" << "camera2";        
         return res;
     }
 
@@ -157,7 +153,7 @@
         Q_UNUSED(codecs);
 
         if (mimeType == "audio/wav")
-            return QtMedia::PreferedService;        
+            return QtMedia::PreferredService;
 
         return QtMedia::NotSupported;
     }
@@ -187,7 +183,6 @@
     {
         return QStringList() <<
                QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER) <<
-               QLatin1String(Q_MEDIASERVICE_CAMERA) <<
                QLatin1String(Q_MEDIASERVICE_AUDIOSOURCE);
     }
 
@@ -207,9 +202,7 @@
     QList<QByteArray> devices(const QByteArray &service) const
     {
         QList<QByteArray> res;
-        if (service == QByteArray(Q_MEDIASERVICE_CAMERA))
-            res << "camera3" << "camera4";
-        else if (service == QByteArray(Q_MEDIASERVICE_AUDIOSOURCE))
+        if (service == QByteArray(Q_MEDIASERVICE_AUDIOSOURCE))
             res << "audiosource1" << "audiosource2";
 
         return res;
@@ -224,6 +217,57 @@
     }
 };
 
+class MockServicePlugin4 : public QMediaServiceProviderPlugin,
+                            public QMediaServiceSupportedFormatsInterface,
+                            public QMediaServiceFeaturesInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(QtMobility::QMediaServiceSupportedFormatsInterface)
+    Q_INTERFACES(QtMobility::QMediaServiceFeaturesInterface)
+public:
+    QStringList keys() const
+    {
+        return QStringList() << QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER);
+    }
+
+    QMediaService* create(QString const& key)
+    {
+        if (keys().contains(key))
+            return new MockMediaService("MockServicePlugin4");
+        else
+            return 0;
+    }
+
+    void release(QMediaService *service)
+    {
+        delete service;
+    }
+
+    QtMedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList& codecs) const
+    {
+        if (codecs.contains(QLatin1String("jpeg2000")))
+            return QtMedia::NotSupported;
+
+        if (supportedMimeTypes().contains(mimeType))
+            return QtMedia::ProbablySupported;
+
+        return QtMedia::MaybeSupported;
+    }
+
+    QStringList supportedMimeTypes() const
+    {
+        return QStringList() << "video/mp4" << "video/quicktime";
+    }
+
+    QMediaServiceProviderHint::Features supportedFeatures(const QByteArray &service) const
+    {
+        if (service == QByteArray(Q_MEDIASERVICE_MEDIAPLAYER))
+            return QMediaServiceProviderHint::StreamPlayback;
+        else
+            return 0;
+    }
+};
+
 
 
 class MockMediaServiceProvider : public QMediaServiceProvider
@@ -248,12 +292,11 @@
 public slots:
     void initTestCase();
 
-private slots:    
+private slots:
     void testDefaultProviderAvailable();
     void testObtainService();
     void testHasSupport();
     void testSupportedMimeTypes();
-    void testDevices();
     void testProviderHints();
 
 private:
@@ -265,6 +308,7 @@
     plugins << new MockServicePlugin1;
     plugins << new MockServicePlugin2;
     plugins << new MockServicePlugin3;
+    plugins << new MockServicePlugin4;
 
     QMediaPluginLoader::setStaticPlugins(QLatin1String("/mediaservice"), plugins);
 }
@@ -284,7 +328,6 @@
 
     QMediaService *service = 0;
 
-    QTest::ignoreMessage(QtWarningMsg, "Load static plugins for \"/mediaservice/\" ");
     // Player
     service = provider->requestService(Q_MEDIASERVICE_MEDIAPLAYER);
     QVERIFY(service != 0);
@@ -325,12 +368,32 @@
     QCOMPARE(QMediaPlayer::hasSupport("audio/ogg"), QtMedia::ProbablySupported);
     QCOMPARE(QMediaPlayer::hasSupport("audio/wav"), QtMedia::ProbablySupported);
 
+    //test low latency flag support
+    QCOMPARE(QMediaPlayer::hasSupport("audio/wav", QStringList(), QMediaPlayer::LowLatency),
+             QtMedia::ProbablySupported);
+    //plugin1 probably supports audio/ogg, it checked because it doesn't provide features iface
+    QCOMPARE(QMediaPlayer::hasSupport("audio/ogg", QStringList(), QMediaPlayer::LowLatency),
+             QtMedia::ProbablySupported);
+    //Plugin4 is not checked here, sine it's known not support low latency
+    QCOMPARE(QMediaPlayer::hasSupport("video/quicktime", QStringList(), QMediaPlayer::LowLatency),
+             QtMedia::MaybeSupported);
+
+    //test streaming flag support
+    QCOMPARE(QMediaPlayer::hasSupport("video/quicktime", QStringList(), QMediaPlayer::StreamPlayback),
+             QtMedia::ProbablySupported);
+    //Plugin2 is not checked here, sine it's known not support streaming
+    QCOMPARE(QMediaPlayer::hasSupport("audio/wav", QStringList(), QMediaPlayer::StreamPlayback),
+             QtMedia::MaybeSupported);
+
     //ensure the correct media player plugin is choosen for mime type
     QMediaPlayer simplePlayer(0, QMediaPlayer::LowLatency);
     QCOMPARE(simplePlayer.service()->objectName(), QLatin1String("MockServicePlugin2"));
 
     QMediaPlayer mediaPlayer;
     QVERIFY(mediaPlayer.service()->objectName() != QLatin1String("MockServicePlugin2"));
+
+    QMediaPlayer streamPlayer(0, QMediaPlayer::StreamPlayback);
+    QCOMPARE(streamPlayer.service()->objectName(), QLatin1String("MockServicePlugin4"));
 }
 
 void tst_QMediaServiceProvider::testSupportedMimeTypes()
@@ -344,43 +407,6 @@
     QVERIFY(!provider->supportedMimeTypes(QByteArray(Q_MEDIASERVICE_MEDIAPLAYER)).contains("audio/mp3"));
 }
 
-void tst_QMediaServiceProvider::testDevices()
-{
-    MockMediaServiceProvider mockProvider;
-    QVERIFY(mockProvider.devices(QByteArray(Q_MEDIASERVICE_CAMERA)).isEmpty());
-    QVERIFY(mockProvider.deviceDescription(QByteArray(Q_MEDIASERVICE_CAMERA),
-                                           QByteArray()).isEmpty());
-
-    QMediaServiceProvider *provider = QMediaServiceProvider::defaultServiceProvider();
-
-    QList<QByteArray> cameraDevices = provider->devices(QByteArray(Q_MEDIASERVICE_CAMERA));
-    QCOMPARE(cameraDevices.count(), 4);
-    QVERIFY(cameraDevices.contains(QByteArray("camera1")));
-    QVERIFY(cameraDevices.contains(QByteArray("camera2")));
-    QVERIFY(cameraDevices.contains(QByteArray("camera3")));
-    QVERIFY(cameraDevices.contains(QByteArray("camera4")));
-
-    //ensure the right plugin is choosen for a device
-    QCamera camera1(QByteArray("camera1"));
-    QCOMPARE( camera1.service()->objectName(), QLatin1String("MockServicePlugin1") );
-    QCamera camera2(QByteArray("camera2"));
-    QCOMPARE( camera2.service()->objectName(), QLatin1String("MockServicePlugin1") );
-    QCamera camera3(QByteArray("camera3"));
-    QCOMPARE( camera3.service()->objectName(), QLatin1String("MockServicePlugin3") );
-    QCamera camera4(QByteArray("camera4"));
-    QCOMPARE( camera4.service()->objectName(), QLatin1String("MockServicePlugin3") );
-
-    QList<QByteArray> audioSourceDevices = provider->devices(QByteArray(Q_MEDIASERVICE_AUDIOSOURCE));
-    QCOMPARE(audioSourceDevices.count(), 2);
-    QVERIFY(audioSourceDevices.contains(QByteArray("audiosource1")));
-    QVERIFY(audioSourceDevices.contains(QByteArray("audiosource2")));
-
-    QVERIFY(provider->devices(QByteArray("non existing service")).isEmpty());
-}
-
-
-
-
 void tst_QMediaServiceProvider::testProviderHints()
 {
     {