qtmobility/tests/auto/qmediaservice/tst_qmediaservice.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
--- a/qtmobility/tests/auto/qmediaservice/tst_qmediaservice.cpp	Fri Jun 11 14:26:25 2010 +0300
+++ b/qtmobility/tests/auto/qmediaservice/tst_qmediaservice.cpp	Wed Jun 23 19:08:38 2010 +0300
@@ -101,83 +101,55 @@
     Q_OBJECT
 };
 
-struct QtTestDevice
-{
-    QtTestDevice() {}
-    QtTestDevice(const QString &name, const QString &description, const QIcon &icon)
-        : name(name), description(description), icon(icon)
-    {
-    }
-
-    QString name;
-    QString description;
-    QIcon icon;
-};
-
-class QtTestVideoDeviceControl : public QVideoDeviceControl
-{
-public:
-    QtTestVideoDeviceControl(QObject *parent = 0)
-        : QVideoDeviceControl(parent)
-        , m_selectedDevice(-1)
-        , m_defaultDevice(-1)
-    {
-    }
-
-    int deviceCount() const { return devices.count(); }
-
-    QString deviceName(int index) const { return devices.value(index).name; }
-    QString deviceDescription(int index) const { return devices.value(index).description; }
-    QIcon deviceIcon(int index) const { return devices.value(index).icon; }
-
-    int defaultDevice() const { return m_defaultDevice; }
-    void setDefaultDevice(int index) { m_defaultDevice = index; }
-
-    int selectedDevice() const { return m_selectedDevice; }
-    void setSelectedDevice(int index)
-    {
-        emit selectedDeviceChanged(m_selectedDevice = index);
-        emit selectedDeviceChanged(devices.value(index).name);
-    }
-
-    QList<QtTestDevice> devices;
-
-private:
-    int m_selectedDevice;
-    int m_defaultDevice;
-};
-
 class QtTestMediaService : public QMediaService
 {
     Q_OBJECT
 public:
     QtTestMediaService()
         : QMediaService(0)
-        , hasDeviceControls(false)
+        , refA(0)
+        , refB(0)
+        , refC(0)
     {
     }
 
-    QMediaControl* control(const char *name) const
+    QMediaControl *requestControl(const char *name)
     {
-        if (strcmp(name, QtTestMediaControlA_iid) == 0)
-            return const_cast<QtTestMediaControlA *>(&controlA);
-        else if (strcmp(name, QtTestMediaControlB_iid) == 0)
-            return const_cast<QtTestMediaControlB *>(&controlB);
-        else if (strcmp(name, QtTestMediaControlC_iid) == 0)
-            return const_cast<QtTestMediaControlC *>(&controlC);
-        else if (hasDeviceControls && strcmp(name, QVideoDeviceControl_iid) == 0)
-            return const_cast<QtTestVideoDeviceControl *>(&videoDeviceControl);
-        else
+        if (strcmp(name, QtTestMediaControlA_iid) == 0) {
+            refA += 1;
+
+            return &controlA;
+        } else if (strcmp(name, QtTestMediaControlB_iid) == 0) {
+            refB += 1;
+
+            return &controlB;
+        } else if (strcmp(name, QtTestMediaControlC_iid) == 0) {
+            refA += 1;
+
+            return &controlA;
+        } else {
             return 0;
+        }
     }
 
-    using QMediaService::control;
+    void releaseControl(QMediaControl *control)
+    {
+        if (control == &controlA)
+            refA -= 1;
+        else if (control == &controlB)
+            refB -= 1;
+        else if (control == &controlC)
+            refC -= 1;
+    }
 
+    using QMediaService::requestControl;
+
+    int refA;
+    int refB;
+    int refC;
     QtTestMediaControlA controlA;
     QtTestMediaControlB controlB;
     QtTestMediaControlC controlC;
-    QtTestVideoDeviceControl videoDeviceControl;
-    bool hasDeviceControls;
 };
 
 void tst_QMediaService::initTestCase()
@@ -199,10 +171,18 @@
 {
     QtTestMediaService service;
 
-    QCOMPARE(service.control<QtTestMediaControlA *>(), &service.controlA);
-    QCOMPARE(service.control<QtTestMediaControlB *>(), &service.controlB);
-    QVERIFY(!service.control<QtTestMediaControlC *>());  // Faulty implementation returns A.
-    QVERIFY(!service.control<QtTestMediaControlD *>());  // No control of that type.
+    QtTestMediaControlA *controlA = service.requestControl<QtTestMediaControlA *>();
+    QCOMPARE(controlA, &service.controlA);
+    service.releaseControl(controlA);
+
+    QtTestMediaControlB *controlB = service.requestControl<QtTestMediaControlB *>();
+    QCOMPARE(controlB, &service.controlB);
+    service.releaseControl(controlB);
+
+    QVERIFY(!service.requestControl<QtTestMediaControlC *>());  // Faulty implementation returns A.
+    QCOMPARE(service.refA, 0);  // Verify the control was released.
+
+    QVERIFY(!service.requestControl<QtTestMediaControlD *>());  // No control of that type.
 }
 
 QT_END_NAMESPACE