Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1414)

Unified Diff: chrome/browser/ui/toolbar/media_router_action_unittest.cc

Issue 1268553002: Reflect the current state in Media Router Action icon. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix tests (lsan). Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/toolbar/media_router_action_unittest.cc
diff --git a/chrome/browser/ui/toolbar/media_router_action_unittest.cc b/chrome/browser/ui/toolbar/media_router_action_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..8a939661e263320019bdd3f894b622b0316f4e39
--- /dev/null
+++ b/chrome/browser/ui/toolbar/media_router_action_unittest.cc
@@ -0,0 +1,256 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/toolbar/media_router_action.h"
+#include "chrome/browser/ui/webui/media_router/media_router_test.h"
+#include "chrome/grit/generated_resources.h"
+#include "content/public/test/test_utils.h"
+#include "grit/theme_resources.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/image/image_unittest_util.h"
+
+class MediaRouterActionUnitTest : public MediaRouterTest {
+ public:
+ MediaRouterActionUnitTest()
+ : fake_issue_notification_(media_router::Issue(
+ "title notification",
+ "message notification",
+ media_router::IssueAction(media_router::IssueAction::TYPE_OK),
+ std::vector<media_router::IssueAction>(),
+ "route_id",
+ media_router::Issue::NOTIFICATION,
+ false, std::string())),
+ fake_issue_warning_(media_router::Issue(
+ "title warning",
+ "message warning",
+ media_router::IssueAction(
+ media_router::IssueAction::TYPE_LEARN_MORE),
+ std::vector<media_router::IssueAction>(),
+ "route_id",
+ media_router::Issue::WARNING,
+ false,
+ "www.google.com")),
+ fake_issue_fatal_(media_router::Issue(
+ "title fatal",
+ "message fatal",
+ media_router::IssueAction(media_router::IssueAction::TYPE_OK),
+ std::vector<media_router::IssueAction>(),
+ "route_id",
+ media_router::Issue::FATAL,
+ true,
+ std::string())),
+ fake_sink1_("fakeSink1", "Fake Sink 1"),
+ fake_sink2_("fakeSink2", "Fake Sink 2"),
+ fake_source1_("fakeSource1"),
+ fake_source2_("fakeSource2"),
+ fake_route_local_("route1", fake_source1_, fake_sink1_, "desc1",
+ true, "path.html"),
+ fake_route_remote_("route2", fake_source2_, fake_sink2_, "desc2",
+ false, "path.html"),
+ active_icon_(ui::ResourceBundle::GetSharedInstance().
+ GetImageNamed(IDR_MEDIA_ROUTER_ACTIVE_ICON)),
+ error_icon_(ui::ResourceBundle::GetSharedInstance().
+ GetImageNamed(IDR_MEDIA_ROUTER_ERROR_ICON)),
+ idle_icon_(ui::ResourceBundle::GetSharedInstance().
+ GetImageNamed(IDR_MEDIA_ROUTER_IDLE_ICON)),
+ warning_icon_(ui::ResourceBundle::GetSharedInstance().
+ GetImageNamed(IDR_MEDIA_ROUTER_WARNING_ICON)) {
+ }
+
+ ~MediaRouterActionUnitTest() override {}
+
+ // BrowserWithTestWindowTest:
+ void SetUp() override {
+ BrowserWithTestWindowTest::SetUp();
+ action_.reset(new MediaRouterAction(browser()));
+ }
+
+ void TearDown() override {
+ action_.reset();
+ BrowserWithTestWindowTest::TearDown();
+ }
+
+ MediaRouterAction* action() { return action_.get(); }
+ const media_router::Issue* fake_issue_notification() {
+ return &fake_issue_notification_;
+ }
+ const media_router::Issue* fake_issue_warning() {
+ return &fake_issue_warning_;
+ }
+ const media_router::Issue* fake_issue_fatal() {
+ return &fake_issue_fatal_;
+ }
+ const media_router::MediaRoute fake_route_local() {
+ return fake_route_local_;
+ }
+ const media_router::MediaRoute fake_route_remote() {
+ return fake_route_remote_;
+ }
+ const gfx::Image active_icon() { return active_icon_; }
+ const gfx::Image error_icon() { return error_icon_; }
+ const gfx::Image idle_icon() { return idle_icon_; }
+ const gfx::Image warning_icon() { return warning_icon_; }
+
+ private:
+ scoped_ptr<MediaRouterAction> action_;
+
+ // Fake Issues.
+ const media_router::Issue fake_issue_notification_;
+ const media_router::Issue fake_issue_warning_;
+ const media_router::Issue fake_issue_fatal_;
+
+ // Fake Sinks and Sources, used for the Routes.
+ const media_router::MediaSink fake_sink1_;
+ const media_router::MediaSink fake_sink2_;
+ const media_router::MediaSource fake_source1_;
+ const media_router::MediaSource fake_source2_;
+
+ // Fake Routes.
+ const media_router::MediaRoute fake_route_local_;
+ const media_router::MediaRoute fake_route_remote_;
+
+ // Cached images.
+ const gfx::Image active_icon_;
+ const gfx::Image error_icon_;
+ const gfx::Image idle_icon_;
+ const gfx::Image warning_icon_;
+
+ DISALLOW_COPY_AND_ASSIGN(MediaRouterActionUnitTest);
+};
+
+// Tests the initial state of MediaRouterAction after construction.
+TEST_F(MediaRouterActionUnitTest, Initialization) {
+ EXPECT_EQ("media_router_action", action()->GetId());
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_MEDIA_ROUTER_TITLE),
+ action()->GetActionName());
+ EXPECT_TRUE(gfx::test::IsEqual(idle_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+}
+
+// Tests the MediaRouterAction icon based on updates to issues.
+TEST_F(MediaRouterActionUnitTest, UpdateIssues) {
+ // Initially, there are no issues.
+ EXPECT_TRUE(gfx::test::IsEqual(idle_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Don't update |current_icon_| since the issue is only a notification.
+ action()->OnIssueUpdated(fake_issue_notification());
+ EXPECT_TRUE(gfx::test::IsEqual(idle_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Update |current_icon_| since the issue is a warning.
+ action()->OnIssueUpdated(fake_issue_warning());
+ EXPECT_TRUE(gfx::test::IsEqual(warning_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Update |current_icon_| since the issue is fatal.
+ action()->OnIssueUpdated(fake_issue_fatal());
+ EXPECT_TRUE(gfx::test::IsEqual(error_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Clear the issue.
+ action()->OnIssueUpdated(nullptr);
+ EXPECT_TRUE(gfx::test::IsEqual(idle_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+}
+
+// Tests the MediaRouterAction state based on updates to routes.
+TEST_F(MediaRouterActionUnitTest, UpdateRoutes) {
+ scoped_ptr<std::vector<media_router::MediaRoute>> routes(
+ new std::vector<media_router::MediaRoute>());
+
+ // Initially, there are no routes.
+ EXPECT_TRUE(gfx::test::IsEqual(idle_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Update |current_icon_| since there is a local route.
+ routes->push_back(fake_route_local());
+ routes->push_back(fake_route_remote());
+ action()->OnRoutesUpdated(*routes.get());
+ EXPECT_TRUE(gfx::test::IsEqual(active_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Update |current_icon_| since there are no more local routes.
+ routes->clear();
+ routes->push_back(fake_route_remote());
+ action()->OnRoutesUpdated(*routes.get());
+ EXPECT_TRUE(gfx::test::IsEqual(idle_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // |current_icon_| stays the same if there are no local routes or no routes.
+ routes->clear();
+ action()->OnRoutesUpdated(*routes.get());
+ EXPECT_TRUE(gfx::test::IsEqual(idle_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+}
+
+// Tests the MediaRouterAction icon based on updates to both issues and routes.
+TEST_F(MediaRouterActionUnitTest, UpdateIssuesAndRoutes) {
+ scoped_ptr<std::vector<media_router::MediaRoute>> routes(
+ new std::vector<media_router::MediaRoute>());
+
+ // Initially, there are no issues or routes.
+ EXPECT_TRUE(gfx::test::IsEqual(idle_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // There is no change in |current_icon_| since notification issues do not
+ // update the state.
+ action()->OnIssueUpdated(fake_issue_notification());
+ EXPECT_TRUE(gfx::test::IsEqual(idle_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Non-local routes also do not have an effect on |current_icon_|.
+ routes->push_back(fake_route_remote());
+ action()->OnRoutesUpdated(*routes.get());
+ EXPECT_TRUE(gfx::test::IsEqual(idle_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Update |current_icon_| since there is a local route.
+ routes->clear();
+ routes->push_back(fake_route_local());
+ action()->OnRoutesUpdated(*routes.get());
+ EXPECT_TRUE(gfx::test::IsEqual(active_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Update |current_icon_|, with a priority to reflect the warning issue
+ // rather than the local route.
+ action()->OnIssueUpdated(fake_issue_warning());
+ EXPECT_TRUE(gfx::test::IsEqual(warning_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Swapping the local route for a non-local one makes no difference to the
+ // |current_icon_|.
+ routes->clear();
+ routes->push_back(fake_route_remote());
+ action()->OnRoutesUpdated(*routes.get());
+ EXPECT_TRUE(gfx::test::IsEqual(warning_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Update |current_icon_| since the issue has been updated to fatal.
+ action()->OnIssueUpdated(fake_issue_fatal());
+ EXPECT_TRUE(gfx::test::IsEqual(error_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Fatal issues still take precedent over local routes.
+ routes->clear();
+ routes->push_back(fake_route_local());
+ action()->OnRoutesUpdated(*routes.get());
+ EXPECT_TRUE(gfx::test::IsEqual(error_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // When the fatal issue is dismissed, |current_icon_| reflects the existing
+ // local route.
+ action()->OnIssueUpdated(nullptr);
+ EXPECT_TRUE(gfx::test::IsEqual(active_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+
+ // Update |current_icon_| when the local route is swapped out for a non-local
+ // route.
+ routes->clear();
+ routes->push_back(fake_route_remote());
+ action()->OnRoutesUpdated(*routes.get());
+ EXPECT_TRUE(gfx::test::IsEqual(idle_icon(),
+ action()->GetIcon(nullptr, gfx::Size())));
+}
« no previous file with comments | « chrome/browser/ui/toolbar/media_router_action.cc ('k') | chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698