| Index: chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
|
| diff --git a/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc b/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
|
| index 9ff4e9758b1a57a66f46686513365e0ace251a52..b9f7217e59b19fe76e7d5ca912767fec21f39bdc 100644
|
| --- a/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
|
| +++ b/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
|
| @@ -5,14 +5,22 @@
|
| #include "chrome/browser/chromeos/lock_screen_apps/state_controller.h"
|
|
|
| #include <memory>
|
| +#include <string>
|
| #include <utility>
|
| #include <vector>
|
|
|
| #include "ash/public/interfaces/tray_action.mojom.h"
|
| +#include "base/files/file_path.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "base/run_loop.h"
|
| #include "base/test/scoped_command_line.h"
|
| +#include "chrome/browser/chromeos/lock_screen_apps/app_manager.h"
|
| #include "chrome/browser/chromeos/lock_screen_apps/state_observer.h"
|
| +#include "chrome/common/chrome_constants.h"
|
| +#include "chrome/test/base/testing_browser_process.h"
|
| +#include "chrome/test/base/testing_profile.h"
|
| +#include "chrome/test/base/testing_profile_manager.h"
|
| +#include "components/session_manager/core/session_manager.h"
|
| #include "content/public/test/test_browser_thread_bundle.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -20,6 +28,100 @@ using ash::mojom::TrayActionState;
|
|
|
| namespace {
|
|
|
| +class TestAppManager : public lock_screen_apps::AppManager {
|
| + public:
|
| + enum class State {
|
| + kNotInitialized,
|
| + kStarted,
|
| + kStopped,
|
| + };
|
| +
|
| + TestAppManager(Profile* expected_primary_profile,
|
| + Profile* expected_lock_screen_profile)
|
| + : expected_primary_profile_(expected_primary_profile),
|
| + expected_lock_screen_profile_(expected_lock_screen_profile) {}
|
| +
|
| + ~TestAppManager() override = default;
|
| +
|
| + void Initialize(Profile* primary_profile,
|
| + Profile* lock_screen_profile) override {
|
| + ASSERT_EQ(State::kNotInitialized, state_);
|
| + ASSERT_EQ(expected_primary_profile_, primary_profile);
|
| + ASSERT_EQ(expected_lock_screen_profile_, lock_screen_profile);
|
| +
|
| + state_ = State::kStopped;
|
| + }
|
| +
|
| + void Start(const base::Closure& change_callback) override {
|
| + ASSERT_TRUE(change_callback_.is_null());
|
| + ASSERT_FALSE(change_callback.is_null());
|
| + change_callback_ = change_callback;
|
| + state_ = State::kStarted;
|
| + }
|
| +
|
| + void Stop() override {
|
| + change_callback_.Reset();
|
| + state_ = State::kStopped;
|
| + }
|
| +
|
| + bool LaunchNoteTaking() override {
|
| + EXPECT_EQ(State::kStarted, state_);
|
| + ++launch_count_;
|
| + return app_launchable_;
|
| + }
|
| +
|
| + bool IsNoteTakingAppAvailable() const override {
|
| + return state_ == State::kStarted && !app_id_.empty();
|
| + }
|
| +
|
| + std::string GetNoteTakingAppId() const override {
|
| + if (state_ != State::kStarted)
|
| + return std::string();
|
| + return app_id_;
|
| + }
|
| +
|
| + void SetInitialAppState(const std::string& app_id, bool app_launchable) {
|
| + ASSERT_NE(State::kStarted, state_);
|
| +
|
| + app_launchable_ = app_launchable;
|
| + app_id_ = app_id;
|
| + }
|
| +
|
| + void UpdateApp(const std::string& app_id, bool app_launchable) {
|
| + ASSERT_EQ(State::kStarted, state_);
|
| +
|
| + app_launchable_ = app_launchable;
|
| + if (app_id == app_id_)
|
| + return;
|
| + app_id_ = app_id;
|
| +
|
| + change_callback_.Run();
|
| + }
|
| +
|
| + State state() const { return state_; }
|
| +
|
| + int launch_count() const { return launch_count_; }
|
| +
|
| + private:
|
| + const Profile* const expected_primary_profile_;
|
| + const Profile* const expected_lock_screen_profile_;
|
| +
|
| + base::Closure change_callback_;
|
| +
|
| + State state_ = State::kNotInitialized;
|
| +
|
| + // Number of requested app launches.
|
| + int launch_count_ = 0;
|
| +
|
| + // Information about the test app:
|
| + // The app ID.
|
| + std::string app_id_;
|
| + // Whether app launch should succeed.
|
| + bool app_launchable_ = false;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestAppManager);
|
| +};
|
| +
|
| class TestStateObserver : public lock_screen_apps::StateObserver {
|
| public:
|
| TestStateObserver() = default;
|
| @@ -29,7 +131,7 @@ class TestStateObserver : public lock_screen_apps::StateObserver {
|
| observed_states_.push_back(state);
|
| }
|
|
|
| - const std::vector<TrayActionState> observed_states() const {
|
| + const std::vector<TrayActionState>& observed_states() const {
|
| return observed_states_;
|
| }
|
|
|
| @@ -102,7 +204,8 @@ class LockScreenAppStateNotSupportedTest : public testing::Test {
|
|
|
| class LockScreenAppStateTest : public testing::Test {
|
| public:
|
| - LockScreenAppStateTest() = default;
|
| + LockScreenAppStateTest()
|
| + : profile_manager_(TestingBrowserProcess::GetGlobal()) {}
|
| ~LockScreenAppStateTest() override = default;
|
|
|
| void SetUp() override {
|
| @@ -110,6 +213,12 @@ class LockScreenAppStateTest : public testing::Test {
|
| command_line_->GetProcessCommandLine()->InitFromArgv(
|
| {"", "--enable-lock-screen-apps"});
|
|
|
| + ASSERT_TRUE(profile_manager_.SetUp());
|
| +
|
| + session_manager_ = base::MakeUnique<session_manager::SessionManager>();
|
| + session_manager_->SetSessionState(
|
| + session_manager::SessionState::LOGIN_PRIMARY);
|
| +
|
| ASSERT_TRUE(lock_screen_apps::StateController::IsEnabled());
|
|
|
| state_controller_ = base::MakeUnique<lock_screen_apps::StateController>();
|
| @@ -119,11 +228,51 @@ class LockScreenAppStateTest : public testing::Test {
|
| state_controller_->FlushTrayActionForTesting();
|
|
|
| state_controller_->AddObserver(&observer_);
|
| +
|
| + // Create fake sign-in profile.
|
| + TestingProfile::Builder builder;
|
| + builder.SetPath(
|
| + profile_manager_.profiles_dir().AppendASCII(chrome::kInitialProfile));
|
| + TestingProfile* signin_profile = builder.BuildIncognito(
|
| + profile_manager_.CreateTestingProfile(chrome::kInitialProfile));
|
| +
|
| + std::unique_ptr<TestAppManager> app_manager =
|
| + base::MakeUnique<TestAppManager>(&profile_,
|
| + signin_profile->GetOriginalProfile());
|
| + app_manager_ = app_manager.get();
|
| + state_controller_->SetAppManagerForTesting(std::move(app_manager));
|
| }
|
|
|
| void TearDown() override {
|
| state_controller_->RemoveObserver(&observer_);
|
| state_controller_.reset();
|
| + session_manager_.reset();
|
| + app_manager_ = nullptr;
|
| + }
|
| +
|
| + // Helper method to move state controller to available state.
|
| + // Should be called at the begining of tests, at most once.
|
| + bool EnableNoteTakingApp(bool enable_app_launch) {
|
| + app_manager_->SetInitialAppState("test_app_id", enable_app_launch);
|
| + state_controller_->SetPrimaryProfile(&profile_);
|
| + session_manager_->SetSessionState(session_manager::SessionState::LOCKED);
|
| + if (app_manager_->state() != TestAppManager::State::kStarted) {
|
| + ADD_FAILURE() << "Lock app manager Start not invoked.";
|
| + return false;
|
| + }
|
| + state_controller_->FlushTrayActionForTesting();
|
| +
|
| + observer_.ClearObservedStates();
|
| + tray_action_.ClearObservedStates();
|
| +
|
| + return state_controller_->GetLockScreenNoteState() ==
|
| + TrayActionState::kAvailable;
|
| + }
|
| +
|
| + TestingProfile* profile() { return &profile_; }
|
| +
|
| + session_manager::SessionManager* session_manager() {
|
| + return session_manager_.get();
|
| }
|
|
|
| TestStateObserver* observer() { return &observer_; }
|
| @@ -134,13 +283,21 @@ class LockScreenAppStateTest : public testing::Test {
|
| return state_controller_.get();
|
| }
|
|
|
| + TestAppManager* app_manager() { return app_manager_; }
|
| +
|
| private:
|
| std::unique_ptr<base::test::ScopedCommandLine> command_line_;
|
| content::TestBrowserThreadBundle threads_;
|
| + TestingProfileManager profile_manager_;
|
| + TestingProfile profile_;
|
| +
|
| + std::unique_ptr<session_manager::SessionManager> session_manager_;
|
|
|
| std::unique_ptr<lock_screen_apps::StateController> state_controller_;
|
| +
|
| TestStateObserver observer_;
|
| TestTrayAction tray_action_;
|
| + TestAppManager* app_manager_ = nullptr;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(LockScreenAppStateTest);
|
| };
|
| @@ -155,6 +312,7 @@ TEST_F(LockScreenAppStateTest, InitialState) {
|
| EXPECT_EQ(TrayActionState::kNotAvailable,
|
| state_controller()->GetLockScreenNoteState());
|
|
|
| + EXPECT_EQ(TestAppManager::State::kNotInitialized, app_manager()->state());
|
| state_controller()->MoveToBackground();
|
|
|
| EXPECT_EQ(TrayActionState::kNotAvailable,
|
| @@ -164,7 +322,205 @@ TEST_F(LockScreenAppStateTest, InitialState) {
|
| EXPECT_EQ(0u, tray_action()->observed_states().size());
|
| }
|
|
|
| +TEST_F(LockScreenAppStateTest, SetPrimaryProfile) {
|
| + EXPECT_EQ(TestAppManager::State::kNotInitialized, app_manager()->state());
|
| + state_controller()->SetPrimaryProfile(profile());
|
| +
|
| + EXPECT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
| + EXPECT_EQ(TrayActionState::kNotAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + EXPECT_EQ(0u, observer()->observed_states().size());
|
| +}
|
| +
|
| +TEST_F(LockScreenAppStateTest, SetPrimaryProfileWhenSessionLocked) {
|
| + session_manager()->SetSessionState(session_manager::SessionState::LOCKED);
|
| + EXPECT_EQ(TrayActionState::kNotAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| +
|
| + EXPECT_EQ(TestAppManager::State::kNotInitialized, app_manager()->state());
|
| +
|
| + app_manager()->SetInitialAppState("app_id", true);
|
| + state_controller()->SetPrimaryProfile(profile());
|
| +
|
| + ASSERT_EQ(TestAppManager::State::kStarted, app_manager()->state());
|
| +
|
| + EXPECT_EQ(TrayActionState::kAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| +
|
| + state_controller()->FlushTrayActionForTesting();
|
| + ASSERT_EQ(1u, observer()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, observer()->observed_states()[0]);
|
| + ASSERT_EQ(1u, tray_action()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, tray_action()->observed_states()[0]);
|
| +}
|
| +
|
| +TEST_F(LockScreenAppStateTest, SessionLock) {
|
| + app_manager()->SetInitialAppState("app_id", true);
|
| + state_controller()->SetPrimaryProfile(profile());
|
| + ASSERT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
| +
|
| + session_manager()->SetSessionState(session_manager::SessionState::LOCKED);
|
| +
|
| + ASSERT_EQ(TestAppManager::State::kStarted, app_manager()->state());
|
| +
|
| + EXPECT_EQ(TrayActionState::kAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + state_controller()->FlushTrayActionForTesting();
|
| + ASSERT_EQ(1u, observer()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, observer()->observed_states()[0]);
|
| + observer()->ClearObservedStates();
|
| + ASSERT_EQ(1u, tray_action()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, tray_action()->observed_states()[0]);
|
| + tray_action()->ClearObservedStates();
|
| +
|
| + // When the session is unlocked again, app manager is stopped, and tray action
|
| + // disabled again.
|
| + session_manager()->SetSessionState(session_manager::SessionState::ACTIVE);
|
| +
|
| + EXPECT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
| +
|
| + EXPECT_EQ(TrayActionState::kNotAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + state_controller()->FlushTrayActionForTesting();
|
| + ASSERT_EQ(1u, observer()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kNotAvailable, observer()->observed_states()[0]);
|
| + observer()->ClearObservedStates();
|
| + ASSERT_EQ(1u, tray_action()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kNotAvailable,
|
| + tray_action()->observed_states()[0]);
|
| + tray_action()->ClearObservedStates();
|
| +
|
| + // Test that subsequent session lock works as expected.
|
| + session_manager()->SetSessionState(session_manager::SessionState::LOCKED);
|
| + ASSERT_EQ(TestAppManager::State::kStarted, app_manager()->state());
|
| +
|
| + EXPECT_EQ(TrayActionState::kAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + state_controller()->FlushTrayActionForTesting();
|
| + ASSERT_EQ(1u, observer()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, observer()->observed_states()[0]);
|
| + ASSERT_EQ(1u, tray_action()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, tray_action()->observed_states()[0]);
|
| +}
|
| +
|
| +TEST_F(LockScreenAppStateTest, SessionUnlockedWhileStartingAppManager) {
|
| + state_controller()->SetPrimaryProfile(profile());
|
| + ASSERT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
| +
|
| + session_manager()->SetSessionState(session_manager::SessionState::LOCKED);
|
| +
|
| + ASSERT_EQ(TestAppManager::State::kStarted, app_manager()->state());
|
| +
|
| + session_manager()->SetSessionState(session_manager::SessionState::ACTIVE);
|
| + ASSERT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
| +
|
| + EXPECT_EQ(TrayActionState::kNotAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + state_controller()->FlushTrayActionForTesting();
|
| + EXPECT_EQ(0u, observer()->observed_states().size());
|
| + EXPECT_EQ(0u, tray_action()->observed_states().size());
|
| +
|
| + // Test that subsequent session lock works as expected.
|
| + session_manager()->SetSessionState(session_manager::SessionState::LOCKED);
|
| +
|
| + ASSERT_EQ(TestAppManager::State::kStarted, app_manager()->state());
|
| + app_manager()->UpdateApp("app_id", true);
|
| +
|
| + EXPECT_EQ(TrayActionState::kAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + state_controller()->FlushTrayActionForTesting();
|
| + ASSERT_EQ(1u, observer()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, observer()->observed_states()[0]);
|
| + ASSERT_EQ(1u, tray_action()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, tray_action()->observed_states()[0]);
|
| +}
|
| +
|
| +TEST_F(LockScreenAppStateTest, AppManagerNoApp) {
|
| + state_controller()->SetPrimaryProfile(profile());
|
| + ASSERT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
| +
|
| + session_manager()->SetSessionState(session_manager::SessionState::LOCKED);
|
| +
|
| + EXPECT_EQ(TestAppManager::State::kStarted, app_manager()->state());
|
| +
|
| + EXPECT_EQ(TrayActionState::kNotAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + state_controller()->FlushTrayActionForTesting();
|
| + EXPECT_EQ(0u, observer()->observed_states().size());
|
| + EXPECT_EQ(0u, tray_action()->observed_states().size());
|
| +
|
| + tray_action()->SendNewNoteRequest();
|
| +
|
| + EXPECT_EQ(TrayActionState::kNotAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + state_controller()->FlushTrayActionForTesting();
|
| + EXPECT_EQ(0u, observer()->observed_states().size());
|
| + EXPECT_EQ(0u, tray_action()->observed_states().size());
|
| +
|
| + // App manager should be started on next session lock.
|
| + session_manager()->SetSessionState(session_manager::SessionState::ACTIVE);
|
| + ASSERT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
| + app_manager()->SetInitialAppState("app_id", false);
|
| +
|
| + session_manager()->SetSessionState(session_manager::SessionState::LOCKED);
|
| +
|
| + EXPECT_EQ(TrayActionState::kAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + state_controller()->FlushTrayActionForTesting();
|
| + ASSERT_EQ(1u, observer()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, observer()->observed_states()[0]);
|
| + ASSERT_EQ(1u, tray_action()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, tray_action()->observed_states()[0]);
|
| +}
|
| +
|
| +TEST_F(LockScreenAppStateTest, AppAvailabilityChanges) {
|
| + state_controller()->SetPrimaryProfile(profile());
|
| + ASSERT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
| +
|
| + app_manager()->SetInitialAppState("app_id", false);
|
| + session_manager()->SetSessionState(session_manager::SessionState::LOCKED);
|
| +
|
| + EXPECT_EQ(TestAppManager::State::kStarted, app_manager()->state());
|
| +
|
| + EXPECT_EQ(TrayActionState::kAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + state_controller()->FlushTrayActionForTesting();
|
| + ASSERT_EQ(1u, observer()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, observer()->observed_states()[0]);
|
| + observer()->ClearObservedStates();
|
| + ASSERT_EQ(1u, tray_action()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, tray_action()->observed_states()[0]);
|
| + tray_action()->ClearObservedStates();
|
| +
|
| + app_manager()->UpdateApp("", false);
|
| +
|
| + EXPECT_EQ(TrayActionState::kNotAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + state_controller()->FlushTrayActionForTesting();
|
| + ASSERT_EQ(1u, observer()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kNotAvailable, observer()->observed_states()[0]);
|
| + observer()->ClearObservedStates();
|
| + ASSERT_EQ(1u, tray_action()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kNotAvailable,
|
| + tray_action()->observed_states()[0]);
|
| + tray_action()->ClearObservedStates();
|
| +
|
| + app_manager()->UpdateApp("app_id_1", true);
|
| +
|
| + EXPECT_EQ(TrayActionState::kAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + state_controller()->FlushTrayActionForTesting();
|
| + ASSERT_EQ(1u, observer()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, observer()->observed_states()[0]);
|
| + observer()->ClearObservedStates();
|
| + ASSERT_EQ(1u, tray_action()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kAvailable, tray_action()->observed_states()[0]);
|
| + tray_action()->ClearObservedStates();
|
| +}
|
| +
|
| TEST_F(LockScreenAppStateTest, MoveToBackgroundFromActive) {
|
| + ASSERT_TRUE(EnableNoteTakingApp(true /* enable_app_launch */));
|
| +
|
| state_controller()->SetLockScreenNoteStateForTesting(
|
| TrayActionState::kActive);
|
|
|
| @@ -181,6 +537,8 @@ TEST_F(LockScreenAppStateTest, MoveToBackgroundFromActive) {
|
| }
|
|
|
| TEST_F(LockScreenAppStateTest, MoveToForeground) {
|
| + ASSERT_TRUE(EnableNoteTakingApp(true /* enable_app_launch */));
|
| +
|
| state_controller()->SetLockScreenNoteStateForTesting(
|
| TrayActionState::kBackground);
|
|
|
| @@ -197,8 +555,7 @@ TEST_F(LockScreenAppStateTest, MoveToForeground) {
|
| }
|
|
|
| TEST_F(LockScreenAppStateTest, MoveToForegroundFromNonBackgroundState) {
|
| - state_controller()->SetLockScreenNoteStateForTesting(
|
| - TrayActionState::kAvailable);
|
| + ASSERT_TRUE(EnableNoteTakingApp(true /* enable_app_launch */));
|
|
|
| state_controller()->MoveToForeground();
|
| state_controller()->FlushTrayActionForTesting();
|
| @@ -222,26 +579,60 @@ TEST_F(LockScreenAppStateTest, HandleActionWhenNotAvaiable) {
|
| }
|
|
|
| TEST_F(LockScreenAppStateTest, HandleAction) {
|
| - state_controller()->SetLockScreenNoteStateForTesting(
|
| - TrayActionState::kAvailable);
|
| + ASSERT_TRUE(EnableNoteTakingApp(true /* enable_app_launch */));
|
|
|
| tray_action()->SendNewNoteRequest();
|
| state_controller()->FlushTrayActionForTesting();
|
|
|
| - EXPECT_EQ(TrayActionState::kActive,
|
| + EXPECT_EQ(TrayActionState::kLaunching,
|
| state_controller()->GetLockScreenNoteState());
|
| ASSERT_EQ(1u, observer()->observed_states().size());
|
| - EXPECT_EQ(TrayActionState::kActive, observer()->observed_states()[0]);
|
| + EXPECT_EQ(TrayActionState::kLaunching, observer()->observed_states()[0]);
|
| observer()->ClearObservedStates();
|
| ASSERT_EQ(1u, tray_action()->observed_states().size());
|
| - EXPECT_EQ(TrayActionState::kActive, tray_action()->observed_states()[0]);
|
| + EXPECT_EQ(TrayActionState::kLaunching, tray_action()->observed_states()[0]);
|
| tray_action()->ClearObservedStates();
|
|
|
| + EXPECT_EQ(1, app_manager()->launch_count());
|
| +
|
| tray_action()->SendNewNoteRequest();
|
| state_controller()->FlushTrayActionForTesting();
|
|
|
| // There should be no state change - the state_controller was already in
|
| - // active state when the request was received.
|
| + // launching state when the request was received.
|
| EXPECT_EQ(0u, observer()->observed_states().size());
|
| EXPECT_EQ(0u, tray_action()->observed_states().size());
|
| + EXPECT_EQ(1, app_manager()->launch_count());
|
| +}
|
| +
|
| +TEST_F(LockScreenAppStateTest, HandleActionWithLaunchFailure) {
|
| + ASSERT_TRUE(EnableNoteTakingApp(false /* enable_app_launch */));
|
| +
|
| + tray_action()->SendNewNoteRequest();
|
| + state_controller()->FlushTrayActionForTesting();
|
| +
|
| + EXPECT_EQ(TrayActionState::kAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| + ASSERT_EQ(2u, observer()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kLaunching, observer()->observed_states()[0]);
|
| + EXPECT_EQ(TrayActionState::kAvailable, observer()->observed_states()[1]);
|
| + observer()->ClearObservedStates();
|
| + ASSERT_EQ(2u, tray_action()->observed_states().size());
|
| + EXPECT_EQ(TrayActionState::kLaunching, tray_action()->observed_states()[0]);
|
| + EXPECT_EQ(TrayActionState::kAvailable, tray_action()->observed_states()[1]);
|
| + tray_action()->ClearObservedStates();
|
| +
|
| + EXPECT_EQ(1, app_manager()->launch_count());
|
| +
|
| + tray_action()->SendNewNoteRequest();
|
| + state_controller()->FlushTrayActionForTesting();
|
| +
|
| + EXPECT_EQ(TrayActionState::kAvailable,
|
| + state_controller()->GetLockScreenNoteState());
|
| +
|
| + // There should be no state change - the state_controller was already in
|
| + // launching state when the request was received.
|
| + EXPECT_EQ(2u, observer()->observed_states().size());
|
| + EXPECT_EQ(2u, tray_action()->observed_states().size());
|
| + EXPECT_EQ(2, app_manager()->launch_count());
|
| }
|
|
|