qtmobility/tests/auto/qmediaservice/tst_qmediaservice.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
equal deleted inserted replaced
11:06b8e2af4411 14:6fbed849b4f4
    99 class QtTestMediaControlE : public QMediaControl
    99 class QtTestMediaControlE : public QMediaControl
   100 {
   100 {
   101     Q_OBJECT
   101     Q_OBJECT
   102 };
   102 };
   103 
   103 
   104 struct QtTestDevice
       
   105 {
       
   106     QtTestDevice() {}
       
   107     QtTestDevice(const QString &name, const QString &description, const QIcon &icon)
       
   108         : name(name), description(description), icon(icon)
       
   109     {
       
   110     }
       
   111 
       
   112     QString name;
       
   113     QString description;
       
   114     QIcon icon;
       
   115 };
       
   116 
       
   117 class QtTestVideoDeviceControl : public QVideoDeviceControl
       
   118 {
       
   119 public:
       
   120     QtTestVideoDeviceControl(QObject *parent = 0)
       
   121         : QVideoDeviceControl(parent)
       
   122         , m_selectedDevice(-1)
       
   123         , m_defaultDevice(-1)
       
   124     {
       
   125     }
       
   126 
       
   127     int deviceCount() const { return devices.count(); }
       
   128 
       
   129     QString deviceName(int index) const { return devices.value(index).name; }
       
   130     QString deviceDescription(int index) const { return devices.value(index).description; }
       
   131     QIcon deviceIcon(int index) const { return devices.value(index).icon; }
       
   132 
       
   133     int defaultDevice() const { return m_defaultDevice; }
       
   134     void setDefaultDevice(int index) { m_defaultDevice = index; }
       
   135 
       
   136     int selectedDevice() const { return m_selectedDevice; }
       
   137     void setSelectedDevice(int index)
       
   138     {
       
   139         emit selectedDeviceChanged(m_selectedDevice = index);
       
   140         emit selectedDeviceChanged(devices.value(index).name);
       
   141     }
       
   142 
       
   143     QList<QtTestDevice> devices;
       
   144 
       
   145 private:
       
   146     int m_selectedDevice;
       
   147     int m_defaultDevice;
       
   148 };
       
   149 
       
   150 class QtTestMediaService : public QMediaService
   104 class QtTestMediaService : public QMediaService
   151 {
   105 {
   152     Q_OBJECT
   106     Q_OBJECT
   153 public:
   107 public:
   154     QtTestMediaService()
   108     QtTestMediaService()
   155         : QMediaService(0)
   109         : QMediaService(0)
   156         , hasDeviceControls(false)
   110         , refA(0)
       
   111         , refB(0)
       
   112         , refC(0)
   157     {
   113     {
   158     }
   114     }
   159 
   115 
   160     QMediaControl* control(const char *name) const
   116     QMediaControl *requestControl(const char *name)
   161     {
   117     {
   162         if (strcmp(name, QtTestMediaControlA_iid) == 0)
   118         if (strcmp(name, QtTestMediaControlA_iid) == 0) {
   163             return const_cast<QtTestMediaControlA *>(&controlA);
   119             refA += 1;
   164         else if (strcmp(name, QtTestMediaControlB_iid) == 0)
   120 
   165             return const_cast<QtTestMediaControlB *>(&controlB);
   121             return &controlA;
   166         else if (strcmp(name, QtTestMediaControlC_iid) == 0)
   122         } else if (strcmp(name, QtTestMediaControlB_iid) == 0) {
   167             return const_cast<QtTestMediaControlC *>(&controlC);
   123             refB += 1;
   168         else if (hasDeviceControls && strcmp(name, QVideoDeviceControl_iid) == 0)
   124 
   169             return const_cast<QtTestVideoDeviceControl *>(&videoDeviceControl);
   125             return &controlB;
   170         else
   126         } else if (strcmp(name, QtTestMediaControlC_iid) == 0) {
       
   127             refA += 1;
       
   128 
       
   129             return &controlA;
       
   130         } else {
   171             return 0;
   131             return 0;
       
   132         }
   172     }
   133     }
   173 
   134 
   174     using QMediaService::control;
   135     void releaseControl(QMediaControl *control)
       
   136     {
       
   137         if (control == &controlA)
       
   138             refA -= 1;
       
   139         else if (control == &controlB)
       
   140             refB -= 1;
       
   141         else if (control == &controlC)
       
   142             refC -= 1;
       
   143     }
   175 
   144 
       
   145     using QMediaService::requestControl;
       
   146 
       
   147     int refA;
       
   148     int refB;
       
   149     int refC;
   176     QtTestMediaControlA controlA;
   150     QtTestMediaControlA controlA;
   177     QtTestMediaControlB controlB;
   151     QtTestMediaControlB controlB;
   178     QtTestMediaControlC controlC;
   152     QtTestMediaControlC controlC;
   179     QtTestVideoDeviceControl videoDeviceControl;
       
   180     bool hasDeviceControls;
       
   181 };
   153 };
   182 
   154 
   183 void tst_QMediaService::initTestCase()
   155 void tst_QMediaService::initTestCase()
   184 {    
   156 {    
   185 }
   157 }
   197 
   169 
   198 void tst_QMediaService::control()
   170 void tst_QMediaService::control()
   199 {
   171 {
   200     QtTestMediaService service;
   172     QtTestMediaService service;
   201 
   173 
   202     QCOMPARE(service.control<QtTestMediaControlA *>(), &service.controlA);
   174     QtTestMediaControlA *controlA = service.requestControl<QtTestMediaControlA *>();
   203     QCOMPARE(service.control<QtTestMediaControlB *>(), &service.controlB);
   175     QCOMPARE(controlA, &service.controlA);
   204     QVERIFY(!service.control<QtTestMediaControlC *>());  // Faulty implementation returns A.
   176     service.releaseControl(controlA);
   205     QVERIFY(!service.control<QtTestMediaControlD *>());  // No control of that type.
   177 
       
   178     QtTestMediaControlB *controlB = service.requestControl<QtTestMediaControlB *>();
       
   179     QCOMPARE(controlB, &service.controlB);
       
   180     service.releaseControl(controlB);
       
   181 
       
   182     QVERIFY(!service.requestControl<QtTestMediaControlC *>());  // Faulty implementation returns A.
       
   183     QCOMPARE(service.refA, 0);  // Verify the control was released.
       
   184 
       
   185     QVERIFY(!service.requestControl<QtTestMediaControlD *>());  // No control of that type.
   206 }
   186 }
   207 
   187 
   208 QT_END_NAMESPACE
   188 QT_END_NAMESPACE
   209 
   189 
   210 QT_USE_NAMESPACE
   190 QT_USE_NAMESPACE