| OLD | NEW |
| 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 FilterHost implementation based on gmock. Combined with setting a message | 5 // A FilterHost implementation based on gmock. Combined with setting a message |
| 6 // loop on a filter, permits single-threaded testing of filters without | 6 // loop on a filter, permits single-threaded testing of filters without |
| 7 // requiring a pipeline. | 7 // requiring a pipeline. |
| 8 // | |
| 9 // TODO(scherkus): Remove old_mocks::MockFilterHost as soon as other tests have | |
| 10 // transitioned over to the new gmock-based MockFilterHost. | |
| 11 | 8 |
| 12 #ifndef MEDIA_BASE_MOCK_FILTER_HOST_H_ | 9 #ifndef MEDIA_BASE_MOCK_FILTER_HOST_H_ |
| 13 #define MEDIA_BASE_MOCK_FILTER_HOST_H_ | 10 #define MEDIA_BASE_MOCK_FILTER_HOST_H_ |
| 14 | 11 |
| 15 #include <string> | 12 #include <string> |
| 16 | 13 |
| 17 #include "base/scoped_ptr.h" | 14 #include "base/scoped_ptr.h" |
| 18 #include "base/waitable_event.h" | 15 #include "base/waitable_event.h" |
| 19 #include "media/base/factory.h" | 16 #include "media/base/factory.h" |
| 20 #include "media/base/filter_host.h" | 17 #include "media/base/filter_host.h" |
| 21 #include "media/base/filters.h" | 18 #include "media/base/filters.h" |
| 22 #include "media/base/media_format.h" | 19 #include "media/base/media_format.h" |
| 23 #include "media/base/mock_pipeline.h" | |
| 24 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
| 25 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| 26 | 22 |
| 27 namespace media { | 23 namespace media { |
| 28 | 24 |
| 29 class MockFilterHost : public FilterHost { | 25 class MockFilterHost : public FilterHost { |
| 30 public: | 26 public: |
| 31 MockFilterHost() {} | 27 MockFilterHost() {} |
| 32 | 28 |
| 33 // FilterHost implementation. | 29 // FilterHost implementation. |
| 34 MOCK_METHOD0(InitializationComplete, void()); | 30 MOCK_METHOD0(InitializationComplete, void()); |
| 35 MOCK_METHOD1(Error, void(PipelineError error)); | 31 MOCK_METHOD1(Error, void(PipelineError error)); |
| 36 MOCK_CONST_METHOD0(GetTime, base::TimeDelta()); | 32 MOCK_CONST_METHOD0(GetTime, base::TimeDelta()); |
| 37 MOCK_METHOD1(SetTime, void(base::TimeDelta time)); | 33 MOCK_METHOD1(SetTime, void(base::TimeDelta time)); |
| 38 MOCK_METHOD1(SetDuration, void(base::TimeDelta duration)); | 34 MOCK_METHOD1(SetDuration, void(base::TimeDelta duration)); |
| 39 MOCK_METHOD1(SetBufferedTime, void(base::TimeDelta buffered_time)); | 35 MOCK_METHOD1(SetBufferedTime, void(base::TimeDelta buffered_time)); |
| 40 MOCK_METHOD1(SetTotalBytes, void(int64 total_bytes)); | 36 MOCK_METHOD1(SetTotalBytes, void(int64 total_bytes)); |
| 41 MOCK_METHOD1(SetBufferedBytes, void(int64 buffered_bytes)); | 37 MOCK_METHOD1(SetBufferedBytes, void(int64 buffered_bytes)); |
| 42 MOCK_METHOD2(SetVideoSize, void(size_t width, size_t height)); | 38 MOCK_METHOD2(SetVideoSize, void(size_t width, size_t height)); |
| 43 | 39 |
| 44 private: | 40 private: |
| 45 DISALLOW_COPY_AND_ASSIGN(MockFilterHost); | 41 DISALLOW_COPY_AND_ASSIGN(MockFilterHost); |
| 46 }; | 42 }; |
| 47 | 43 |
| 48 namespace old_mocks { | |
| 49 | |
| 50 // This version is deprecated. | |
| 51 template <class Filter> | |
| 52 class MockFilterHost : public FilterHost { | |
| 53 public: | |
| 54 MockFilterHost(MockPipeline* mock_pipeline, Filter* filter) | |
| 55 : mock_pipeline_(mock_pipeline), | |
| 56 filter_(filter), | |
| 57 initialized_(false), | |
| 58 error_(PIPELINE_OK), | |
| 59 wait_for_initialized_(false, false), | |
| 60 wait_for_error_(false, false) { | |
| 61 EXPECT_TRUE(mock_pipeline_); | |
| 62 EXPECT_TRUE(filter_); | |
| 63 filter_->SetFilterHost(this); | |
| 64 } | |
| 65 | |
| 66 virtual ~MockFilterHost() {} | |
| 67 | |
| 68 virtual void InitializationComplete() { | |
| 69 EXPECT_FALSE(initialized_); | |
| 70 initialized_ = true; | |
| 71 wait_for_initialized_.Signal(); | |
| 72 } | |
| 73 | |
| 74 virtual void Error(PipelineError error) { | |
| 75 error_ = error; | |
| 76 mock_pipeline_->Error(error); | |
| 77 wait_for_error_.Signal(); | |
| 78 } | |
| 79 | |
| 80 virtual base::TimeDelta GetTime() const { | |
| 81 return mock_pipeline_->GetTime(); | |
| 82 } | |
| 83 | |
| 84 virtual void SetTime(base::TimeDelta time) { | |
| 85 mock_pipeline_->SetTime(time); | |
| 86 } | |
| 87 | |
| 88 virtual void SetDuration(base::TimeDelta duration) { | |
| 89 mock_pipeline_->SetDuration(duration); | |
| 90 } | |
| 91 | |
| 92 virtual void SetBufferedTime(base::TimeDelta buffered_time) { | |
| 93 mock_pipeline_->SetBufferedTime(buffered_time); | |
| 94 } | |
| 95 | |
| 96 virtual void SetTotalBytes(int64 total_bytes) { | |
| 97 mock_pipeline_->SetTotalBytes(total_bytes); | |
| 98 } | |
| 99 | |
| 100 virtual void SetBufferedBytes(int64 buffered_bytes) { | |
| 101 mock_pipeline_->SetBufferedBytes(buffered_bytes); | |
| 102 } | |
| 103 | |
| 104 virtual void SetVideoSize(size_t width, size_t height) { | |
| 105 mock_pipeline_->SetVideoSize(width, height); | |
| 106 } | |
| 107 | |
| 108 bool IsInitialized() const { | |
| 109 return initialized_; | |
| 110 } | |
| 111 | |
| 112 bool WaitForInitialized() { | |
| 113 const base::TimeDelta kTimedWait = base::TimeDelta::FromMilliseconds(500); | |
| 114 while (!initialized_) { | |
| 115 if (!wait_for_initialized_.TimedWait(kTimedWait)) { | |
| 116 return false; | |
| 117 } | |
| 118 } | |
| 119 return true; | |
| 120 } | |
| 121 | |
| 122 bool WaitForError(PipelineError error) { | |
| 123 const base::TimeDelta kTimedWait = base::TimeDelta::FromMilliseconds(500); | |
| 124 while (error_ != error) { | |
| 125 if (!wait_for_error_.TimedWait(kTimedWait)) { | |
| 126 return false; | |
| 127 } | |
| 128 } | |
| 129 return true; | |
| 130 } | |
| 131 | |
| 132 private: | |
| 133 MockPipeline* mock_pipeline_; | |
| 134 scoped_refptr<Filter> filter_; | |
| 135 | |
| 136 // Tracks if the filter has executed InitializationComplete(). | |
| 137 bool initialized_; | |
| 138 | |
| 139 // Tracks the last pipeline error set by the filter. | |
| 140 PipelineError error_; | |
| 141 | |
| 142 // Allows unit tests to wait for particular conditions before asserting. | |
| 143 base::WaitableEvent wait_for_initialized_; | |
| 144 base::WaitableEvent wait_for_error_; | |
| 145 | |
| 146 DISALLOW_COPY_AND_ASSIGN(MockFilterHost); | |
| 147 }; | |
| 148 | |
| 149 } // namespace old_mocks | |
| 150 | |
| 151 } // namespace media | 44 } // namespace media |
| 152 | 45 |
| 153 #endif // MEDIA_BASE_MOCK_FILTER_HOST_H_ | 46 #endif // MEDIA_BASE_MOCK_FILTER_HOST_H_ |
| OLD | NEW |