Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(125)

Side by Side Diff: chrome/browser/history/starred_url_database_unittest.cc

Issue 10870029: Remove legacy migration code that coupled history and bookmarks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More android fixes. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/history/starred_url_database.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 <vector>
6
7 #include "base/compiler_specific.h"
8 #include "base/file_util.h"
9 #include "base/path_service.h"
10 #include "base/scoped_temp_dir.h"
11 #include "base/string_util.h"
12 #include "base/utf_string_conversions.h"
13 #include "chrome/browser/history/history.h"
14 #include "chrome/browser/history/starred_url_database.h"
15 #include "chrome/common/chrome_paths.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 namespace history {
19
20 class StarredURLDatabaseTest : public testing::Test,
21 public StarredURLDatabase {
22 public:
23 StarredURLDatabaseTest()
24 : StarredURLDatabase(&db_) {
25 }
26
27 void AddPage(const GURL& url) {
28 URLRow row(url);
29 row.set_visit_count(1);
30 EXPECT_TRUE(AddURL(row));
31 }
32
33 void CompareEntryByID(const StarredEntry& entry) {
34 DCHECK(entry.id != 0);
35 StarredEntry db_value;
36 EXPECT_TRUE(GetStarredEntry(entry.id, &db_value));
37 EXPECT_EQ(entry.id, db_value.id);
38 EXPECT_TRUE(entry.title == db_value.title);
39 EXPECT_EQ(entry.date_added.ToTimeT(), db_value.date_added.ToTimeT());
40 EXPECT_EQ(entry.folder_id, db_value.folder_id);
41 EXPECT_EQ(entry.parent_folder_id, db_value.parent_folder_id);
42 EXPECT_EQ(entry.visual_order, db_value.visual_order);
43 EXPECT_EQ(entry.type, db_value.type);
44 EXPECT_EQ(entry.url_id, db_value.url_id);
45 if (entry.type == StarredEntry::URL)
46 EXPECT_TRUE(entry.url == db_value.url);
47 }
48
49 int GetStarredEntryCount() {
50 DCHECK(db_.is_open());
51 std::vector<StarredEntry> entries;
52 GetAllStarredEntries(&entries);
53 return static_cast<int>(entries.size());
54 }
55
56 StarID CreateStarredEntry(StarredEntry* entry) {
57 return StarredURLDatabase::CreateStarredEntry(entry);
58 }
59
60 bool GetStarredEntry(StarID star_id, StarredEntry* entry) {
61 return StarredURLDatabase::GetStarredEntry(star_id, entry);
62 }
63
64 bool EnsureStarredIntegrity() {
65 return StarredURLDatabase::EnsureStarredIntegrity();
66 }
67
68 private:
69 // Test setup.
70 virtual void SetUp() OVERRIDE {
71 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
72 db_file_ = temp_dir_.path().AppendASCII("VisitTest.db");
73 file_util::Delete(db_file_, false);
74
75 // Copy db file over that contains starred table.
76 FilePath old_history_path;
77 PathService::Get(chrome::DIR_TEST_DATA, &old_history_path);
78 old_history_path = old_history_path.AppendASCII("bookmarks");
79 old_history_path = old_history_path.Append(
80 FILE_PATH_LITERAL("History_with_empty_starred"));
81 file_util::CopyFile(old_history_path, db_file_);
82
83 EXPECT_TRUE(db_.Open(db_file_));
84
85 // Initialize the tables for this test.
86 CreateURLTable(false);
87 CreateMainURLIndex();
88 EnsureStarredIntegrity();
89 }
90 virtual void TearDown() OVERRIDE {
91 db_.Close();
92 }
93
94 ScopedTempDir temp_dir_;
95 FilePath db_file_;
96 sql::Connection db_;
97 };
98
99 //-----------------------------------------------------------------------------
100
101 TEST_F(StarredURLDatabaseTest, FixOrphanedFolder) {
102 const int initial_count = GetStarredEntryCount();
103
104 // Create a folder that isn't parented to the other/bookmark folders.
105 StarredEntry g_entry;
106 g_entry.type = StarredEntry::USER_FOLDER;
107 g_entry.parent_folder_id = 100;
108 g_entry.visual_order = 10;
109 g_entry.folder_id = 100;
110 CreateStarredEntry(&g_entry);
111
112 ASSERT_TRUE(EnsureStarredIntegrity());
113
114 // Make sure no new entries were added.
115 ASSERT_EQ(initial_count + 1, GetStarredEntryCount());
116
117 // Make sure the folder was moved to the bookmark bar folder.
118 ASSERT_TRUE(GetStarredEntry(g_entry.id, &g_entry));
119 ASSERT_EQ(kBookmarkBarID, g_entry.parent_folder_id);
120 ASSERT_EQ(0, g_entry.visual_order);
121 }
122
123 TEST_F(StarredURLDatabaseTest, FixOrphanedBookmarks) {
124 const int initial_count = GetStarredEntryCount();
125
126 // Create two bookmarks that aren't in a random folder no on the bookmark bar.
127 StarredEntry entry1;
128 entry1.parent_folder_id = 100;
129 entry1.visual_order = 10;
130 entry1.url = GURL("http://google.com/1");
131 CreateStarredEntry(&entry1);
132
133 StarredEntry entry2;
134 entry2.parent_folder_id = 101;
135 entry2.visual_order = 20;
136 entry2.url = GURL("http://google.com/2");
137 CreateStarredEntry(&entry2);
138
139 ASSERT_TRUE(EnsureStarredIntegrity());
140
141 // Make sure no new entries were added.
142 ASSERT_EQ(initial_count + 2, GetStarredEntryCount());
143
144 // Make sure the entries were moved to the bookmark bar and the visual order
145 // order was updated appropriately.
146 ASSERT_TRUE(GetStarredEntry(entry1.id, &entry1));
147 ASSERT_EQ(kBookmarkBarID, entry1.parent_folder_id);
148
149 ASSERT_TRUE(GetStarredEntry(entry2.id, &entry2));
150 ASSERT_EQ(kBookmarkBarID, entry2.parent_folder_id);
151 ASSERT_TRUE((entry1.visual_order == 0 && entry2.visual_order == 1) ||
152 (entry1.visual_order == 1 && entry2.visual_order == 0));
153 }
154
155 TEST_F(StarredURLDatabaseTest, FixFolderCycleDepth0) {
156 const int initial_count = GetStarredEntryCount();
157
158 // Create a folder that is parented to itself.
159 StarredEntry entry1;
160 entry1.folder_id = entry1.parent_folder_id = 100;
161 entry1.visual_order = 10;
162 entry1.type = StarredEntry::USER_FOLDER;
163 CreateStarredEntry(&entry1);
164
165 ASSERT_TRUE(EnsureStarredIntegrity());
166
167 // Make sure no new entries were added.
168 ASSERT_EQ(initial_count + 1, GetStarredEntryCount());
169
170 // Make sure the folder were moved to the bookmark bar and the visual order
171 // order was updated appropriately.
172 ASSERT_TRUE(GetStarredEntry(entry1.id, &entry1));
173 ASSERT_EQ(kBookmarkBarID, entry1.parent_folder_id);
174 ASSERT_EQ(0, entry1.visual_order);
175 }
176
177 TEST_F(StarredURLDatabaseTest, FixFolderCycleDepth1) {
178 const int initial_count = GetStarredEntryCount();
179
180 StarredEntry entry1;
181 entry1.folder_id = 100;
182 entry1.parent_folder_id = 101;
183 entry1.visual_order = 10;
184 entry1.type = StarredEntry::USER_FOLDER;
185 CreateStarredEntry(&entry1);
186
187 StarredEntry entry2;
188 entry2.folder_id = 101;
189 entry2.parent_folder_id = 100;
190 entry2.visual_order = 11;
191 entry2.type = StarredEntry::USER_FOLDER;
192 CreateStarredEntry(&entry2);
193
194 ASSERT_TRUE(EnsureStarredIntegrity());
195
196 // Make sure no new entries were added.
197 ASSERT_EQ(initial_count + 2, GetStarredEntryCount());
198
199 // Because the folders caused a cycle, entry1 is moved the bookmark bar, which
200 // breaks the cycle.
201 ASSERT_TRUE(GetStarredEntry(entry1.id, &entry1));
202 ASSERT_TRUE(GetStarredEntry(entry2.id, &entry2));
203 ASSERT_EQ(kBookmarkBarID, entry1.parent_folder_id);
204 ASSERT_EQ(100, entry2.parent_folder_id);
205 ASSERT_EQ(0, entry1.visual_order);
206 ASSERT_EQ(0, entry2.visual_order);
207 }
208
209 TEST_F(StarredURLDatabaseTest, FixVisualOrder) {
210 const int initial_count = GetStarredEntryCount();
211
212 // Star two urls.
213 StarredEntry entry1;
214 entry1.url = GURL("http://google.com/1");
215 entry1.parent_folder_id = kBookmarkBarID;
216 entry1.visual_order = 5;
217 CreateStarredEntry(&entry1);
218
219 // Add url2 and star it.
220 StarredEntry entry2;
221 entry2.url = GURL("http://google.com/2");
222 entry2.parent_folder_id = kBookmarkBarID;
223 entry2.visual_order = 10;
224 CreateStarredEntry(&entry2);
225
226 ASSERT_TRUE(EnsureStarredIntegrity());
227
228 // Make sure no new entries were added.
229 ASSERT_EQ(initial_count + 2, GetStarredEntryCount());
230
231 StarredEntry entry;
232 ASSERT_TRUE(GetStarredEntry(entry1.id, &entry));
233 entry1.visual_order = 0;
234 CompareEntryByID(entry1);
235
236 ASSERT_TRUE(GetStarredEntry(entry2.id, &entry));
237 entry2.visual_order = 1;
238 CompareEntryByID(entry2);
239 }
240
241 TEST_F(StarredURLDatabaseTest, FixDuplicateFolderIDs) {
242 const int initial_count = GetStarredEntryCount();
243
244 // Create two folders with the same folder id.
245 StarredEntry entry1;
246 entry1.type = StarredEntry::USER_FOLDER;
247 entry1.folder_id = 10;
248 entry1.parent_folder_id = kBookmarkBarID;
249 CreateStarredEntry(&entry1);
250 StarredEntry entry2 = entry1;
251 CreateStarredEntry(&entry2);
252
253 ASSERT_TRUE(EnsureStarredIntegrity());
254
255 // Make sure only one folder exists.
256 ASSERT_EQ(initial_count + 1, GetStarredEntryCount());
257
258 StarredEntry entry;
259 ASSERT_TRUE(GetStarredEntry(entry1.id, &entry) ||
260 GetStarredEntry(entry2.id, &entry));
261 }
262
263 TEST_F(StarredURLDatabaseTest, RemoveStarredEntriesWithEmptyURL) {
264 const int initial_count = GetStarredEntryCount();
265
266 StarredEntry entry;
267 entry.url = GURL("http://google.com");
268 entry.title = UTF8ToUTF16("FOO");
269 entry.parent_folder_id = kBookmarkBarID;
270
271 ASSERT_NE(0, CreateStarredEntry(&entry));
272
273 // Remove the URL.
274 DeleteURLRow(entry.url_id);
275
276 // Fix up the table.
277 ASSERT_TRUE(EnsureStarredIntegrity());
278
279 // The entry we just created should have been nuked.
280 ASSERT_EQ(initial_count, GetStarredEntryCount());
281 }
282
283 } // namespace history
OLDNEW
« no previous file with comments | « chrome/browser/history/starred_url_database.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698