Chromium Code Reviews| Index: content/renderer/media/video_capture_impl_unittest.cc |
| diff --git a/content/renderer/media/video_capture_impl_unittest.cc b/content/renderer/media/video_capture_impl_unittest.cc |
| index f130682f5367728943b054dad3a018f61f1d8a16..562492b00667a60e4da291ea0a6acbc615ce5453 100644 |
| --- a/content/renderer/media/video_capture_impl_unittest.cc |
| +++ b/content/renderer/media/video_capture_impl_unittest.cc |
| @@ -15,6 +15,7 @@ |
| #include "testing/gtest/include/gtest/gtest.h" |
| using ::testing::_; |
| +using ::testing::InSequence; |
| using ::testing::Invoke; |
| using ::testing::InvokeWithoutArgs; |
| using ::testing::SaveArg; |
| @@ -29,6 +30,8 @@ void RunEmptyFormatsCallback(const VideoCaptureDeviceFormatsCB& callback) { |
| callback.Run(formats); |
| } |
| +ACTION(DoNothing) {} |
| + |
| // Mock implementation of the Mojo Host service. |
| class MockMojoVideoCaptureHost : public mojom::VideoCaptureHost { |
| public: |
| @@ -89,6 +92,12 @@ class VideoCaptureImplTest : public ::testing::Test { |
| video_capture_impl_->SetVideoCaptureHostForTesting( |
| &mock_video_capture_host_); |
| + |
| + ON_CALL(mock_video_capture_host_, DoStart(_, _, _)) |
| + .WillByDefault(InvokeWithoutArgs([this]() { |
| + video_capture_impl_->OnStateChanged( |
| + mojom::VideoCaptureState::STARTED); |
| + })); |
| } |
| protected: |
| @@ -184,7 +193,7 @@ TEST_F(VideoCaptureImplTest, Simple) { |
| } |
| TEST_F(VideoCaptureImplTest, TwoClientsInSequence) { |
| - EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)).Times(2); |
| + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)); |
| EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED)).Times(2); |
| EXPECT_CALL(mock_video_capture_host_, DoStart(_, kSessionId, params_small_)); |
| EXPECT_CALL(mock_video_capture_host_, Stop(_)); |
| @@ -196,7 +205,7 @@ TEST_F(VideoCaptureImplTest, TwoClientsInSequence) { |
| } |
| TEST_F(VideoCaptureImplTest, LargeAndSmall) { |
| - EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)).Times(2); |
| + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)); |
| EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED)).Times(2); |
| EXPECT_CALL(mock_video_capture_host_, DoStart(_, kSessionId, params_large_)); |
| EXPECT_CALL(mock_video_capture_host_, Stop(_)); |
| @@ -208,7 +217,7 @@ TEST_F(VideoCaptureImplTest, LargeAndSmall) { |
| } |
| TEST_F(VideoCaptureImplTest, SmallAndLarge) { |
| - EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)).Times(2); |
| + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)); |
| EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED)).Times(2); |
| EXPECT_CALL(mock_video_capture_host_, DoStart(_, kSessionId, params_small_)); |
| EXPECT_CALL(mock_video_capture_host_, Stop(_)); |
| @@ -303,10 +312,14 @@ TEST_F(VideoCaptureImplTest, BufferReceivedAfterStop) { |
| TEST_F(VideoCaptureImplTest, AlreadyStarted) { |
| media::VideoCaptureParams params = {}; |
| - EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)).Times(2); |
| + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)); |
| EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED)).Times(2); |
| - EXPECT_CALL(mock_video_capture_host_, DoStart(_, kSessionId, _)) |
| - .WillOnce(SaveArg<2>(¶ms)); |
| + EXPECT_CALL(mock_video_capture_host_, DoStart(_, kSessionId, params_small_)) |
| + .WillOnce(DoAll(InvokeWithoutArgs([this]() { |
| + video_capture_impl_->OnStateChanged( |
| + mojom::VideoCaptureState::STARTED); |
| + }), |
| + SaveArg<2>(¶ms))); |
| EXPECT_CALL(mock_video_capture_host_, Stop(_)); |
| StartCapture(0, params_small_); |
| @@ -340,4 +353,34 @@ TEST_F(VideoCaptureImplTest, ErrorBeforeStop) { |
| StopCapture(0); |
| } |
| +TEST_F(VideoCaptureImplTest, BufferReceivedBeforeOnStarted) { |
| + const int kBufferId = 16; |
| + |
| + base::SharedMemory shm; |
| + const size_t frame_size = media::VideoFrame::AllocationSize( |
| + media::PIXEL_FORMAT_I420, params_small_.requested_format.frame_size); |
| + ASSERT_TRUE(shm.CreateAndMapAnonymous(frame_size)); |
| + |
| + InSequence s; |
| + EXPECT_CALL(mock_video_capture_host_, DoStart(_, kSessionId, params_small_)) |
| + .WillOnce(DoNothing()); |
|
emircan
2017/03/13 21:03:35
Do you need to call DoNothing() here? You can repl
braveyao
2017/03/14 00:05:16
Oh, ".Times(1)" doesn't work here simply.
And we w
|
| + EXPECT_CALL(mock_video_capture_host_, ReleaseBuffer(_, kBufferId, _)); |
| + StartCapture(0, params_small_); |
| + SimulateOnBufferCreated(kBufferId, shm); |
| + SimulateBufferReceived(kBufferId, params_small_.requested_format.frame_size); |
| + |
| + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)); |
| + EXPECT_CALL(mock_video_capture_host_, RequestRefreshFrame(_)); |
| + video_capture_impl_->OnStateChanged(mojom::VideoCaptureState::STARTED); |
| + |
| + // Additional STARTED will cause RequestRefreshFrame a second time. |
| + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STARTED)); |
| + EXPECT_CALL(mock_video_capture_host_, RequestRefreshFrame(_)); |
| + video_capture_impl_->OnStateChanged(mojom::VideoCaptureState::STARTED); |
| + |
| + EXPECT_CALL(*this, OnStateUpdate(VIDEO_CAPTURE_STATE_STOPPED)); |
| + EXPECT_CALL(mock_video_capture_host_, Stop(_)); |
| + StopCapture(0); |
| +} |
| + |
| } // namespace content |