Index: chrome/browser/ui/cocoa/location_bar/manage_passwords_decoration_unittest.mm |
diff --git a/chrome/browser/ui/cocoa/location_bar/manage_passwords_decoration_unittest.mm b/chrome/browser/ui/cocoa/location_bar/manage_passwords_decoration_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7057113a3233d0c43249918dbb79359d4d8b11e2 |
--- /dev/null |
+++ b/chrome/browser/ui/cocoa/location_bar/manage_passwords_decoration_unittest.mm |
@@ -0,0 +1,185 @@ |
+// Copyright 2014 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. |
+ |
+#import <Cocoa/Cocoa.h> |
+ |
+#include "base/strings/utf_string_conversions.h" |
+#include "chrome/app/chrome_command_ids.h" |
+#include "chrome/browser/command_updater.h" |
+#include "chrome/browser/command_updater_delegate.h" |
+#import "chrome/browser/ui/cocoa/cocoa_test_helper.h" |
+#import "chrome/browser/ui/cocoa/location_bar/manage_passwords_decoration.h" |
+#import "chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.h" |
+#include "components/password_manager/core/common/password_manager_ui.h" |
+#include "grit/generated_resources.h" |
+#include "grit/theme_resources.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#import "testing/gtest_mac.h" |
rohitrao (ping after 24h)
2014/07/31 12:35:20
#include is appropriate for every header in this b
dconnelly
2014/08/01 09:11:46
Done.
|
+#include "ui/base/l10n/l10n_util_mac.h" |
+#include "ui/gfx/image/image.h" |
+ |
+namespace { |
+ |
+// A simple CommandUpdaterDelegate for testing whether the correct command |
+// was sent. |
+class TestCommandUpdaterDelegate : public CommandUpdaterDelegate { |
+ public: |
+ TestCommandUpdaterDelegate() : id_(0) {} |
+ |
+ virtual void ExecuteCommandWithDisposition( |
+ int id, |
+ WindowOpenDisposition disposition) OVERRIDE { |
+ id_ = id; |
+ } |
+ |
+ int id() { return id_; } |
+ |
+ private: |
+ int id_; |
+}; |
+ |
+bool ImagesEqual(NSImage* left, NSImage* right) { |
+ if (!left || !right) |
+ return left == right; |
+ gfx::Image leftImage([left copy]); |
+ gfx::Image rightImage([right copy]); |
+ return leftImage.As1xPNGBytes()->Equals(rightImage.As1xPNGBytes()); |
+} |
+ |
+} // namespace |
+ |
+// Tests isolated functionality of the ManagedPasswordsDecoration. |
+class ManagePasswordsDecorationTest : public CocoaTest { |
+ public: |
+ ManagePasswordsDecorationTest() |
+ : commandUpdater_(&commandDelegate_), decoration_(&commandUpdater_) { |
+ commandUpdater_.UpdateCommandEnabled(IDC_MANAGE_PASSWORDS_FOR_PAGE, true); |
+ } |
+ |
+ protected: |
+ TestCommandUpdaterDelegate* commandDelegate() { return &commandDelegate_; } |
+ ManagePasswordsDecoration* decoration() { return &decoration_; } |
+ |
+ private: |
+ TestCommandUpdaterDelegate commandDelegate_; |
+ CommandUpdater commandUpdater_; |
+ ManagePasswordsDecoration decoration_; |
+}; |
+ |
+TEST_F(ManagePasswordsDecorationTest, ExecutesManagePasswordsCommandOnClick) { |
+ EXPECT_TRUE(decoration()->AcceptsMousePress()); |
+ EXPECT_TRUE(decoration()->OnMousePressed(NSRect(), NSPoint())); |
+ EXPECT_EQ(IDC_MANAGE_PASSWORDS_FOR_PAGE, commandDelegate()->id()); |
+} |
+ |
+// Parameter object for ManagePasswordsDecorationStateTests. |
+struct ManagePasswordsTestCase { |
+ // Inputs |
+ password_manager::ui::State state; |
+ bool active; |
+ |
+ // Outputs |
+ bool visible; |
+ int image; |
+ int toolTip; |
+}; |
+ |
+// Tests that setting different combinations of password_manager::ui::State |
+// and the Active property of the decoration result in the correct visibility, |
+// decoration icon, and tooltip. |
+class ManagePasswordsDecorationStateTest |
+ : public ManagePasswordsDecorationTest, |
+ public ::testing::WithParamInterface<ManagePasswordsTestCase> {}; |
+ |
+TEST_P(ManagePasswordsDecorationStateTest, TestState) { |
+ decoration()->SetState(GetParam().state); |
+ decoration()->SetActive(GetParam().active); |
+ EXPECT_EQ(GetParam().visible, decoration()->IsVisible()); |
+ EXPECT_TRUE(ImagesEqual( |
+ GetParam().image ? OmniboxViewMac::ImageForResource(GetParam().image) |
+ : nil, |
+ decoration()->GetImage())); |
+ EXPECT_NSEQ(GetParam().toolTip |
+ ? l10n_util::GetNSStringWithFixup(GetParam().toolTip) |
+ : nil, |
+ decoration()->GetToolTip()); |
+} |
+ |
+ManagePasswordsTestCase managerInactiveOnPageAndEnabledTests[] = { |
+ {.state = password_manager::ui::INACTIVE_STATE, |
+ .active = true, |
+ .visible = false, |
+ .image = 0, |
+ .toolTip = 0}, |
+ {.state = password_manager::ui::INACTIVE_STATE, |
+ .active = false, |
+ .visible = false, |
+ .image = 0, |
+ .toolTip = 0}}; |
+ |
+INSTANTIATE_TEST_CASE_P( |
+ ManagerInactiveOnPage, |
+ ManagePasswordsDecorationStateTest, |
+ ::testing::ValuesIn(managerInactiveOnPageAndEnabledTests)); |
+ |
+ManagePasswordsTestCase managerActiveOnPageAndEnabledTests[] = { |
+ {.state = password_manager::ui::MANAGE_STATE, |
+ .active = true, |
+ .visible = true, |
+ .image = IDR_SAVE_PASSWORD_ACTIVE, |
+ .toolTip = IDS_PASSWORD_MANAGER_TOOLTIP_MANAGE}, |
+ {.state = password_manager::ui::MANAGE_STATE, |
+ .active = false, |
+ .visible = true, |
+ .image = IDR_SAVE_PASSWORD_INACTIVE, |
+ .toolTip = IDS_PASSWORD_MANAGER_TOOLTIP_MANAGE}}; |
+ |
+INSTANTIATE_TEST_CASE_P( |
+ ManagerActiveOnPageAndEnabled, |
+ ManagePasswordsDecorationStateTest, |
+ ::testing::ValuesIn(managerActiveOnPageAndEnabledTests)); |
+ |
+ManagePasswordsTestCase managerActiveOnPageAndBlacklistedTests[] = { |
+ {.state = password_manager::ui::BLACKLIST_STATE, |
+ .active = true, |
+ .visible = true, |
+ .image = IDR_SAVE_PASSWORD_DISABLED_ACTIVE, |
+ .toolTip = IDS_PASSWORD_MANAGER_TOOLTIP_MANAGE}, |
+ {.state = password_manager::ui::BLACKLIST_STATE, |
+ .active = false, |
+ .visible = true, |
+ .image = IDR_SAVE_PASSWORD_DISABLED_INACTIVE, |
+ .toolTip = IDS_PASSWORD_MANAGER_TOOLTIP_MANAGE}}; |
+ |
+INSTANTIATE_TEST_CASE_P( |
+ ManagerActiveOnPageAndBlacklisted, |
+ ManagePasswordsDecorationStateTest, |
+ ::testing::ValuesIn(managerActiveOnPageAndBlacklistedTests)); |
+ |
+ManagePasswordsTestCase managerActiveOnPageAndPendingTests[] = { |
+ {.state = password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE, |
+ .active = true, |
+ .visible = true, |
+ .image = IDR_SAVE_PASSWORD_ACTIVE, |
+ .toolTip = IDS_PASSWORD_MANAGER_TOOLTIP_SAVE}, |
+ {.state = password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE, |
+ .active = false, |
+ .visible = true, |
+ .image = IDR_SAVE_PASSWORD_INACTIVE, |
+ .toolTip = IDS_PASSWORD_MANAGER_TOOLTIP_SAVE}, |
+ {.state = password_manager::ui::PENDING_PASSWORD_STATE, |
+ .active = true, |
+ .visible = true, |
+ .image = IDR_SAVE_PASSWORD_ACTIVE, |
+ .toolTip = IDS_PASSWORD_MANAGER_TOOLTIP_SAVE}, |
+ {.state = password_manager::ui::PENDING_PASSWORD_STATE, |
+ .active = false, |
+ .visible = true, |
+ .image = IDR_SAVE_PASSWORD_INACTIVE, |
+ .toolTip = IDS_PASSWORD_MANAGER_TOOLTIP_SAVE}}; |
+ |
+INSTANTIATE_TEST_CASE_P( |
+ ManagerActiveOnPageAndPending, |
+ ManagePasswordsDecorationStateTest, |
+ ::testing::ValuesIn(managerActiveOnPageAndPendingTests)); |