Index: remoting/protocol/client_video_dispatcher_unittest.cc |
diff --git a/remoting/protocol/client_video_dispatcher_unittest.cc b/remoting/protocol/client_video_dispatcher_unittest.cc |
index 73a9c346bc43976b36e5e65e7aed0f57abf11e99..067049da5020e55fd344ef78fcb1d9f0d8224af5 100644 |
--- a/remoting/protocol/client_video_dispatcher_unittest.cc |
+++ b/remoting/protocol/client_video_dispatcher_unittest.cc |
@@ -14,6 +14,7 @@ |
#include "remoting/protocol/fake_stream_socket.h" |
#include "remoting/protocol/message_reader.h" |
#include "remoting/protocol/message_serialization.h" |
+#include "remoting/protocol/protocol_mock_objects.h" |
#include "remoting/protocol/stream_message_pipe_adapter.h" |
#include "remoting/protocol/video_stub.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -48,6 +49,7 @@ class ClientVideoDispatcherTest : public testing::Test, |
// Client side. |
FakeStreamChannelFactory client_channel_factory_; |
StreamMessageChannelFactoryAdapter channel_factory_adapter_; |
+ MockClientStub client_stub_; |
ClientVideoDispatcher dispatcher_; |
// Host side. |
@@ -66,7 +68,7 @@ ClientVideoDispatcherTest::ClientVideoDispatcherTest() |
&client_channel_factory_, |
base::Bind(&ClientVideoDispatcherTest::OnChannelError, |
base::Unretained(this))), |
- dispatcher_(this) { |
+ dispatcher_(this, &client_stub_) { |
dispatcher_.Init(&channel_factory_adapter_, this); |
base::RunLoop().RunUntilIdle(); |
DCHECK(initialized_); |
@@ -154,6 +156,37 @@ TEST_F(ClientVideoDispatcherTest, WithAcks) { |
EXPECT_EQ(kTestFrameId, ack_messages_[0]->frame_id()); |
} |
+// Verifies that the dispatcher properly synthesizes VideoLayout message when |
+// screen size changes. |
+TEST_F(ClientVideoDispatcherTest, VideoLayout) { |
+ const int kScreenSize = 100; |
+ const float kScaleFactor = 2.0; |
+ |
+ VideoPacket packet; |
+ packet.set_data(std::string()); |
+ packet.set_frame_id(42); |
+ packet.mutable_format()->set_screen_width(kScreenSize); |
+ packet.mutable_format()->set_screen_height(kScreenSize); |
+ packet.mutable_format()->set_x_dpi(kDefaultDpi * kScaleFactor); |
+ packet.mutable_format()->set_y_dpi(kDefaultDpi * kScaleFactor); |
+ |
+ VideoLayout layout; |
+ EXPECT_CALL(client_stub_, SetVideoLayout(testing::_)) |
+ .WillOnce(testing::SaveArg<0>(&layout)); |
+ |
+ // Send a VideoPacket and verify that the client receives it. |
+ writer_.Write(SerializeAndFrameMessage(packet), base::Closure()); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ ASSERT_EQ(1, layout.video_track_size()); |
+ EXPECT_EQ(0, layout.video_track(0).position_x()); |
+ EXPECT_EQ(0, layout.video_track(0).position_y()); |
+ EXPECT_EQ(kScreenSize / kScaleFactor, layout.video_track(0).width()); |
+ EXPECT_EQ(kScreenSize / kScaleFactor, layout.video_track(0).height()); |
+ EXPECT_EQ(kDefaultDpi * kScaleFactor, layout.video_track(0).x_dpi()); |
+ EXPECT_EQ(kDefaultDpi * kScaleFactor, layout.video_track(0).y_dpi()); |
+} |
+ |
// Verify that Ack messages are sent in correct order. |
TEST_F(ClientVideoDispatcherTest, AcksOrder) { |
int kTestFrameId = 3; |