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