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 "base/test/metrics/user_action_tester.h"
6
7 #include "base/metrics/user_metrics.h"
8 #include "base/metrics/user_metrics_action.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace base {
12
13 namespace {
14
15 const char kUserAction1[] = "user.action.1";
16 const char kUserAction2[] = "user.action.2";
17 const char kUserAction3[] = "user.action.3";
18
19 // Record an action and cause all ActionCallback observers to be notified.
RecordAction(const char user_action[])20 void RecordAction(const char user_action[]) {
21 base::RecordAction(base::UserMetricsAction(user_action));
22 }
23
24 } // namespace
25
26 // Verify user action counts are zero initially.
TEST(UserActionTesterTest,GetActionCountWhenNoActionsHaveBeenRecorded)27 TEST(UserActionTesterTest, GetActionCountWhenNoActionsHaveBeenRecorded) {
28 UserActionTester user_action_tester;
29 EXPECT_EQ(0, user_action_tester.GetActionCount(kUserAction1));
30 }
31
32 // Verify user action counts are tracked properly.
TEST(UserActionTesterTest,GetActionCountWhenActionsHaveBeenRecorded)33 TEST(UserActionTesterTest, GetActionCountWhenActionsHaveBeenRecorded) {
34 UserActionTester user_action_tester;
35
36 RecordAction(kUserAction1);
37 RecordAction(kUserAction2);
38 RecordAction(kUserAction2);
39
40 EXPECT_EQ(1, user_action_tester.GetActionCount(kUserAction1));
41 EXPECT_EQ(2, user_action_tester.GetActionCount(kUserAction2));
42 EXPECT_EQ(0, user_action_tester.GetActionCount(kUserAction3));
43 }
44
45 // Verify no seg faults occur when resetting action counts when none have been
46 // recorded.
TEST(UserActionTesterTest,ResetCountsWhenNoActionsHaveBeenRecorded)47 TEST(UserActionTesterTest, ResetCountsWhenNoActionsHaveBeenRecorded) {
48 UserActionTester user_action_tester;
49 user_action_tester.ResetCounts();
50 }
51
52 // Verify user action counts are set to zero on a ResetCounts.
TEST(UserActionTesterTest,ResetCountsWhenActionsHaveBeenRecorded)53 TEST(UserActionTesterTest, ResetCountsWhenActionsHaveBeenRecorded) {
54 UserActionTester user_action_tester;
55
56 RecordAction(kUserAction1);
57 RecordAction(kUserAction1);
58 RecordAction(kUserAction2);
59 user_action_tester.ResetCounts();
60
61 EXPECT_EQ(0, user_action_tester.GetActionCount(kUserAction1));
62 EXPECT_EQ(0, user_action_tester.GetActionCount(kUserAction2));
63 EXPECT_EQ(0, user_action_tester.GetActionCount(kUserAction3));
64 }
65
66 // Verify the UserActionsTester is notified when base::RecordAction is called.
TEST(UserActionTesterTest,VerifyUserActionTesterListensForUserActions)67 TEST(UserActionTesterTest, VerifyUserActionTesterListensForUserActions) {
68 UserActionTester user_action_tester;
69
70 base::RecordAction(base::UserMetricsAction(kUserAction1));
71
72 EXPECT_EQ(1, user_action_tester.GetActionCount(kUserAction1));
73 }
74
75 // Verify the UserActionsTester is notified when base::RecordComputedAction is
76 // called.
TEST(UserActionTesterTest,VerifyUserActionTesterListensForComputedUserActions)77 TEST(UserActionTesterTest,
78 VerifyUserActionTesterListensForComputedUserActions) {
79 UserActionTester user_action_tester;
80
81 base::RecordComputedAction(kUserAction1);
82
83 EXPECT_EQ(1, user_action_tester.GetActionCount(kUserAction1));
84 }
85
86 } // namespace base
87