user_action_tester_unittest.cc 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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. #include "base/test/metrics/user_action_tester.h"
  5. #include "base/metrics/user_metrics.h"
  6. #include "base/metrics/user_metrics_action.h"
  7. #include "base/test/scoped_mock_clock_override.h"
  8. #include "base/time/time.h"
  9. #include "testing/gmock/include/gmock/gmock.h"
  10. #include "testing/gtest/include/gtest/gtest.h"
  11. using ::testing::UnorderedElementsAre;
  12. namespace base {
  13. namespace {
  14. const char kUserAction1[] = "user.action.1";
  15. const char kUserAction2[] = "user.action.2";
  16. const char kUserAction3[] = "user.action.3";
  17. // Record an action and cause all ActionCallback observers to be notified.
  18. void RecordAction(const char user_action[]) {
  19. base::RecordAction(base::UserMetricsAction(user_action));
  20. }
  21. } // namespace
  22. // Verify user action counts are zero initially.
  23. TEST(UserActionTesterTest, GetActionCountWhenNoActionsHaveBeenRecorded) {
  24. UserActionTester user_action_tester;
  25. EXPECT_EQ(0, user_action_tester.GetActionCount(kUserAction1));
  26. }
  27. // Verify user action counts are zero initially.
  28. TEST(UserActionTesterTest, GetActionTimesWhenNoActionsHaveBeenRecorded) {
  29. UserActionTester user_action_tester;
  30. EXPECT_TRUE(user_action_tester.GetActionTimes(kUserAction1).empty());
  31. }
  32. // Verify user action counts are tracked properly.
  33. TEST(UserActionTesterTest, GetActionCountWhenActionsHaveBeenRecorded) {
  34. UserActionTester user_action_tester;
  35. RecordAction(kUserAction1);
  36. RecordAction(kUserAction2);
  37. RecordAction(kUserAction2);
  38. EXPECT_EQ(1, user_action_tester.GetActionCount(kUserAction1));
  39. EXPECT_EQ(2, user_action_tester.GetActionCount(kUserAction2));
  40. EXPECT_EQ(0, user_action_tester.GetActionCount(kUserAction3));
  41. }
  42. // Verify user action times are tracked properly.
  43. TEST(UserActionTesterTest, GetActionTimesWhenActionsHaveBeenRecorded) {
  44. ScopedMockClockOverride clock;
  45. UserActionTester user_action_tester;
  46. TimeTicks t1 = TimeTicks::Now();
  47. RecordAction(kUserAction1);
  48. clock.Advance(Minutes(10));
  49. TimeTicks t2 = TimeTicks::Now();
  50. RecordAction(kUserAction2);
  51. clock.Advance(Minutes(20));
  52. TimeTicks t3 = TimeTicks::Now();
  53. RecordAction(kUserAction3);
  54. EXPECT_THAT(user_action_tester.GetActionTimes(kUserAction1),
  55. UnorderedElementsAre(t1));
  56. EXPECT_THAT(user_action_tester.GetActionTimes(kUserAction2),
  57. UnorderedElementsAre(t2));
  58. EXPECT_THAT(user_action_tester.GetActionTimes(kUserAction3),
  59. UnorderedElementsAre(t3));
  60. }
  61. // Verify no seg faults occur when resetting action counts when none have been
  62. // recorded.
  63. TEST(UserActionTesterTest, ResetCountsWhenNoActionsHaveBeenRecorded) {
  64. UserActionTester user_action_tester;
  65. user_action_tester.ResetCounts();
  66. }
  67. // Verify user action counts are set to zero on a ResetCounts.
  68. TEST(UserActionTesterTest, ResetCountsWhenActionsHaveBeenRecorded) {
  69. UserActionTester user_action_tester;
  70. RecordAction(kUserAction1);
  71. RecordAction(kUserAction1);
  72. RecordAction(kUserAction2);
  73. user_action_tester.ResetCounts();
  74. EXPECT_EQ(0, user_action_tester.GetActionCount(kUserAction1));
  75. EXPECT_EQ(0, user_action_tester.GetActionCount(kUserAction2));
  76. EXPECT_EQ(0, user_action_tester.GetActionCount(kUserAction3));
  77. }
  78. // Verify user action times are cleared on a ResetCounts.
  79. TEST(UserActionTesterTest, ResetTimesWhenActionsHaveBeenRecorded) {
  80. UserActionTester user_action_tester;
  81. RecordAction(kUserAction1);
  82. RecordAction(kUserAction1);
  83. RecordAction(kUserAction2);
  84. user_action_tester.ResetCounts();
  85. EXPECT_TRUE(user_action_tester.GetActionTimes(kUserAction1).empty());
  86. EXPECT_TRUE(user_action_tester.GetActionTimes(kUserAction2).empty());
  87. EXPECT_TRUE(user_action_tester.GetActionTimes(kUserAction3).empty());
  88. }
  89. // Verify the UserActionsTester is notified when base::RecordAction is called.
  90. TEST(UserActionTesterTest, VerifyUserActionTesterListensForUserActions) {
  91. ScopedMockClockOverride clock;
  92. UserActionTester user_action_tester;
  93. TimeTicks time = TimeTicks::Now();
  94. base::RecordAction(base::UserMetricsAction(kUserAction1));
  95. EXPECT_EQ(1, user_action_tester.GetActionCount(kUserAction1));
  96. EXPECT_THAT(user_action_tester.GetActionTimes(kUserAction1),
  97. UnorderedElementsAre(time));
  98. }
  99. // Verify the UserActionsTester is notified when base::RecordComputedAction is
  100. // called.
  101. TEST(UserActionTesterTest,
  102. VerifyUserActionTesterListensForComputedUserActions) {
  103. ScopedMockClockOverride clock;
  104. UserActionTester user_action_tester;
  105. TimeTicks time = TimeTicks::Now();
  106. base::RecordComputedAction(kUserAction1);
  107. EXPECT_EQ(1, user_action_tester.GetActionCount(kUserAction1));
  108. EXPECT_THAT(user_action_tester.GetActionTimes(kUserAction1),
  109. UnorderedElementsAre(time));
  110. }
  111. // Verify the UserActionsTester is notified when base::RecordComputedActionAt is
  112. // called.
  113. TEST(UserActionTesterTest,
  114. VerifyUserActionTesterListensForComputedUserActionAt) {
  115. UserActionTester user_action_tester;
  116. TimeTicks time = TimeTicks::Now() - Minutes(10);
  117. base::RecordComputedActionAt(kUserAction1, time);
  118. EXPECT_EQ(1, user_action_tester.GetActionCount(kUserAction1));
  119. EXPECT_THAT(user_action_tester.GetActionTimes(kUserAction1),
  120. UnorderedElementsAre(time));
  121. }
  122. // Verify the UserActionsTester is notified when base::RecordComputedActionSince
  123. // is called.
  124. TEST(UserActionTesterTest,
  125. VerifyUserActionTesterListensForComputedUserActionSince) {
  126. ScopedMockClockOverride clock;
  127. UserActionTester user_action_tester;
  128. TimeTicks time = TimeTicks::Now();
  129. base::RecordComputedActionSince(kUserAction1, Minutes(20));
  130. TimeTicks expected_time = time - Minutes(20);
  131. EXPECT_EQ(1, user_action_tester.GetActionCount(kUserAction1));
  132. EXPECT_THAT(user_action_tester.GetActionTimes(kUserAction1),
  133. UnorderedElementsAre(expected_time));
  134. }
  135. } // namespace base