OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // A new breed of mock media filters, this time using gmock! Feel free to add | 5 // A new breed of mock media filters, this time using gmock! Feel free to add |
6 // actions if you need interesting side-effects (i.e., copying data to the | 6 // actions if you need interesting side-effects (i.e., copying data to the |
7 // buffer passed into MockDataSource::Read()). | 7 // buffer passed into MockDataSource::Read()). |
8 // | 8 // |
9 // Don't forget you can use StrictMock<> and NiceMock<> if you want the mock | 9 // Don't forget you can use StrictMock<> and NiceMock<> if you want the mock |
10 // filters to fail the test or do nothing when an unexpected method is called. | 10 // filters to fail the test or do nothing when an unexpected method is called. |
11 // http://code.google.com/p/googlemock/wiki/CookBook#Nice_Mocks_and_Strict_Mocks | 11 // http://code.google.com/p/googlemock/wiki/CookBook#Nice_Mocks_and_Strict_Mocks |
12 | 12 |
13 #ifndef MEDIA_BASE_MOCK_FILTERS_H_ | 13 #ifndef MEDIA_BASE_MOCK_FILTERS_H_ |
14 #define MEDIA_BASE_MOCK_FILTERS_H_ | 14 #define MEDIA_BASE_MOCK_FILTERS_H_ |
15 | 15 |
16 #include <string> | 16 #include <string> |
17 | 17 |
18 #include "base/callback.h" | 18 #include "base/callback.h" |
19 #include "media/base/filters.h" | 19 #include "media/base/filters.h" |
20 #include "media/base/media_filter_collection.h" | 20 #include "media/base/filter_collection.h" |
21 #include "media/base/video_frame.h" | 21 #include "media/base/video_frame.h" |
22 #include "testing/gmock/include/gmock/gmock.h" | 22 #include "testing/gmock/include/gmock/gmock.h" |
23 | 23 |
24 namespace media { | 24 namespace media { |
25 | 25 |
26 // Use this template to test for object destruction by setting expectations on | 26 // Use this template to test for object destruction by setting expectations on |
27 // the method OnDestroy(). | 27 // the method OnDestroy(). |
28 // | 28 // |
29 // TODO(scherkus): not sure about the naming... perhaps contribute this back | 29 // TODO(scherkus): not sure about the naming... perhaps contribute this back |
30 // to gmock itself! | 30 // to gmock itself! |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 DISALLOW_COPY_AND_ASSIGN(CallbackImpl); | 87 DISALLOW_COPY_AND_ASSIGN(CallbackImpl); |
88 }; | 88 }; |
89 | 89 |
90 DISALLOW_COPY_AND_ASSIGN(MockFilterCallback); | 90 DISALLOW_COPY_AND_ASSIGN(MockFilterCallback); |
91 }; | 91 }; |
92 | 92 |
93 class MockDataSource : public DataSource { | 93 class MockDataSource : public DataSource { |
94 public: | 94 public: |
95 MockDataSource() {} | 95 MockDataSource() {} |
96 | 96 |
97 // MediaFilter implementation. | 97 // Filter implementation. |
98 MOCK_METHOD1(Stop, void(FilterCallback* callback)); | 98 MOCK_METHOD1(Stop, void(FilterCallback* callback)); |
99 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); | 99 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); |
100 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); | 100 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); |
101 MOCK_METHOD0(OnAudioRendererDisabled, void()); | 101 MOCK_METHOD0(OnAudioRendererDisabled, void()); |
102 | 102 |
103 // DataSource implementation. | 103 // DataSource implementation. |
104 MOCK_METHOD1(IsUrlSupported, bool(const std::string& url)); | 104 MOCK_METHOD1(IsUrlSupported, bool(const std::string& url)); |
105 MOCK_METHOD2(Initialize, void(const std::string& url, | 105 MOCK_METHOD2(Initialize, void(const std::string& url, |
106 FilterCallback* callback)); | 106 FilterCallback* callback)); |
107 MOCK_METHOD0(media_format, const MediaFormat&()); | 107 MOCK_METHOD0(media_format, const MediaFormat&()); |
108 MOCK_METHOD4(Read, void(int64 position, size_t size, uint8* data, | 108 MOCK_METHOD4(Read, void(int64 position, size_t size, uint8* data, |
109 DataSource::ReadCallback* callback)); | 109 DataSource::ReadCallback* callback)); |
110 MOCK_METHOD1(GetSize, bool(int64* size_out)); | 110 MOCK_METHOD1(GetSize, bool(int64* size_out)); |
111 MOCK_METHOD0(IsStreaming, bool()); | 111 MOCK_METHOD0(IsStreaming, bool()); |
112 | 112 |
113 protected: | 113 protected: |
114 virtual ~MockDataSource() {} | 114 virtual ~MockDataSource() {} |
115 | 115 |
116 private: | 116 private: |
117 DISALLOW_COPY_AND_ASSIGN(MockDataSource); | 117 DISALLOW_COPY_AND_ASSIGN(MockDataSource); |
118 }; | 118 }; |
119 | 119 |
120 class MockDemuxer : public Demuxer { | 120 class MockDemuxer : public Demuxer { |
121 public: | 121 public: |
122 MockDemuxer() {} | 122 MockDemuxer() {} |
123 | 123 |
124 // MediaFilter implementation. | 124 // Filter implementation. |
125 MOCK_METHOD1(Stop, void(FilterCallback* callback)); | 125 MOCK_METHOD1(Stop, void(FilterCallback* callback)); |
126 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); | 126 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); |
127 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); | 127 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); |
128 MOCK_METHOD0(OnAudioRendererDisabled, void()); | 128 MOCK_METHOD0(OnAudioRendererDisabled, void()); |
129 | 129 |
130 // Demuxer implementation. | 130 // Demuxer implementation. |
131 MOCK_METHOD2(Initialize, void(DataSource* data_source, | 131 MOCK_METHOD2(Initialize, void(DataSource* data_source, |
132 FilterCallback* callback)); | 132 FilterCallback* callback)); |
133 MOCK_METHOD0(GetNumberOfStreams, size_t()); | 133 MOCK_METHOD0(GetNumberOfStreams, size_t()); |
134 MOCK_METHOD1(GetStream, scoped_refptr<DemuxerStream>(int stream_id)); | 134 MOCK_METHOD1(GetStream, scoped_refptr<DemuxerStream>(int stream_id)); |
(...skipping 21 matching lines...) Expand all Loading... |
156 private: | 156 private: |
157 MediaFormat media_format_; | 157 MediaFormat media_format_; |
158 | 158 |
159 DISALLOW_COPY_AND_ASSIGN(MockDemuxerStream); | 159 DISALLOW_COPY_AND_ASSIGN(MockDemuxerStream); |
160 }; | 160 }; |
161 | 161 |
162 class MockVideoDecoder : public VideoDecoder { | 162 class MockVideoDecoder : public VideoDecoder { |
163 public: | 163 public: |
164 MockVideoDecoder() {} | 164 MockVideoDecoder() {} |
165 | 165 |
166 // MediaFilter implementation. | 166 // Filter implementation. |
167 MOCK_METHOD1(Stop, void(FilterCallback* callback)); | 167 MOCK_METHOD1(Stop, void(FilterCallback* callback)); |
168 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); | 168 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); |
169 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); | 169 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); |
170 MOCK_METHOD0(OnAudioRendererDisabled, void()); | 170 MOCK_METHOD0(OnAudioRendererDisabled, void()); |
171 | 171 |
172 // VideoDecoder implementation. | 172 // VideoDecoder implementation. |
173 MOCK_METHOD2(Initialize, void(DemuxerStream* stream, | 173 MOCK_METHOD2(Initialize, void(DemuxerStream* stream, |
174 FilterCallback* callback)); | 174 FilterCallback* callback)); |
175 MOCK_METHOD0(media_format, const MediaFormat&()); | 175 MOCK_METHOD0(media_format, const MediaFormat&()); |
176 MOCK_METHOD1(ProduceVideoFrame, void(scoped_refptr<VideoFrame>)); | 176 MOCK_METHOD1(ProduceVideoFrame, void(scoped_refptr<VideoFrame>)); |
177 MOCK_METHOD0(ProvidesBuffer, bool()); | 177 MOCK_METHOD0(ProvidesBuffer, bool()); |
178 | 178 |
179 // Make this method public so that tests can make use of it. | 179 // Make this method public so that tests can make use of it. |
180 void VideoFrameReady(scoped_refptr<VideoFrame> frame) { | 180 void VideoFrameReady(scoped_refptr<VideoFrame> frame) { |
181 VideoDecoder::VideoFrameReady(frame); | 181 VideoDecoder::VideoFrameReady(frame); |
182 } | 182 } |
183 | 183 |
184 protected: | 184 protected: |
185 virtual ~MockVideoDecoder() {} | 185 virtual ~MockVideoDecoder() {} |
186 | 186 |
187 private: | 187 private: |
188 DISALLOW_COPY_AND_ASSIGN(MockVideoDecoder); | 188 DISALLOW_COPY_AND_ASSIGN(MockVideoDecoder); |
189 }; | 189 }; |
190 | 190 |
191 class MockAudioDecoder : public AudioDecoder { | 191 class MockAudioDecoder : public AudioDecoder { |
192 public: | 192 public: |
193 MockAudioDecoder() {} | 193 MockAudioDecoder() {} |
194 | 194 |
195 // MediaFilter implementation. | 195 // Filter implementation. |
196 MOCK_METHOD1(Stop, void(FilterCallback* callback)); | 196 MOCK_METHOD1(Stop, void(FilterCallback* callback)); |
197 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); | 197 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); |
198 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); | 198 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); |
199 MOCK_METHOD0(OnAudioRendererDisabled, void()); | 199 MOCK_METHOD0(OnAudioRendererDisabled, void()); |
200 | 200 |
201 // AudioDecoder implementation. | 201 // AudioDecoder implementation. |
202 MOCK_METHOD2(Initialize, void(DemuxerStream* stream, | 202 MOCK_METHOD2(Initialize, void(DemuxerStream* stream, |
203 FilterCallback* callback)); | 203 FilterCallback* callback)); |
204 MOCK_METHOD0(media_format, const MediaFormat&()); | 204 MOCK_METHOD0(media_format, const MediaFormat&()); |
205 MOCK_METHOD1(ProduceAudioSamples, void(scoped_refptr<Buffer>)); | 205 MOCK_METHOD1(ProduceAudioSamples, void(scoped_refptr<Buffer>)); |
206 | 206 |
207 // change to public to allow unittest for access; | 207 // change to public to allow unittest for access; |
208 ConsumeAudioSamplesCallback* consume_audio_samples_callback() { | 208 ConsumeAudioSamplesCallback* consume_audio_samples_callback() { |
209 return AudioDecoder::consume_audio_samples_callback(); | 209 return AudioDecoder::consume_audio_samples_callback(); |
210 } | 210 } |
211 | 211 |
212 protected: | 212 protected: |
213 virtual ~MockAudioDecoder() {} | 213 virtual ~MockAudioDecoder() {} |
214 | 214 |
215 private: | 215 private: |
216 DISALLOW_COPY_AND_ASSIGN(MockAudioDecoder); | 216 DISALLOW_COPY_AND_ASSIGN(MockAudioDecoder); |
217 }; | 217 }; |
218 | 218 |
219 class MockVideoRenderer : public VideoRenderer { | 219 class MockVideoRenderer : public VideoRenderer { |
220 public: | 220 public: |
221 MockVideoRenderer() {} | 221 MockVideoRenderer() {} |
222 | 222 |
223 // MediaFilter implementation. | 223 // Filter implementation. |
224 MOCK_METHOD1(Stop, void(FilterCallback* callback)); | 224 MOCK_METHOD1(Stop, void(FilterCallback* callback)); |
225 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); | 225 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); |
226 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); | 226 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); |
227 MOCK_METHOD0(OnAudioRendererDisabled, void()); | 227 MOCK_METHOD0(OnAudioRendererDisabled, void()); |
228 | 228 |
229 // VideoRenderer implementation. | 229 // VideoRenderer implementation. |
230 MOCK_METHOD2(Initialize, void(VideoDecoder* decoder, | 230 MOCK_METHOD2(Initialize, void(VideoDecoder* decoder, |
231 FilterCallback* callback)); | 231 FilterCallback* callback)); |
232 MOCK_METHOD0(HasEnded, bool()); | 232 MOCK_METHOD0(HasEnded, bool()); |
233 MOCK_METHOD1(ConsumeVideoFrame, void(scoped_refptr<VideoFrame> frame)); | 233 MOCK_METHOD1(ConsumeVideoFrame, void(scoped_refptr<VideoFrame> frame)); |
234 | 234 |
235 protected: | 235 protected: |
236 virtual ~MockVideoRenderer() {} | 236 virtual ~MockVideoRenderer() {} |
237 | 237 |
238 private: | 238 private: |
239 DISALLOW_COPY_AND_ASSIGN(MockVideoRenderer); | 239 DISALLOW_COPY_AND_ASSIGN(MockVideoRenderer); |
240 }; | 240 }; |
241 | 241 |
242 class MockAudioRenderer : public AudioRenderer { | 242 class MockAudioRenderer : public AudioRenderer { |
243 public: | 243 public: |
244 MockAudioRenderer() {} | 244 MockAudioRenderer() {} |
245 | 245 |
246 // MediaFilter implementation. | 246 // Filter implementation. |
247 MOCK_METHOD1(Stop, void(FilterCallback* callback)); | 247 MOCK_METHOD1(Stop, void(FilterCallback* callback)); |
248 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); | 248 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); |
249 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); | 249 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); |
250 MOCK_METHOD0(OnAudioRendererDisabled, void()); | 250 MOCK_METHOD0(OnAudioRendererDisabled, void()); |
251 | 251 |
252 // AudioRenderer implementation. | 252 // AudioRenderer implementation. |
253 MOCK_METHOD2(Initialize, void(AudioDecoder* decoder, | 253 MOCK_METHOD2(Initialize, void(AudioDecoder* decoder, |
254 FilterCallback* callback)); | 254 FilterCallback* callback)); |
255 MOCK_METHOD0(HasEnded, bool()); | 255 MOCK_METHOD0(HasEnded, bool()); |
256 MOCK_METHOD1(SetVolume, void(float volume)); | 256 MOCK_METHOD1(SetVolume, void(float volume)); |
(...skipping 21 matching lines...) Expand all Loading... |
278 virtual ~MockFilterCollection() {} | 278 virtual ~MockFilterCollection() {} |
279 | 279 |
280 // Mock accessors. | 280 // Mock accessors. |
281 MockDataSource* data_source() const { return data_source_; } | 281 MockDataSource* data_source() const { return data_source_; } |
282 MockDemuxer* demuxer() const { return demuxer_; } | 282 MockDemuxer* demuxer() const { return demuxer_; } |
283 MockVideoDecoder* video_decoder() const { return video_decoder_; } | 283 MockVideoDecoder* video_decoder() const { return video_decoder_; } |
284 MockAudioDecoder* audio_decoder() const { return audio_decoder_; } | 284 MockAudioDecoder* audio_decoder() const { return audio_decoder_; } |
285 MockVideoRenderer* video_renderer() const { return video_renderer_; } | 285 MockVideoRenderer* video_renderer() const { return video_renderer_; } |
286 MockAudioRenderer* audio_renderer() const { return audio_renderer_; } | 286 MockAudioRenderer* audio_renderer() const { return audio_renderer_; } |
287 | 287 |
288 MediaFilterCollection* filter_collection() const { | 288 FilterCollection* filter_collection() const { |
289 return filter_collection(true); | 289 return filter_collection(true); |
290 } | 290 } |
291 | 291 |
292 MediaFilterCollection* filter_collection(bool include_data_source) const { | 292 FilterCollection* filter_collection(bool include_data_source) const { |
293 MediaFilterCollection* collection = new MediaFilterCollection(); | 293 FilterCollection* collection = new FilterCollection(); |
294 | 294 |
295 if (include_data_source) { | 295 if (include_data_source) { |
296 collection->AddDataSource(data_source_); | 296 collection->AddDataSource(data_source_); |
297 } | 297 } |
298 collection->AddDemuxer(demuxer_); | 298 collection->AddDemuxer(demuxer_); |
299 collection->AddVideoDecoder(video_decoder_); | 299 collection->AddVideoDecoder(video_decoder_); |
300 collection->AddAudioDecoder(audio_decoder_); | 300 collection->AddAudioDecoder(audio_decoder_); |
301 collection->AddVideoRenderer(video_renderer_); | 301 collection->AddVideoRenderer(video_renderer_); |
302 collection->AddAudioRenderer(audio_renderer_); | 302 collection->AddAudioRenderer(audio_renderer_); |
303 return collection; | 303 return collection; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 | 354 |
355 // Helper gmock action that calls DisableAudioRenderer() on behalf of the | 355 // Helper gmock action that calls DisableAudioRenderer() on behalf of the |
356 // provided filter. | 356 // provided filter. |
357 ACTION_P(DisableAudioRenderer, filter) { | 357 ACTION_P(DisableAudioRenderer, filter) { |
358 filter->host()->DisableAudioRenderer(); | 358 filter->host()->DisableAudioRenderer(); |
359 } | 359 } |
360 | 360 |
361 } // namespace media | 361 } // namespace media |
362 | 362 |
363 #endif // MEDIA_BASE_MOCK_FILTERS_H_ | 363 #endif // MEDIA_BASE_MOCK_FILTERS_H_ |
OLD | NEW |