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

Unified Diff: chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc

Issue 521713002: Add some unittests for EasyUnlockScreenlockStateHandler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix android builds Created 6 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
« no previous file with comments | « no previous file | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc
diff --git a/chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc b/chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..cae787d109e6f113eae0e3f667ae707ccfc81e0e
--- /dev/null
+++ b/chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc
@@ -0,0 +1,605 @@
+// 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.
+
+#include <string>
+#include <vector>
+
+#include "base/strings/string16.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/signin/easy_unlock_screenlock_state_handler.h"
+#include "chrome/browser/signin/easy_unlock_service.h"
+#include "chrome/browser/signin/screenlock_bridge.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/grit/generated_resources.h"
+#include "chrome/test/base/testing_pref_service_syncable.h"
+#include "components/pref_registry/pref_registry_syncable.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace {
+
+// Resource URLs for icons used by EasyUnlockScreenlockStateHandler.
+const char kLockedIconURL[] = "chrome://theme/IDR_EASY_UNLOCK_LOCKED";
+const char kUnlockedIconURL[] = "chrome://theme/IDR_EASY_UNLOCK_UNLOCKED";
+const char kSpinnerIconURL[] = "chrome://theme/IDR_EASY_UNLOCK_SPINNER";
+
+// The expected size of user pod custom icons set by
+// EasyUnlockScreenlockStateHandler.
+const int kExpectedIconSize = 27;
+
+// Checks if |input| string has any unreplaced placeholders.
+bool StringHasPlaceholders(const base::string16& input) {
+ std::vector<size_t> offsets;
+ std::vector<base::string16> subst;
+ subst.push_back(base::string16());
+
+ base::string16 replaced = ReplaceStringPlaceholders(input, subst, &offsets);
+ return !offsets.empty();
+}
+
+// Fake lock handler to be used in these tests.
+class TestLockHandler : public ScreenlockBridge::LockHandler {
+ public:
+ explicit TestLockHandler(const std::string& user_email)
+ : user_email_(user_email),
+ show_icon_count_(0u),
+ auth_type_(OFFLINE_PASSWORD) {
+ }
+ virtual ~TestLockHandler() {}
+
+ // ScreenlockBridge::LockHandler implementation:
+ virtual void ShowBannerMessage(const base::string16& message) OVERRIDE {
+ ASSERT_FALSE(true) << "Should not be reached.";
+ }
+
+ virtual void ShowUserPodCustomIcon(
+ const std::string& user_email,
+ const ScreenlockBridge::UserPodCustomIconOptions& icon) OVERRIDE {
+ ASSERT_EQ(user_email_, user_email);
+ ++show_icon_count_;
+ last_custom_icon_ = icon.ToDictionaryValue().Pass();
+ ValidateCustomIcon();
+ }
+
+ virtual void HideUserPodCustomIcon(const std::string& user_email) OVERRIDE {
+ ASSERT_EQ(user_email_, user_email);
+ last_custom_icon_.reset();
+ }
+
+ virtual void EnableInput() OVERRIDE {
+ ASSERT_FALSE(true) << "Should not be reached.";
+ }
+
+ virtual void SetAuthType(const std::string& user_email,
+ AuthType auth_type,
+ const base::string16& auth_value) OVERRIDE {
+ ASSERT_EQ(user_email_, user_email);
+ // Generally, this is allowed, but EasyUnlockScreenlockStateHandler should
+ // avoid resetting the same auth type.
+ EXPECT_NE(auth_type_, auth_type);
+
+ auth_type_ = auth_type;
+ auth_value_ = auth_value;
+ }
+
+ virtual AuthType GetAuthType(const std::string& user_email) const OVERRIDE {
+ EXPECT_EQ(user_email_, user_email);
+ return auth_type_;
+ }
+
+ virtual void Unlock(const std::string& user_email) OVERRIDE {
+ ASSERT_FALSE(true) << "Should not be reached.";
+ }
+
+ // Utility methods used by tests:
+
+ // Gets last set auth value.
+ base::string16 GetAuthValue() const {
+ return auth_value_;
+ }
+
+ // Sets the auth value.
+ void SetAuthValue(const base::string16& value) {
+ auth_value_ = value;
+ }
+
+ // Returns the number of times an icon was shown since the last call to this
+ // method.
+ size_t GetAndResetShowIconCount() {
+ size_t result = show_icon_count_;
+ show_icon_count_ = 0u;
+ return result;
+ }
+
+ // Whether the custom icon is set.
+ bool HasCustomIcon() const {
+ return last_custom_icon_;
+ }
+
+ // If custom icon is set, returns the icon's resource URL.
+ // If there is no icon, or if it doesn't have a resource URL set, returns
+ // an empty string.
+ std::string GetCustomIconURL() const {
+ std::string result;
+ if (last_custom_icon_)
+ last_custom_icon_->GetString("resourceUrl", &result);
+ return result;
+ }
+
+ // Whether the custom icon is set and it has a tooltip.
+ bool CustomIconHasTooltip() const {
+ return last_custom_icon_ && last_custom_icon_->HasKey("tooltip");
+ }
+
+ // Gets the custom icon's tooltip text, if one is set.
+ base::string16 GetCustomIconTooltip() const {
+ base::string16 result;
+ if (last_custom_icon_)
+ last_custom_icon_->GetString("tooltip.text", &result);
+ return result;
+ }
+
+ // Whether the custom icon's tooltip should be autoshown. If the icon is not
+ // set, or it doesn't have a tooltip, returns false.
+ bool IsCustomIconTooltipAutoshown() const {
+ bool result = false;
+ if (last_custom_icon_)
+ last_custom_icon_->GetBoolean("tooltip.autoshow", &result);
+ return result;
+ }
+
+ // Returns the custom icon's opacity. If the icon is not set, a negative value
+ // is returned.
+ int GetCustomIconOpacity() const {
+ int result = -1;
+ if (last_custom_icon_)
+ last_custom_icon_->GetInteger("opacity", &result);
+ return result;
+ }
+
+ // Whether the custom icon is set and if has hardlock capability enabed.
+ bool CustomIconHardlocksOnClick() const {
+ bool result = false;
+ if (last_custom_icon_)
+ last_custom_icon_->GetBoolean("hardlockOnClick", &result);
+ return result;
+ }
+
+ // Whether the custom icon is set and has an animation set.
+ bool IsCustomIconAnimated() const {
+ return last_custom_icon_ && last_custom_icon_->HasKey("animation");
+ }
+
+ private:
+ // Does some sanity checks on the last icon set by |ShowUserPodCustomIcon|.
+ // It will cause a test failure if the icon is not valid.
+ void ValidateCustomIcon() {
+ ASSERT_TRUE(last_custom_icon_.get());
+
+ EXPECT_FALSE(last_custom_icon_->HasKey("data"));
+
+ int height = 0;
+ last_custom_icon_->GetInteger("size.height", &height);
+ EXPECT_EQ(kExpectedIconSize, height);
+
+ int width = 0;
+ last_custom_icon_->GetInteger("size.width", &width);
+ EXPECT_EQ(kExpectedIconSize, width);
+
+ if (last_custom_icon_->HasKey("animation")) {
+ int animation_resource_width = -1;
+ EXPECT_TRUE(last_custom_icon_->GetInteger("animation.resourceWidth",
+ &animation_resource_width));
+ EXPECT_GT(animation_resource_width, kExpectedIconSize);
+ EXPECT_EQ(0, animation_resource_width % kExpectedIconSize);
+ EXPECT_TRUE(
+ last_custom_icon_->GetInteger("animation.frameLengthMs", NULL));
+ }
+
+ if (last_custom_icon_->HasKey("tooltip")) {
+ base::string16 tooltip;
+ EXPECT_TRUE(last_custom_icon_->GetString("tooltip.text", &tooltip));
+ EXPECT_FALSE(tooltip.empty());
+ EXPECT_FALSE(StringHasPlaceholders(tooltip));
+ }
+ }
+
+ // The fake user email used in test. All methods called on |this| should be
+ // associated with this user.
+ const std::string user_email_;
+
+ // The last icon set using |SetUserPodCustomIcon|. Call to
+ // |HideUserPodcustomIcon| resets it.
+ scoped_ptr<base::DictionaryValue> last_custom_icon_;
+ size_t show_icon_count_;
+
+ // Auth type and value set using |SetAuthType|.
+ AuthType auth_type_;
+ base::string16 auth_value_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestLockHandler);
+};
+
+class EasyUnlockScreenlockStateHandlerTest : public testing::Test {
+ public:
+ EasyUnlockScreenlockStateHandlerTest() : user_email_("test_user@gmail.com") {}
+ virtual ~EasyUnlockScreenlockStateHandlerTest() {}
+
+ virtual void SetUp() OVERRIDE {
+ pref_service_.reset(new TestingPrefServiceSyncable());
+
+ // The preference used to determine if easy unlock was previously used by
+ // the user on the device ought to be registered by the EasyUnlockService.
+ EasyUnlockService::RegisterProfilePrefs(pref_service_->registry());
+
+ // Create and inject fake lock handler to the screenlock bridge.
+ lock_handler_.reset(new TestLockHandler(user_email_));
+ ScreenlockBridge* screenlock_bridge = ScreenlockBridge::Get();
+ screenlock_bridge->SetLockHandler(lock_handler_.get());
+
+ // Create the screenlock state handler object that will be tested.
+ state_handler_.reset(
+ new EasyUnlockScreenlockStateHandler(user_email_,
+ pref_service_.get(),
+ screenlock_bridge));
+ }
+
+ virtual void TearDown() OVERRIDE {
+ ScreenlockBridge::Get()->SetLockHandler(NULL);
+ lock_handler_.reset();
+ state_handler_.reset();
+ }
+
+ protected:
+ // The state handler that is being tested.
+ scoped_ptr<EasyUnlockScreenlockStateHandler> state_handler_;
+
+ // The user associated with |state_handler_|.
+ const std::string user_email_;
+
+ // Faked lock handler given to ScreenlockBridge during the test. Abstracts
+ // the screen lock UI.
+ scoped_ptr<TestLockHandler> lock_handler_;
+
+ // The user's preferences.
+ scoped_ptr<TestingPrefServiceSyncable> pref_service_;
+};
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest, AuthenticatedInitialRun) {
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
+ lock_handler_->GetAuthType(user_email_));
+
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+ EXPECT_EQ(kUnlockedIconURL, lock_handler_->GetCustomIconURL());
+ EXPECT_TRUE(lock_handler_->CustomIconHasTooltip());
+ EXPECT_TRUE(lock_handler_->IsCustomIconTooltipAutoshown());
+ EXPECT_FALSE(lock_handler_->CustomIconHardlocksOnClick());
+ EXPECT_FALSE(lock_handler_->IsCustomIconAnimated());
+ EXPECT_EQ(100, lock_handler_->GetCustomIconOpacity());
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+ // Duplicated state change should be ignored.
+ EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest, AuthenticatedNotInitialRun) {
+ // Update preference for showing tutorial.
+ pref_service_->SetBoolean(prefs::kEasyUnlockShowTutorial, false);
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
+ lock_handler_->GetAuthType(user_email_));
+
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+ EXPECT_EQ(kUnlockedIconURL, lock_handler_->GetCustomIconURL());
+ EXPECT_TRUE(lock_handler_->CustomIconHasTooltip());
+ EXPECT_FALSE(lock_handler_->IsCustomIconTooltipAutoshown());
+ EXPECT_TRUE(lock_handler_->CustomIconHardlocksOnClick());
+ EXPECT_FALSE(lock_handler_->IsCustomIconAnimated());
+ EXPECT_EQ(100, lock_handler_->GetCustomIconOpacity());
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest, BluetoothConnecting) {
+ pref_service_->SetBoolean(prefs::kEasyUnlockShowTutorial, false);
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
+
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
+ lock_handler_->GetAuthType(user_email_));
+
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+ EXPECT_EQ(kSpinnerIconURL, lock_handler_->GetCustomIconURL());
+ EXPECT_FALSE(lock_handler_->CustomIconHasTooltip());
+ EXPECT_FALSE(lock_handler_->CustomIconHardlocksOnClick());
+ EXPECT_TRUE(lock_handler_->IsCustomIconAnimated());
+ EXPECT_EQ(100, lock_handler_->GetCustomIconOpacity());
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
+ // Duplicated state change should be ignored.
+ EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest, PhoneLocked) {
+ pref_service_->SetBoolean(prefs::kEasyUnlockShowTutorial, false);
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED);
+
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
+ lock_handler_->GetAuthType(user_email_));
+
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+ EXPECT_EQ(kLockedIconURL, lock_handler_->GetCustomIconURL());
+ EXPECT_TRUE(lock_handler_->CustomIconHasTooltip());
+ EXPECT_FALSE(lock_handler_->IsCustomIconTooltipAutoshown());
+ EXPECT_FALSE(lock_handler_->CustomIconHardlocksOnClick());
+ EXPECT_FALSE(lock_handler_->IsCustomIconAnimated());
+ EXPECT_EQ(100, lock_handler_->GetCustomIconOpacity());
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED);
+ // Duplicated state change should be ignored.
+ EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest, PhoneNotAuthenticated) {
+ pref_service_->SetBoolean(prefs::kEasyUnlockShowTutorial, false);
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED);
+
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
+ lock_handler_->GetAuthType(user_email_));
+
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+ EXPECT_EQ(kLockedIconURL, lock_handler_->GetCustomIconURL());
+ EXPECT_TRUE(lock_handler_->CustomIconHasTooltip());
+ EXPECT_FALSE(lock_handler_->IsCustomIconTooltipAutoshown());
+ EXPECT_FALSE(lock_handler_->CustomIconHardlocksOnClick());
+ EXPECT_FALSE(lock_handler_->IsCustomIconAnimated());
+ EXPECT_EQ(100, lock_handler_->GetCustomIconOpacity());
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED);
+ // Duplicated state change should be ignored.
+ EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest, StatesWithOpaqueIcons) {
+ pref_service_->SetBoolean(prefs::kEasyUnlockShowTutorial, false);
+
+ std::vector<EasyUnlockScreenlockStateHandler::State> states;
+ states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH);
+ states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
+ states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED);
+ states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE);
+
+ for (size_t i = 0; i < states.size(); ++i) {
+ state_handler_->ChangeState(states[i]);
+
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount())
+ << "State: " << states[i];
+ EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
+ lock_handler_->GetAuthType(user_email_))
+ << "State: " << states[i];
+
+ ASSERT_TRUE(lock_handler_->HasCustomIcon())
+ << "State: " << states[i];
+ EXPECT_EQ(kLockedIconURL, lock_handler_->GetCustomIconURL())
+ << "State: " << states[i];
+ EXPECT_TRUE(lock_handler_->CustomIconHasTooltip())
+ << "State: " << states[i];
+ EXPECT_FALSE(lock_handler_->IsCustomIconTooltipAutoshown())
+ << "State: " << states[i];
+ EXPECT_FALSE(lock_handler_->CustomIconHardlocksOnClick())
+ << "State: " << states[i];
+ EXPECT_FALSE(lock_handler_->IsCustomIconAnimated())
+ << "State: " << states[i];
+ EXPECT_EQ(50, lock_handler_->GetCustomIconOpacity())
+ << "State: " << states[i];
+
+ state_handler_->ChangeState(states[i]);
+ EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount())
+ << "State: " << states[i];
+ }
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest,
+ LockScreenClearedOnStateHandlerDestruction) {
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
+ lock_handler_->GetAuthType(user_email_));
+
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+
+ state_handler_.reset();
+
+ EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
+ lock_handler_->GetAuthType(user_email_));
+
+ ASSERT_FALSE(lock_handler_->HasCustomIcon());
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest, StatePreservedWhenScreenUnlocks) {
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
+ lock_handler_->GetAuthType(user_email_));
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+
+ ScreenlockBridge::Get()->SetLockHandler(NULL);
+ lock_handler_.reset(new TestLockHandler(user_email_));
+ EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
+ ScreenlockBridge::Get()->SetLockHandler(lock_handler_.get());
+
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
+ lock_handler_->GetAuthType(user_email_));
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest, StateChangeWhileScreenUnlocked) {
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
+ lock_handler_->GetAuthType(user_email_));
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+
+ ScreenlockBridge::Get()->SetLockHandler(NULL);
+ lock_handler_.reset(new TestLockHandler(user_email_));
+ EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
+
+ ScreenlockBridge::Get()->SetLockHandler(lock_handler_.get());
+
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
+ lock_handler_->GetAuthType(user_email_));
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+ EXPECT_TRUE(lock_handler_->IsCustomIconAnimated());
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest,
+ HardlockEnabledAfterInitialUnlock) {
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+ EXPECT_FALSE(lock_handler_->CustomIconHardlocksOnClick());
+
+ ScreenlockBridge::Get()->SetLockHandler(NULL);
+ lock_handler_.reset(new TestLockHandler(user_email_));
+ ScreenlockBridge::Get()->SetLockHandler(lock_handler_.get());
+
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+ EXPECT_TRUE(lock_handler_->CustomIconHardlocksOnClick());
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest, InactiveStateHidesIcon) {
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+
+ ASSERT_TRUE(lock_handler_->HasCustomIcon());
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_INACTIVE);
+
+ ASSERT_FALSE(lock_handler_->HasCustomIcon());
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest,
+ AuthenticatedStateClearsPreviousAuthValue) {
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_INACTIVE);
+
+ lock_handler_->SetAuthValue(base::ASCIIToUTF16("xxx"));
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+
+ EXPECT_EQ(l10n_util::GetStringUTF16(
+ IDS_EASY_UNLOCK_SCREENLOCK_USER_POD_AUTH_VALUE),
+ lock_handler_->GetAuthValue());
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
+
+ EXPECT_EQ(base::string16(), lock_handler_->GetAuthValue());
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest,
+ ChangingStateDoesNotAffectAuthValueIfAuthTypeDoesNotChange) {
+ lock_handler_->SetAuthValue(base::ASCIIToUTF16("xxx"));
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
+ EXPECT_EQ(base::ASCIIToUTF16("xxx"), lock_handler_->GetAuthValue());
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED);
+ EXPECT_EQ(base::ASCIIToUTF16("xxx"), lock_handler_->GetAuthValue());
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
+ EXPECT_EQ(base::ASCIIToUTF16("xxx"), lock_handler_->GetAuthValue());
+ EXPECT_TRUE(lock_handler_->IsCustomIconAnimated());
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest, StateChangesIgnoredIfHardlocked) {
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+
+ lock_handler_->SetAuthType(
+ user_email_,
+ ScreenlockBridge::LockHandler::FORCE_OFFLINE_PASSWORD,
+ base::string16());
+ lock_handler_->HideUserPodCustomIcon(user_email_);
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
+ EXPECT_FALSE(lock_handler_->HasCustomIcon());
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+ EXPECT_FALSE(lock_handler_->HasCustomIcon());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::FORCE_OFFLINE_PASSWORD,
+ lock_handler_->GetAuthType(user_email_));
+}
+
+TEST_F(EasyUnlockScreenlockStateHandlerTest,
+ LockScreenChangeableAfterHardlockUnlocked) {
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+
+ lock_handler_->SetAuthType(
+ user_email_,
+ ScreenlockBridge::LockHandler::FORCE_OFFLINE_PASSWORD,
+ base::string16());
+ lock_handler_->HideUserPodCustomIcon(user_email_);
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
+ EXPECT_FALSE(lock_handler_->HasCustomIcon());
+
+ ScreenlockBridge::Get()->SetLockHandler(NULL);
+ lock_handler_.reset(new TestLockHandler(user_email_));
+ EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
+ ScreenlockBridge::Get()->SetLockHandler(lock_handler_.get());
+
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_TRUE(lock_handler_->HasCustomIcon());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
+ lock_handler_->GetAuthType(user_email_));
+
+ state_handler_->ChangeState(
+ EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+ EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
+ EXPECT_TRUE(lock_handler_->HasCustomIcon());
+ EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
+ lock_handler_->GetAuthType(user_email_));
+ EXPECT_TRUE(lock_handler_->CustomIconHardlocksOnClick());
+}
+
+} // namespace
« no previous file with comments | « no previous file | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698