1// Copyright 2013 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 <string> 6 7#include "base/command_line.h" 8#include "base/strings/utf_string_conversions.h" 9#include "chrome/browser/notifications/message_center_settings_controller.h" 10#include "chrome/browser/prefs/pref_service_syncable.h" 11#include "chrome/browser/profiles/profile_info_cache.h" 12#include "chrome/browser/profiles/profile_manager.h" 13#include "chrome/test/base/testing_browser_process.h" 14#include "chrome/test/base/testing_profile_manager.h" 15#include "content/public/test/test_browser_thread_bundle.h" 16#include "testing/gtest/include/gtest/gtest.h" 17#include "ui/message_center/notifier_settings.h" 18 19#if defined(OS_CHROMEOS) 20#include "chrome/browser/chromeos/login/users/fake_user_manager.h" 21#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" 22#endif 23 24class MessageCenterSettingsControllerTest : public testing::Test { 25 protected: 26 MessageCenterSettingsControllerTest() 27 : testing_profile_manager_(TestingBrowserProcess::GetGlobal()) {}; 28 virtual ~MessageCenterSettingsControllerTest() {}; 29 30 base::FilePath GetProfilePath(const std::string& base_name) { 31 return testing_profile_manager_.profile_manager()->user_data_dir() 32 .AppendASCII(base_name); 33 } 34 35 virtual void SetUp() OVERRIDE { 36 ASSERT_TRUE(testing_profile_manager_.SetUp()); 37 } 38 39 virtual void CreateProfile(const std::string& name) { 40 testing_profile_manager_.CreateTestingProfile(name); 41 } 42 43 void CreateController() { 44 controller_.reset(new MessageCenterSettingsController( 45 testing_profile_manager_.profile_info_cache())); 46 } 47 48 void ResetController() { 49 controller_.reset(); 50 } 51 52 MessageCenterSettingsController* controller() { return controller_.get(); } 53 54 private: 55 TestingProfileManager testing_profile_manager_; 56 scoped_ptr<MessageCenterSettingsController> controller_; 57 content::TestBrowserThreadBundle thread_bundle_; 58 59 DISALLOW_COPY_AND_ASSIGN(MessageCenterSettingsControllerTest); 60}; 61 62#if defined(OS_CHROMEOS) 63 64class MessageCenterSettingsControllerChromeOSTest 65 : public MessageCenterSettingsControllerTest { 66 protected: 67 MessageCenterSettingsControllerChromeOSTest() {} 68 virtual ~MessageCenterSettingsControllerChromeOSTest() {} 69 70 virtual void SetUp() OVERRIDE { 71 MessageCenterSettingsControllerTest::SetUp(); 72 73 // Initialize the UserManager singleton to a fresh FakeUserManager instance. 74 user_manager_enabler_.reset( 75 new chromeos::ScopedUserManagerEnabler(new chromeos::FakeUserManager)); 76 } 77 78 virtual void TearDown() OVERRIDE { 79 ResetController(); 80 MessageCenterSettingsControllerTest::TearDown(); 81 } 82 83 virtual void CreateProfile(const std::string& name) OVERRIDE { 84 MessageCenterSettingsControllerTest::CreateProfile(name); 85 86 GetFakeUserManager()->AddUser(name); 87 GetFakeUserManager()->LoginUser(name); 88 } 89 90 void SwitchActiveUser(const std::string& name) { 91 GetFakeUserManager()->SwitchActiveUser(name); 92 controller()->ActiveUserChanged(GetFakeUserManager()->GetActiveUser()); 93 } 94 95 private: 96 chromeos::FakeUserManager* GetFakeUserManager() { 97 return static_cast<chromeos::FakeUserManager*>( 98 user_manager::UserManager::Get()); 99 } 100 101 scoped_ptr<chromeos::ScopedUserManagerEnabler> user_manager_enabler_; 102 103 DISALLOW_COPY_AND_ASSIGN(MessageCenterSettingsControllerChromeOSTest); 104}; 105#endif // OS_CHROMEOS 106 107#if !defined(OS_CHROMEOS) 108TEST_F(MessageCenterSettingsControllerTest, NotifierGroups) { 109 CreateProfile("Profile-1"); 110 CreateProfile("Profile-2"); 111 CreateController(); 112 113 EXPECT_EQ(controller()->GetNotifierGroupCount(), 2u); 114 115 EXPECT_EQ(controller()->GetNotifierGroupAt(0).name, 116 base::UTF8ToUTF16("Profile-1")); 117 EXPECT_EQ(controller()->GetNotifierGroupAt(0).index, 0u); 118 119 EXPECT_EQ(controller()->GetNotifierGroupAt(1).name, 120 base::UTF8ToUTF16("Profile-2")); 121 EXPECT_EQ(controller()->GetNotifierGroupAt(1).index, 1u); 122 123 EXPECT_EQ(controller()->GetActiveNotifierGroup().name, 124 base::UTF8ToUTF16("Profile-1")); 125 EXPECT_EQ(controller()->GetActiveNotifierGroup().index, 0u); 126 127 controller()->SwitchToNotifierGroup(1); 128 EXPECT_EQ(controller()->GetActiveNotifierGroup().name, 129 base::UTF8ToUTF16("Profile-2")); 130 EXPECT_EQ(controller()->GetActiveNotifierGroup().index, 1u); 131 132 controller()->SwitchToNotifierGroup(0); 133 EXPECT_EQ(controller()->GetActiveNotifierGroup().name, 134 base::UTF8ToUTF16("Profile-1")); 135} 136#else 137TEST_F(MessageCenterSettingsControllerChromeOSTest, NotifierGroups) { 138 CreateProfile("Profile-1"); 139 CreateProfile("Profile-2"); 140 CreateController(); 141 142 EXPECT_EQ(controller()->GetNotifierGroupCount(), 1u); 143 144 EXPECT_EQ(controller()->GetNotifierGroupAt(0).name, 145 base::UTF8ToUTF16("Profile-1")); 146 EXPECT_EQ(controller()->GetNotifierGroupAt(0).index, 0u); 147 148 SwitchActiveUser("Profile-2"); 149 EXPECT_EQ(controller()->GetNotifierGroupCount(), 1u); 150 EXPECT_EQ(controller()->GetNotifierGroupAt(0).name, 151 base::UTF8ToUTF16("Profile-2")); 152 EXPECT_EQ(controller()->GetNotifierGroupAt(0).index, 1u); 153 154 SwitchActiveUser("Profile-1"); 155 EXPECT_EQ(controller()->GetNotifierGroupCount(), 1u); 156 EXPECT_EQ(controller()->GetNotifierGroupAt(0).name, 157 base::UTF8ToUTF16("Profile-1")); 158 EXPECT_EQ(controller()->GetNotifierGroupAt(0).index, 0u); 159} 160#endif 161 162// TODO(mukai): write a test case to reproduce the actual guest session scenario 163// in ChromeOS -- no profiles in the profile_info_cache. 164