OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/media/router/browser_presentation_connection_proxy.h" | |
6 | |
7 #include "base/run_loop.h" | |
8 #include "chrome/browser/media/router/media_source.h" | |
9 #include "chrome/browser/media/router/media_source_helper.h" | |
10 #include "chrome/browser/media/router/mock_media_router.h" | |
11 #include "content/public/test/test_browser_thread_bundle.h" | |
12 #include "testing/gmock/include/gmock/gmock.h" | |
13 | |
14 using ::testing::_; | |
15 | |
16 namespace media_router { | |
17 | |
18 using OnMessageCallback = BrowserPresentationConnectionProxy::OnMessageCallback; | |
imcheng
2017/01/31 01:53:25
or just:
using BrowserPresentationConnectionProxy
zhaobin
2017/01/31 18:44:15
Done.
| |
19 | |
20 class MockOnMessageCallback { | |
imcheng
2017/01/31 01:53:25
You can replace this using MockCallback: https://c
zhaobin
2017/01/31 18:44:15
Done.
| |
21 public: | |
22 MOCK_METHOD1(OnMessage, void(bool)); | |
23 }; | |
24 | |
25 class MockPresentationConnectionProxy | |
26 : public NON_EXPORTED_BASE(blink::mojom::PresentationConnection) { | |
27 public: | |
28 void OnMessage(blink::mojom::ConnectionMessagePtr message, | |
29 const OnMessageCallback& on_message_callback) override { | |
30 OnMessageRaw(message.get(), on_message_callback); | |
31 } | |
32 | |
33 MOCK_METHOD2(OnMessageRaw, | |
34 void(const blink::mojom::ConnectionMessage*, | |
35 const OnMessageCallback&)); | |
36 MOCK_METHOD1(DidChangeState, | |
37 void(blink::mojom::PresentationConnectionState state)); | |
38 }; | |
39 | |
40 class BrowserPresentationConnectionProxyTest : public ::testing::Test { | |
41 public: | |
42 BrowserPresentationConnectionProxyTest() { | |
43 mock_route_ = base::MakeUnique<MediaRoute>( | |
44 "MockRouteId", | |
45 MediaSourceForPresentationUrl(GURL("MockPresentationUrl")), | |
46 "mediaSinkId", "", true, "", true); | |
47 } | |
48 | |
49 void SetUp() override { | |
50 browser_connection_proxy_ = | |
51 base::MakeUnique<BrowserPresentationConnectionProxy>(&mock_router_, | |
52 mock_route_.get()); | |
53 } | |
54 | |
55 void TearDown() override { browser_connection_proxy_.reset(); } | |
56 | |
57 std::unique_ptr<BrowserPresentationConnectionProxy> browser_connection_proxy_; | |
58 MockMediaRouter mock_router_; | |
59 std::unique_ptr<MediaRoute> mock_route_; | |
60 | |
61 private: | |
62 content::TestBrowserThreadBundle thread_bundle_; | |
63 }; | |
64 | |
65 TEST_F(BrowserPresentationConnectionProxyTest, TestBindControllerConnection) { | |
66 MockPresentationConnectionProxy mock_controller_connection_proxy; | |
67 blink::mojom::PresentationConnectionPtr controller_connection_ptr; | |
68 mojo::Binding<blink::mojom::PresentationConnection> binding( | |
69 &mock_controller_connection_proxy, | |
70 mojo::MakeRequest(&controller_connection_ptr)); | |
71 EXPECT_CALL( | |
72 mock_controller_connection_proxy, | |
73 DidChangeState(blink::mojom::PresentationConnectionState::CONNECTED)); | |
74 | |
75 base::RunLoop run_loop; | |
76 browser_connection_proxy_->BindControllerConnection( | |
77 std::move(controller_connection_ptr)); | |
78 run_loop.RunUntilIdle(); | |
79 } | |
80 | |
81 TEST_F(BrowserPresentationConnectionProxyTest, TestOnMessageTextMessage) { | |
82 std::string message = "test message"; | |
83 blink::mojom::ConnectionMessagePtr session_message = | |
84 blink::mojom::ConnectionMessage::New(); | |
85 session_message->type = blink::mojom::PresentationMessageType::TEXT; | |
86 session_message->message = message; | |
87 | |
88 MockOnMessageCallback mock_on_message_callback; | |
89 EXPECT_CALL(mock_router_, | |
90 SendRouteMessage(mock_route_->media_route_id(), message, _)); | |
91 | |
92 browser_connection_proxy_->OnMessage( | |
93 std::move(session_message), | |
94 base::Bind(&MockOnMessageCallback::OnMessage, | |
95 base::Unretained(&mock_on_message_callback))); | |
96 } | |
97 | |
98 TEST_F(BrowserPresentationConnectionProxyTest, TestOnMessageBinaryMessage) { | |
99 std::vector<uint8_t> expected_data; | |
100 expected_data.push_back(42); | |
101 expected_data.push_back(36); | |
102 | |
103 blink::mojom::ConnectionMessagePtr session_message = | |
104 blink::mojom::ConnectionMessage::New(); | |
105 session_message->type = blink::mojom::PresentationMessageType::BINARY; | |
106 session_message->data = expected_data; | |
107 | |
108 MockOnMessageCallback mock_on_message_callback; | |
109 EXPECT_CALL(mock_router_, SendRouteBinaryMessageInternal(_, _, _)) | |
110 .WillOnce(::testing::Invoke([this, &expected_data]( | |
111 const MediaRoute::Id& route_id, std::vector<uint8_t>* data, | |
112 const OnMessageCallback& callback) { | |
113 EXPECT_EQ(expected_data, *data); | |
114 })); | |
115 | |
116 browser_connection_proxy_->OnMessage( | |
117 std::move(session_message), | |
118 base::Bind(&MockOnMessageCallback::OnMessage, | |
119 base::Unretained(&mock_on_message_callback))); | |
120 } | |
121 | |
122 } // namespace media_router | |
OLD | NEW |