Index: ash/metrics/user_metrics_recorder_unittest.cc |
diff --git a/ash/metrics/user_metrics_recorder_unittest.cc b/ash/metrics/user_metrics_recorder_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..04cbd1cd3db720b7dcbdde80be1571726ef2c3f6 |
--- /dev/null |
+++ b/ash/metrics/user_metrics_recorder_unittest.cc |
@@ -0,0 +1,162 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ash/metrics/user_metrics_recorder.h" |
+ |
+#include "ash/shell.h" |
+#include "ash/system/user/login_status.h" |
+#include "ash/test/ash_test_base.h" |
+#include "ash/test/test_system_tray_delegate.h" |
+#include "ash/test/user_metrics_recorder_test_api.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/test/histogram_tester.h" |
+#include "ui/aura/window.h" |
+ |
+namespace ash { |
+namespace { |
+ |
+const char kAsh_NumberOfVisibleWindowsInPrimaryDisplay[] = |
+ "Ash.NumberOfVisibleWindowsInPrimaryDisplay"; |
+ |
+const char kAsh_ActiveWindowShowTypeOverTime[] = |
+ "Ash.ActiveWindowShowTypeOverTime"; |
+ |
+} // namespace |
+ |
+// Test fixture for the UserMetricsRecorder class. |
+class UserMetricsRecorderTest : public test::AshTestBase { |
+ public: |
+ UserMetricsRecorderTest(); |
+ ~UserMetricsRecorderTest() override; |
+ |
+ // test::AshTestBase: |
+ void SetUp() override; |
+ void TearDown() override; |
+ |
+ // Sets the user login status. |
+ void SetLoginStatus(user::LoginStatus login_status); |
+ |
+ // Sets the current user session to be active or inactive in a desktop |
+ // environment. |
+ void SetUserInActiveDesktopEnvironment(bool is_active); |
+ |
+ test::UserMetricsRecorderTestAPI* user_metrics_recorder_test_api() { |
+ return user_metrics_recorder_test_api_.get(); |
+ } |
+ |
+ base::HistogramTester& histograms() { return histograms_; } |
+ |
+ private: |
+ // Test API to access private members of the test target. |
+ scoped_ptr<test::UserMetricsRecorderTestAPI> user_metrics_recorder_test_api_; |
+ |
+ // Histogram value verifier. |
+ base::HistogramTester histograms_; |
+ |
+ // The active SystemTrayDelegate. Not owned. |
+ test::TestSystemTrayDelegate* test_system_tray_delegate_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(UserMetricsRecorderTest); |
+}; |
+ |
+UserMetricsRecorderTest::UserMetricsRecorderTest() { |
+} |
+ |
+UserMetricsRecorderTest::~UserMetricsRecorderTest() { |
+} |
+ |
+void UserMetricsRecorderTest::SetUp() { |
+ test::AshTestBase::SetUp(); |
+ user_metrics_recorder_test_api_.reset(new test::UserMetricsRecorderTestAPI()); |
+ test_system_tray_delegate_ = GetSystemTrayDelegate(); |
+} |
+ |
+void UserMetricsRecorderTest::TearDown() { |
+ test_system_tray_delegate_ = nullptr; |
+ test::AshTestBase::TearDown(); |
+} |
+ |
+void UserMetricsRecorderTest::SetLoginStatus(user::LoginStatus login_status) { |
+ test_system_tray_delegate_->SetLoginStatus(login_status); |
+} |
+ |
+void UserMetricsRecorderTest::SetUserInActiveDesktopEnvironment( |
+ bool is_active) { |
+ if (is_active) { |
+ SetLoginStatus(user::LOGGED_IN_USER); |
+ ASSERT_TRUE( |
+ user_metrics_recorder_test_api()->IsUserInActiveDesktopEnvironment()); |
+ } else { |
+ SetLoginStatus(user::LOGGED_IN_LOCKED); |
+ ASSERT_FALSE( |
+ user_metrics_recorder_test_api()->IsUserInActiveDesktopEnvironment()); |
+ } |
+} |
+ |
+// Verifies the return value of IsUserInActiveDesktopEnvironment() for the |
+// different login status values. |
+TEST_F(UserMetricsRecorderTest, VerifyIsUserInActiveDesktopEnvironmentValues) { |
+ SetLoginStatus(user::LOGGED_IN_NONE); |
+ EXPECT_FALSE( |
+ user_metrics_recorder_test_api()->IsUserInActiveDesktopEnvironment()); |
+ |
+ SetLoginStatus(user::LOGGED_IN_LOCKED); |
+ EXPECT_FALSE( |
+ user_metrics_recorder_test_api()->IsUserInActiveDesktopEnvironment()); |
+ |
+ SetLoginStatus(user::LOGGED_IN_USER); |
+ EXPECT_TRUE( |
+ user_metrics_recorder_test_api()->IsUserInActiveDesktopEnvironment()); |
+ |
+ SetLoginStatus(user::LOGGED_IN_OWNER); |
+ EXPECT_TRUE( |
+ user_metrics_recorder_test_api()->IsUserInActiveDesktopEnvironment()); |
+ |
+ SetLoginStatus(user::LOGGED_IN_GUEST); |
+ EXPECT_TRUE( |
+ user_metrics_recorder_test_api()->IsUserInActiveDesktopEnvironment()); |
+ |
+ SetLoginStatus(user::LOGGED_IN_PUBLIC); |
+ EXPECT_TRUE( |
+ user_metrics_recorder_test_api()->IsUserInActiveDesktopEnvironment()); |
+ |
+ SetLoginStatus(user::LOGGED_IN_SUPERVISED); |
+ EXPECT_TRUE( |
+ user_metrics_recorder_test_api()->IsUserInActiveDesktopEnvironment()); |
+ |
+ SetLoginStatus(user::LOGGED_IN_KIOSK_APP); |
+ EXPECT_FALSE( |
+ user_metrics_recorder_test_api()->IsUserInActiveDesktopEnvironment()); |
+} |
+ |
+// Verifies that the IsUserInActiveDesktopEnvironment() dependent stats are not |
+// recorded when a user is not active in a desktop environment. |
+TEST_F(UserMetricsRecorderTest, |
+ VerifyStatsRecordedWhenUserNotInActiveDesktopEnvironment) { |
+ SetUserInActiveDesktopEnvironment(false); |
+ user_metrics_recorder_test_api()->RecordPeriodicMetrics(); |
+ |
+ histograms().ExpectTotalCount(kAsh_NumberOfVisibleWindowsInPrimaryDisplay, 0); |
+} |
+ |
+// Verifies that the IsUserInActiveDesktopEnvironment() dependent stats are |
+// recorded when a user is active in a desktop environment. |
+TEST_F(UserMetricsRecorderTest, |
+ VerifyStatsRecordedWhenUserInActiveDesktopEnvironment) { |
+ SetUserInActiveDesktopEnvironment(true); |
+ user_metrics_recorder_test_api()->RecordPeriodicMetrics(); |
+ |
+ histograms().ExpectTotalCount(kAsh_NumberOfVisibleWindowsInPrimaryDisplay, 1); |
+} |
+ |
+// Verifies recording of stats which are always recorded by |
+// RecordPeriodicMetrics. |
+TEST_F(UserMetricsRecorderTest, VerifyStatsRecordedByRecordPeriodicMetrics) { |
+ SetUserInActiveDesktopEnvironment(true); |
+ user_metrics_recorder_test_api()->RecordPeriodicMetrics(); |
+ |
+ histograms().ExpectTotalCount(kAsh_ActiveWindowShowTypeOverTime, 1); |
+} |
+ |
+} // namespace ash |