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

Side by Side Diff: media/base/pipeline_unittest.cc

Issue 9968117: Move Demuxer::set_host() to Initialize(). (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: Created 8 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/threading/simple_thread.h" 10 #include "base/threading/simple_thread.h"
11 #include "media/base/clock.h" 11 #include "media/base/clock.h"
12 #include "media/base/filter_host.h" 12 #include "media/base/filter_host.h"
13 #include "media/base/filters.h" 13 #include "media/base/filters.h"
14 #include "media/base/media_log.h" 14 #include "media/base/media_log.h"
15 #include "media/base/pipeline.h" 15 #include "media/base/pipeline.h"
16 #include "media/base/mock_callback.h" 16 #include "media/base/mock_callback.h"
17 #include "media/base/mock_filters.h" 17 #include "media/base/mock_filters.h"
18 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "ui/gfx/size.h" 19 #include "ui/gfx/size.h"
20 20
21 using ::testing::_; 21 using ::testing::_;
22 using ::testing::DeleteArg; 22 using ::testing::DeleteArg;
23 using ::testing::DoAll;
23 using ::testing::InSequence; 24 using ::testing::InSequence;
24 using ::testing::Invoke; 25 using ::testing::Invoke;
25 using ::testing::InvokeArgument;
26 using ::testing::Mock; 26 using ::testing::Mock;
27 using ::testing::NotNull; 27 using ::testing::NotNull;
28 using ::testing::Return; 28 using ::testing::Return;
29 using ::testing::ReturnRef; 29 using ::testing::ReturnRef;
30 using ::testing::StrictMock; 30 using ::testing::StrictMock;
31 using ::testing::WithArg; 31 using ::testing::WithArg;
32 32
33 namespace media { 33 namespace media {
34 34
35 // Total bytes of the data source. 35 // Total bytes of the data source.
36 static const int kTotalBytes = 1024; 36 static const int kTotalBytes = 1024;
37 37
38 // Buffered bytes of the data source. 38 // Buffered bytes of the data source.
39 static const int kBufferedBytes = 1024; 39 static const int kBufferedBytes = 1024;
40 40
41 ACTION_P(InitializeDemuxerWithError, error) {
42 arg1.Run(error);
43 }
44
45 ACTION_P(SetDemuxerProperties, duration) {
46 arg0->SetTotalBytes(kTotalBytes);
47 arg0->SetBufferedBytes(kBufferedBytes);
48 arg0->SetDuration(duration);
49 }
50
41 // Used for setting expectations on pipeline callbacks. Using a StrictMock 51 // Used for setting expectations on pipeline callbacks. Using a StrictMock
42 // also lets us test for missing callbacks. 52 // also lets us test for missing callbacks.
43 class CallbackHelper { 53 class CallbackHelper {
44 public: 54 public:
45 CallbackHelper() {} 55 CallbackHelper() {}
46 virtual ~CallbackHelper() {} 56 virtual ~CallbackHelper() {}
47 57
48 MOCK_METHOD1(OnStart, void(PipelineStatus)); 58 MOCK_METHOD1(OnStart, void(PipelineStatus));
49 MOCK_METHOD1(OnSeek, void(PipelineStatus)); 59 MOCK_METHOD1(OnSeek, void(PipelineStatus));
50 MOCK_METHOD0(OnStop, void()); 60 MOCK_METHOD0(OnStop, void());
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 100
91 pipeline_ = NULL; 101 pipeline_ = NULL;
92 mocks_.reset(); 102 mocks_.reset();
93 } 103 }
94 104
95 protected: 105 protected:
96 // Sets up expectations to allow the demuxer to initialize. 106 // Sets up expectations to allow the demuxer to initialize.
97 typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector; 107 typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector;
98 void InitializeDemuxer(MockDemuxerStreamVector* streams, 108 void InitializeDemuxer(MockDemuxerStreamVector* streams,
99 const base::TimeDelta& duration) { 109 const base::TimeDelta& duration) {
100 EXPECT_CALL(*mocks_->demuxer(), Initialize(_)) 110 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
101 .WillOnce(Invoke(&RunPipelineStatusCB)); 111 .WillOnce(DoAll(SetDemuxerProperties(duration),
102 mocks_->demuxer()->SetTotalAndBufferedBytesAndDuration( 112 Invoke(&RunPipelineStatusCB2)));
103 kTotalBytes, kBufferedBytes, duration);
104 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f)); 113 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f));
105 EXPECT_CALL(*mocks_->demuxer(), Seek(mocks_->demuxer()->GetStartTime(), _)) 114 EXPECT_CALL(*mocks_->demuxer(), Seek(mocks_->demuxer()->GetStartTime(), _))
106 .WillOnce(Invoke(&RunPipelineStatusCB2)); 115 .WillOnce(Invoke(&RunPipelineStatusCB2));
107 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) 116 EXPECT_CALL(*mocks_->demuxer(), Stop(_))
108 .WillOnce(Invoke(&RunStopFilterCallback)); 117 .WillOnce(Invoke(&RunStopFilterCallback));
109 118
110 // Configure the demuxer to return the streams. 119 // Configure the demuxer to return the streams.
111 for (size_t i = 0; i < streams->size(); ++i) { 120 for (size_t i = 0; i < streams->size(); ++i) {
112 scoped_refptr<DemuxerStream> stream((*streams)[i]); 121 scoped_refptr<DemuxerStream> stream((*streams)[i]);
113 EXPECT_CALL(*mocks_->demuxer(), GetStream(stream->type())) 122 EXPECT_CALL(*mocks_->demuxer(), GetStream(stream->type()))
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 283
275 // Should always get set to zero. 284 // Should always get set to zero.
276 gfx::Size size(1, 1); 285 gfx::Size size(1, 1);
277 pipeline_->GetNaturalVideoSize(&size); 286 pipeline_->GetNaturalVideoSize(&size);
278 EXPECT_EQ(0, size.width()); 287 EXPECT_EQ(0, size.width());
279 EXPECT_EQ(0, size.height()); 288 EXPECT_EQ(0, size.height());
280 } 289 }
281 290
282 TEST_F(PipelineTest, NeverInitializes) { 291 TEST_F(PipelineTest, NeverInitializes) {
283 // Don't execute the callback passed into Initialize(). 292 // Don't execute the callback passed into Initialize().
284 EXPECT_CALL(*mocks_->demuxer(), Initialize(_)); 293 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _));
285 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) 294 EXPECT_CALL(*mocks_->demuxer(), Stop(_))
286 .WillOnce(Invoke(&RunStopFilterCallback)); 295 .WillOnce(Invoke(&RunStopFilterCallback));
287 296
288 // This test hangs during initialization by never calling 297 // This test hangs during initialization by never calling
289 // InitializationComplete(). StrictMock<> will ensure that the callback is 298 // InitializationComplete(). StrictMock<> will ensure that the callback is
290 // never executed. 299 // never executed.
291 pipeline_->Start( 300 pipeline_->Start(
292 mocks_->Create().Pass(), 301 mocks_->Create().Pass(),
293 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), 302 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
294 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), 303 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
(...skipping 20 matching lines...) Expand all
315 collection.Pass(), 324 collection.Pass(),
316 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), 325 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
317 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), 326 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
318 NetworkEventCB(), 327 NetworkEventCB(),
319 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_))); 328 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)));
320 message_loop_.RunAllPending(); 329 message_loop_.RunAllPending();
321 EXPECT_FALSE(pipeline_->IsInitialized()); 330 EXPECT_FALSE(pipeline_->IsInitialized());
322 } 331 }
323 332
324 TEST_F(PipelineTest, URLNotFound) { 333 TEST_F(PipelineTest, URLNotFound) {
325 EXPECT_CALL(*mocks_->demuxer(), Initialize(_)) 334 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
326 .WillOnce(RunPipelineStatusCBWithError( 335 .WillOnce(InitializeDemuxerWithError(PIPELINE_ERROR_URL_NOT_FOUND));
327 PIPELINE_ERROR_URL_NOT_FOUND));
328 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) 336 EXPECT_CALL(*mocks_->demuxer(), Stop(_))
329 .WillOnce(Invoke(&RunStopFilterCallback)); 337 .WillOnce(Invoke(&RunStopFilterCallback));
330 338
331 InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND); 339 InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND);
332 EXPECT_FALSE(pipeline_->IsInitialized()); 340 EXPECT_FALSE(pipeline_->IsInitialized());
333 } 341 }
334 342
335 TEST_F(PipelineTest, NoStreams) { 343 TEST_F(PipelineTest, NoStreams) {
336 EXPECT_CALL(*mocks_->demuxer(), Initialize(_)) 344 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
337 .WillOnce(Invoke(&RunPipelineStatusCB)); 345 .WillOnce(Invoke(&RunPipelineStatusCB2));
338 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) 346 EXPECT_CALL(*mocks_->demuxer(), Stop(_))
339 .WillOnce(Invoke(&RunStopFilterCallback)); 347 .WillOnce(Invoke(&RunStopFilterCallback));
340 348
341 InitializePipeline(PIPELINE_ERROR_COULD_NOT_RENDER); 349 InitializePipeline(PIPELINE_ERROR_COULD_NOT_RENDER);
342 EXPECT_FALSE(pipeline_->IsInitialized()); 350 EXPECT_FALSE(pipeline_->IsInitialized());
343 } 351 }
344 352
345 TEST_F(PipelineTest, AudioStream) { 353 TEST_F(PipelineTest, AudioStream) {
346 CreateAudioStream(); 354 CreateAudioStream();
347 MockDemuxerStreamVector streams; 355 MockDemuxerStreamVector streams;
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 TestPipelineStatusNotification(base::TimeDelta::FromMilliseconds(0)); 869 TestPipelineStatusNotification(base::TimeDelta::FromMilliseconds(0));
862 } 870 }
863 871
864 // Test that different-thread, some-delay callback (the expected common case) 872 // Test that different-thread, some-delay callback (the expected common case)
865 // works correctly. 873 // works correctly.
866 TEST(PipelineStatusNotificationTest, DelayedCallback) { 874 TEST(PipelineStatusNotificationTest, DelayedCallback) {
867 TestPipelineStatusNotification(base::TimeDelta::FromMilliseconds(20)); 875 TestPipelineStatusNotification(base::TimeDelta::FromMilliseconds(20));
868 } 876 }
869 877
870 } // namespace media 878 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698