Chromium Code Reviews| Index: remoting/host/video_frame_pump_unittest.cc |
| diff --git a/remoting/host/video_frame_pump_unittest.cc b/remoting/host/video_frame_pump_unittest.cc |
| index cd5cd016f6abd6c2587d92bd1213ef03f51a65e8..859ce09cf558ec9cbe2b284924fe1df2af274a44 100644 |
| --- a/remoting/host/video_frame_pump_unittest.cc |
| +++ b/remoting/host/video_frame_pump_unittest.cc |
| @@ -26,9 +26,11 @@ |
| using ::remoting::protocol::MockVideoStub; |
| using ::testing::_; |
| +using ::testing::AtLeast; |
| using ::testing::DoAll; |
| using ::testing::Expectation; |
| using ::testing::InvokeWithoutArgs; |
| +using ::testing::Return; |
| namespace remoting { |
| @@ -38,6 +40,18 @@ ACTION(FinishSend) { |
| arg1.Run(); |
| } |
| +scoped_ptr<webrtc::DesktopFrame> CreateNullFrame( |
| + webrtc::DesktopCapturer::Callback*) { |
| + return nullptr; |
| +} |
| + |
| +scoped_ptr<webrtc::DesktopFrame> CreateUnchangedFrame( |
| + webrtc::DesktopCapturer::Callback*) { |
| + const webrtc::DesktopSize kSize(800, 640); |
| + // updated_region() is already empty by default in new BasicDesktopFrames. |
| + return make_scoped_ptr(new webrtc::BasicDesktopFrame(kSize)); |
| +} |
| + |
| } // namespace |
| static const int kWidth = 640; |
| @@ -163,4 +177,63 @@ TEST_F(VideoFramePumpTest, StartAndStop) { |
| run_loop.Run(); |
| } |
| +// Tests that the pump handles null frames returned by the capturer. |
| +TEST_F(VideoFramePumpTest, NullFrame) { |
| + scoped_ptr<FakeDesktopCapturer> capturer(new FakeDesktopCapturer); |
| + scoped_ptr<MockVideoEncoder> encoder(new MockVideoEncoder); |
| + |
| + base::RunLoop run_loop; |
| + |
| + // Set up the capturer to return null frames. |
| + capturer->set_frame_generator(base::Bind(&CreateNullFrame)); |
| + |
| + // Expect that the VideoEncoder::Encode() method is never called. |
| + EXPECT_CALL(*encoder, EncodePtr(_)).Times(0); |
| + |
| + // When the first ProcessVideoPacket is received we stop the VideoFramePump. |
| + EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _)) |
| + .WillOnce(DoAll(FinishSend(), |
| + InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit))) |
| + .RetiresOnSaturation(); |
| + |
| + // Start video frame capture. |
| + pump_.reset(new VideoFramePump(encode_task_runner_, |
| + make_scoped_ptr(new DesktopCapturerProxy( |
| + capture_task_runner_, capturer.Pass())), |
| + encoder.Pass(), &video_stub_)); |
| + |
| + // Run MessageLoop until the first frame is received.. |
|
Sergey Ulanov
2015/06/09 05:32:44
typo: ..
Wez
2015/06/09 22:00:37
Done.
|
| + run_loop.Run(); |
| +} |
| + |
| +// Tests how the pump handles unchanged frames returned by the capturer. |
| +TEST_F(VideoFramePumpTest, UnchangedFrame) { |
| + scoped_ptr<FakeDesktopCapturer> capturer(new FakeDesktopCapturer); |
| + scoped_ptr<MockVideoEncoder> encoder(new MockVideoEncoder); |
| + |
| + base::RunLoop run_loop; |
| + |
| + // Set up the capturer to return unchanged frames. |
| + capturer->set_frame_generator(base::Bind(&CreateUnchangedFrame)); |
| + |
| + // Expect that the VideoEncoder::Encode() method is called. |
| + EXPECT_CALL(*encoder, EncodePtr(_)).WillRepeatedly(Return(nullptr)); |
| + |
| + // When the first ProcessVideoPacket is received we stop the VideoFramePump. |
| + // TODO(wez): Verify that the generated packet has no content here. |
| + EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _)) |
| + .WillOnce(DoAll(FinishSend(), |
| + InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit))) |
| + .RetiresOnSaturation(); |
| + |
| + // Start video frame capture. |
| + pump_.reset(new VideoFramePump(encode_task_runner_, |
| + make_scoped_ptr(new DesktopCapturerProxy( |
| + capture_task_runner_, capturer.Pass())), |
| + encoder.Pass(), &video_stub_)); |
| + |
| + // Run MessageLoop until the first frame is received.. |
| + run_loop.Run(); |
| +} |
| + |
| } // namespace remoting |