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

Side by Side Diff: ash/tray_action/tray_action_unittest.cc

Issue 2870473002: Revert of 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
« no previous file with comments | « ash/tray_action/tray_action_observer.h ('k') | chrome/browser/chromeos/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "ash/tray_action/tray_action.h"
6
7 #include <memory>
8 #include <vector>
9
10 #include "ash/shell.h"
11 #include "ash/test/ash_test_base.h"
12 #include "ash/tray_action/tray_action_observer.h"
13 #include "base/macros.h"
14 #include "base/memory/ptr_util.h"
15 #include "base/run_loop.h"
16
17 using ash::mojom::TrayActionState;
18
19 namespace ash {
20
21 namespace {
22
23 class ScopedTestStateObserver : public TrayActionObserver {
24 public:
25 explicit ScopedTestStateObserver(TrayAction* tray_action)
26 : tray_action_(tray_action) {
27 tray_action_->AddObserver(this);
28 }
29
30 ~ScopedTestStateObserver() override { tray_action_->RemoveObserver(this); }
31
32 // TrayActionObserver:
33 void OnLockScreenNoteStateChanged(TrayActionState state) override {
34 observed_states_.push_back(state);
35 }
36
37 const std::vector<TrayActionState>& observed_states() const {
38 return observed_states_;
39 }
40
41 void ClearObservedStates() { observed_states_.clear(); }
42
43 private:
44 TrayAction* tray_action_;
45
46 std::vector<TrayActionState> observed_states_;
47
48 DISALLOW_COPY_AND_ASSIGN(ScopedTestStateObserver);
49 };
50
51 class TestTrayActionClient : public mojom::TrayActionClient {
52 public:
53 TestTrayActionClient() : binding_(this) {}
54
55 ~TestTrayActionClient() override = default;
56
57 mojom::TrayActionClientPtr CreateInterfacePtrAndBind() {
58 return binding_.CreateInterfacePtrAndBind();
59 }
60
61 // mojom::TrayActionClient:
62 void RequestNewLockScreenNote() override { action_requests_count_++; }
63
64 int action_requests_count() const { return action_requests_count_; }
65
66 private:
67 mojo::Binding<ash::mojom::TrayActionClient> binding_;
68
69 int action_requests_count_ = 0;
70
71 DISALLOW_COPY_AND_ASSIGN(TestTrayActionClient);
72 };
73
74 using TrayActionTest = test::AshTestBase;
75
76 } // namespace
77
78 TEST_F(TrayActionTest, NoTrayActionClient) {
79 TrayAction* tray_action = Shell::Get()->tray_action();
80 ScopedTestStateObserver observer(tray_action);
81
82 EXPECT_EQ(TrayActionState::kNotAvailable,
83 tray_action->GetLockScreenNoteState());
84
85 tray_action->UpdateLockScreenNoteState(TrayActionState::kAvailable);
86
87 // The effective state should be |kNotAvailable| as long as an action handler
88 // is not set.
89 EXPECT_EQ(TrayActionState::kNotAvailable,
90 tray_action->GetLockScreenNoteState());
91 EXPECT_EQ(0u, observer.observed_states().size());
92
93 std::unique_ptr<TestTrayActionClient> action_client =
94 base::MakeUnique<TestTrayActionClient>();
95 tray_action->SetClient(action_client->CreateInterfacePtrAndBind(),
96 TrayActionState::kLaunching);
97
98 EXPECT_EQ(TrayActionState::kLaunching, tray_action->GetLockScreenNoteState());
99 ASSERT_EQ(1u, observer.observed_states().size());
100 EXPECT_EQ(TrayActionState::kLaunching, observer.observed_states()[0]);
101 observer.ClearObservedStates();
102
103 action_client.reset();
104 base::RunLoop().RunUntilIdle();
105
106 EXPECT_EQ(TrayActionState::kNotAvailable,
107 tray_action->GetLockScreenNoteState());
108 EXPECT_EQ(1u, observer.observed_states().size());
109 EXPECT_EQ(TrayActionState::kNotAvailable, observer.observed_states()[0]);
110 }
111
112 TEST_F(TrayActionTest, SettingInitialState) {
113 TrayAction* tray_action = Shell::Get()->tray_action();
114
115 ScopedTestStateObserver observer(tray_action);
116 TestTrayActionClient action_client;
117 tray_action->SetClient(action_client.CreateInterfacePtrAndBind(),
118 TrayActionState::kAvailable);
119
120 EXPECT_EQ(TrayActionState::kAvailable, tray_action->GetLockScreenNoteState());
121 ASSERT_EQ(1u, observer.observed_states().size());
122 EXPECT_EQ(TrayActionState::kAvailable, observer.observed_states()[0]);
123 }
124
125 TEST_F(TrayActionTest, StateChangeNotificationOnConnectionLoss) {
126 TrayAction* tray_action = Shell::Get()->tray_action();
127
128 ScopedTestStateObserver observer(tray_action);
129 std::unique_ptr<TestTrayActionClient> action_client(
130 new TestTrayActionClient());
131 tray_action->SetClient(action_client->CreateInterfacePtrAndBind(),
132 TrayActionState::kAvailable);
133
134 EXPECT_EQ(TrayActionState::kAvailable, tray_action->GetLockScreenNoteState());
135 ASSERT_EQ(1u, observer.observed_states().size());
136 EXPECT_EQ(TrayActionState::kAvailable, observer.observed_states()[0]);
137 observer.ClearObservedStates();
138
139 action_client.reset();
140 base::RunLoop().RunUntilIdle();
141
142 EXPECT_EQ(TrayActionState::kNotAvailable,
143 tray_action->GetLockScreenNoteState());
144 ASSERT_EQ(1u, observer.observed_states().size());
145 EXPECT_EQ(TrayActionState::kNotAvailable, observer.observed_states()[0]);
146 }
147
148 TEST_F(TrayActionTest, NormalStateProgression) {
149 TrayAction* tray_action = Shell::Get()->tray_action();
150
151 ScopedTestStateObserver observer(tray_action);
152 TestTrayActionClient action_client;
153 tray_action->SetClient(action_client.CreateInterfacePtrAndBind(),
154 TrayActionState::kNotAvailable);
155
156 tray_action->UpdateLockScreenNoteState(TrayActionState::kAvailable);
157 EXPECT_EQ(TrayActionState::kAvailable, tray_action->GetLockScreenNoteState());
158 ASSERT_EQ(1u, observer.observed_states().size());
159 EXPECT_EQ(TrayActionState::kAvailable, observer.observed_states()[0]);
160 observer.ClearObservedStates();
161
162 tray_action->UpdateLockScreenNoteState(TrayActionState::kLaunching);
163 EXPECT_EQ(TrayActionState::kLaunching, tray_action->GetLockScreenNoteState());
164 ASSERT_EQ(1u, observer.observed_states().size());
165 EXPECT_EQ(TrayActionState::kLaunching, observer.observed_states()[0]);
166 observer.ClearObservedStates();
167
168 tray_action->UpdateLockScreenNoteState(TrayActionState::kBackground);
169 EXPECT_EQ(TrayActionState::kBackground,
170 tray_action->GetLockScreenNoteState());
171 ASSERT_EQ(1u, observer.observed_states().size());
172 EXPECT_EQ(TrayActionState::kBackground, observer.observed_states()[0]);
173 observer.ClearObservedStates();
174
175 tray_action->UpdateLockScreenNoteState(TrayActionState::kNotAvailable);
176 EXPECT_EQ(TrayActionState::kNotAvailable,
177 tray_action->GetLockScreenNoteState());
178 ASSERT_EQ(1u, observer.observed_states().size());
179 EXPECT_EQ(TrayActionState::kNotAvailable, observer.observed_states()[0]);
180 }
181
182 TEST_F(TrayActionTest, ObserversNotNotifiedOnDuplicateState) {
183 TrayAction* tray_action = Shell::Get()->tray_action();
184
185 ScopedTestStateObserver observer(tray_action);
186 TestTrayActionClient action_client;
187 tray_action->SetClient(action_client.CreateInterfacePtrAndBind(),
188 TrayActionState::kNotAvailable);
189
190 tray_action->UpdateLockScreenNoteState(TrayActionState::kAvailable);
191 EXPECT_EQ(TrayActionState::kAvailable, tray_action->GetLockScreenNoteState());
192 ASSERT_EQ(1u, observer.observed_states().size());
193 EXPECT_EQ(TrayActionState::kAvailable, observer.observed_states()[0]);
194 observer.ClearObservedStates();
195
196 tray_action->UpdateLockScreenNoteState(TrayActionState::kAvailable);
197 EXPECT_EQ(TrayActionState::kAvailable, tray_action->GetLockScreenNoteState());
198 ASSERT_EQ(0u, observer.observed_states().size());
199 }
200
201 TEST_F(TrayActionTest, RequestAction) {
202 TrayAction* tray_action = Shell::Get()->tray_action();
203
204 TestTrayActionClient action_client;
205 tray_action->SetClient(action_client.CreateInterfacePtrAndBind(),
206 TrayActionState::kNotAvailable);
207
208 EXPECT_EQ(0, action_client.action_requests_count());
209 tray_action->RequestNewLockScreenNote();
210 base::RunLoop().RunUntilIdle();
211 EXPECT_EQ(0, action_client.action_requests_count());
212
213 tray_action->UpdateLockScreenNoteState(TrayActionState::kAvailable);
214 tray_action->RequestNewLockScreenNote();
215 base::RunLoop().RunUntilIdle();
216 EXPECT_EQ(1, action_client.action_requests_count());
217 }
218
219 // Tests that there is no crash if handler is not set.
220 TEST_F(TrayActionTest, RequestActionWithNoHandler) {
221 TrayAction* tray_action = Shell::Get()->tray_action();
222 tray_action->RequestNewLockScreenNote();
223 base::RunLoop().RunUntilIdle();
224 }
225
226 } // namespace ash
OLDNEW
« no previous file with comments | « ash/tray_action/tray_action_observer.h ('k') | chrome/browser/chromeos/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698