| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <fstream> | 5 #include <fstream> |
| 6 | 6 |
| 7 #include "base/file_path.h" | 7 #include "base/file_path.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| 11 #include "base/scoped_temp_dir.h" |
| 11 #include "base/string_util.h" | 12 #include "base/string_util.h" |
| 12 #include "base/string16.h" | 13 #include "base/string16.h" |
| 13 #include "base/utf_string_conversions.h" | 14 #include "base/utf_string_conversions.h" |
| 14 #include "chrome/browser/autocomplete/autocomplete.h" | 15 #include "chrome/browser/autocomplete/autocomplete.h" |
| 15 #include "chrome/browser/history/history.h" | 16 #include "chrome/browser/history/history.h" |
| 16 #include "chrome/browser/history/history_backend.h" | 17 #include "chrome/browser/history/history_backend.h" |
| 17 #include "chrome/browser/history/history_database.h" | 18 #include "chrome/browser/history/history_database.h" |
| 18 #include "chrome/browser/history/in_memory_url_index_types.h" | 19 #include "chrome/browser/history/in_memory_url_index_types.h" |
| 19 #include "chrome/browser/history/in_memory_url_index.h" | 20 #include "chrome/browser/history/in_memory_url_index.h" |
| 20 #include "chrome/browser/history/url_index_private_data.h" | 21 #include "chrome/browser/history/url_index_private_data.h" |
| 21 #include "chrome/common/chrome_paths.h" | 22 #include "chrome/common/chrome_paths.h" |
| 22 #include "chrome/test/base/testing_profile.h" | 23 #include "chrome/test/base/testing_profile.h" |
| 23 #include "content/test/test_browser_thread.h" | 24 #include "content/test/test_browser_thread.h" |
| 24 #include "sql/transaction.h" | 25 #include "sql/transaction.h" |
| 25 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| 26 | 27 |
| 28 using content::BrowserThread; |
| 29 |
| 27 // The test version of the history url database table ('url') is contained in | 30 // The test version of the history url database table ('url') is contained in |
| 28 // a database file created from a text file('url_history_provider_test.db.txt'). | 31 // a database file created from a text file('url_history_provider_test.db.txt'). |
| 29 // The only difference between this table and a live 'urls' table from a | 32 // The only difference between this table and a live 'urls' table from a |
| 30 // profile is that the last_visit_time column in the test table contains a | 33 // profile is that the last_visit_time column in the test table contains a |
| 31 // number specifying the number of days relative to 'today' to which the | 34 // number specifying the number of days relative to 'today' to which the |
| 32 // absolute time should be set during the test setup stage. | 35 // absolute time should be set during the test setup stage. |
| 33 // | 36 // |
| 34 // The format of the test database text file is of a SQLite .dump file. | 37 // The format of the test database text file is of a SQLite .dump file. |
| 35 // Note that only lines whose first character is an upper-case letter are | 38 // Note that only lines whose first character is an upper-case letter are |
| 36 // processed when creating the test database. | 39 // processed when creating the test database. |
| 37 | 40 |
| 38 namespace history { | 41 namespace history { |
| 39 | 42 |
| 43 // ----------------------------------------------------------------------------- |
| 44 |
| 45 // Observer class so the unit tests can wait while the cache is being saved. |
| 46 class CacheFileSaverObserver : public InMemoryURLIndex::SaveCacheObserver { |
| 47 public: |
| 48 explicit CacheFileSaverObserver(MessageLoop* loop); |
| 49 virtual void OnCacheSaveFinished(bool succeeded) OVERRIDE; |
| 50 |
| 51 MessageLoop* loop_; |
| 52 bool succeeded_; |
| 53 DISALLOW_COPY_AND_ASSIGN(CacheFileSaverObserver); |
| 54 }; |
| 55 |
| 56 CacheFileSaverObserver::CacheFileSaverObserver(MessageLoop* loop) |
| 57 : loop_(loop), |
| 58 succeeded_(false) { |
| 59 DCHECK(loop); |
| 60 } |
| 61 |
| 62 void CacheFileSaverObserver::OnCacheSaveFinished(bool succeeded) { |
| 63 succeeded_ = succeeded; |
| 64 loop_->Quit(); |
| 65 } |
| 66 |
| 67 // Observer class so the unit tests can wait while the cache is being restored. |
| 68 class CacheFileReaderObserver : public InMemoryURLIndex::RestoreCacheObserver { |
| 69 public: |
| 70 explicit CacheFileReaderObserver(MessageLoop* loop); |
| 71 virtual void OnCacheRestoreFinished(bool succeeded) OVERRIDE; |
| 72 |
| 73 MessageLoop* loop_; |
| 74 bool succeeded_; |
| 75 DISALLOW_COPY_AND_ASSIGN(CacheFileReaderObserver); |
| 76 }; |
| 77 |
| 78 CacheFileReaderObserver::CacheFileReaderObserver(MessageLoop* loop) |
| 79 : loop_(loop), |
| 80 succeeded_(false) { |
| 81 DCHECK(loop); |
| 82 } |
| 83 |
| 84 void CacheFileReaderObserver::OnCacheRestoreFinished(bool succeeded) { |
| 85 succeeded_ = succeeded; |
| 86 loop_->Quit(); |
| 87 } |
| 88 |
| 89 // ----------------------------------------------------------------------------- |
| 90 |
| 40 class InMemoryURLIndexTest : public testing::Test { | 91 class InMemoryURLIndexTest : public testing::Test { |
| 41 public: | 92 public: |
| 42 InMemoryURLIndexTest(); | 93 InMemoryURLIndexTest(); |
| 43 | 94 |
| 44 protected: | 95 protected: |
| 45 // Test setup. | 96 // Test setup. |
| 46 virtual void SetUp(); | 97 virtual void SetUp(); |
| 47 | 98 |
| 48 // Allows the database containing the test data to be customized by | 99 // Allows the database containing the test data to be customized by |
| 49 // subclasses. | 100 // subclasses. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 65 // Validates that the given |term| is contained in |cache| and that it is | 116 // Validates that the given |term| is contained in |cache| and that it is |
| 66 // marked as in-use. | 117 // marked as in-use. |
| 67 void CheckTerm(const URLIndexPrivateData::SearchTermCacheMap& cache, | 118 void CheckTerm(const URLIndexPrivateData::SearchTermCacheMap& cache, |
| 68 string16 term) const; | 119 string16 term) const; |
| 69 | 120 |
| 70 // Pass-through function to simplify our friendship with HistoryService. | 121 // Pass-through function to simplify our friendship with HistoryService. |
| 71 sql::Connection& GetDB(); | 122 sql::Connection& GetDB(); |
| 72 | 123 |
| 73 // Pass-through functions to simplify our friendship with InMemoryURLIndex. | 124 // Pass-through functions to simplify our friendship with InMemoryURLIndex. |
| 74 URLIndexPrivateData* GetPrivateData() const; | 125 URLIndexPrivateData* GetPrivateData() const; |
| 126 void ClearPrivateData(); |
| 127 void set_history_dir(const FilePath& dir_path); |
| 75 bool GetCacheFilePath(FilePath* file_path) const; | 128 bool GetCacheFilePath(FilePath* file_path) const; |
| 76 void ClearHistoryDir() const; | 129 void PostRestoreFromCacheFileTask(); |
| 130 void PostSaveToCacheFileTask(); |
| 77 | 131 |
| 78 // Pass-through functions to simplify our friendship with URLIndexPrivateData. | 132 // Pass-through functions to simplify our friendship with URLIndexPrivateData. |
| 79 bool UpdateURL(const URLRow& row); | 133 bool UpdateURL(const URLRow& row); |
| 80 bool DeleteURL(const GURL& url); | 134 bool DeleteURL(const GURL& url); |
| 81 | 135 |
| 82 MessageLoopForUI message_loop_; | 136 MessageLoopForUI message_loop_; |
| 83 content::TestBrowserThread ui_thread_; | 137 content::TestBrowserThread ui_thread_; |
| 84 content::TestBrowserThread file_thread_; | 138 content::TestBrowserThread file_thread_; |
| 85 TestingProfile profile_; | 139 TestingProfile profile_; |
| 86 | 140 |
| 87 scoped_ptr<InMemoryURLIndex> url_index_; | 141 scoped_ptr<InMemoryURLIndex> url_index_; |
| 88 HistoryDatabase* history_database_; | 142 HistoryDatabase* history_database_; |
| 89 }; | 143 }; |
| 90 | 144 |
| 91 InMemoryURLIndexTest::InMemoryURLIndexTest() | 145 InMemoryURLIndexTest::InMemoryURLIndexTest() |
| 92 : ui_thread_(content::BrowserThread::UI, &message_loop_), | 146 : ui_thread_(content::BrowserThread::UI, &message_loop_), |
| 93 file_thread_(content::BrowserThread::FILE, &message_loop_) { | 147 file_thread_(content::BrowserThread::FILE, &message_loop_) { |
| 94 } | 148 } |
| 95 | 149 |
| 96 sql::Connection& InMemoryURLIndexTest::GetDB() { | 150 sql::Connection& InMemoryURLIndexTest::GetDB() { |
| 97 return history_database_->GetDB(); | 151 return history_database_->GetDB(); |
| 98 } | 152 } |
| 99 | 153 |
| 100 URLIndexPrivateData* InMemoryURLIndexTest::GetPrivateData() const { | 154 URLIndexPrivateData* InMemoryURLIndexTest::GetPrivateData() const { |
| 101 DCHECK(url_index_->private_data_.get()); | 155 DCHECK(url_index_->private_data()); |
| 102 return url_index_->private_data_.get(); | 156 return url_index_->private_data(); |
| 157 } |
| 158 |
| 159 void InMemoryURLIndexTest::ClearPrivateData() { |
| 160 return url_index_->ClearPrivateData(); |
| 161 } |
| 162 |
| 163 void InMemoryURLIndexTest::set_history_dir(const FilePath& dir_path) { |
| 164 return url_index_->set_history_dir(dir_path); |
| 103 } | 165 } |
| 104 | 166 |
| 105 bool InMemoryURLIndexTest::GetCacheFilePath(FilePath* file_path) const { | 167 bool InMemoryURLIndexTest::GetCacheFilePath(FilePath* file_path) const { |
| 106 DCHECK(file_path); | 168 DCHECK(file_path); |
| 107 return url_index_->GetCacheFilePath(file_path); | 169 return url_index_->GetCacheFilePath(file_path); |
| 108 } | 170 } |
| 109 | 171 |
| 110 void InMemoryURLIndexTest::ClearHistoryDir() const { | 172 void InMemoryURLIndexTest::PostRestoreFromCacheFileTask() { |
| 111 url_index_->history_dir_.clear(); | 173 url_index_->PostRestoreFromCacheFileTask(); |
| 174 } |
| 175 |
| 176 void InMemoryURLIndexTest::PostSaveToCacheFileTask() { |
| 177 url_index_->PostSaveToCacheFileTask(); |
| 112 } | 178 } |
| 113 | 179 |
| 114 bool InMemoryURLIndexTest::UpdateURL(const URLRow& row) { | 180 bool InMemoryURLIndexTest::UpdateURL(const URLRow& row) { |
| 115 return url_index_->private_data_->UpdateURL(row); | 181 return GetPrivateData()->UpdateURL(row); |
| 116 } | 182 } |
| 117 | 183 |
| 118 bool InMemoryURLIndexTest::DeleteURL(const GURL& url) { | 184 bool InMemoryURLIndexTest::DeleteURL(const GURL& url) { |
| 119 return url_index_->private_data_->DeleteURL(url); | 185 return GetPrivateData()->DeleteURL(url); |
| 120 } | 186 } |
| 121 | 187 |
| 122 void InMemoryURLIndexTest::SetUp() { | 188 void InMemoryURLIndexTest::SetUp() { |
| 123 // We cannot access the database until the backend has been loaded. | 189 // We cannot access the database until the backend has been loaded. |
| 124 profile_.CreateHistoryService(true, false); | 190 profile_.CreateHistoryService(true, false); |
| 125 profile_.CreateBookmarkModel(true); | 191 profile_.CreateBookmarkModel(true); |
| 126 profile_.BlockUntilBookmarkModelLoaded(); | 192 profile_.BlockUntilBookmarkModelLoaded(); |
| 127 profile_.BlockUntilHistoryProcessesPendingRequests(); | 193 profile_.BlockUntilHistoryProcessesPendingRequests(); |
| 128 HistoryService* history_service = | 194 HistoryService* history_service = |
| 129 profile_.GetHistoryService(Profile::EXPLICIT_ACCESS); | 195 profile_.GetHistoryService(Profile::EXPLICIT_ACCESS); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 FilePath::StringType TestDBName() const; | 328 FilePath::StringType TestDBName() const; |
| 263 }; | 329 }; |
| 264 | 330 |
| 265 FilePath::StringType LimitedInMemoryURLIndexTest::TestDBName() const { | 331 FilePath::StringType LimitedInMemoryURLIndexTest::TestDBName() const { |
| 266 return FILE_PATH_LITERAL("url_history_provider_test_limited.db.txt"); | 332 return FILE_PATH_LITERAL("url_history_provider_test_limited.db.txt"); |
| 267 } | 333 } |
| 268 | 334 |
| 269 TEST_F(LimitedInMemoryURLIndexTest, Initialization) { | 335 TEST_F(LimitedInMemoryURLIndexTest, Initialization) { |
| 270 // Verify that the database contains the expected number of items, which | 336 // Verify that the database contains the expected number of items, which |
| 271 // is the pre-filtered count, i.e. all of the items. | 337 // is the pre-filtered count, i.e. all of the items. |
| 272 sql::Connection& db(GetDB()); | 338 sql::Statement statement(GetDB().GetUniqueStatement("SELECT * FROM urls;")); |
| 273 sql::Statement statement(db.GetUniqueStatement("SELECT * FROM urls;")); | |
| 274 ASSERT_TRUE(statement.is_valid()); | 339 ASSERT_TRUE(statement.is_valid()); |
| 275 uint64 row_count = 0; | 340 uint64 row_count = 0; |
| 276 while (statement.Step()) ++row_count; | 341 while (statement.Step()) ++row_count; |
| 277 EXPECT_EQ(1U, row_count); | 342 EXPECT_EQ(1U, row_count); |
| 278 url_index_.reset( | 343 url_index_.reset( |
| 279 new InMemoryURLIndex(&profile_, FilePath(), "en,ja,hi,zh")); | 344 new InMemoryURLIndex(&profile_, FilePath(), "en,ja,hi,zh")); |
| 280 url_index_->Init(); | 345 url_index_->Init(); |
| 281 url_index_->RebuildFromHistory(history_database_); | 346 url_index_->RebuildFromHistory(history_database_); |
| 282 URLIndexPrivateData& private_data(*(url_index_->private_data_)); | 347 URLIndexPrivateData& private_data(*GetPrivateData()); |
| 283 | 348 |
| 284 // history_info_map_ should have the same number of items as were filtered. | 349 // history_info_map_ should have the same number of items as were filtered. |
| 285 EXPECT_EQ(1U, private_data.history_info_map_.size()); | 350 EXPECT_EQ(1U, private_data.history_info_map_.size()); |
| 286 EXPECT_EQ(35U, private_data.char_word_map_.size()); | 351 EXPECT_EQ(35U, private_data.char_word_map_.size()); |
| 287 EXPECT_EQ(17U, private_data.word_map_.size()); | 352 EXPECT_EQ(17U, private_data.word_map_.size()); |
| 288 } | 353 } |
| 289 | 354 |
| 290 TEST_F(InMemoryURLIndexTest, Retrieval) { | 355 TEST_F(InMemoryURLIndexTest, Retrieval) { |
| 291 // See if a very specific term gives a single result. | 356 // See if a very specific term gives a single result. |
| 292 ScoredHistoryMatches matches = | 357 ScoredHistoryMatches matches = |
| (...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 | 811 |
| 747 URLIndexPrivateData& private_data(*GetPrivateData()); | 812 URLIndexPrivateData& private_data(*GetPrivateData()); |
| 748 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { | 813 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { |
| 749 GURL url(data[i].url_spec); | 814 GURL url(data[i].url_spec); |
| 750 EXPECT_EQ(data[i].expected_is_whitelisted, | 815 EXPECT_EQ(data[i].expected_is_whitelisted, |
| 751 private_data.URLSchemeIsWhitelisted(url)); | 816 private_data.URLSchemeIsWhitelisted(url)); |
| 752 } | 817 } |
| 753 } | 818 } |
| 754 | 819 |
| 755 TEST_F(InMemoryURLIndexTest, CacheSaveRestore) { | 820 TEST_F(InMemoryURLIndexTest, CacheSaveRestore) { |
| 756 // Save the cache to a protobuf, restore it, and compare the results. | 821 ScopedTempDir temp_directory; |
| 757 in_memory_url_index::InMemoryURLIndexCacheItem index_cache; | 822 ASSERT_TRUE(temp_directory.CreateUniqueTempDir()); |
| 823 set_history_dir(temp_directory.path()); |
| 824 |
| 758 URLIndexPrivateData& private_data(*GetPrivateData()); | 825 URLIndexPrivateData& private_data(*GetPrivateData()); |
| 759 private_data.SavePrivateData(&index_cache); | |
| 760 | 826 |
| 761 // Capture our private data so we can later compare for equality. | 827 // Ensure that there is really something there to be saved. |
| 762 String16Vector word_list(private_data.word_list_); | |
| 763 WordMap word_map(private_data.word_map_); | |
| 764 CharWordIDMap char_word_map(private_data.char_word_map_); | |
| 765 WordIDHistoryMap word_id_history_map(private_data.word_id_history_map_); | |
| 766 HistoryIDWordMap history_id_word_map(private_data.history_id_word_map_); | |
| 767 HistoryInfoMap history_info_map(private_data.history_info_map_); | |
| 768 | |
| 769 // Prove that there is really something there. | |
| 770 EXPECT_FALSE(private_data.word_list_.empty()); | 828 EXPECT_FALSE(private_data.word_list_.empty()); |
| 771 // available_words_ will already be empty since we have freshly built the | 829 // available_words_ will already be empty since we have freshly built the |
| 772 // data set for this test. | 830 // data set for this test. |
| 773 EXPECT_TRUE(private_data.available_words_.empty()); | 831 EXPECT_TRUE(private_data.available_words_.empty()); |
| 774 EXPECT_FALSE(private_data.word_map_.empty()); | 832 EXPECT_FALSE(private_data.word_map_.empty()); |
| 775 EXPECT_FALSE(private_data.char_word_map_.empty()); | 833 EXPECT_FALSE(private_data.char_word_map_.empty()); |
| 776 EXPECT_FALSE(private_data.word_id_history_map_.empty()); | 834 EXPECT_FALSE(private_data.word_id_history_map_.empty()); |
| 777 EXPECT_FALSE(private_data.history_id_word_map_.empty()); | 835 EXPECT_FALSE(private_data.history_id_word_map_.empty()); |
| 778 EXPECT_FALSE(private_data.history_info_map_.empty()); | 836 EXPECT_FALSE(private_data.history_info_map_.empty()); |
| 779 | 837 |
| 780 // Clear and then prove it's clear. | 838 // Capture the current private data for later comparison to restored data. |
| 781 private_data.Clear(); | 839 URLIndexPrivateData old_data(private_data); |
| 840 |
| 841 // Save then restore our private data. |
| 842 CacheFileSaverObserver save_observer(&message_loop_); |
| 843 url_index_->set_save_cache_observer(&save_observer); |
| 844 PostSaveToCacheFileTask(); |
| 845 message_loop_.Run(); |
| 846 EXPECT_TRUE(save_observer.succeeded_); |
| 847 |
| 848 // Clear and then prove it's clear before restoring. |
| 849 ClearPrivateData(); |
| 782 EXPECT_TRUE(private_data.word_list_.empty()); | 850 EXPECT_TRUE(private_data.word_list_.empty()); |
| 783 EXPECT_TRUE(private_data.available_words_.empty()); | 851 EXPECT_TRUE(private_data.available_words_.empty()); |
| 784 EXPECT_TRUE(private_data.word_map_.empty()); | 852 EXPECT_TRUE(private_data.word_map_.empty()); |
| 785 EXPECT_TRUE(private_data.char_word_map_.empty()); | 853 EXPECT_TRUE(private_data.char_word_map_.empty()); |
| 786 EXPECT_TRUE(private_data.word_id_history_map_.empty()); | 854 EXPECT_TRUE(private_data.word_id_history_map_.empty()); |
| 787 EXPECT_TRUE(private_data.history_id_word_map_.empty()); | 855 EXPECT_TRUE(private_data.history_id_word_map_.empty()); |
| 788 EXPECT_TRUE(private_data.history_info_map_.empty()); | 856 EXPECT_TRUE(private_data.history_info_map_.empty()); |
| 789 | 857 |
| 790 // Restore the cache. | 858 CacheFileReaderObserver read_observer(&message_loop_); |
| 791 EXPECT_TRUE(private_data.RestorePrivateData(index_cache)); | 859 url_index_->set_restore_cache_observer(&read_observer); |
| 860 PostRestoreFromCacheFileTask(); |
| 861 message_loop_.Run(); |
| 862 EXPECT_TRUE(read_observer.succeeded_); |
| 792 | 863 |
| 793 // Compare the restored and captured for equality. | 864 URLIndexPrivateData& new_data(*GetPrivateData()); |
| 794 EXPECT_EQ(word_list.size(), private_data.word_list_.size()); | 865 |
| 795 EXPECT_EQ(word_map.size(), private_data.word_map_.size()); | 866 // Compare the captured and restored for equality. |
| 796 EXPECT_EQ(char_word_map.size(), private_data.char_word_map_.size()); | 867 EXPECT_EQ(old_data.word_list_.size(), new_data.word_list_.size()); |
| 797 EXPECT_EQ(word_id_history_map.size(), | 868 EXPECT_EQ(old_data.word_map_.size(), new_data.word_map_.size()); |
| 798 private_data.word_id_history_map_.size()); | 869 EXPECT_EQ(old_data.char_word_map_.size(), new_data.char_word_map_.size()); |
| 799 EXPECT_EQ(history_id_word_map.size(), | 870 EXPECT_EQ(old_data.word_id_history_map_.size(), |
| 800 private_data.history_id_word_map_.size()); | 871 new_data.word_id_history_map_.size()); |
| 801 EXPECT_EQ(history_info_map.size(), private_data.history_info_map_.size()); | 872 EXPECT_EQ(old_data.history_id_word_map_.size(), |
| 873 new_data.history_id_word_map_.size()); |
| 874 EXPECT_EQ(old_data.history_info_map_.size(), |
| 875 new_data.history_info_map_.size()); |
| 802 // WordList must be index-by-index equal. | 876 // WordList must be index-by-index equal. |
| 803 size_t count = word_list.size(); | 877 size_t count = old_data.word_list_.size(); |
| 804 for (size_t i = 0; i < count; ++i) | 878 for (size_t i = 0; i < count; ++i) |
| 805 EXPECT_EQ(word_list[i], private_data.word_list_[i]); | 879 EXPECT_EQ(old_data.word_list_[i], new_data.word_list_[i]); |
| 806 | 880 |
| 807 ExpectMapOfContainersIdentical(char_word_map, | 881 ExpectMapOfContainersIdentical(old_data.char_word_map_, |
| 808 private_data.char_word_map_); | 882 new_data.char_word_map_); |
| 809 ExpectMapOfContainersIdentical(word_id_history_map, | 883 ExpectMapOfContainersIdentical(old_data.word_id_history_map_, |
| 810 private_data.word_id_history_map_); | 884 new_data.word_id_history_map_); |
| 811 ExpectMapOfContainersIdentical(history_id_word_map, | 885 ExpectMapOfContainersIdentical(old_data.history_id_word_map_, |
| 812 private_data.history_id_word_map_); | 886 new_data.history_id_word_map_); |
| 813 | 887 |
| 814 for (HistoryInfoMap::const_iterator expected = history_info_map.begin(); | 888 for (HistoryInfoMap::const_iterator expected = |
| 815 expected != history_info_map.end(); ++expected) { | 889 old_data.history_info_map_.begin(); |
| 890 expected != old_data.history_info_map_.end(); ++expected) { |
| 816 HistoryInfoMap::const_iterator actual = | 891 HistoryInfoMap::const_iterator actual = |
| 817 private_data.history_info_map_.find(expected->first); | 892 new_data.history_info_map_.find(expected->first); |
| 818 ASSERT_FALSE(private_data.history_info_map_.end() == actual); | 893 ASSERT_FALSE(new_data.history_info_map_.end() == actual); |
| 819 const URLRow& expected_row(expected->second); | 894 const URLRow& expected_row(expected->second); |
| 820 const URLRow& actual_row(actual->second); | 895 const URLRow& actual_row(actual->second); |
| 821 EXPECT_EQ(expected_row.visit_count(), actual_row.visit_count()); | 896 EXPECT_EQ(expected_row.visit_count(), actual_row.visit_count()); |
| 822 EXPECT_EQ(expected_row.typed_count(), actual_row.typed_count()); | 897 EXPECT_EQ(expected_row.typed_count(), actual_row.typed_count()); |
| 823 EXPECT_EQ(expected_row.last_visit(), actual_row.last_visit()); | 898 EXPECT_EQ(expected_row.last_visit(), actual_row.last_visit()); |
| 824 EXPECT_EQ(expected_row.url(), actual_row.url()); | 899 EXPECT_EQ(expected_row.url(), actual_row.url()); |
| 825 } | 900 } |
| 826 } | 901 } |
| 827 | 902 |
| 828 class InMemoryURLIndexCacheTest : public testing::Test { | 903 class InMemoryURLIndexCacheTest : public testing::Test { |
| 829 public: | 904 public: |
| 830 InMemoryURLIndexCacheTest() {} | 905 InMemoryURLIndexCacheTest() {} |
| 831 | 906 |
| 832 protected: | 907 protected: |
| 833 virtual void SetUp() OVERRIDE; | 908 virtual void SetUp() OVERRIDE; |
| 834 | 909 |
| 910 // Pass-through functions to simplify our friendship with InMemoryURLIndex. |
| 911 void set_history_dir(const FilePath& dir_path); |
| 912 bool GetCacheFilePath(FilePath* file_path) const; |
| 913 |
| 835 ScopedTempDir temp_dir_; | 914 ScopedTempDir temp_dir_; |
| 836 scoped_ptr<InMemoryURLIndex> url_index_; | 915 scoped_ptr<InMemoryURLIndex> url_index_; |
| 837 }; | 916 }; |
| 838 | 917 |
| 839 void InMemoryURLIndexCacheTest::SetUp() { | 918 void InMemoryURLIndexCacheTest::SetUp() { |
| 840 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 919 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 841 FilePath path(temp_dir_.path()); | 920 FilePath path(temp_dir_.path()); |
| 842 url_index_.reset( | 921 url_index_.reset( |
| 843 new InMemoryURLIndex(NULL, path, "en,ja,hi,zh")); | 922 new InMemoryURLIndex(NULL, path, "en,ja,hi,zh")); |
| 844 } | 923 } |
| 845 | 924 |
| 925 void InMemoryURLIndexCacheTest::set_history_dir(const FilePath& dir_path) { |
| 926 return url_index_->set_history_dir(dir_path); |
| 927 } |
| 928 |
| 929 bool InMemoryURLIndexCacheTest::GetCacheFilePath(FilePath* file_path) const { |
| 930 DCHECK(file_path); |
| 931 return url_index_->GetCacheFilePath(file_path); |
| 932 } |
| 933 |
| 846 TEST_F(InMemoryURLIndexCacheTest, CacheFilePath) { | 934 TEST_F(InMemoryURLIndexCacheTest, CacheFilePath) { |
| 847 FilePath expectedPath = | 935 FilePath expectedPath = |
| 848 temp_dir_.path().Append(FILE_PATH_LITERAL("History Provider Cache")); | 936 temp_dir_.path().Append(FILE_PATH_LITERAL("History Provider Cache")); |
| 849 std::vector<FilePath::StringType> expected_parts; | 937 std::vector<FilePath::StringType> expected_parts; |
| 850 expectedPath.GetComponents(&expected_parts); | 938 expectedPath.GetComponents(&expected_parts); |
| 851 FilePath full_file_path; | 939 FilePath full_file_path; |
| 852 ASSERT_TRUE(url_index_->GetCacheFilePath(&full_file_path)); | 940 ASSERT_TRUE(GetCacheFilePath(&full_file_path)); |
| 853 std::vector<FilePath::StringType> actual_parts; | 941 std::vector<FilePath::StringType> actual_parts; |
| 854 full_file_path.GetComponents(&actual_parts); | 942 full_file_path.GetComponents(&actual_parts); |
| 855 ASSERT_EQ(expected_parts.size(), actual_parts.size()); | 943 ASSERT_EQ(expected_parts.size(), actual_parts.size()); |
| 856 size_t count = expected_parts.size(); | 944 size_t count = expected_parts.size(); |
| 857 for (size_t i = 0; i < count; ++i) | 945 for (size_t i = 0; i < count; ++i) |
| 858 EXPECT_EQ(expected_parts[i], actual_parts[i]); | 946 EXPECT_EQ(expected_parts[i], actual_parts[i]); |
| 859 // Must clear the history_dir_ to satisfy the dtor's DCHECK. | 947 // Must clear the history_dir_ to satisfy the dtor's DCHECK. |
| 860 url_index_->history_dir_.clear(); | 948 set_history_dir(FilePath()); |
| 861 } | 949 } |
| 862 | 950 |
| 863 } // namespace history | 951 } // namespace history |
| OLD | NEW |