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 |