Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: media/base/mock_filters.h

Issue 155469: Splitting media filter's Initialize() into Create() + callback and Seek() + callback. (Closed)
Patch Set: Fixed valgrind errors Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/base/filters.h ('k') | media/base/mock_filters.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
2 // source code is governed by a BSD-style license that can be found in the 2 // source code is governed by a BSD-style license that can be found in the
3 // LICENSE file. 3 // 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.
(...skipping 22 matching lines...) Expand all
33 33
34 protected: 34 protected:
35 virtual ~Destroyable() { 35 virtual ~Destroyable() {
36 OnDestroy(); 36 OnDestroy();
37 } 37 }
38 38
39 private: 39 private:
40 DISALLOW_COPY_AND_ASSIGN(Destroyable); 40 DISALLOW_COPY_AND_ASSIGN(Destroyable);
41 }; 41 };
42 42
43 // Helper class used to test that callbacks are executed. It is recommend you
44 // combine this class with StrictMock<> to verify that the callback is executed.
45 // You can reuse the same instance of a MockFilterCallback many times since
46 // gmock will track the number of times the methods are executed.
47 class MockFilterCallback {
48 public:
49 MockFilterCallback() {}
50 virtual ~MockFilterCallback() {}
51
52 MOCK_METHOD0(OnCallbackDestroyed, void());
53 MOCK_METHOD0(OnFilterCallback, void());
54
55 // Helper method to create a new callback for this mock. The callback will
56 // call OnFilterCallback() when executed and OnCallbackDestroyed() when
57 // destroyed. Clients should use NiceMock<> or StrictMock<> depending on the
58 // test.
59 FilterCallback* NewCallback() {
60 return new CallbackImpl(this);
61 }
62
63 private:
64 // Private implementation of CallbackRunner used to trigger expectations on
65 // MockFilterCallback.
66 class CallbackImpl : public CallbackRunner<Tuple0> {
67 public:
68 CallbackImpl(MockFilterCallback* mock_callback)
69 : mock_callback_(mock_callback) {
70 }
71
72 virtual ~CallbackImpl() {
73 mock_callback_->OnCallbackDestroyed();
74 }
75
76 virtual void RunWithParams(const Tuple0& params) {
77 mock_callback_->OnFilterCallback();
78 }
79
80 private:
81 MockFilterCallback* mock_callback_;
82
83 DISALLOW_COPY_AND_ASSIGN(CallbackImpl);
84 };
85
86 DISALLOW_COPY_AND_ASSIGN(MockFilterCallback);
87 };
88
43 class MockDataSource : public DataSource { 89 class MockDataSource : public DataSource {
44 public: 90 public:
45 MockDataSource() {} 91 MockDataSource() {}
46 92
47 // MediaFilter implementation. 93 // MediaFilter implementation.
48 MOCK_METHOD0(Stop, void()); 94 MOCK_METHOD0(Stop, void());
49 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); 95 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate));
50 MOCK_METHOD1(Seek, void(base::TimeDelta time)); 96 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback));
51 97
52 // DataSource implementation. 98 // DataSource implementation.
53 MOCK_METHOD1(Initialize, bool(const std::string& url)); 99 MOCK_METHOD2(Initialize, void(const std::string& url,
100 FilterCallback* callback));
54 const MediaFormat& media_format() { return media_format_; } 101 const MediaFormat& media_format() { return media_format_; }
55 MOCK_METHOD2(Read, size_t(uint8* data, size_t size)); 102 MOCK_METHOD2(Read, size_t(uint8* data, size_t size));
56 MOCK_METHOD1(GetPosition, bool(int64* position_out)); 103 MOCK_METHOD1(GetPosition, bool(int64* position_out));
57 MOCK_METHOD1(SetPosition, bool(int64 position)); 104 MOCK_METHOD1(SetPosition, bool(int64 position));
58 MOCK_METHOD1(GetSize, bool(int64* size_out)); 105 MOCK_METHOD1(GetSize, bool(int64* size_out));
59 MOCK_METHOD0(IsSeekable, bool()); 106 MOCK_METHOD0(IsSeekable, bool());
60 107
61 protected: 108 protected:
62 virtual ~MockDataSource() {} 109 virtual ~MockDataSource() {}
63 110
64 private: 111 private:
65 MediaFormat media_format_; 112 MediaFormat media_format_;
66 113
67 DISALLOW_COPY_AND_ASSIGN(MockDataSource); 114 DISALLOW_COPY_AND_ASSIGN(MockDataSource);
68 }; 115 };
69 116
70 class MockDemuxer : public Demuxer { 117 class MockDemuxer : public Demuxer {
71 public: 118 public:
72 MockDemuxer() {} 119 MockDemuxer() {}
73 120
74 // MediaFilter implementation. 121 // MediaFilter implementation.
75 MOCK_METHOD0(Stop, void()); 122 MOCK_METHOD0(Stop, void());
76 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); 123 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate));
77 MOCK_METHOD1(Seek, void(base::TimeDelta time)); 124 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback));
78 125
79 // Demuxer implementation. 126 // Demuxer implementation.
80 MOCK_METHOD1(Initialize, bool(DataSource* data_source)); 127 MOCK_METHOD2(Initialize, void(DataSource* data_source,
128 FilterCallback* callback));
81 MOCK_METHOD0(GetNumberOfStreams, size_t()); 129 MOCK_METHOD0(GetNumberOfStreams, size_t());
82 MOCK_METHOD1(GetStream, scoped_refptr<DemuxerStream>(int stream_id)); 130 MOCK_METHOD1(GetStream, scoped_refptr<DemuxerStream>(int stream_id));
83 131
84 protected: 132 protected:
85 virtual ~MockDemuxer() {} 133 virtual ~MockDemuxer() {}
86 134
87 private: 135 private:
88 DISALLOW_COPY_AND_ASSIGN(MockDemuxer); 136 DISALLOW_COPY_AND_ASSIGN(MockDemuxer);
89 }; 137 };
90 138
(...skipping 18 matching lines...) Expand all
109 private: 157 private:
110 MediaFormat media_format_; 158 MediaFormat media_format_;
111 159
112 DISALLOW_COPY_AND_ASSIGN(MockDemuxerStream); 160 DISALLOW_COPY_AND_ASSIGN(MockDemuxerStream);
113 }; 161 };
114 162
115 class MockVideoDecoder : public VideoDecoder { 163 class MockVideoDecoder : public VideoDecoder {
116 public: 164 public:
117 MockVideoDecoder() {} 165 MockVideoDecoder() {}
118 166
167 // Sets the essential media format keys for this decoder.
168 MockVideoDecoder(const std::string& mime_type, int width, int height) {
169 media_format_.SetAsString(MediaFormat::kMimeType, mime_type);
170 media_format_.SetAsInteger(MediaFormat::kWidth, width);
171 media_format_.SetAsInteger(MediaFormat::kHeight, height);
172 }
173
119 // MediaFilter implementation. 174 // MediaFilter implementation.
120 MOCK_METHOD0(Stop, void()); 175 MOCK_METHOD0(Stop, void());
121 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); 176 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate));
122 MOCK_METHOD1(Seek, void(base::TimeDelta time)); 177 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback));
123 178
124 // VideoDecoder implementation. 179 // VideoDecoder implementation.
125 MOCK_METHOD1(Initialize, bool(DemuxerStream* demuxer_stream)); 180 MOCK_METHOD2(Initialize, void(DemuxerStream* stream,
181 FilterCallback* callback));
126 const MediaFormat& media_format() { return media_format_; } 182 const MediaFormat& media_format() { return media_format_; }
127 MOCK_METHOD1(Read, void(Callback1<VideoFrame*>::Type* read_callback)); 183 MOCK_METHOD1(Read, void(Callback1<VideoFrame*>::Type* read_callback));
128 184
129 protected: 185 protected:
130 virtual ~MockVideoDecoder() {} 186 virtual ~MockVideoDecoder() {}
131 187
132 private: 188 private:
133 MediaFormat media_format_; 189 MediaFormat media_format_;
134 190
135 DISALLOW_COPY_AND_ASSIGN(MockVideoDecoder); 191 DISALLOW_COPY_AND_ASSIGN(MockVideoDecoder);
136 }; 192 };
137 193
138 class MockAudioDecoder : public AudioDecoder { 194 class MockAudioDecoder : public AudioDecoder {
139 public: 195 public:
140 MockAudioDecoder() {} 196 MockAudioDecoder() {}
141 197
142 // MediaFilter implementation. 198 // MediaFilter implementation.
143 MOCK_METHOD0(Stop, void()); 199 MOCK_METHOD0(Stop, void());
144 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); 200 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate));
145 MOCK_METHOD1(Seek, void(base::TimeDelta time)); 201 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback));
146 202
147 // AudioDecoder implementation. 203 // AudioDecoder implementation.
148 MOCK_METHOD1(Initialize, bool(DemuxerStream* demuxer_stream)); 204 MOCK_METHOD2(Initialize, void(DemuxerStream* stream,
205 FilterCallback* callback));
149 const MediaFormat& media_format() { return media_format_; } 206 const MediaFormat& media_format() { return media_format_; }
150 MOCK_METHOD1(Read, void(Callback1<Buffer*>::Type* read_callback)); 207 MOCK_METHOD1(Read, void(Callback1<Buffer*>::Type* read_callback));
151 208
152 protected: 209 protected:
153 virtual ~MockAudioDecoder() {} 210 virtual ~MockAudioDecoder() {}
154 211
155 private: 212 private:
156 MediaFormat media_format_; 213 MediaFormat media_format_;
157 214
158 DISALLOW_COPY_AND_ASSIGN(MockAudioDecoder); 215 DISALLOW_COPY_AND_ASSIGN(MockAudioDecoder);
159 }; 216 };
160 217
161 class MockVideoRenderer : public VideoRenderer { 218 class MockVideoRenderer : public VideoRenderer {
162 public: 219 public:
163 MockVideoRenderer() {} 220 MockVideoRenderer() {}
164 221
165 // MediaFilter implementation. 222 // MediaFilter implementation.
166 MOCK_METHOD0(Stop, void()); 223 MOCK_METHOD0(Stop, void());
167 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); 224 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate));
168 MOCK_METHOD1(Seek, void(base::TimeDelta time)); 225 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback));
169 226
170 // VideoRenderer implementation. 227 // VideoRenderer implementation.
171 MOCK_METHOD1(Initialize, bool(VideoDecoder* decoder)); 228 MOCK_METHOD2(Initialize, void(VideoDecoder* decoder,
229 FilterCallback* callback));
172 230
173 protected: 231 protected:
174 virtual ~MockVideoRenderer() {} 232 virtual ~MockVideoRenderer() {}
175 233
176 private: 234 private:
177 DISALLOW_COPY_AND_ASSIGN(MockVideoRenderer); 235 DISALLOW_COPY_AND_ASSIGN(MockVideoRenderer);
178 }; 236 };
179 237
180 class MockAudioRenderer : public AudioRenderer { 238 class MockAudioRenderer : public AudioRenderer {
181 public: 239 public:
182 MockAudioRenderer() {} 240 MockAudioRenderer() {}
183 241
184 // MediaFilter implementation. 242 // MediaFilter implementation.
185 MOCK_METHOD0(Stop, void()); 243 MOCK_METHOD0(Stop, void());
186 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); 244 MOCK_METHOD1(SetPlaybackRate, void(float playback_rate));
187 MOCK_METHOD1(Seek, void(base::TimeDelta time)); 245 MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback));
188 246
189 // AudioRenderer implementation. 247 // AudioRenderer implementation.
190 MOCK_METHOD1(Initialize, bool(AudioDecoder* decoder)); 248 MOCK_METHOD2(Initialize, void(AudioDecoder* decoder,
249 FilterCallback* callback));
191 MOCK_METHOD1(SetVolume, void(float volume)); 250 MOCK_METHOD1(SetVolume, void(float volume));
192 251
193 protected: 252 protected:
194 virtual ~MockAudioRenderer() {} 253 virtual ~MockAudioRenderer() {}
195 254
196 private: 255 private:
197 DISALLOW_COPY_AND_ASSIGN(MockAudioRenderer); 256 DISALLOW_COPY_AND_ASSIGN(MockAudioRenderer);
198 }; 257 };
199 258
200 // FilterFactory that returns canned instances of mock filters. You can set 259 // FilterFactory that returns canned instances of mock filters. You can set
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 scoped_refptr<MockDataSource> data_source_; 315 scoped_refptr<MockDataSource> data_source_;
257 scoped_refptr<MockDemuxer> demuxer_; 316 scoped_refptr<MockDemuxer> demuxer_;
258 scoped_refptr<MockVideoDecoder> video_decoder_; 317 scoped_refptr<MockVideoDecoder> video_decoder_;
259 scoped_refptr<MockAudioDecoder> audio_decoder_; 318 scoped_refptr<MockAudioDecoder> audio_decoder_;
260 scoped_refptr<MockVideoRenderer> video_renderer_; 319 scoped_refptr<MockVideoRenderer> video_renderer_;
261 scoped_refptr<MockAudioRenderer> audio_renderer_; 320 scoped_refptr<MockAudioRenderer> audio_renderer_;
262 321
263 DISALLOW_COPY_AND_ASSIGN(MockFilterFactory); 322 DISALLOW_COPY_AND_ASSIGN(MockFilterFactory);
264 }; 323 };
265 324
266 // Helper gmock action that calls InitializationComplete() on behalf of the 325 // Helper gmock function that immediately executes and destroys the
267 // provided filter. 326 // FilterCallback on behalf of the provided filter. Can be used when mocking
268 ACTION_P(InitializationComplete, filter) { 327 // the Initialize() and Seek() methods.
269 filter->host()->InitializationComplete(); 328 void RunFilterCallback(::testing::Unused, FilterCallback* callback);
270 } 329
330 // Helper gmock function that immediately destroys the FilterCallback on behalf
331 // of the provided filter. Can be used when mocking the Initialize() and Seek()
332 // methods.
333 void DestroyFilterCallback(::testing::Unused, FilterCallback* callback);
271 334
272 // Helper gmock action that calls Error() on behalf of the provided filter. 335 // Helper gmock action that calls Error() on behalf of the provided filter.
273 ACTION_P2(Error, filter, error) { 336 ACTION_P2(Error, filter, error) {
274 filter->host()->Error(error); 337 filter->host()->Error(error);
275 } 338 }
276 339
277 } // namespace media 340 } // namespace media
278 341
279 #endif // MEDIA_BASE_MOCK_FILTERS_H_ 342 #endif // MEDIA_BASE_MOCK_FILTERS_H_
OLDNEW
« no previous file with comments | « media/base/filters.h ('k') | media/base/mock_filters.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698