Chromium Code Reviews| Index: content/renderer/media/media_stream_video_source_unittest.cc |
| diff --git a/content/renderer/media/media_stream_video_source_unittest.cc b/content/renderer/media/media_stream_video_source_unittest.cc |
| index 946707bcdd159be6255f8cee047a5b9697b870ba..b09743018e62e8d51fd26f4f2b41bf982906b1be 100644 |
| --- a/content/renderer/media/media_stream_video_source_unittest.cc |
| +++ b/content/renderer/media/media_stream_video_source_unittest.cc |
| @@ -16,13 +16,9 @@ class DummyMediaStreamVideoSource : public MediaStreamVideoSource { |
| public: |
| DummyMediaStreamVideoSource(MediaStreamDependencyFactory* factory) |
| : MediaStreamVideoSource(factory) { |
| - Init(); |
| - SetVideoSource(GetAdapter()); |
| - SetReadyState(blink::WebMediaStreamSource::ReadyStateLive); |
| } |
| virtual ~DummyMediaStreamVideoSource() { |
| - SetReadyState(blink::WebMediaStreamSource::ReadyStateEnded); |
| } |
| void OnNewFrame(const scoped_refptr<media::VideoFrame>& frame) { |
| @@ -33,7 +29,9 @@ class DummyMediaStreamVideoSource : public MediaStreamVideoSource { |
| class MediaStreamVideoSourceTest |
| : public ::testing::Test { |
| public: |
| - MediaStreamVideoSourceTest() { |
| + MediaStreamVideoSourceTest() |
| + : number_of_successfull_constraints_applied_(0), |
| + number_of_failed_constraints_applied_(0) { |
| factory_.EnsurePeerConnectionFactory(); |
| webkit_source_.initialize(base::UTF8ToUTF16("dummy_source_id"), |
| blink::WebMediaStreamSource::TypeVideo, |
| @@ -43,12 +41,33 @@ class MediaStreamVideoSourceTest |
| protected: |
| // Create a track that's associated with |webkit_source_|. |
| - blink::WebMediaStreamTrack CreateTrack(const std::string& id) { |
| + blink::WebMediaStreamTrack CreateTrack( |
| + const std::string& id, |
| + const blink::WebMediaConstraints& constraints) { |
| blink::WebMediaStreamTrack track; |
| track.initialize(base::UTF8ToUTF16(id), webkit_source_); |
| + |
| + DummyMediaStreamVideoSource* source = |
| + static_cast<DummyMediaStreamVideoSource*>(track.source().extraData()); |
| + |
| + source->AddTrack(track, |
| + constraints, |
| + base::Bind( |
| + &MediaStreamVideoSourceTest::OnConstraintsApplied, |
| + base::Unretained(this))); |
| return track; |
| } |
| + // Simulate that the underlying device start successfully. |
| + void StartDevice() { |
|
Ronghua Wu (Left Chromium)
2014/01/22 01:44:04
StartSource
|
| + factory_.last_video_source()->SetLive(); |
| + } |
| + |
| + // Simulate that the underlying device fail to start. |
| + void FailToStartDevice() { |
| + factory_.last_video_source()->SetEnded(); |
| + } |
| + |
| void VerifyFrame(int width, int height, int num) { |
| DummyMediaStreamVideoSource* source = |
| static_cast<DummyMediaStreamVideoSource*>(webkit_source_.extraData()); |
| @@ -58,17 +77,69 @@ class MediaStreamVideoSourceTest |
| EXPECT_EQ(height, adapter->GetLastFrameHeight()); |
| EXPECT_EQ(num, adapter->GetFrameNum()); |
| } |
| + |
| + int NumberOfSuccessConstraintsCallbacks() { |
|
Ronghua Wu (Left Chromium)
2014/01/22 01:44:04
nit const
|
| + return number_of_successfull_constraints_applied_; |
| + } |
| + |
| + int NumberOfFailedConstraintsCallbacks() { |
|
Ronghua Wu (Left Chromium)
2014/01/22 01:44:04
dito
|
| + return number_of_failed_constraints_applied_; |
| + } |
| + |
| private: |
| + void OnConstraintsApplied(MediaStreamSource* source, bool success) { |
| + ASSERT_EQ(source, webkit_source_.extraData()); |
| + |
| + if (success) |
| + ++number_of_successfull_constraints_applied_; |
| + else |
| + ++number_of_failed_constraints_applied_; |
| + } |
| + |
| + int number_of_successfull_constraints_applied_; |
| + int number_of_failed_constraints_applied_; |
| MockMediaStreamDependencyFactory factory_; |
| blink::WebMediaStreamSource webkit_source_; |
| }; |
| +TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartAdapter) { |
| + blink::WebMediaConstraints constraints; |
| + blink::WebMediaStreamTrack track = CreateTrack("123", constraints); |
| + StartDevice(); |
| + EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| +} |
| + |
| +TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeAdapterStart) { |
| + blink::WebMediaConstraints constraints; |
| + blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); |
| + blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); |
| + EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); |
| + StartDevice(); |
| + EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
| +} |
| + |
| +TEST_F(MediaStreamVideoSourceTest, AddTrackAfterAdapterStart) { |
| + blink::WebMediaConstraints constraints; |
| + blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); |
| + StartDevice(); |
| + EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| + blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); |
| + EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
| +} |
| + |
| +TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartAdapter) { |
| + blink::WebMediaConstraints constraints; |
| + blink::WebMediaStreamTrack track = CreateTrack("123", constraints); |
| + FailToStartDevice(); |
| + EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| +} |
| + |
| TEST_F(MediaStreamVideoSourceTest, DeliverVideoFrame) { |
| blink::WebMediaConstraints constraints; |
| - blink::WebMediaStreamTrack track = CreateTrack("123"); |
| + blink::WebMediaStreamTrack track = CreateTrack("123", constraints); |
| + StartDevice(); |
| DummyMediaStreamVideoSource* source = |
| static_cast<DummyMediaStreamVideoSource*>(track.source().extraData()); |
| - source->AddTrack(track, constraints); |
| VerifyFrame(0, 0, 0); |
| const int kWidth = 640; |
| const int kHeight = 480; |