| 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
|
|
|