Chromium Code Reviews| Index: chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc |
| diff --git a/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc |
| index 2fe3a8390b1cdc492553d7ec28b915738ccdb962..b7858c689999437dc8e1697c652af2dc9b888fde 100644 |
| --- a/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc |
| +++ b/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc |
| @@ -63,6 +63,20 @@ class MockRoutesUpdatedCallback { |
| const std::vector<MediaRoute::Id>& joinable_route_ids)); |
| }; |
| +class MockMediaRouterWebUIMessageHandler |
| + : public MediaRouterWebUIMessageHandler { |
| + public: |
| + explicit MockMediaRouterWebUIMessageHandler(MediaRouterUI* media_router_ui) |
| + : MediaRouterWebUIMessageHandler(media_router_ui) {} |
| + ~MockMediaRouterWebUIMessageHandler() override {} |
| + |
| + MOCK_METHOD3(UpdateRoutes, |
| + void(const std::vector<MediaRoute>& routes, |
| + const std::vector<MediaRoute::Id>& joinable_route_ids, |
| + const std::unordered_map<MediaRoute::Id, MediaCastMode>& |
| + current_cast_modes)); |
| +}; |
| + |
| class MediaRouterUITest : public ::testing::Test { |
| public: |
| ~MediaRouterUITest() override { |
| @@ -79,9 +93,9 @@ class MediaRouterUITest : public ::testing::Test { |
| web_contents_.reset(content::WebContents::Create( |
| content::WebContents::CreateParams(profile))); |
| web_ui_.set_web_contents(web_contents_.get()); |
| - media_router_ui_.reset(new MediaRouterUI(&web_ui_)); |
| - message_handler_.reset( |
| - new MediaRouterWebUIMessageHandler(media_router_ui_.get())); |
| + media_router_ui_ = base::MakeUnique<MediaRouterUI>(&web_ui_); |
| + message_handler_ = base::MakeUnique<MockMediaRouterWebUIMessageHandler>( |
| + media_router_ui_.get()); |
| EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) |
| .WillRepeatedly(Invoke([this](MediaSinksObserver* observer) { |
| this->media_sinks_observers_.push_back(observer); |
| @@ -111,7 +125,7 @@ class MediaRouterUITest : public ::testing::Test { |
| std::unique_ptr<content::WebContents> web_contents_; |
| std::unique_ptr<CreatePresentationConnectionRequest> create_session_request_; |
| std::unique_ptr<MediaRouterUI> media_router_ui_; |
| - std::unique_ptr<MediaRouterWebUIMessageHandler> message_handler_; |
| + std::unique_ptr<MockMediaRouterWebUIMessageHandler> message_handler_; |
| std::vector<MediaSinksObserver*> media_sinks_observers_; |
| }; |
| @@ -560,4 +574,45 @@ TEST_F(MediaRouterUITest, AbortErrorOnClose) { |
| // callback. |
| media_router_ui_.reset(); |
| } |
| + |
| +TEST_F(MediaRouterUITest, UpdateRoutesOnUIInitialized) { |
| + std::vector<MediaRoute> routes; |
| + std::vector<MediaRoute::Id> joinable_route_ids1; |
| + std::vector<MediaRoute::Id> joinable_route_ids2; |
| + routes.push_back(MediaRoute("routeId1", MediaSource("sourceId"), "sinkId1", |
| + "desc 1", true, "", true)); |
| + routes.push_back(MediaRoute("routeId2", MediaSource("sourceId"), "sinkId2", |
| + "desc 2", true, "", false)); |
| + joinable_route_ids1.push_back("routeId1"); |
| + |
| + // If UIInitialized() is called before OnRoutesUpdated() is called for the |
| + // first time, then UpdateRoutes() should be called from OnRoutesUpdated(). |
| + CreateMediaRouterUI(&profile_); |
| + EXPECT_CALL(*message_handler_.get(), UpdateRoutes(_, _, _)).Times(0); |
| + media_router_ui_->UIInitialized(); |
| + EXPECT_CALL(*message_handler_.get(), |
| + UpdateRoutes(SequenceEquals(routes), joinable_route_ids1, _)) |
| + .Times(1); |
| + media_router_ui_->OnRoutesUpdated(routes, joinable_route_ids1); |
| + // Subsequent OnRoutesUpdated() calls should call UpdateRoutes(). |
| + EXPECT_CALL(*message_handler_.get(), |
| + UpdateRoutes(SequenceEquals(routes), joinable_route_ids2, _)) |
| + .Times(1); |
| + media_router_ui_->OnRoutesUpdated(routes, joinable_route_ids2); |
| + |
| + // If UIInitialized() is called after OnRoutesUpdated() is called for the |
| + // first time, then UpdateRoutes() should be called from UIInitialized(). |
| + CreateMediaRouterUI(&profile_); |
|
mark a. foltz
2016/11/29 22:24:10
Nit: Calling this twice in the same test re-uses t
|
| + EXPECT_CALL(*message_handler_.get(), UpdateRoutes(_, _, _)).Times(0); |
| + media_router_ui_->OnRoutesUpdated(routes, joinable_route_ids1); |
| + EXPECT_CALL(*message_handler_.get(), |
| + UpdateRoutes(SequenceEquals(routes), joinable_route_ids1, _)) |
| + .Times(1); |
| + media_router_ui_->UIInitialized(); |
| + // Subsequent OnRoutesUpdated() calls should call UpdateRoutes(). |
| + EXPECT_CALL(*message_handler_.get(), |
| + UpdateRoutes(SequenceEquals(routes), joinable_route_ids2, _)) |
| + .Times(1); |
| + media_router_ui_->OnRoutesUpdated(routes, joinable_route_ids2); |
| +} |
| } // namespace media_router |