diff options
author | Ben Murdoch <benm@google.com> | 2010-07-29 17:14:53 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2010-08-04 14:29:45 +0100 |
commit | c407dc5cd9bdc5668497f21b26b09d988ab439de (patch) | |
tree | 7eaf8707c0309516bdb042ad976feedaf72b0bb1 /chrome/browser/profile_manager_unittest.cc | |
parent | 0998b1cdac5733f299c12d88bc31ef9c8035b8fa (diff) | |
download | external_chromium-c407dc5cd9bdc5668497f21b26b09d988ab439de.zip external_chromium-c407dc5cd9bdc5668497f21b26b09d988ab439de.tar.gz external_chromium-c407dc5cd9bdc5668497f21b26b09d988ab439de.tar.bz2 |
Merge Chromium src@r53293
Change-Id: Ia79acf8670f385cee48c45b0a75371d8e950af34
Diffstat (limited to 'chrome/browser/profile_manager_unittest.cc')
-rw-r--r-- | chrome/browser/profile_manager_unittest.cc | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/chrome/browser/profile_manager_unittest.cc b/chrome/browser/profile_manager_unittest.cc new file mode 100644 index 0000000..ca8bf0b --- /dev/null +++ b/chrome/browser/profile_manager_unittest.cc @@ -0,0 +1,146 @@ +// Copyright (c) 2006-2008 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 "app/system_monitor.h" +#include "base/command_line.h" +#include "base/file_util.h" +#include "base/message_loop.h" +#include "base/path_service.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/chrome_thread.h" +#include "chrome/browser/pref_service.h" +#include "chrome/browser/profile.h" +#include "chrome/browser/profile_manager.h" +#include "chrome/common/chrome_constants.h" +#include "chrome/common/chrome_paths.h" +#include "chrome/common/chrome_switches.h" +#include "chrome/common/notification_service.h" +#include "chrome/common/pref_names.h" +#include "testing/gtest/include/gtest/gtest.h" + +class ProfileManagerTest : public testing::Test { + protected: + ProfileManagerTest() : ui_thread_(ChromeThread::UI, &message_loop_) { + } + + virtual void SetUp() { + // Name a subdirectory of the temp directory. + ASSERT_TRUE(PathService::Get(base::DIR_TEMP, &test_dir_)); + test_dir_ = test_dir_.Append(FILE_PATH_LITERAL("ProfileManagerTest")); + + // Create a fresh, empty copy of this directory. + file_util::Delete(test_dir_, true); + file_util::CreateDirectory(test_dir_); + } + virtual void TearDown() { + // Clean up test directory + ASSERT_TRUE(file_util::Delete(test_dir_, true)); + ASSERT_FALSE(file_util::PathExists(test_dir_)); + } + + MessageLoopForUI message_loop_; + ChromeThread ui_thread_; + + // the path to temporary directory used to contain the test operations + FilePath test_dir_; +}; + +TEST_F(ProfileManagerTest, CreateProfile) { + FilePath source_path; + PathService::Get(chrome::DIR_TEST_DATA, &source_path); + source_path = source_path.Append(FILE_PATH_LITERAL("profiles")); + source_path = source_path.Append(FILE_PATH_LITERAL("sample")); + + FilePath dest_path = test_dir_; + dest_path = dest_path.Append(FILE_PATH_LITERAL("New Profile")); + + scoped_ptr<Profile> profile; + + // Successfully create a profile. + profile.reset(ProfileManager::CreateProfile(dest_path)); + ASSERT_TRUE(profile.get()); + + profile.reset(); + +#ifdef NDEBUG + // In Release mode, we always try to always return a profile. In debug, + // these cases would trigger DCHECKs. + + // The profile already exists when we call CreateProfile. Just load it. + profile.reset(ProfileManager::CreateProfile(dest_path)); + ASSERT_TRUE(profile.get()); +#endif +} + +TEST_F(ProfileManagerTest, DefaultProfileDir) { + CommandLine *cl = CommandLine::ForCurrentProcess(); + SystemMonitor dummy; + ProfileManager profile_manager; + std::string profile_dir("my_user"); + + cl->AppendSwitch(switches::kTestType); + + FilePath expected_default = + FilePath::FromWStringHack(chrome::kNotSignedInProfile); + EXPECT_EQ(expected_default.value(), + profile_manager.GetCurrentProfileDir().value()); +} + +#if defined(OS_CHROMEOS) +// This functionality only exists on Chrome OS. +TEST_F(ProfileManagerTest, LoggedInProfileDir) { + CommandLine *cl = CommandLine::ForCurrentProcess(); + SystemMonitor dummy; + ProfileManager profile_manager; + std::string profile_dir("my_user"); + + cl->AppendSwitchWithValue(switches::kLoginProfile, profile_dir); + cl->AppendSwitch(switches::kTestType); + + FilePath expected_default = + FilePath::FromWStringHack(chrome::kNotSignedInProfile); + EXPECT_EQ(expected_default.value(), + profile_manager.GetCurrentProfileDir().value()); + + profile_manager.Observe(NotificationType::LOGIN_USER_CHANGED, + NotificationService::AllSources(), + NotificationService::NoDetails()); + FilePath expected_logged_in(profile_dir); + EXPECT_EQ(expected_logged_in.value(), + profile_manager.GetCurrentProfileDir().value()); + LOG(INFO) << test_dir_.Append(profile_manager.GetCurrentProfileDir()).value(); +} + +#endif + +TEST_F(ProfileManagerTest, CreateAndUseTwoProfiles) { + FilePath source_path; + PathService::Get(chrome::DIR_TEST_DATA, &source_path); + source_path = source_path.Append(FILE_PATH_LITERAL("profiles")); + source_path = source_path.Append(FILE_PATH_LITERAL("sample")); + + FilePath dest_path1 = test_dir_; + dest_path1 = dest_path1.Append(FILE_PATH_LITERAL("New Profile 1")); + + FilePath dest_path2 = test_dir_; + dest_path2 = dest_path2.Append(FILE_PATH_LITERAL("New Profile 2")); + + scoped_ptr<Profile> profile1; + scoped_ptr<Profile> profile2; + + // Successfully create the profiles. + profile1.reset(ProfileManager::CreateProfile(dest_path1)); + ASSERT_TRUE(profile1.get()); + + profile2.reset(ProfileManager::CreateProfile(dest_path2)); + ASSERT_TRUE(profile2.get()); + + // Force lazy-init of some profile services to simulate use. + EXPECT_TRUE(profile1->GetHistoryService(Profile::EXPLICIT_ACCESS)); + EXPECT_TRUE(profile1->GetBookmarkModel()); + EXPECT_TRUE(profile2->GetBookmarkModel()); + EXPECT_TRUE(profile2->GetHistoryService(Profile::EXPLICIT_ACCESS)); + profile1.reset(); + profile2.reset(); +} |