| Index: media/base/serial_runner_unittest.cc
|
| diff --git a/media/base/serial_runner_unittest.cc b/media/base/serial_runner_unittest.cc
|
| index 6d21968c0a49d1d05edd48ebb664598e484353c8..f18fef88e9c947c46601aaa9e5b164f5a6582bd5 100644
|
| --- a/media/base/serial_runner_unittest.cc
|
| +++ b/media/base/serial_runner_unittest.cc
|
| @@ -35,6 +35,20 @@ class SerialRunnerTest : public ::testing::Test {
|
| called_.push_back(false);
|
| }
|
|
|
| + void PushBoundClosure() {
|
| + bound_fns_.Push(base::Bind(&SerialRunnerTest::RunBoundClosure,
|
| + base::Unretained(this),
|
| + called_.size()));
|
| + called_.push_back(false);
|
| + }
|
| +
|
| + void PushClosure() {
|
| + bound_fns_.Push(base::Bind(&SerialRunnerTest::RunClosure,
|
| + base::Unretained(this),
|
| + called_.size()));
|
| + called_.push_back(false);
|
| + }
|
| +
|
| // Push a bound function to the queue that will delete the SerialRunner,
|
| // which should cancel all remaining queued work.
|
| void PushCancellation() {
|
| @@ -61,6 +75,26 @@ class SerialRunnerTest : public ::testing::Test {
|
| status_cb.Run(status);
|
| }
|
|
|
| + void RunBoundClosure(size_t index,
|
| + const base::Closure& done_cb) {
|
| + EXPECT_EQ(index == 0u, inside_start_)
|
| + << "First bound function should run on same stack as "
|
| + << "SerialRunner::Run() while all others should not\n"
|
| + << base::debug::StackTrace().ToString();
|
| +
|
| + called_[index] = true;
|
| + done_cb.Run();
|
| + }
|
| +
|
| + void RunClosure(size_t index) {
|
| + EXPECT_EQ(index == 0u, inside_start_)
|
| + << "First bound function should run on same stack as "
|
| + << "SerialRunner::Run() while all others should not\n"
|
| + << base::debug::StackTrace().ToString();
|
| +
|
| + called_[index] = true;
|
| + }
|
| +
|
| void StartRunnerInternal(const SerialRunner::Queue& bound_fns) {
|
| inside_start_ = true;
|
| runner_ = SerialRunner::Run(bound_fns_, base::Bind(
|
| @@ -173,4 +207,22 @@ TEST_F(SerialRunnerTest, Multiple_Cancel) {
|
| EXPECT_FALSE(done_called());
|
| }
|
|
|
| +TEST_F(SerialRunnerTest, BoundClosure) {
|
| + PushBoundClosure();
|
| + RunSerialRunner();
|
| +
|
| + EXPECT_TRUE(called(0));
|
| + EXPECT_TRUE(done_called());
|
| + EXPECT_EQ(PIPELINE_OK, done_status());
|
| +}
|
| +
|
| +TEST_F(SerialRunnerTest, Closure) {
|
| + PushClosure();
|
| + RunSerialRunner();
|
| +
|
| + EXPECT_TRUE(called(0));
|
| + EXPECT_TRUE(done_called());
|
| + EXPECT_EQ(PIPELINE_OK, done_status());
|
| +}
|
| +
|
| } // namespace media
|
|
|