| // Copyright 2017 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 "ash/lock_screen_action/lock_screen_note_launcher.h" |
| |
| #include "ash/shell.h" |
| #include "ash/test/ash_test_base.h" |
| #include "ash/tray_action/test_tray_action_client.h" |
| #include "ash/tray_action/tray_action.h" |
| #include "base/bind.h" |
| |
| namespace ash { |
| |
| namespace { |
| |
| enum class LaunchStatus { kUnknown, kSuccess, kFailure }; |
| |
| void HandleLaunchCallback(LaunchStatus* result, bool success) { |
| *result = success ? LaunchStatus::kSuccess : LaunchStatus::kFailure; |
| } |
| |
| } // namespace |
| |
| using LockScreenNoteLauncherTest = AshTestBase; |
| |
| TEST_F(LockScreenNoteLauncherTest, LaunchSuccess) { |
| TrayAction* tray_action = Shell::Get()->tray_action(); |
| TestTrayActionClient action_client; |
| tray_action->SetClient(action_client.CreateInterfacePtrAndBind(), |
| mojom::TrayActionState::kAvailable); |
| |
| EXPECT_TRUE(LockScreenNoteLauncher::CanAttemptLaunch()); |
| LockScreenNoteLauncher launcher; |
| |
| LaunchStatus launch_status = LaunchStatus::kUnknown; |
| ASSERT_TRUE( |
| launcher.Run(mojom::LockScreenNoteOrigin::kLockScreenButtonTap, |
| base::BindOnce(&HandleLaunchCallback, &launch_status))); |
| |
| // Verify a lock screen action was requested. |
| tray_action->FlushMojoForTesting(); |
| EXPECT_EQ(std::vector<mojom::LockScreenNoteOrigin>( |
| {mojom::LockScreenNoteOrigin::kLockScreenButtonTap}), |
| action_client.note_origins()); |
| |
| // Move note action to launching state, and verify the launch callback is not |
| // run. |
| tray_action->UpdateLockScreenNoteState(mojom::TrayActionState::kLaunching); |
| EXPECT_EQ(LaunchStatus::kUnknown, launch_status); |
| |
| // Move note action to active state and verify that the launch callback is |
| // run. |
| tray_action->UpdateLockScreenNoteState(mojom::TrayActionState::kActive); |
| EXPECT_EQ(LaunchStatus::kSuccess, launch_status); |
| } |
| |
| TEST_F(LockScreenNoteLauncherTest, LaunchFailure) { |
| TrayAction* tray_action = Shell::Get()->tray_action(); |
| TestTrayActionClient action_client; |
| tray_action->SetClient(action_client.CreateInterfacePtrAndBind(), |
| mojom::TrayActionState::kAvailable); |
| |
| EXPECT_TRUE(LockScreenNoteLauncher::CanAttemptLaunch()); |
| LockScreenNoteLauncher launcher; |
| |
| LaunchStatus launch_status = LaunchStatus::kUnknown; |
| ASSERT_TRUE( |
| launcher.Run(mojom::LockScreenNoteOrigin::kLockScreenButtonTap, |
| base::BindOnce(&HandleLaunchCallback, &launch_status))); |
| |
| // Verify a lock screen action was requested. |
| tray_action->FlushMojoForTesting(); |
| EXPECT_EQ(std::vector<mojom::LockScreenNoteOrigin>( |
| {mojom::LockScreenNoteOrigin::kLockScreenButtonTap}), |
| action_client.note_origins()); |
| |
| // Move note action to launching state, and verify the launch callback is not |
| // run. |
| tray_action->UpdateLockScreenNoteState(mojom::TrayActionState::kLaunching); |
| EXPECT_EQ(LaunchStatus::kUnknown, launch_status); |
| |
| // Move note action to active state and verify that the launch callback is |
| // run. |
| tray_action->UpdateLockScreenNoteState(mojom::TrayActionState::kAvailable); |
| EXPECT_EQ(LaunchStatus::kFailure, launch_status); |
| } |
| |
| TEST_F(LockScreenNoteLauncherTest, LaunchNotRequestedInUnavailableStates) { |
| TrayAction* tray_action = Shell::Get()->tray_action(); |
| TestTrayActionClient action_client; |
| tray_action->SetClient(action_client.CreateInterfacePtrAndBind(), |
| mojom::TrayActionState::kLaunching); |
| |
| EXPECT_FALSE(LockScreenNoteLauncher::CanAttemptLaunch()); |
| |
| LockScreenNoteLauncher launcher; |
| |
| // Launch should not be requested if a lock screen note action is already |
| // being launched. |
| LaunchStatus launch_status = LaunchStatus::kUnknown; |
| ASSERT_FALSE( |
| launcher.Run(mojom::LockScreenNoteOrigin::kLockScreenButtonTap, |
| base::BindOnce(&HandleLaunchCallback, &launch_status))); |
| |
| // Verify a lock screen action was not requested. |
| tray_action->FlushMojoForTesting(); |
| EXPECT_TRUE(action_client.note_origins().empty()); |
| |
| // Move note action to active state and verify that the launch callback is |
| // not run. |
| tray_action->UpdateLockScreenNoteState(mojom::TrayActionState::kActive); |
| EXPECT_EQ(LaunchStatus::kUnknown, launch_status); |
| |
| // Launch request should fail if lock screen note is in active state. |
| EXPECT_FALSE(LockScreenNoteLauncher::CanAttemptLaunch()); |
| ASSERT_FALSE( |
| launcher.Run(mojom::LockScreenNoteOrigin::kLockScreenButtonTap, |
| base::BindOnce(&HandleLaunchCallback, &launch_status))); |
| tray_action->FlushMojoForTesting(); |
| EXPECT_TRUE(action_client.note_origins().empty()); |
| |
| // Move note action to not available state and verify that the launch callback |
| // is not run. |
| tray_action->UpdateLockScreenNoteState(mojom::TrayActionState::kNotAvailable); |
| EXPECT_EQ(LaunchStatus::kUnknown, launch_status); |
| |
| // Launch request should fail if lock screen note is in unavailable state. |
| EXPECT_FALSE(LockScreenNoteLauncher::CanAttemptLaunch()); |
| ASSERT_FALSE( |
| launcher.Run(mojom::LockScreenNoteOrigin::kLockScreenButtonTap, |
| base::BindOnce(&HandleLaunchCallback, &launch_status))); |
| tray_action->FlushMojoForTesting(); |
| EXPECT_TRUE(action_client.note_origins().empty()); |
| |
| // Move note action to available state and verify that the launch callback is |
| // not run. |
| tray_action->UpdateLockScreenNoteState(mojom::TrayActionState::kAvailable); |
| EXPECT_EQ(LaunchStatus::kUnknown, launch_status); |
| } |
| |
| } // namespace ash |