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

Side by Side Diff: ash/action_handler/action_handler_state_controller_unittest.cc

Issue 2848813002: Introduce ash mojo interface for lock screen action handlers (Closed)
Patch Set: . Created 3 years, 7 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <memory>
6 #include <vector>
7
8 #include "ash/action_handler/action_handler_state_controller.h"
9 #include "ash/action_handler/action_handler_state_observer.h"
10 #include "ash/shell.h"
11 #include "ash/test/ash_test_base.h"
12 #include "base/macros.h"
13 #include "base/memory/ptr_util.h"
14
15 namespace ash {
16
17 namespace {
18
19 class ScopedTestStateObserver : public ActionHandlerStateObserver {
20 public:
21 explicit ScopedTestStateObserver(ActionHandlerStateController* controller)
22 : state_controller_(controller) {
23 state_controller_->AddObserver(this);
24 }
25
26 ~ScopedTestStateObserver() override {
27 state_controller_->RemoveObserver(this);
28 }
29
30 void OnActionStateChanged(mojom::ActionHandlerAction action,
31 mojom::ActionHandlerState state) override {
32 ASSERT_EQ(mojom::ActionHandlerAction::kNewNote, action);
33
34 observed_states_.push_back(state);
35 }
36
37 const std::vector<mojom::ActionHandlerState>& observed_states() const {
38 return observed_states_;
39 }
40
41 void ClearObservedStates() { observed_states_.clear(); }
42
43 private:
44 ActionHandlerStateController* state_controller_;
45
46 std::vector<mojom::ActionHandlerState> observed_states_;
47
48 DISALLOW_COPY_AND_ASSIGN(ScopedTestStateObserver);
49 };
50
51 class ScopedTestActionHandler : public mojom::ActionHandler {
52 public:
53 explicit ScopedTestActionHandler(ActionHandlerStateController* controller)
54 : state_controller_(controller), binding_(this) {
55 state_controller_->SetActionHandler(binding_.CreateInterfacePtrAndBind());
56 }
57
58 ~ScopedTestActionHandler() override {
59 state_controller_->SetActionHandler(nullptr);
60 }
61
62 void RequestHandleAction(ash::mojom::ActionHandlerAction action) override {
63 ASSERT_EQ(mojom::ActionHandlerAction::kNewNote, action);
64
65 LOG(ERROR) << "HANDLE ACTION";
66 action_requests_count_++;
67 }
68
69 int action_requests_count() const { return action_requests_count_; }
70
71 void reset_action_requests_count() { action_requests_count_ = 0; }
72
73 private:
74 ActionHandlerStateController* state_controller_;
75 mojo::Binding<ash::mojom::ActionHandler> binding_;
76
77 int action_requests_count_ = 0;
78
79 DISALLOW_COPY_AND_ASSIGN(ScopedTestActionHandler);
80 };
81
82 class ActionHandlerStateControllerTest : public test::AshTestBase {
83 public:
84 ActionHandlerStateControllerTest() {}
85 ~ActionHandlerStateControllerTest() override {}
86
87 ActionHandlerStateController* GetController() {
88 return Shell::Get()->action_handler_state_controller();
89 }
90
91 private:
92 DISALLOW_COPY_AND_ASSIGN(ActionHandlerStateControllerTest);
93 };
94
95 } // namespace
96
97 TEST_F(ActionHandlerStateControllerTest, NoActionHandler) {
98 ActionHandlerStateController* controller = GetController();
99 ScopedTestStateObserver observer(controller);
100
101 EXPECT_EQ(mojom::ActionHandlerState::kNotSupported,
102 controller->GetState(mojom::ActionHandlerAction::kNewNote));
103
104 controller->UpdateActionState(mojom::ActionHandlerAction::kNewNote,
105 mojom::ActionHandlerState::kAvailable);
106
107 // The effective state should be |kNotSupported| as long as an action handler
108 // is not set.
109 EXPECT_EQ(mojom::ActionHandlerState::kNotSupported,
110 controller->GetState(mojom::ActionHandlerAction::kNewNote));
111 EXPECT_EQ(0u, observer.observed_states().size());
112
113 // Adding action handler should update the controller state.
114 std::unique_ptr<ScopedTestActionHandler> scoped_action_handler =
115 base::MakeUnique<ScopedTestActionHandler>(controller);
116
117 EXPECT_EQ(mojom::ActionHandlerState::kAvailable,
118 controller->GetState(mojom::ActionHandlerAction::kNewNote));
119 // Effective state changed, so observer should be notified of it.
120 ASSERT_EQ(1u, observer.observed_states().size());
121 EXPECT_EQ(mojom::ActionHandlerState::kAvailable,
122 observer.observed_states()[0]);
123 observer.ClearObservedStates();
124
125 // When action handler is reset, effective state should go back to
126 // |kNotSupported|.
127 scoped_action_handler.reset();
128
129 EXPECT_EQ(mojom::ActionHandlerState::kNotSupported,
130 controller->GetState(mojom::ActionHandlerAction::kNewNote));
131 // Effective state changed, so observer should be notified of it.
132 ASSERT_EQ(1u, observer.observed_states().size());
133 EXPECT_EQ(mojom::ActionHandlerState::kNotSupported,
134 observer.observed_states()[0]);
135 observer.ClearObservedStates();
136 }
137
138 TEST_F(ActionHandlerStateControllerTest, StateChangesWithHandlerSet) {
139 ActionHandlerStateController* controller = GetController();
140
141 ScopedTestStateObserver observer(controller);
142 ScopedTestActionHandler action_handler(controller);
143
144 controller->UpdateActionState(mojom::ActionHandlerAction::kNewNote,
145 mojom::ActionHandlerState::kAvailable);
146 EXPECT_EQ(mojom::ActionHandlerState::kAvailable,
147 controller->GetState(mojom::ActionHandlerAction::kNewNote));
148 ASSERT_EQ(1u, observer.observed_states().size());
149 EXPECT_EQ(mojom::ActionHandlerState::kAvailable,
150 observer.observed_states()[0]);
151 observer.ClearObservedStates();
152
153 controller->UpdateActionState(mojom::ActionHandlerAction::kNewNote,
154 mojom::ActionHandlerState::kAvailable);
155 EXPECT_EQ(mojom::ActionHandlerState::kAvailable,
156 controller->GetState(mojom::ActionHandlerAction::kNewNote));
157 // No real state change, so the observer should not be notified.
158 ASSERT_EQ(0u, observer.observed_states().size());
159
160 controller->UpdateActionState(mojom::ActionHandlerAction::kNewNote,
161 mojom::ActionHandlerState::kActive);
162 EXPECT_EQ(mojom::ActionHandlerState::kActive,
163 controller->GetState(mojom::ActionHandlerAction::kNewNote));
164 ASSERT_EQ(1u, observer.observed_states().size());
165 EXPECT_EQ(mojom::ActionHandlerState::kActive, observer.observed_states()[0]);
166 observer.ClearObservedStates();
167 }
168
169 TEST_F(ActionHandlerStateControllerTest, RequestAction) {
170 ActionHandlerStateController* controller = GetController();
171
172 ScopedTestActionHandler action_handler(controller);
173
174 EXPECT_EQ(0, action_handler.action_requests_count());
175 controller->RequestHandleAction(mojom::ActionHandlerAction::kNewNote);
176 RunAllPendingInMessageLoop();
177 EXPECT_EQ(1, action_handler.action_requests_count());
178 }
179
180 // Tests that there is no crash if handler is not set.
181 TEST_F(ActionHandlerStateControllerTest, RequestActionWithNoHandler) {
182 ActionHandlerStateController* controller = GetController();
183 controller->RequestHandleAction(mojom::ActionHandlerAction::kNewNote);
184 }
185
186 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698