Index: chrome/browser/upgrade_detector_impl_unittest.cc |
=================================================================== |
--- chrome/browser/upgrade_detector_impl_unittest.cc (revision 0) |
+++ chrome/browser/upgrade_detector_impl_unittest.cc (working copy) |
@@ -0,0 +1,112 @@ |
+// Copyright 2014 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 "chrome/browser/upgrade_detector_impl.h" |
+ |
+#include <vector> |
+ |
+#include "content/public/browser/notification_details.h" |
+#include "content/public/browser/notification_observer.h" |
+#include "content/public/browser/notification_registrar.h" |
+#include "content/public/browser/notification_service.h" |
+#include "content/public/test/test_browser_thread_bundle.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+class TestUpgradeDetectorImpl : public UpgradeDetectorImpl { |
+ public: |
+ TestUpgradeDetectorImpl() : trigger_critical_update_call_count_(0) {} |
+ virtual ~TestUpgradeDetectorImpl() {} |
+ |
+ // Methods exposed for testing. |
+ using UpgradeDetectorImpl::OnExperimentChangesDetected; |
+ using UpgradeDetectorImpl::NotifyOnUpgradeWithTimePassed; |
+ |
+ // UpgradeDetector: |
+ virtual void TriggerCriticalUpdate() OVERRIDE { |
+ trigger_critical_update_call_count_++; |
+ } |
+ |
+ int trigger_critical_update_call_count() const { |
+ return trigger_critical_update_call_count_; |
+ } |
+ |
+ private: |
+ // How many times TriggerCriticalUpdate() has been called. Expected to either |
+ // be 0 or 1. |
+ int trigger_critical_update_call_count_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestUpgradeDetectorImpl); |
+}; |
+ |
+class TestUpgradeNotificationListener : public content::NotificationObserver { |
+ public: |
+ TestUpgradeNotificationListener() { |
+ registrar_.Add(this, chrome::NOTIFICATION_UPGRADE_RECOMMENDED, |
+ content::NotificationService::AllSources()); |
+ } |
+ virtual ~TestUpgradeNotificationListener() { |
+ } |
+ |
+ const std::vector<int>& notifications_received() const { |
+ return notifications_received_; |
+ } |
+ |
+ private: |
+ // content::NotificationObserver: |
+ virtual void Observe(int type, |
+ const content::NotificationSource& source, |
+ const content::NotificationDetails& details) OVERRIDE { |
+ notifications_received_.push_back(type); |
+ } |
+ |
+ // Registrar for listening to notifications. |
+ content::NotificationRegistrar registrar_; |
+ |
+ // Keeps track of the number and types of notifications that were received. |
+ std::vector<int> notifications_received_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestUpgradeNotificationListener); |
+}; |
+ |
+TEST(UpgradeDetectorImplTest, VariationsChanges) { |
+ content::TestBrowserThreadBundle bundle; |
+ |
+ TestUpgradeNotificationListener notifications_listener; |
+ TestUpgradeDetectorImpl detector; |
+ EXPECT_FALSE(detector.notify_upgrade()); |
+ EXPECT_TRUE(notifications_listener.notifications_received().empty()); |
+ |
+ detector.OnExperimentChangesDetected( |
+ chrome_variations::VariationsService::Observer::BEST_EFFORT); |
+ EXPECT_FALSE(detector.notify_upgrade()); |
+ EXPECT_TRUE(notifications_listener.notifications_received().empty()); |
+ |
+ detector.NotifyOnUpgradeWithTimePassed(base::TimeDelta::FromDays(30)); |
+ EXPECT_TRUE(detector.notify_upgrade()); |
+ ASSERT_EQ(1U, notifications_listener.notifications_received().size()); |
+ EXPECT_EQ(chrome::NOTIFICATION_UPGRADE_RECOMMENDED, |
+ notifications_listener.notifications_received().front()); |
+ EXPECT_EQ(0, detector.trigger_critical_update_call_count()); |
+} |
+ |
+TEST(UpgradeDetectorImplTest, VariationsCriticalChanges) { |
+ content::TestBrowserThreadBundle bundle; |
+ |
+ TestUpgradeNotificationListener notifications_listener; |
+ TestUpgradeDetectorImpl detector; |
+ EXPECT_FALSE(detector.notify_upgrade()); |
+ EXPECT_TRUE(notifications_listener.notifications_received().empty()); |
+ |
+ detector.OnExperimentChangesDetected( |
+ chrome_variations::VariationsService::Observer::CRITICAL); |
+ EXPECT_FALSE(detector.notify_upgrade()); |
+ EXPECT_TRUE(notifications_listener.notifications_received().empty()); |
+ |
+ detector.NotifyOnUpgradeWithTimePassed(base::TimeDelta::FromDays(30)); |
+ EXPECT_TRUE(detector.notify_upgrade()); |
+ ASSERT_EQ(1U, notifications_listener.notifications_received().size()); |
+ EXPECT_EQ(chrome::NOTIFICATION_UPGRADE_RECOMMENDED, |
+ notifications_listener.notifications_received().front()); |
+ EXPECT_EQ(1, detector.trigger_critical_update_call_count()); |
+} |