Index: media/base/mock_filters.h |
diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h |
index bffba6ff9cad7c703a8a4ab8e17e32b5deb6c531..6d8c8a993df58ced66847d7f29da99795de7d2e6 100644 |
--- a/media/base/mock_filters.h |
+++ b/media/base/mock_filters.h |
@@ -40,6 +40,52 @@ class Destroyable : public MockClass { |
DISALLOW_COPY_AND_ASSIGN(Destroyable); |
}; |
+// Helper class used to test that callbacks are executed. It is recommend you |
+// combine this class with StrictMock<> to verify that the callback is executed. |
+// You can reuse the same instance of a MockFilterCallback many times since |
+// gmock will track the number of times the methods are executed. |
+class MockFilterCallback { |
+ public: |
+ MockFilterCallback() {} |
+ virtual ~MockFilterCallback() {} |
+ |
+ MOCK_METHOD0(OnCallbackDestroyed, void()); |
+ MOCK_METHOD0(OnFilterCallback, void()); |
+ |
+ // Helper method to create a new callback for this mock. The callback will |
+ // call OnFilterCallback() when executed and OnCallbackDestroyed() when |
+ // destroyed. Clients should use NiceMock<> or StrictMock<> depending on the |
+ // test. |
+ FilterCallback* NewCallback() { |
+ return new CallbackImpl(this); |
+ } |
+ |
+ private: |
+ // Private implementation of CallbackRunner used to trigger expectations on |
+ // MockFilterCallback. |
+ class CallbackImpl : public CallbackRunner<Tuple0> { |
+ public: |
+ CallbackImpl(MockFilterCallback* mock_callback) |
+ : mock_callback_(mock_callback) { |
+ } |
+ |
+ virtual ~CallbackImpl() { |
+ mock_callback_->OnCallbackDestroyed(); |
+ } |
+ |
+ virtual void RunWithParams(const Tuple0& params) { |
+ mock_callback_->OnFilterCallback(); |
+ } |
+ |
+ private: |
+ MockFilterCallback* mock_callback_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(CallbackImpl); |
+ }; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MockFilterCallback); |
+}; |
+ |
class MockDataSource : public DataSource { |
public: |
MockDataSource() {} |
@@ -47,10 +93,11 @@ class MockDataSource : public DataSource { |
// MediaFilter implementation. |
MOCK_METHOD0(Stop, void()); |
MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); |
- MOCK_METHOD1(Seek, void(base::TimeDelta time)); |
+ MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); |
// DataSource implementation. |
- MOCK_METHOD1(Initialize, bool(const std::string& url)); |
+ MOCK_METHOD2(Initialize, void(const std::string& url, |
+ FilterCallback* callback)); |
const MediaFormat& media_format() { return media_format_; } |
MOCK_METHOD2(Read, size_t(uint8* data, size_t size)); |
MOCK_METHOD1(GetPosition, bool(int64* position_out)); |
@@ -74,10 +121,11 @@ class MockDemuxer : public Demuxer { |
// MediaFilter implementation. |
MOCK_METHOD0(Stop, void()); |
MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); |
- MOCK_METHOD1(Seek, void(base::TimeDelta time)); |
+ MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); |
// Demuxer implementation. |
- MOCK_METHOD1(Initialize, bool(DataSource* data_source)); |
+ MOCK_METHOD2(Initialize, void(DataSource* data_source, |
+ FilterCallback* callback)); |
MOCK_METHOD0(GetNumberOfStreams, size_t()); |
MOCK_METHOD1(GetStream, scoped_refptr<DemuxerStream>(int stream_id)); |
@@ -116,13 +164,21 @@ class MockVideoDecoder : public VideoDecoder { |
public: |
MockVideoDecoder() {} |
+ // Sets the essential media format keys for this decoder. |
+ MockVideoDecoder(const std::string& mime_type, int width, int height) { |
+ media_format_.SetAsString(MediaFormat::kMimeType, mime_type); |
+ media_format_.SetAsInteger(MediaFormat::kWidth, width); |
+ media_format_.SetAsInteger(MediaFormat::kHeight, height); |
+ } |
+ |
// MediaFilter implementation. |
MOCK_METHOD0(Stop, void()); |
MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); |
- MOCK_METHOD1(Seek, void(base::TimeDelta time)); |
+ MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); |
// VideoDecoder implementation. |
- MOCK_METHOD1(Initialize, bool(DemuxerStream* demuxer_stream)); |
+ MOCK_METHOD2(Initialize, void(DemuxerStream* stream, |
+ FilterCallback* callback)); |
const MediaFormat& media_format() { return media_format_; } |
MOCK_METHOD1(Read, void(Callback1<VideoFrame*>::Type* read_callback)); |
@@ -142,10 +198,11 @@ class MockAudioDecoder : public AudioDecoder { |
// MediaFilter implementation. |
MOCK_METHOD0(Stop, void()); |
MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); |
- MOCK_METHOD1(Seek, void(base::TimeDelta time)); |
+ MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); |
// AudioDecoder implementation. |
- MOCK_METHOD1(Initialize, bool(DemuxerStream* demuxer_stream)); |
+ MOCK_METHOD2(Initialize, void(DemuxerStream* stream, |
+ FilterCallback* callback)); |
const MediaFormat& media_format() { return media_format_; } |
MOCK_METHOD1(Read, void(Callback1<Buffer*>::Type* read_callback)); |
@@ -165,10 +222,11 @@ class MockVideoRenderer : public VideoRenderer { |
// MediaFilter implementation. |
MOCK_METHOD0(Stop, void()); |
MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); |
- MOCK_METHOD1(Seek, void(base::TimeDelta time)); |
+ MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); |
// VideoRenderer implementation. |
- MOCK_METHOD1(Initialize, bool(VideoDecoder* decoder)); |
+ MOCK_METHOD2(Initialize, void(VideoDecoder* decoder, |
+ FilterCallback* callback)); |
protected: |
virtual ~MockVideoRenderer() {} |
@@ -184,10 +242,11 @@ class MockAudioRenderer : public AudioRenderer { |
// MediaFilter implementation. |
MOCK_METHOD0(Stop, void()); |
MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); |
- MOCK_METHOD1(Seek, void(base::TimeDelta time)); |
+ MOCK_METHOD2(Seek, void(base::TimeDelta time, FilterCallback* callback)); |
// AudioRenderer implementation. |
- MOCK_METHOD1(Initialize, bool(AudioDecoder* decoder)); |
+ MOCK_METHOD2(Initialize, void(AudioDecoder* decoder, |
+ FilterCallback* callback)); |
MOCK_METHOD1(SetVolume, void(float volume)); |
protected: |
@@ -263,11 +322,15 @@ class MockFilterFactory : public FilterFactory { |
DISALLOW_COPY_AND_ASSIGN(MockFilterFactory); |
}; |
-// Helper gmock action that calls InitializationComplete() on behalf of the |
-// provided filter. |
-ACTION_P(InitializationComplete, filter) { |
- filter->host()->InitializationComplete(); |
-} |
+// Helper gmock function that immediately executes and destroys the |
+// FilterCallback on behalf of the provided filter. Can be used when mocking |
+// the Initialize() and Seek() methods. |
+void RunFilterCallback(::testing::Unused, FilterCallback* callback); |
+ |
+// Helper gmock function that immediately destroys the FilterCallback on behalf |
+// of the provided filter. Can be used when mocking the Initialize() and Seek() |
+// methods. |
+void DestroyFilterCallback(::testing::Unused, FilterCallback* callback); |
// Helper gmock action that calls Error() on behalf of the provided filter. |
ACTION_P2(Error, filter, error) { |