1 | /**************************************************************************** |
2 | ** |
3 | ** Copyright (C) 2016 The Qt Company Ltd. |
4 | ** Contact: https://www.qt.io/licensing/ |
5 | ** |
6 | ** This file is part of the test suite of the Qt Toolkit. |
7 | ** |
8 | ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ |
9 | ** Commercial License Usage |
10 | ** Licensees holding valid commercial Qt licenses may use this file in |
11 | ** accordance with the commercial license agreement provided with the |
12 | ** Software or, alternatively, in accordance with the terms contained in |
13 | ** a written agreement between you and The Qt Company. For licensing terms |
14 | ** and conditions see https://www.qt.io/terms-conditions. For further |
15 | ** information use the contact form at https://www.qt.io/contact-us. |
16 | ** |
17 | ** GNU General Public License Usage |
18 | ** Alternatively, this file may be used under the terms of the GNU |
19 | ** General Public License version 3 as published by the Free Software |
20 | ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT |
21 | ** included in the packaging of this file. Please review the following |
22 | ** information to ensure the GNU General Public License requirements will |
23 | ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
24 | ** |
25 | ** $QT_END_LICENSE$ |
26 | ** |
27 | ****************************************************************************/ |
28 | |
29 | #ifndef MOCKPLAYERSERVICE_H |
30 | #define MOCKPLAYERSERVICE_H |
31 | |
32 | #include "qmediaservice.h" |
33 | |
34 | #include "mockmediaplayercontrol.h" |
35 | #include "mockmediastreamscontrol.h" |
36 | #include "mockmedianetworkaccesscontrol.h" |
37 | #include "mockvideorenderercontrol.h" |
38 | #include "mockvideoprobecontrol.h" |
39 | #include "mockvideowindowcontrol.h" |
40 | #include "mockaudiorolecontrol.h" |
41 | #include "mockcustomaudiorolecontrol.h" |
42 | |
43 | class MockMediaPlayerService : public QMediaService |
44 | { |
45 | Q_OBJECT |
46 | |
47 | public: |
48 | MockMediaPlayerService():QMediaService(0) |
49 | { |
50 | mockControl = new MockMediaPlayerControl; |
51 | mockAudioRoleControl = new MockAudioRoleControl; |
52 | mockCustomAudioRoleControl = new MockCustomAudioRoleControl; |
53 | mockStreamsControl = new MockStreamsControl; |
54 | mockNetworkControl = new MockNetworkAccessControl; |
55 | rendererControl = new MockVideoRendererControl; |
56 | rendererRef = 0; |
57 | mockVideoProbeControl = new MockVideoProbeControl; |
58 | windowControl = new MockVideoWindowControl; |
59 | windowRef = 0; |
60 | enableAudioRole = true; |
61 | enableCustomAudioRole = true; |
62 | } |
63 | |
64 | ~MockMediaPlayerService() |
65 | { |
66 | delete mockControl; |
67 | delete mockAudioRoleControl; |
68 | delete mockCustomAudioRoleControl; |
69 | delete mockStreamsControl; |
70 | delete mockNetworkControl; |
71 | delete rendererControl; |
72 | delete mockVideoProbeControl; |
73 | delete windowControl; |
74 | } |
75 | |
76 | QMediaControl* requestControl(const char *iid) |
77 | { |
78 | if (qstrcmp(str1: iid, QMediaPlayerControl_iid) == 0) { |
79 | return mockControl; |
80 | } else if (qstrcmp(str1: iid, QVideoRendererControl_iid) == 0) { |
81 | if (rendererRef == 0) { |
82 | rendererRef += 1; |
83 | return rendererControl; |
84 | } |
85 | } else if (qstrcmp(str1: iid, QMediaVideoProbeControl_iid) == 0) { |
86 | return mockVideoProbeControl; |
87 | } |
88 | if (qstrcmp(str1: iid, QVideoWindowControl_iid) == 0) { |
89 | if (windowRef == 0) { |
90 | windowRef += 1; |
91 | return windowControl; |
92 | } |
93 | } else if (enableAudioRole && qstrcmp(str1: iid, QAudioRoleControl_iid) == 0) { |
94 | return mockAudioRoleControl; |
95 | } else if (enableCustomAudioRole && qstrcmp(str1: iid, QCustomAudioRoleControl_iid) == 0) { |
96 | return mockCustomAudioRoleControl; |
97 | } |
98 | |
99 | if (qstrcmp(str1: iid, QMediaNetworkAccessControl_iid) == 0) |
100 | return mockNetworkControl; |
101 | return 0; |
102 | } |
103 | |
104 | void releaseControl(QMediaControl *control) |
105 | { |
106 | if (control == rendererControl) |
107 | rendererRef -= 1; |
108 | if (control == windowControl) |
109 | windowRef -= 1; |
110 | } |
111 | |
112 | void setState(QMediaPlayer::State state) { emit mockControl->stateChanged(newState: mockControl->_state = state); } |
113 | void setState(QMediaPlayer::State state, QMediaPlayer::MediaStatus status) { |
114 | mockControl->_state = state; |
115 | mockControl->_mediaStatus = status; |
116 | emit mockControl->mediaStatusChanged(status); |
117 | emit mockControl->stateChanged(newState: state); |
118 | } |
119 | void setMediaStatus(QMediaPlayer::MediaStatus status) { emit mockControl->mediaStatusChanged(status: mockControl->_mediaStatus = status); } |
120 | void setIsValid(bool isValid) { mockControl->_isValid = isValid; } |
121 | void setMedia(QMediaContent media) { mockControl->_media = media; } |
122 | void setDuration(qint64 duration) { mockControl->_duration = duration; } |
123 | void setPosition(qint64 position) { mockControl->_position = position; } |
124 | void setSeekable(bool seekable) { mockControl->_isSeekable = seekable; } |
125 | void setVolume(int volume) { mockControl->_volume = volume; } |
126 | void setMuted(bool muted) { mockControl->_muted = muted; } |
127 | void setVideoAvailable(bool videoAvailable) { mockControl->_videoAvailable = videoAvailable; } |
128 | void setBufferStatus(int bufferStatus) { mockControl->_bufferStatus = bufferStatus; } |
129 | void setPlaybackRate(qreal playbackRate) { mockControl->_playbackRate = playbackRate; } |
130 | void setError(QMediaPlayer::Error error) { mockControl->_error = error; emit mockControl->error(error: mockControl->_error, errorString: mockControl->_errorString); } |
131 | void setErrorString(QString errorString) { mockControl->_errorString = errorString; emit mockControl->error(error: mockControl->_error, errorString: mockControl->_errorString); } |
132 | |
133 | void selectCurrentConfiguration(QNetworkConfiguration config) { mockNetworkControl->setCurrentConfiguration(config); } |
134 | |
135 | void setHasAudioRole(bool enable) { enableAudioRole = enable; } |
136 | void setHasCustomAudioRole(bool enable) { enableCustomAudioRole = enable; } |
137 | |
138 | void reset() |
139 | { |
140 | mockControl->_state = QMediaPlayer::StoppedState; |
141 | mockControl->_mediaStatus = QMediaPlayer::UnknownMediaStatus; |
142 | mockControl->_error = QMediaPlayer::NoError; |
143 | mockControl->_duration = 0; |
144 | mockControl->_position = 0; |
145 | mockControl->_volume = 0; |
146 | mockControl->_muted = false; |
147 | mockControl->_bufferStatus = 0; |
148 | mockControl->_videoAvailable = false; |
149 | mockControl->_isSeekable = false; |
150 | mockControl->_playbackRate = 0.0; |
151 | mockControl->_media = QMediaContent(); |
152 | mockControl->_stream = 0; |
153 | mockControl->_isValid = false; |
154 | mockControl->_errorString = QString(); |
155 | |
156 | enableAudioRole = true; |
157 | mockAudioRoleControl->m_audioRole = QAudio::UnknownRole; |
158 | enableCustomAudioRole = true; |
159 | mockCustomAudioRoleControl->m_customAudioRole.clear(); |
160 | |
161 | mockNetworkControl->_current = QNetworkConfiguration(); |
162 | mockNetworkControl->_configurations = QList<QNetworkConfiguration>(); |
163 | } |
164 | |
165 | MockMediaPlayerControl *mockControl; |
166 | MockAudioRoleControl *mockAudioRoleControl; |
167 | MockCustomAudioRoleControl *mockCustomAudioRoleControl; |
168 | MockStreamsControl *mockStreamsControl; |
169 | MockNetworkAccessControl *mockNetworkControl; |
170 | MockVideoRendererControl *rendererControl; |
171 | MockVideoProbeControl *mockVideoProbeControl; |
172 | MockVideoWindowControl *windowControl; |
173 | int windowRef; |
174 | int rendererRef; |
175 | bool enableAudioRole; |
176 | bool enableCustomAudioRole; |
177 | }; |
178 | |
179 | |
180 | |
181 | #endif // MOCKPLAYERSERVICE_H |
182 | |