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 "chrome/browser/bookmarks/bookmark_utils.h" | 5 #include "chrome/browser/bookmarks/bookmark_utils.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
11 #include "chrome/browser/bookmarks/base_bookmark_model_observer.h" | 11 #include "chrome/browser/bookmarks/base_bookmark_model_observer.h" |
12 #include "chrome/browser/bookmarks/bookmark_model.h" | 12 #include "chrome/browser/bookmarks/bookmark_model.h" |
13 #include "chrome/browser/bookmarks/bookmark_node_data.h" | 13 #include "chrome/browser/bookmarks/bookmark_node_data.h" |
| 14 #include "chrome/browser/bookmarks/test_bookmark_client.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "ui/base/clipboard/clipboard.h" | 16 #include "ui/base/clipboard/clipboard.h" |
16 #include "ui/base/clipboard/scoped_clipboard_writer.h" | 17 #include "ui/base/clipboard/scoped_clipboard_writer.h" |
17 | 18 |
18 using base::ASCIIToUTF16; | 19 using base::ASCIIToUTF16; |
19 using std::string; | 20 using std::string; |
20 | 21 |
21 namespace bookmark_utils { | 22 namespace bookmark_utils { |
22 namespace { | 23 namespace { |
23 | 24 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 int grouped_changes_beginning_count_; | 64 int grouped_changes_beginning_count_; |
64 int grouped_changes_ended_count_; | 65 int grouped_changes_ended_count_; |
65 | 66 |
66 // Clipboard requires a message loop. | 67 // Clipboard requires a message loop. |
67 base::MessageLoopForUI loop_; | 68 base::MessageLoopForUI loop_; |
68 | 69 |
69 DISALLOW_COPY_AND_ASSIGN(BookmarkUtilsTest); | 70 DISALLOW_COPY_AND_ASSIGN(BookmarkUtilsTest); |
70 }; | 71 }; |
71 | 72 |
72 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesWordPhraseQuery) { | 73 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesWordPhraseQuery) { |
73 BookmarkModel model(NULL, false); | 74 test::TestBookmarkClient client; |
74 const BookmarkNode* node1 = model.AddURL(model.other_node(), | 75 scoped_ptr<BookmarkModel> model(client.CreateModel(false)); |
75 0, | 76 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
76 ASCIIToUTF16("foo bar"), | 77 0, |
77 GURL("http://www.google.com")); | 78 ASCIIToUTF16("foo bar"), |
78 const BookmarkNode* node2 = model.AddURL(model.other_node(), | 79 GURL("http://www.google.com")); |
79 0, | 80 const BookmarkNode* node2 = model->AddURL(model->other_node(), |
80 ASCIIToUTF16("baz buz"), | 81 0, |
81 GURL("http://www.cnn.com")); | 82 ASCIIToUTF16("baz buz"), |
82 const BookmarkNode* folder1 = model.AddFolder(model.other_node(), | 83 GURL("http://www.cnn.com")); |
83 0, | 84 const BookmarkNode* folder1 = |
84 ASCIIToUTF16("foo")); | 85 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("foo")); |
85 std::vector<const BookmarkNode*> nodes; | 86 std::vector<const BookmarkNode*> nodes; |
86 QueryFields query; | 87 QueryFields query; |
87 query.word_phrase_query.reset(new base::string16); | 88 query.word_phrase_query.reset(new base::string16); |
88 // No nodes are returned for empty string. | 89 // No nodes are returned for empty string. |
89 *query.word_phrase_query = ASCIIToUTF16(""); | 90 *query.word_phrase_query = ASCIIToUTF16(""); |
90 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 91 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
91 EXPECT_TRUE(nodes.empty()); | 92 EXPECT_TRUE(nodes.empty()); |
92 nodes.clear(); | 93 nodes.clear(); |
93 | 94 |
94 // No nodes are returned for space-only string. | 95 // No nodes are returned for space-only string. |
95 *query.word_phrase_query = ASCIIToUTF16(" "); | 96 *query.word_phrase_query = ASCIIToUTF16(" "); |
96 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 97 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
97 EXPECT_TRUE(nodes.empty()); | 98 EXPECT_TRUE(nodes.empty()); |
98 nodes.clear(); | 99 nodes.clear(); |
99 | 100 |
100 // Node "foo bar" and folder "foo" are returned in search results. | 101 // Node "foo bar" and folder "foo" are returned in search results. |
101 *query.word_phrase_query = ASCIIToUTF16("foo"); | 102 *query.word_phrase_query = ASCIIToUTF16("foo"); |
102 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 103 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
103 ASSERT_EQ(2U, nodes.size()); | 104 ASSERT_EQ(2U, nodes.size()); |
104 EXPECT_TRUE(nodes[0] == folder1); | 105 EXPECT_TRUE(nodes[0] == folder1); |
105 EXPECT_TRUE(nodes[1] == node1); | 106 EXPECT_TRUE(nodes[1] == node1); |
106 nodes.clear(); | 107 nodes.clear(); |
107 | 108 |
108 // Ensure url matches return in search results. | 109 // Ensure url matches return in search results. |
109 *query.word_phrase_query = ASCIIToUTF16("cnn"); | 110 *query.word_phrase_query = ASCIIToUTF16("cnn"); |
110 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 111 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
111 ASSERT_EQ(1U, nodes.size()); | 112 ASSERT_EQ(1U, nodes.size()); |
112 EXPECT_TRUE(nodes[0] == node2); | 113 EXPECT_TRUE(nodes[0] == node2); |
113 nodes.clear(); | 114 nodes.clear(); |
114 | 115 |
115 // Ensure folder "foo" is not returned in more specific search. | 116 // Ensure folder "foo" is not returned in more specific search. |
116 *query.word_phrase_query = ASCIIToUTF16("foo bar"); | 117 *query.word_phrase_query = ASCIIToUTF16("foo bar"); |
117 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 118 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
118 ASSERT_EQ(1U, nodes.size()); | 119 ASSERT_EQ(1U, nodes.size()); |
119 EXPECT_TRUE(nodes[0] == node1); | 120 EXPECT_TRUE(nodes[0] == node1); |
120 nodes.clear(); | 121 nodes.clear(); |
121 | 122 |
122 // Bookmark Bar and Other Bookmarks are not returned in search results. | 123 // Bookmark Bar and Other Bookmarks are not returned in search results. |
123 *query.word_phrase_query = ASCIIToUTF16("Bookmark"); | 124 *query.word_phrase_query = ASCIIToUTF16("Bookmark"); |
124 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 125 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
125 ASSERT_EQ(0U, nodes.size()); | 126 ASSERT_EQ(0U, nodes.size()); |
126 nodes.clear(); | 127 nodes.clear(); |
127 } | 128 } |
128 | 129 |
129 // Check exact matching against a URL query. | 130 // Check exact matching against a URL query. |
130 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesUrl) { | 131 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesUrl) { |
131 BookmarkModel model(NULL, false); | 132 test::TestBookmarkClient client; |
132 const BookmarkNode* node1 = model.AddURL(model.other_node(), | 133 scoped_ptr<BookmarkModel> model(client.CreateModel(false)); |
133 0, | 134 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
134 ASCIIToUTF16("Google"), | 135 0, |
135 GURL("https://www.google.com/")); | 136 ASCIIToUTF16("Google"), |
136 model.AddURL(model.other_node(), | 137 GURL("https://www.google.com/")); |
137 0, | 138 model->AddURL(model->other_node(), |
138 ASCIIToUTF16("Google Calendar"), | 139 0, |
139 GURL("https://www.google.com/calendar")); | 140 ASCIIToUTF16("Google Calendar"), |
| 141 GURL("https://www.google.com/calendar")); |
140 | 142 |
141 model.AddFolder(model.other_node(), 0, ASCIIToUTF16("Folder")); | 143 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); |
142 | 144 |
143 std::vector<const BookmarkNode*> nodes; | 145 std::vector<const BookmarkNode*> nodes; |
144 QueryFields query; | 146 QueryFields query; |
145 query.url.reset(new base::string16); | 147 query.url.reset(new base::string16); |
146 *query.url = ASCIIToUTF16("https://www.google.com/"); | 148 *query.url = ASCIIToUTF16("https://www.google.com/"); |
147 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 149 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
148 ASSERT_EQ(1U, nodes.size()); | 150 ASSERT_EQ(1U, nodes.size()); |
149 EXPECT_TRUE(nodes[0] == node1); | 151 EXPECT_TRUE(nodes[0] == node1); |
150 nodes.clear(); | 152 nodes.clear(); |
151 | 153 |
152 *query.url = ASCIIToUTF16("calendar"); | 154 *query.url = ASCIIToUTF16("calendar"); |
153 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 155 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
154 ASSERT_EQ(0U, nodes.size()); | 156 ASSERT_EQ(0U, nodes.size()); |
155 nodes.clear(); | 157 nodes.clear(); |
156 | 158 |
157 // Empty URL should not match folders. | 159 // Empty URL should not match folders. |
158 *query.url = ASCIIToUTF16(""); | 160 *query.url = ASCIIToUTF16(""); |
159 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 161 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
160 ASSERT_EQ(0U, nodes.size()); | 162 ASSERT_EQ(0U, nodes.size()); |
161 nodes.clear(); | 163 nodes.clear(); |
162 } | 164 } |
163 | 165 |
164 // Check exact matching against a title query. | 166 // Check exact matching against a title query. |
165 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesTitle) { | 167 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesTitle) { |
166 BookmarkModel model(NULL, false); | 168 test::TestBookmarkClient client; |
167 const BookmarkNode* node1 = model.AddURL(model.other_node(), | 169 scoped_ptr<BookmarkModel> model(client.CreateModel(false)); |
168 0, | 170 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
169 ASCIIToUTF16("Google"), | 171 0, |
170 GURL("https://www.google.com/")); | 172 ASCIIToUTF16("Google"), |
171 model.AddURL(model.other_node(), | 173 GURL("https://www.google.com/")); |
172 0, | 174 model->AddURL(model->other_node(), |
173 ASCIIToUTF16("Google Calendar"), | 175 0, |
174 GURL("https://www.google.com/calendar")); | 176 ASCIIToUTF16("Google Calendar"), |
| 177 GURL("https://www.google.com/calendar")); |
175 | 178 |
176 const BookmarkNode* folder1 = | 179 const BookmarkNode* folder1 = |
177 model.AddFolder(model.other_node(), 0, ASCIIToUTF16("Folder")); | 180 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); |
178 | 181 |
179 std::vector<const BookmarkNode*> nodes; | 182 std::vector<const BookmarkNode*> nodes; |
180 QueryFields query; | 183 QueryFields query; |
181 query.title.reset(new base::string16); | 184 query.title.reset(new base::string16); |
182 *query.title = ASCIIToUTF16("Google"); | 185 *query.title = ASCIIToUTF16("Google"); |
183 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 186 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
184 ASSERT_EQ(1U, nodes.size()); | 187 ASSERT_EQ(1U, nodes.size()); |
185 EXPECT_TRUE(nodes[0] == node1); | 188 EXPECT_TRUE(nodes[0] == node1); |
186 nodes.clear(); | 189 nodes.clear(); |
187 | 190 |
188 *query.title = ASCIIToUTF16("Calendar"); | 191 *query.title = ASCIIToUTF16("Calendar"); |
189 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 192 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
190 ASSERT_EQ(0U, nodes.size()); | 193 ASSERT_EQ(0U, nodes.size()); |
191 nodes.clear(); | 194 nodes.clear(); |
192 | 195 |
193 // Title should match folders. | 196 // Title should match folders. |
194 *query.title = ASCIIToUTF16("Folder"); | 197 *query.title = ASCIIToUTF16("Folder"); |
195 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 198 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
196 ASSERT_EQ(1U, nodes.size()); | 199 ASSERT_EQ(1U, nodes.size()); |
197 EXPECT_TRUE(nodes[0] == folder1); | 200 EXPECT_TRUE(nodes[0] == folder1); |
198 nodes.clear(); | 201 nodes.clear(); |
199 } | 202 } |
200 | 203 |
201 // Check matching against a query with multiple predicates. | 204 // Check matching against a query with multiple predicates. |
202 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesConjunction) { | 205 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesConjunction) { |
203 BookmarkModel model(NULL, false); | 206 test::TestBookmarkClient client; |
204 const BookmarkNode* node1 = model.AddURL(model.other_node(), | 207 scoped_ptr<BookmarkModel> model(client.CreateModel(false)); |
205 0, | 208 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
206 ASCIIToUTF16("Google"), | 209 0, |
207 GURL("https://www.google.com/")); | 210 ASCIIToUTF16("Google"), |
208 model.AddURL(model.other_node(), | 211 GURL("https://www.google.com/")); |
209 0, | 212 model->AddURL(model->other_node(), |
210 ASCIIToUTF16("Google Calendar"), | 213 0, |
211 GURL("https://www.google.com/calendar")); | 214 ASCIIToUTF16("Google Calendar"), |
| 215 GURL("https://www.google.com/calendar")); |
212 | 216 |
213 model.AddFolder(model.other_node(), 0, ASCIIToUTF16("Folder")); | 217 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); |
214 | 218 |
215 std::vector<const BookmarkNode*> nodes; | 219 std::vector<const BookmarkNode*> nodes; |
216 QueryFields query; | 220 QueryFields query; |
217 | 221 |
218 // Test all fields matching. | 222 // Test all fields matching. |
219 query.word_phrase_query.reset(new base::string16(ASCIIToUTF16("www"))); | 223 query.word_phrase_query.reset(new base::string16(ASCIIToUTF16("www"))); |
220 query.url.reset(new base::string16(ASCIIToUTF16("https://www.google.com/"))); | 224 query.url.reset(new base::string16(ASCIIToUTF16("https://www.google.com/"))); |
221 query.title.reset(new base::string16(ASCIIToUTF16("Google"))); | 225 query.title.reset(new base::string16(ASCIIToUTF16("Google"))); |
222 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 226 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
223 ASSERT_EQ(1U, nodes.size()); | 227 ASSERT_EQ(1U, nodes.size()); |
224 EXPECT_TRUE(nodes[0] == node1); | 228 EXPECT_TRUE(nodes[0] == node1); |
225 nodes.clear(); | 229 nodes.clear(); |
226 | 230 |
227 scoped_ptr<base::string16>* fields[] = { | 231 scoped_ptr<base::string16>* fields[] = { |
228 &query.word_phrase_query, &query.url, &query.title }; | 232 &query.word_phrase_query, &query.url, &query.title }; |
229 | 233 |
230 // Test two fields matching. | 234 // Test two fields matching. |
231 for (size_t i = 0; i < arraysize(fields); i++) { | 235 for (size_t i = 0; i < arraysize(fields); i++) { |
232 scoped_ptr<base::string16> original_value(fields[i]->release()); | 236 scoped_ptr<base::string16> original_value(fields[i]->release()); |
233 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 237 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
234 ASSERT_EQ(1U, nodes.size()); | 238 ASSERT_EQ(1U, nodes.size()); |
235 EXPECT_TRUE(nodes[0] == node1); | 239 EXPECT_TRUE(nodes[0] == node1); |
236 nodes.clear(); | 240 nodes.clear(); |
237 fields[i]->reset(original_value.release()); | 241 fields[i]->reset(original_value.release()); |
238 } | 242 } |
239 | 243 |
240 // Test two fields matching with one non-matching field. | 244 // Test two fields matching with one non-matching field. |
241 for (size_t i = 0; i < arraysize(fields); i++) { | 245 for (size_t i = 0; i < arraysize(fields); i++) { |
242 scoped_ptr<base::string16> original_value(fields[i]->release()); | 246 scoped_ptr<base::string16> original_value(fields[i]->release()); |
243 fields[i]->reset(new base::string16(ASCIIToUTF16("fjdkslafjkldsa"))); | 247 fields[i]->reset(new base::string16(ASCIIToUTF16("fjdkslafjkldsa"))); |
244 GetBookmarksMatchingProperties(&model, query, 100, string(), &nodes); | 248 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
245 ASSERT_EQ(0U, nodes.size()); | 249 ASSERT_EQ(0U, nodes.size()); |
246 nodes.clear(); | 250 nodes.clear(); |
247 fields[i]->reset(original_value.release()); | 251 fields[i]->reset(original_value.release()); |
248 } | 252 } |
249 } | 253 } |
250 | 254 |
251 TEST_F(BookmarkUtilsTest, CopyPaste) { | 255 TEST_F(BookmarkUtilsTest, CopyPaste) { |
252 BookmarkModel model(NULL, false); | 256 test::TestBookmarkClient client; |
253 const BookmarkNode* node = model.AddURL(model.other_node(), | 257 scoped_ptr<BookmarkModel> model(client.CreateModel(false)); |
254 0, | 258 const BookmarkNode* node = model->AddURL(model->other_node(), |
255 ASCIIToUTF16("foo bar"), | 259 0, |
256 GURL("http://www.google.com")); | 260 ASCIIToUTF16("foo bar"), |
| 261 GURL("http://www.google.com")); |
257 | 262 |
258 // Copy a node to the clipboard. | 263 // Copy a node to the clipboard. |
259 std::vector<const BookmarkNode*> nodes; | 264 std::vector<const BookmarkNode*> nodes; |
260 nodes.push_back(node); | 265 nodes.push_back(node); |
261 CopyToClipboard(&model, nodes, false); | 266 CopyToClipboard(model.get(), nodes, false); |
262 | 267 |
263 // And make sure we can paste a bookmark from the clipboard. | 268 // And make sure we can paste a bookmark from the clipboard. |
264 EXPECT_TRUE(CanPasteFromClipboard(model.bookmark_bar_node())); | 269 EXPECT_TRUE(CanPasteFromClipboard(model->bookmark_bar_node())); |
265 | 270 |
266 // Write some text to the clipboard. | 271 // Write some text to the clipboard. |
267 { | 272 { |
268 ui::ScopedClipboardWriter clipboard_writer( | 273 ui::ScopedClipboardWriter clipboard_writer( |
269 ui::Clipboard::GetForCurrentThread(), | 274 ui::Clipboard::GetForCurrentThread(), |
270 ui::CLIPBOARD_TYPE_COPY_PASTE); | 275 ui::CLIPBOARD_TYPE_COPY_PASTE); |
271 clipboard_writer.WriteText(ASCIIToUTF16("foo")); | 276 clipboard_writer.WriteText(ASCIIToUTF16("foo")); |
272 } | 277 } |
273 | 278 |
274 // Now we shouldn't be able to paste from the clipboard. | 279 // Now we shouldn't be able to paste from the clipboard. |
275 EXPECT_FALSE(CanPasteFromClipboard(model.bookmark_bar_node())); | 280 EXPECT_FALSE(CanPasteFromClipboard(model->bookmark_bar_node())); |
276 } | 281 } |
277 | 282 |
278 TEST_F(BookmarkUtilsTest, CutToClipboard) { | 283 TEST_F(BookmarkUtilsTest, CutToClipboard) { |
279 BookmarkModel model(NULL, false); | 284 test::TestBookmarkClient client; |
280 model.AddObserver(this); | 285 scoped_ptr<BookmarkModel> model(client.CreateModel(false)); |
| 286 model->AddObserver(this); |
281 | 287 |
282 base::string16 title(ASCIIToUTF16("foo")); | 288 base::string16 title(ASCIIToUTF16("foo")); |
283 GURL url("http://foo.com"); | 289 GURL url("http://foo.com"); |
284 const BookmarkNode* n1 = model.AddURL(model.other_node(), 0, title, url); | 290 const BookmarkNode* n1 = model->AddURL(model->other_node(), 0, title, url); |
285 const BookmarkNode* n2 = model.AddURL(model.other_node(), 1, title, url); | 291 const BookmarkNode* n2 = model->AddURL(model->other_node(), 1, title, url); |
286 | 292 |
287 // Cut the nodes to the clipboard. | 293 // Cut the nodes to the clipboard. |
288 std::vector<const BookmarkNode*> nodes; | 294 std::vector<const BookmarkNode*> nodes; |
289 nodes.push_back(n1); | 295 nodes.push_back(n1); |
290 nodes.push_back(n2); | 296 nodes.push_back(n2); |
291 CopyToClipboard(&model, nodes, true); | 297 CopyToClipboard(model.get(), nodes, true); |
292 | 298 |
293 // Make sure the nodes were removed. | 299 // Make sure the nodes were removed. |
294 EXPECT_EQ(0, model.other_node()->child_count()); | 300 EXPECT_EQ(0, model->other_node()->child_count()); |
295 | 301 |
296 // Make sure observers were notified the set of changes should be grouped. | 302 // Make sure observers were notified the set of changes should be grouped. |
297 ExpectGroupedChangeCount(1, 1); | 303 ExpectGroupedChangeCount(1, 1); |
298 | 304 |
299 // And make sure we can paste from the clipboard. | 305 // And make sure we can paste from the clipboard. |
300 EXPECT_TRUE(CanPasteFromClipboard(model.other_node())); | 306 EXPECT_TRUE(CanPasteFromClipboard(model->other_node())); |
301 } | 307 } |
302 | 308 |
303 TEST_F(BookmarkUtilsTest, GetParentForNewNodes) { | 309 TEST_F(BookmarkUtilsTest, GetParentForNewNodes) { |
304 BookmarkModel model(NULL, false); | 310 test::TestBookmarkClient client; |
| 311 scoped_ptr<BookmarkModel> model(client.CreateModel(false)); |
305 // This tests the case where selection contains one item and that item is a | 312 // This tests the case where selection contains one item and that item is a |
306 // folder. | 313 // folder. |
307 std::vector<const BookmarkNode*> nodes; | 314 std::vector<const BookmarkNode*> nodes; |
308 nodes.push_back(model.bookmark_bar_node()); | 315 nodes.push_back(model->bookmark_bar_node()); |
309 int index = -1; | 316 int index = -1; |
310 const BookmarkNode* real_parent = GetParentForNewNodes( | 317 const BookmarkNode* real_parent = |
311 model.bookmark_bar_node(), nodes, &index); | 318 GetParentForNewNodes(model->bookmark_bar_node(), nodes, &index); |
312 EXPECT_EQ(real_parent, model.bookmark_bar_node()); | 319 EXPECT_EQ(real_parent, model->bookmark_bar_node()); |
313 EXPECT_EQ(0, index); | 320 EXPECT_EQ(0, index); |
314 | 321 |
315 nodes.clear(); | 322 nodes.clear(); |
316 | 323 |
317 // This tests the case where selection contains one item and that item is an | 324 // This tests the case where selection contains one item and that item is an |
318 // url. | 325 // url. |
319 const BookmarkNode* page1 = model.AddURL(model.bookmark_bar_node(), | 326 const BookmarkNode* page1 = model->AddURL(model->bookmark_bar_node(), |
320 0, | 327 0, |
321 ASCIIToUTF16("Google"), | 328 ASCIIToUTF16("Google"), |
322 GURL("http://google.com")); | 329 GURL("http://google.com")); |
323 nodes.push_back(page1); | 330 nodes.push_back(page1); |
324 real_parent = GetParentForNewNodes(model.bookmark_bar_node(), nodes, &index); | 331 real_parent = GetParentForNewNodes(model->bookmark_bar_node(), nodes, &index); |
325 EXPECT_EQ(real_parent, model.bookmark_bar_node()); | 332 EXPECT_EQ(real_parent, model->bookmark_bar_node()); |
326 EXPECT_EQ(1, index); | 333 EXPECT_EQ(1, index); |
327 | 334 |
328 // This tests the case where selection has more than one item. | 335 // This tests the case where selection has more than one item. |
329 const BookmarkNode* folder1 = model.AddFolder(model.bookmark_bar_node(), 1, | 336 const BookmarkNode* folder1 = |
330 ASCIIToUTF16("Folder 1")); | 337 model->AddFolder(model->bookmark_bar_node(), 1, ASCIIToUTF16("Folder 1")); |
331 nodes.push_back(folder1); | 338 nodes.push_back(folder1); |
332 real_parent = GetParentForNewNodes(model.bookmark_bar_node(), nodes, &index); | 339 real_parent = GetParentForNewNodes(model->bookmark_bar_node(), nodes, &index); |
333 EXPECT_EQ(real_parent, model.bookmark_bar_node()); | 340 EXPECT_EQ(real_parent, model->bookmark_bar_node()); |
334 EXPECT_EQ(2, index); | 341 EXPECT_EQ(2, index); |
335 | 342 |
336 // This tests the case where selection doesn't contain any items. | 343 // This tests the case where selection doesn't contain any items. |
337 nodes.clear(); | 344 nodes.clear(); |
338 real_parent = GetParentForNewNodes(model.bookmark_bar_node(), nodes, &index); | 345 real_parent = GetParentForNewNodes(model->bookmark_bar_node(), nodes, &index); |
339 EXPECT_EQ(real_parent, model.bookmark_bar_node()); | 346 EXPECT_EQ(real_parent, model->bookmark_bar_node()); |
340 EXPECT_EQ(2, index); | 347 EXPECT_EQ(2, index); |
341 } | 348 } |
342 | 349 |
343 // Verifies that meta info is copied when nodes are cloned. | 350 // Verifies that meta info is copied when nodes are cloned. |
344 TEST_F(BookmarkUtilsTest, CloneMetaInfo) { | 351 TEST_F(BookmarkUtilsTest, CloneMetaInfo) { |
345 BookmarkModel model(NULL, false); | 352 test::TestBookmarkClient client; |
| 353 scoped_ptr<BookmarkModel> model(client.CreateModel(false)); |
346 // Add a node containing meta info. | 354 // Add a node containing meta info. |
347 const BookmarkNode* node = model.AddURL(model.other_node(), | 355 const BookmarkNode* node = model->AddURL(model->other_node(), |
348 0, | 356 0, |
349 ASCIIToUTF16("foo bar"), | 357 ASCIIToUTF16("foo bar"), |
350 GURL("http://www.google.com")); | 358 GURL("http://www.google.com")); |
351 model.SetNodeMetaInfo(node, "somekey", "somevalue"); | 359 model->SetNodeMetaInfo(node, "somekey", "somevalue"); |
352 model.SetNodeMetaInfo(node, "someotherkey", "someothervalue"); | 360 model->SetNodeMetaInfo(node, "someotherkey", "someothervalue"); |
353 | 361 |
354 // Clone node to a different folder. | 362 // Clone node to a different folder. |
355 const BookmarkNode* folder = model.AddFolder(model.bookmark_bar_node(), 0, | 363 const BookmarkNode* folder = |
356 ASCIIToUTF16("Folder")); | 364 model->AddFolder(model->bookmark_bar_node(), 0, ASCIIToUTF16("Folder")); |
357 std::vector<BookmarkNodeData::Element> elements; | 365 std::vector<BookmarkNodeData::Element> elements; |
358 BookmarkNodeData::Element node_data(node); | 366 BookmarkNodeData::Element node_data(node); |
359 elements.push_back(node_data); | 367 elements.push_back(node_data); |
360 EXPECT_EQ(0, folder->child_count()); | 368 EXPECT_EQ(0, folder->child_count()); |
361 CloneBookmarkNode(&model, elements, folder, 0, false); | 369 CloneBookmarkNode(model.get(), elements, folder, 0, false); |
362 ASSERT_EQ(1, folder->child_count()); | 370 ASSERT_EQ(1, folder->child_count()); |
363 | 371 |
364 // Verify that the cloned node contains the same meta info. | 372 // Verify that the cloned node contains the same meta info. |
365 const BookmarkNode* clone = folder->GetChild(0); | 373 const BookmarkNode* clone = folder->GetChild(0); |
366 ASSERT_TRUE(clone->GetMetaInfoMap()); | 374 ASSERT_TRUE(clone->GetMetaInfoMap()); |
367 EXPECT_EQ(2u, clone->GetMetaInfoMap()->size()); | 375 EXPECT_EQ(2u, clone->GetMetaInfoMap()->size()); |
368 std::string value; | 376 std::string value; |
369 EXPECT_TRUE(clone->GetMetaInfo("somekey", &value)); | 377 EXPECT_TRUE(clone->GetMetaInfo("somekey", &value)); |
370 EXPECT_EQ("somevalue", value); | 378 EXPECT_EQ("somevalue", value); |
371 EXPECT_TRUE(clone->GetMetaInfo("someotherkey", &value)); | 379 EXPECT_TRUE(clone->GetMetaInfo("someotherkey", &value)); |
372 EXPECT_EQ("someothervalue", value); | 380 EXPECT_EQ("someothervalue", value); |
373 } | 381 } |
374 | 382 |
375 } // namespace | 383 } // namespace |
376 } // namespace bookmark_utils | 384 } // namespace bookmark_utils |
OLD | NEW |