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

Unified Diff: media/base/composite_filter_unittest.cc

Issue 6969026: Convert Filter::Seek() to use new callback system. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add files in content/renderer/media Created 9 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: media/base/composite_filter_unittest.cc
diff --git a/media/base/composite_filter_unittest.cc b/media/base/composite_filter_unittest.cc
index 0be2185267427fb4b4545fe45335a72fbeb0eb19..bfe6768512d74284d29ee952b2e7315c230ced29 100644
--- a/media/base/composite_filter_unittest.cc
+++ b/media/base/composite_filter_unittest.cc
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/bind.h"
#include "base/message_loop.h"
#include "media/base/composite_filter.h"
#include "media/base/mock_callback.h"
@@ -53,9 +54,12 @@ class CompositeFilterTest : public testing::Test {
// |seek_time| - The time to pass to the Seek() call if |method_to_call|
// equals SEEK.
// |callback| - The callback object to pass to the method.
+ // |expected_status| - The expected status value returned by the status
Ami GONE FROM CHROMIUM 2011/05/12 20:42:16 There is no "status callback" in this comment othe
acolwell GONE FROM CHROMIUM 2011/05/12 22:30:40 Done.
+ // callback.
void DoFilterCall(MethodToCall method_to_call, Filter* filter,
base::TimeDelta seek_time,
- FilterCallback* callback);
+ FilterCallback* callback,
+ PipelineStatus expected_status);
// Creates an expectation sequence based on the value of method_to_call.
//
@@ -82,10 +86,16 @@ class CompositeFilterTest : public testing::Test {
void ExpectInvalidStateFail(MethodToCall method_to_call,
base::TimeDelta seek_time = base::TimeDelta());
- // Run the callback stored in |filter_1_callback_|.
+ // Verifies |filter_1_callback_| or |filter_1_status_cb_| set.
Ami GONE FROM CHROMIUM 2011/05/12 20:42:16 "Verifies" seems overly assertive. Returns whethe
acolwell GONE FROM CHROMIUM 2011/05/12 22:30:40 Done.
+ bool HaveFilter1Callback() const;
Ami GONE FROM CHROMIUM 2011/05/12 20:42:16 Doesn't chrome use Has* generally?
acolwell GONE FROM CHROMIUM 2011/05/12 22:30:40 Done.
+
+ // Run the callback stored in |filter_1_callback_| or |filter_2_status_cb_|.
void RunFilter1Callback();
- // Run the callback stored in |filter_2_callback_|.
+ // Verifies |filter_2_callback_| or |filter_2_status_cb_| set.
+ bool HaveFilter2Callback() const;
+
+ // Run the callback stored in |filter_2_callback_| or |filter_2_status_cb_|.
void RunFilter2Callback();
protected:
@@ -98,9 +108,15 @@ class CompositeFilterTest : public testing::Test {
scoped_refptr<StrictMock<MockFilter> > filter_1_;
// Callback passed to |filter_1_| during last Play(), Pause(), Flush(),
- // Stop(), or Seek() call.
+ // or Stop() call.
FilterCallback* filter_1_callback_;
+ // Status to pass to |filter_1_status_cb_|.
+ PipelineStatus filter_1_status_;
+
+ // Callback passed to |filter_1_| during last Seek() call.
+ FilterStatusCB filter_1_status_cb_;
+
// Second filter added to the composite.
scoped_refptr<StrictMock<MockFilter> > filter_2_;
@@ -108,6 +124,12 @@ class CompositeFilterTest : public testing::Test {
// Stop(), or Seek() call.
FilterCallback* filter_2_callback_;
+ // Status to pass to |filter_2_status_cb_|.
+ PipelineStatus filter_2_status_;
+
+ // Callback passed to |filter_2_| during last Seek() call.
+ FilterStatusCB filter_2_status_cb_;
+
// FilterHost implementation passed to |composite_| via set_host().
scoped_ptr<StrictMock<MockFilterHost> > mock_filter_host_;
@@ -117,7 +139,9 @@ class CompositeFilterTest : public testing::Test {
CompositeFilterTest::CompositeFilterTest() :
composite_(new CompositeFilter(&message_loop_)),
filter_1_callback_(NULL),
+ filter_1_status_(PIPELINE_OK),
filter_2_callback_(NULL),
+ filter_2_status_(PIPELINE_OK),
mock_filter_host_(new StrictMock<MockFilterHost>()) {
}
@@ -132,6 +156,8 @@ void CompositeFilterTest::SetupAndAdd2Filters() {
// |filter_1_callback_| when they are called.
filter_1_ = new StrictMock<MockFilter>();
filter_1_callback_ = NULL;
+ filter_1_status_ = PIPELINE_OK;
+ filter_1_status_cb_.Reset();
ON_CALL(*filter_1_, Play(_))
.WillByDefault(SaveArg<0>(&filter_1_callback_));
ON_CALL(*filter_1_, Pause(_))
@@ -141,12 +167,14 @@ void CompositeFilterTest::SetupAndAdd2Filters() {
ON_CALL(*filter_1_, Stop(_))
.WillByDefault(SaveArg<0>(&filter_1_callback_));
ON_CALL(*filter_1_, Seek(_,_))
- .WillByDefault(SaveArg<1>(&filter_1_callback_));
+ .WillByDefault(SaveArg<1>(&filter_1_status_cb_));
// Setup |filter_2_| and arrange for methods to set
// |filter_2_callback_| when they are called.
filter_2_ = new StrictMock<MockFilter>();
filter_2_callback_ = NULL;
+ filter_2_status_ = PIPELINE_OK;
+ filter_2_status_cb_.Reset();
ON_CALL(*filter_2_, Play(_))
.WillByDefault(SaveArg<0>(&filter_2_callback_));
ON_CALL(*filter_2_, Pause(_))
@@ -156,7 +184,7 @@ void CompositeFilterTest::SetupAndAdd2Filters() {
ON_CALL(*filter_2_, Stop(_))
.WillByDefault(SaveArg<0>(&filter_2_callback_));
ON_CALL(*filter_2_, Seek(_,_))
- .WillByDefault(SaveArg<1>(&filter_2_callback_));
+ .WillByDefault(SaveArg<1>(&filter_2_status_cb_));
composite_->AddFilter(filter_1_);
composite_->AddFilter(filter_2_);
@@ -184,10 +212,22 @@ void CompositeFilterTest::ExpectFilterCall(MethodToCall method_to_call,
};
}
+void OnStatusCB(PipelineStatus expected_status, FilterCallback* callback,
+ PipelineStatus status) {
+ EXPECT_EQ(status, expected_status);
+
+ callback->Run();
+ delete callback;
+}
+
void CompositeFilterTest::DoFilterCall(MethodToCall method_to_call,
Filter* filter,
base::TimeDelta seek_time,
- FilterCallback* callback) {
+ FilterCallback* callback,
+ PipelineStatus expected_status) {
+ filter_1_status_ = expected_status;
+ filter_2_status_ = expected_status;
+
switch(method_to_call) {
case PLAY:
filter->Play(callback);
@@ -201,9 +241,10 @@ void CompositeFilterTest::DoFilterCall(MethodToCall method_to_call,
case STOP:
filter->Stop(callback);
break;
- case SEEK:
- filter->Seek(seek_time, callback);
- break;
+ case SEEK: {
Ami GONE FROM CHROMIUM 2011/05/12 20:42:16 braces unnecessary
acolwell GONE FROM CHROMIUM 2011/05/12 22:30:40 Done.
+ filter->Seek(seek_time, base::Bind(&OnStatusCB, expected_status,
+ callback));
+ } break;
};
}
@@ -221,25 +262,26 @@ void CompositeFilterTest::ExpectSuccess(MethodToCall method_to_call,
// Make method call on the composite.
StrictMock<MockCallback>* callback = new StrictMock<MockCallback>();
- DoFilterCall(method_to_call, composite_.get(), seek_time, callback);
+ DoFilterCall(method_to_call, composite_.get(), seek_time, callback,
+ PIPELINE_OK);
if (is_parallel_call) {
// Make sure both filters have their callbacks set.
- EXPECT_TRUE(filter_1_callback_ != NULL);
- EXPECT_TRUE(filter_2_callback_ != NULL);
+ EXPECT_TRUE(HaveFilter1Callback());
+ EXPECT_TRUE(HaveFilter2Callback());
RunFilter1Callback();
} else {
// Make sure that only |filter_1_| has its callback set.
- EXPECT_TRUE(filter_1_callback_ != NULL);
- EXPECT_EQ((FilterCallback*)NULL, filter_2_callback_);
+ EXPECT_TRUE(HaveFilter1Callback());
+ EXPECT_FALSE(HaveFilter2Callback());
ExpectFilterCall(method_to_call, filter_2_.get(), seek_time);
RunFilter1Callback();
// Verify that |filter_2_| was called by checking the callback pointer.
- EXPECT_TRUE(filter_2_callback_ != NULL);
+ EXPECT_TRUE(HaveFilter2Callback());
}
callback->ExpectRunAndDelete();
@@ -271,18 +313,33 @@ void CompositeFilterTest::ExpectInvalidStateFail(MethodToCall method_to_call,
base::TimeDelta seek_time) {
InSequence seq;
- EXPECT_CALL(*mock_filter_host_, SetError(PIPELINE_ERROR_INVALID_STATE))
- .WillOnce(Return());
+ if (method_to_call != SEEK) {
+ EXPECT_CALL(*mock_filter_host_, SetError(PIPELINE_ERROR_INVALID_STATE))
+ .WillOnce(Return());
+ }
- DoFilterCall(method_to_call, composite_, seek_time, NewExpectedCallback());
+ DoFilterCall(method_to_call, composite_, seek_time, NewExpectedCallback(),
+ PIPELINE_ERROR_INVALID_STATE);
// Make sure that neither of the filters were called by
// verifying that the callback pointers weren't set.
- EXPECT_EQ((FilterCallback*)NULL, filter_1_callback_);
- EXPECT_EQ((FilterCallback*)NULL, filter_2_callback_);
+ EXPECT_FALSE(HaveFilter1Callback());
+ EXPECT_FALSE(HaveFilter2Callback());
+}
+
+bool CompositeFilterTest::HaveFilter1Callback() const {
+ return filter_1_callback_ != NULL || !filter_1_status_cb_.is_null();
Ami GONE FROM CHROMIUM 2011/05/12 20:42:16 CHECK not both?
acolwell GONE FROM CHROMIUM 2011/05/12 22:30:40 Done.
}
void CompositeFilterTest::RunFilter1Callback() {
+ EXPECT_TRUE(HaveFilter1Callback());
+
+ if (!filter_1_status_cb_.is_null()) {
+ CopyAndResetCB(filter_1_status_cb_).Run(filter_1_status_);
+ filter_1_status_ = PIPELINE_OK;
+ return;
+ }
+
EXPECT_TRUE(filter_1_callback_ != NULL);
FilterCallback* callback = filter_1_callback_;
filter_1_callback_ = NULL;
@@ -290,7 +347,19 @@ void CompositeFilterTest::RunFilter1Callback() {
delete callback;
}
+bool CompositeFilterTest::HaveFilter2Callback() const {
+ return filter_2_callback_ != NULL || !filter_2_status_cb_.is_null();
Ami GONE FROM CHROMIUM 2011/05/12 20:42:16 ditto
acolwell GONE FROM CHROMIUM 2011/05/12 22:30:40 Done.
+}
+
void CompositeFilterTest::RunFilter2Callback() {
+ EXPECT_TRUE(HaveFilter2Callback());
+
+ if (!filter_2_status_cb_.is_null()) {
+ CopyAndResetCB(filter_2_status_cb_).Run(filter_2_status_);
+ filter_2_status_ = PIPELINE_OK;
+ return;
+ }
+
EXPECT_TRUE(filter_2_callback_ != NULL);
FilterCallback* callback = filter_2_callback_;
filter_2_callback_ = NULL;
@@ -339,8 +408,8 @@ TEST_F(CompositeFilterTest, TestPlay) {
composite_->Play(NewExpectedCallback());
// Verify that neither of the filter callbacks were set.
- EXPECT_EQ((FilterCallback*)NULL, filter_1_callback_);
- EXPECT_EQ((FilterCallback*)NULL, filter_2_callback_);
+ EXPECT_FALSE(HaveFilter1Callback());
+ EXPECT_FALSE(HaveFilter2Callback());
// Stop playback.
DoStop();
@@ -351,8 +420,8 @@ TEST_F(CompositeFilterTest, TestPlay) {
composite_->Stop(NewExpectedCallback());
// Verify that neither of the filter callbacks were set.
- EXPECT_EQ((FilterCallback*)NULL, filter_1_callback_);
- EXPECT_EQ((FilterCallback*)NULL, filter_2_callback_);
+ EXPECT_FALSE(HaveFilter1Callback());
+ EXPECT_FALSE(HaveFilter2Callback());
// Try calling Play() again to make sure we get an error.
ExpectInvalidStateFail(PLAY);
@@ -418,8 +487,8 @@ TEST_F(CompositeFilterTest, TestPause) {
composite_->Pause(NewExpectedCallback());
// Verify that neither of the filter callbacks were set.
- EXPECT_EQ((FilterCallback*)NULL, filter_1_callback_);
- EXPECT_EQ((FilterCallback*)NULL, filter_2_callback_);
+ EXPECT_FALSE(HaveFilter1Callback());
+ EXPECT_FALSE(HaveFilter2Callback());
// Verify that we can transition pack to the play state.
DoPlay();
@@ -460,7 +529,7 @@ TEST_F(CompositeFilterTest, TestPauseErrors) {
RunFilter1Callback();
// Make sure |filter_2_callback_| was not set.
- EXPECT_EQ((FilterCallback*)NULL, filter_2_callback_);
+ EXPECT_FALSE(HaveFilter2Callback());
// Verify that Play/Pause/Flush/Seek fail now that an error occured.
ExpectInvalidStateFail(PLAY);
@@ -714,7 +783,7 @@ TEST_F(CompositeFilterTest, TestEmptyComposite) {
// Issue a Seek() and expect no errors.
composite_->Seek(base::TimeDelta::FromSeconds(5),
- NewExpectedCallback());
+ NewExpectedStatusCB(PIPELINE_OK));
// Issue a Play() and expect no errors.
composite_->Play(NewExpectedCallback());

Powered by Google App Engine
This is Rietveld 408576698