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

Side by Side Diff: ash/shelf/shelf_button_pressed_metric_tracker_unittest.cc

Issue 2187953002: mash: Migrate ShelfButton* to wm common types (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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 2015 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/shelf/shelf_button_pressed_metric_tracker.h"
6
7 #include <utility>
8
9 #include "ash/shelf/shelf.h"
10 #include "ash/test/ash_test_base.h"
11 #include "ash/test/shelf_button_pressed_metric_tracker_test_api.h"
12 #include "ash/test/shelf_test_api.h"
13 #include "ash/test/shelf_view_test_api.h"
14 #include "base/macros.h"
15 #include "base/test/histogram_tester.h"
16 #include "base/test/simple_test_tick_clock.h"
17 #include "base/test/user_action_tester.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "ui/events/event.h"
20 #include "ui/views/controls/button/button.h"
21
22 namespace ash {
23 namespace test {
24 namespace {
25
26 // A simple light weight test double dummy for a views::Button.
27 class DummyButton : public views::Button {
28 public:
29 DummyButton();
30
31 private:
32 DISALLOW_COPY_AND_ASSIGN(DummyButton);
33 };
34
35 DummyButton::DummyButton() : views::Button(nullptr) {}
36
37 // A simple light weight test double dummy for a ui::Event.
38 class DummyEvent : public ui::Event {
39 public:
40 DummyEvent();
41 ~DummyEvent() override;
42 int unique_id() const { return unique_id_; }
43
44 private:
45 static int next_unique_id_;
46 int unique_id_;
47
48 DISALLOW_COPY_AND_ASSIGN(DummyEvent);
49 };
50
51 int DummyEvent::next_unique_id_ = 0;
52
53 DummyEvent::DummyEvent()
54 : Event(ui::ET_GESTURE_TAP, base::TimeTicks(), 0),
55 unique_id_(next_unique_id_++) {}
56
57 DummyEvent::~DummyEvent() {}
58
59 // Test fixture for the ShelfButtonPressedMetricTracker class. Relies on
60 // AshTestBase to initilize the UserMetricsRecorder and it's dependencies.
61 class ShelfButtonPressedMetricTrackerTest : public AshTestBase {
62 public:
63 static const char*
64 kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName;
65
66 ShelfButtonPressedMetricTrackerTest();
67 ~ShelfButtonPressedMetricTrackerTest() override;
68
69 // AshTestBase:
70 void SetUp() override;
71 void TearDown() override;
72
73 // Calls ButtonPressed on the test target with the given |event|
74 // and dummy values for the |sender| and |performed_action| parameters.
75 void ButtonPressed(const ui::Event& event);
76
77 // Calls ButtonPressed on the test target with the given |performed_action|
78 // and dummy values for the |event| and |sender| parameters.
79 void ButtonPressed(ShelfItemDelegate::PerformedAction performed_action);
80
81 // Calls ButtonPressed on the test target with the given |sender| and
82 // |performed_action| and a dummy value for the |event| parameter.
83 void ButtonPressed(const views::Button* sender,
84 ShelfItemDelegate::PerformedAction performed_action);
85
86 protected:
87 // The test target. Not owned.
88 ShelfButtonPressedMetricTracker* metric_tracker_;
89
90 // The TickClock injected in to the test target.
91 base::SimpleTestTickClock* tick_clock_;
92
93 private:
94 DISALLOW_COPY_AND_ASSIGN(ShelfButtonPressedMetricTrackerTest);
95 };
96
97 const char* ShelfButtonPressedMetricTrackerTest::
98 kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName =
99 ShelfButtonPressedMetricTracker::
100 kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName;
101
102 ShelfButtonPressedMetricTrackerTest::ShelfButtonPressedMetricTrackerTest() {}
103
104 ShelfButtonPressedMetricTrackerTest::~ShelfButtonPressedMetricTrackerTest() {}
105
106 void ShelfButtonPressedMetricTrackerTest::SetUp() {
107 AshTestBase::SetUp();
108
109 Shelf* shelf = Shelf::ForPrimaryDisplay();
110 ShelfViewTestAPI shelf_view_test_api(ShelfTestAPI(shelf).shelf_view());
111
112 metric_tracker_ = shelf_view_test_api.shelf_button_pressed_metric_tracker();
113
114 ShelfButtonPressedMetricTrackerTestAPI test_api(metric_tracker_);
115
116 std::unique_ptr<base::TickClock> test_tick_clock(
117 new base::SimpleTestTickClock());
118 tick_clock_ = static_cast<base::SimpleTestTickClock*>(test_tick_clock.get());
119 test_api.SetTickClock(std::move(test_tick_clock));
120
121 // Ensure the TickClock->NowTicks() doesn't return base::TimeTicks because
122 // ShelfButtonPressedMetricTracker interprets that value as unset.
123 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(100));
124 }
125
126 void ShelfButtonPressedMetricTrackerTest::TearDown() {
127 tick_clock_ = nullptr;
128
129 AshTestBase::TearDown();
130 }
131
132 void ShelfButtonPressedMetricTrackerTest::ButtonPressed(
133 const ui::Event& event) {
134 const DummyButton kDummyButton;
135 metric_tracker_->ButtonPressed(event, &kDummyButton,
136 ShelfItemDelegate::kNoAction);
137 }
138
139 void ShelfButtonPressedMetricTrackerTest::ButtonPressed(
140 ShelfItemDelegate::PerformedAction performed_action) {
141 const DummyEvent kDummyEvent;
142 const DummyButton kDummyButton;
143 metric_tracker_->ButtonPressed(kDummyEvent, &kDummyButton, performed_action);
144 }
145
146 void ShelfButtonPressedMetricTrackerTest::ButtonPressed(
147 const views::Button* sender,
148 ShelfItemDelegate::PerformedAction performed_action) {
149 const DummyEvent kDummyEvent;
150 metric_tracker_->ButtonPressed(kDummyEvent, sender, performed_action);
151 }
152
153 } // namespace
154
155 // Verifies that a Launcher_ButtonPressed_Mouse UMA user action is recorded when
156 // a button is pressed by a mouse event.
157 TEST_F(ShelfButtonPressedMetricTrackerTest,
158 Launcher_ButtonPressed_MouseIsRecordedWhenIconActivatedByMouse) {
159 const ui::MouseEvent mouse_event(ui::ET_MOUSE_PRESSED, gfx::Point(),
160 gfx::Point(), base::TimeTicks(), 0, 0);
161
162 base::UserActionTester user_action_tester;
163 ButtonPressed(mouse_event);
164 EXPECT_EQ(1,
165 user_action_tester.GetActionCount("Launcher_ButtonPressed_Mouse"));
166 }
167
168 // Verifies that a Launcher_ButtonPressed_Touch UMA user action is recorded when
169 // a button is pressed by a touch event.
170 TEST_F(ShelfButtonPressedMetricTrackerTest,
171 Launcher_ButtonPressed_MouseIsRecordedWhenIconActivatedByTouch) {
172 const ui::TouchEvent touch_event(ui::ET_GESTURE_TAP, gfx::Point(), 0,
173 base::TimeTicks());
174
175 base::UserActionTester user_action_tester;
176 ButtonPressed(touch_event);
177 EXPECT_EQ(1,
178 user_action_tester.GetActionCount("Launcher_ButtonPressed_Touch"));
179 }
180
181 // Verifies that a Launcher_LaunchTask UMA user action is recorded when
182 // pressing a button causes a new window to be created.
183 TEST_F(ShelfButtonPressedMetricTrackerTest,
184 Launcher_LaunchTaskIsRecordedWhenNewWindowIsCreated) {
185 base::UserActionTester user_action_tester;
186 ButtonPressed(ShelfItemDelegate::kNewWindowCreated);
187 EXPECT_EQ(1, user_action_tester.GetActionCount("Launcher_LaunchTask"));
188 }
189
190 // Verifies that a Launcher_MinimizeTask UMA user action is recorded when
191 // pressing a button causes an existing window to be minimized.
192 TEST_F(ShelfButtonPressedMetricTrackerTest,
193 Launcher_MinimizeTaskIsRecordedWhenWindowIsMinimized) {
194 base::UserActionTester user_action_tester;
195 ButtonPressed(ShelfItemDelegate::kExistingWindowMinimized);
196 EXPECT_EQ(1, user_action_tester.GetActionCount("Launcher_MinimizeTask"));
197 }
198
199 // Verifies that a Launcher_SwitchTask UMA user action is recorded when
200 // pressing a button causes an existing window to be activated.
201 TEST_F(ShelfButtonPressedMetricTrackerTest,
202 Launcher_SwitchTaskIsRecordedWhenExistingWindowIsActivated) {
203 base::UserActionTester user_action_tester;
204 ButtonPressed(ShelfItemDelegate::kExistingWindowActivated);
205 EXPECT_EQ(1, user_action_tester.GetActionCount("Launcher_SwitchTask"));
206 }
207
208 // Verify that a window activation action will record a data point if it was
209 // subsequent to a minimize action.
210 TEST_F(ShelfButtonPressedMetricTrackerTest,
211 VerifyDataRecordedAfterMinimizedAndSubsequentActivatedAction) {
212 const DummyButton kDummyButton;
213
214 base::HistogramTester histogram_tester;
215
216 ButtonPressed(&kDummyButton, ShelfItemDelegate::kExistingWindowMinimized);
217 histogram_tester.ExpectTotalCount(
218 kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName, 0);
219
220 ButtonPressed(&kDummyButton, ShelfItemDelegate::kExistingWindowActivated);
221 histogram_tester.ExpectTotalCount(
222 kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName, 1);
223 }
224
225 // Verify that a multiple window activation actions will record a single data
226 // point if they are subsequent to a minimize action.
227 TEST_F(ShelfButtonPressedMetricTrackerTest,
228 VerifyDataRecordedAfterMinimizedAndMultipleSubsequentActivatedActions) {
229 const DummyButton kDummyButton;
230
231 base::HistogramTester histogram_tester;
232
233 ButtonPressed(&kDummyButton, ShelfItemDelegate::kExistingWindowMinimized);
234 ButtonPressed(&kDummyButton, ShelfItemDelegate::kExistingWindowActivated);
235 ButtonPressed(&kDummyButton, ShelfItemDelegate::kExistingWindowActivated);
236
237 histogram_tester.ExpectTotalCount(
238 kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName, 1);
239 }
240
241 // Verify that a window activation action will not record a data point if it was
242 // not subsequent to a minimize action.
243 TEST_F(ShelfButtonPressedMetricTrackerTest,
244 VerifyDataRecordedAfterMinimizedAndNonSubsequentActivatedAction) {
245 const DummyButton kDummyButton;
246
247 base::HistogramTester histogram_tester;
248
249 ButtonPressed(&kDummyButton, ShelfItemDelegate::kExistingWindowMinimized);
250 ButtonPressed(&kDummyButton, ShelfItemDelegate::kAppListMenuShown);
251 ButtonPressed(&kDummyButton, ShelfItemDelegate::kExistingWindowActivated);
252
253 histogram_tester.ExpectTotalCount(
254 kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName, 0);
255 }
256
257 // Verify no data is recorded if a second source button is pressed in between
258 // subsequent minimized and activated actions on the same source.
259 TEST_F(ShelfButtonPressedMetricTrackerTest,
260 VerifyDataRecordedAfterMinimizedButtonA) {
261 const DummyButton kDummyButton;
262 const DummyButton kSecondDummyButton;
263
264 base::HistogramTester histogram_tester;
265
266 ButtonPressed(&kDummyButton, ShelfItemDelegate::kExistingWindowMinimized);
267 ButtonPressed(&kSecondDummyButton,
268 ShelfItemDelegate::kExistingWindowMinimized);
269 ButtonPressed(&kDummyButton, ShelfItemDelegate::kExistingWindowActivated);
270
271 histogram_tester.ExpectTotalCount(
272 kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName, 0);
273 }
274
275 // Verify the data value recorded when a window activation action is subsequent
276 // to a minimize action.
277 TEST_F(ShelfButtonPressedMetricTrackerTest,
278 VerifyTheValueRecordedBySubsequentMinimizedAndActivateActions) {
279 const int kTimeDeltaInMilliseconds = 17;
280 const DummyButton kDummyButton;
281
282 base::HistogramTester histogram_tester;
283
284 ButtonPressed(&kDummyButton, ShelfItemDelegate::kExistingWindowMinimized);
285 tick_clock_->Advance(
286 base::TimeDelta::FromMilliseconds(kTimeDeltaInMilliseconds));
287 ButtonPressed(&kDummyButton, ShelfItemDelegate::kExistingWindowActivated);
288
289 histogram_tester.ExpectTotalCount(
290 kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName, 1);
291 histogram_tester.ExpectBucketCount(
292 kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName,
293 kTimeDeltaInMilliseconds, 1);
294 }
295
296 } // namespace test
297 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698