Index: chrome/browser/history/in_memory_url_index_base_unittest.cc |
=================================================================== |
--- chrome/browser/history/in_memory_url_index_base_unittest.cc (revision 0) |
+++ chrome/browser/history/in_memory_url_index_base_unittest.cc (revision 0) |
@@ -0,0 +1,143 @@ |
+// Copyright (c) 2011 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/history/in_memory_url_index_base_unittest.h" |
+ |
+#include "base/file_path.h" |
+#include "base/file_util.h" |
+#include "base/path_service.h" |
+#include "base/string_split.h" |
+#include "base/synchronization/waitable_event.h" |
+#include "chrome/browser/history/history.h" |
+#include "chrome/browser/history/history_backend.h" |
+#include "chrome/browser/history/history_service_factory.h" |
+#include "chrome/browser/history/in_memory_url_cache_database.h" |
+#include "chrome/browser/history/in_memory_url_index.h" |
+#include "chrome/browser/history/url_index_private_data.h" |
+#include "chrome/common/chrome_paths.h" |
+#include "chrome/test/base/ui_test_utils.h" |
+#include "content/public/browser/browser_thread.h" |
+#include "sql/connection.h" |
+#include "sql/statement.h" |
+#include "sql/transaction.h" |
+ |
+namespace history { |
+ |
+InMemoryURLIndexBaseTest::InMemoryURLIndexBaseTest() |
+ : ui_thread_(content::BrowserThread::UI, &message_loop_), |
+ db_thread_(content::BrowserThread::DB) { |
+} |
+ |
+InMemoryURLIndexBaseTest::~InMemoryURLIndexBaseTest() { |
+} |
+ |
+void InMemoryURLIndexBaseTest::SetUp() { |
+ if (!profile_.get()) |
+ profile_.reset(new TestingProfile); |
+ db_thread_.Start(); |
+ // We cannot access the database until the backend has been loaded. |
+ profile_->CreateHistoryService(true, false); |
+ HistoryService* history_service = |
+ HistoryServiceFactory::GetForProfile(profile_.get(), |
+ Profile::EXPLICIT_ACCESS); |
+ ASSERT_TRUE(history_service); |
+ url_index_ = history_service->InMemoryIndex(); |
+ BlockUntilIndexLoaded(); |
+ DCHECK(url_index_->index_available()); |
+ profile_->CreateBookmarkModel(true); |
+ HistoryBackend* backend = history_service->get_history_backend_for_testing(); |
+ history_database_ = backend->db(); |
+ ui_test_utils::WaitForHistoryToLoad(history_service); |
+ DCHECK(history_service->backend_loaded()); |
+ |
+ // Create and populate a working copy of the URL history database from the |
+ // data contained in the file specified by the TestDBName() function. |
+ // TODO(mrossetti): Adopt sqlite3_ functions for performing the database |
+ // initialization. See http://crbug.com/137352. |
+ FilePath test_file_path; |
+ PathService::Get(chrome::DIR_TEST_DATA, &test_file_path); |
+ test_file_path = test_file_path.Append(FILE_PATH_LITERAL("History")); |
+ test_file_path = test_file_path.Append(TestDBName()); |
+ EXPECT_TRUE(file_util::PathExists(test_file_path)); |
+ |
+ std::string sql_command_buffer; |
+ file_util::ReadFileToString(test_file_path, &sql_command_buffer); |
+ std::vector<std::string> sql_commands; |
+ base::SplitStringDontTrim(sql_command_buffer, '\n', &sql_commands); |
+ sql::Connection* db(history_database_->get_db_for_testing()); |
+ for (std::vector<std::string>::const_iterator i = sql_commands.begin(); |
+ i != sql_commands.end(); ++i) { |
+ // We only process lines which begin with a upper-case letter. |
+ // TODO(mrossetti): Can iswupper() be used here? |
+ const std::string& sql_command(*i); |
+ if (sql_command[0] >= 'A' && sql_command[0] <= 'Z') |
+ EXPECT_TRUE(db->Execute(sql_command.c_str())); |
+ } |
+ |
+ // Update the last_visit_time table column such that it represents a time |
+ // relative to 'now'. |
+ // TODO(mrossetti): Do an UPDATE to alter the days-ago. |
+ // See http://crbug.com/137352. |
+ sql::Statement statement(db->GetUniqueStatement( |
+ "SELECT" HISTORY_URL_ROW_FIELDS "FROM urls")); |
+ EXPECT_TRUE(statement.is_valid()); |
+ base::Time time_right_now = base::Time::NowFromSystemTime(); |
+ base::TimeDelta day_delta = base::TimeDelta::FromDays(1); |
+ while (statement.Step()) { |
+ URLRow row; |
+ history_database_->FillURLRow(statement, &row); |
+ row.set_last_visit(time_right_now - |
+ day_delta * row.last_visit().ToInternalValue()); |
+ history_database_->UpdateURLRow(row.id(), row); |
+ } |
+} |
+ |
+void InMemoryURLIndexBaseTest::TearDown() { |
+ profile_->BlockUntilHistoryProcessesPendingRequests(); |
+ message_loop_.RunAllPending(); |
+ MessageLoop::current()->RunAllPending(); |
+ content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
+ base::WaitableEvent done(false, false); |
+ content::BrowserThread::PostTask(content::BrowserThread::DB, FROM_HERE, |
+ base::Bind(&base::WaitableEvent::Signal, base::Unretained(&done))); |
+ done.Wait(); |
+ db_thread_.Stop(); |
+ message_loop_.RunAllPending(); |
+ MessageLoop::current()->RunAllPending(); |
+} |
+ |
+void InMemoryURLIndexBaseTest::LoadIndex() { |
+ url_index_->ScheduleRebuildFromHistory(); |
+ BlockUntilIndexLoaded(); |
+} |
+ |
+void InMemoryURLIndexBaseTest::BlockUntilIndexLoaded() { |
+ if (url_index_->index_available()) |
+ return; |
+ content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
+ InMemoryURLIndex::Observer observer(url_index_); |
+ MessageLoop::current()->Run(); |
+} |
+ |
+URLIndexPrivateData* InMemoryURLIndexBaseTest::GetPrivateData() { |
+ return url_index_->private_data(); |
+} |
+ |
+bool InMemoryURLIndexBaseTest::UpdateURL(const URLRow& row) { |
+ bool success = GetPrivateData()->UpdateURL(row); |
+ content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
+ return success; |
+} |
+ |
+bool InMemoryURLIndexBaseTest::DeleteURL(const GURL& url) { |
+ bool success = GetPrivateData()->DeleteURL(url); |
+ content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
+ return success; |
+} |
+ |
+bool InMemoryURLIndexBaseTest::GetCacheDBPath(FilePath* file_path) { |
+ return GetPrivateData()->GetCacheDBPath(file_path); |
+} |
+ |
+} // namespace history |
Property changes on: chrome/browser/history/in_memory_url_index_base_unittest.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |