OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/bookmarks/browser/bookmark_utils.h" | 5 #include "components/bookmarks/browser/bookmark_utils.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 0, | 87 0, |
88 ASCIIToUTF16("baz buz"), | 88 ASCIIToUTF16("baz buz"), |
89 GURL("http://www.cnn.com")); | 89 GURL("http://www.cnn.com")); |
90 const BookmarkNode* folder1 = | 90 const BookmarkNode* folder1 = |
91 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("foo")); | 91 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("foo")); |
92 std::vector<const BookmarkNode*> nodes; | 92 std::vector<const BookmarkNode*> nodes; |
93 QueryFields query; | 93 QueryFields query; |
94 query.word_phrase_query.reset(new base::string16); | 94 query.word_phrase_query.reset(new base::string16); |
95 // No nodes are returned for empty string. | 95 // No nodes are returned for empty string. |
96 *query.word_phrase_query = ASCIIToUTF16(""); | 96 *query.word_phrase_query = ASCIIToUTF16(""); |
97 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 97 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
98 EXPECT_TRUE(nodes.empty()); | 98 EXPECT_TRUE(nodes.empty()); |
99 nodes.clear(); | 99 nodes.clear(); |
100 | 100 |
101 // No nodes are returned for space-only string. | 101 // No nodes are returned for space-only string. |
102 *query.word_phrase_query = ASCIIToUTF16(" "); | 102 *query.word_phrase_query = ASCIIToUTF16(" "); |
103 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 103 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
104 EXPECT_TRUE(nodes.empty()); | 104 EXPECT_TRUE(nodes.empty()); |
105 nodes.clear(); | 105 nodes.clear(); |
106 | 106 |
107 // Node "foo bar" and folder "foo" are returned in search results. | 107 // Node "foo bar" and folder "foo" are returned in search results. |
108 *query.word_phrase_query = ASCIIToUTF16("foo"); | 108 *query.word_phrase_query = ASCIIToUTF16("foo"); |
109 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 109 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
110 ASSERT_EQ(2U, nodes.size()); | 110 ASSERT_EQ(2U, nodes.size()); |
111 EXPECT_TRUE(nodes[0] == folder1); | 111 EXPECT_TRUE(nodes[0] == folder1); |
112 EXPECT_TRUE(nodes[1] == node1); | 112 EXPECT_TRUE(nodes[1] == node1); |
113 nodes.clear(); | 113 nodes.clear(); |
114 | 114 |
115 // Ensure url matches return in search results. | 115 // Ensure url matches return in search results. |
116 *query.word_phrase_query = ASCIIToUTF16("cnn"); | 116 *query.word_phrase_query = ASCIIToUTF16("cnn"); |
117 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 117 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
118 ASSERT_EQ(1U, nodes.size()); | 118 ASSERT_EQ(1U, nodes.size()); |
119 EXPECT_TRUE(nodes[0] == node2); | 119 EXPECT_TRUE(nodes[0] == node2); |
120 nodes.clear(); | 120 nodes.clear(); |
121 | 121 |
122 // Ensure folder "foo" is not returned in more specific search. | 122 // Ensure folder "foo" is not returned in more specific search. |
123 *query.word_phrase_query = ASCIIToUTF16("foo bar"); | 123 *query.word_phrase_query = ASCIIToUTF16("foo bar"); |
124 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 124 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
125 ASSERT_EQ(1U, nodes.size()); | 125 ASSERT_EQ(1U, nodes.size()); |
126 EXPECT_TRUE(nodes[0] == node1); | 126 EXPECT_TRUE(nodes[0] == node1); |
127 nodes.clear(); | 127 nodes.clear(); |
128 | 128 |
129 // Bookmark Bar and Other Bookmarks are not returned in search results. | 129 // Bookmark Bar and Other Bookmarks are not returned in search results. |
130 *query.word_phrase_query = ASCIIToUTF16("Bookmark"); | 130 *query.word_phrase_query = ASCIIToUTF16("Bookmark"); |
131 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 131 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
132 ASSERT_EQ(0U, nodes.size()); | 132 ASSERT_EQ(0U, nodes.size()); |
133 nodes.clear(); | 133 nodes.clear(); |
134 } | 134 } |
135 | 135 |
136 // Check exact matching against a URL query. | 136 // Check exact matching against a URL query. |
137 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesUrl) { | 137 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesUrl) { |
138 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 138 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
139 const BookmarkNode* node1 = model->AddURL(model->other_node(), | 139 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
140 0, | 140 0, |
141 ASCIIToUTF16("Google"), | 141 ASCIIToUTF16("Google"), |
142 GURL("https://www.google.com/")); | 142 GURL("https://www.google.com/")); |
143 model->AddURL(model->other_node(), | 143 model->AddURL(model->other_node(), |
144 0, | 144 0, |
145 ASCIIToUTF16("Google Calendar"), | 145 ASCIIToUTF16("Google Calendar"), |
146 GURL("https://www.google.com/calendar")); | 146 GURL("https://www.google.com/calendar")); |
147 | 147 |
148 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); | 148 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); |
149 | 149 |
150 std::vector<const BookmarkNode*> nodes; | 150 std::vector<const BookmarkNode*> nodes; |
151 QueryFields query; | 151 QueryFields query; |
152 query.url.reset(new base::string16); | 152 query.url.reset(new base::string16); |
153 *query.url = ASCIIToUTF16("https://www.google.com/"); | 153 *query.url = ASCIIToUTF16("https://www.google.com/"); |
154 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 154 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
155 ASSERT_EQ(1U, nodes.size()); | 155 ASSERT_EQ(1U, nodes.size()); |
156 EXPECT_TRUE(nodes[0] == node1); | 156 EXPECT_TRUE(nodes[0] == node1); |
157 nodes.clear(); | 157 nodes.clear(); |
158 | 158 |
159 *query.url = ASCIIToUTF16("calendar"); | 159 *query.url = ASCIIToUTF16("calendar"); |
160 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 160 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
161 ASSERT_EQ(0U, nodes.size()); | 161 ASSERT_EQ(0U, nodes.size()); |
162 nodes.clear(); | 162 nodes.clear(); |
163 | 163 |
164 // Empty URL should not match folders. | 164 // Empty URL should not match folders. |
165 *query.url = ASCIIToUTF16(""); | 165 *query.url = ASCIIToUTF16(""); |
166 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 166 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
167 ASSERT_EQ(0U, nodes.size()); | 167 ASSERT_EQ(0U, nodes.size()); |
168 nodes.clear(); | 168 nodes.clear(); |
169 } | 169 } |
170 | 170 |
171 // Check exact matching against a title query. | 171 // Check exact matching against a title query. |
172 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesTitle) { | 172 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesTitle) { |
173 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 173 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
174 const BookmarkNode* node1 = model->AddURL(model->other_node(), | 174 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
175 0, | 175 0, |
176 ASCIIToUTF16("Google"), | 176 ASCIIToUTF16("Google"), |
177 GURL("https://www.google.com/")); | 177 GURL("https://www.google.com/")); |
178 model->AddURL(model->other_node(), | 178 model->AddURL(model->other_node(), |
179 0, | 179 0, |
180 ASCIIToUTF16("Google Calendar"), | 180 ASCIIToUTF16("Google Calendar"), |
181 GURL("https://www.google.com/calendar")); | 181 GURL("https://www.google.com/calendar")); |
182 | 182 |
183 const BookmarkNode* folder1 = | 183 const BookmarkNode* folder1 = |
184 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); | 184 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); |
185 | 185 |
186 std::vector<const BookmarkNode*> nodes; | 186 std::vector<const BookmarkNode*> nodes; |
187 QueryFields query; | 187 QueryFields query; |
188 query.title.reset(new base::string16); | 188 query.title.reset(new base::string16); |
189 *query.title = ASCIIToUTF16("Google"); | 189 *query.title = ASCIIToUTF16("Google"); |
190 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 190 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
191 ASSERT_EQ(1U, nodes.size()); | 191 ASSERT_EQ(1U, nodes.size()); |
192 EXPECT_TRUE(nodes[0] == node1); | 192 EXPECT_TRUE(nodes[0] == node1); |
193 nodes.clear(); | 193 nodes.clear(); |
194 | 194 |
195 *query.title = ASCIIToUTF16("Calendar"); | 195 *query.title = ASCIIToUTF16("Calendar"); |
196 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 196 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
197 ASSERT_EQ(0U, nodes.size()); | 197 ASSERT_EQ(0U, nodes.size()); |
198 nodes.clear(); | 198 nodes.clear(); |
199 | 199 |
200 // Title should match folders. | 200 // Title should match folders. |
201 *query.title = ASCIIToUTF16("Folder"); | 201 *query.title = ASCIIToUTF16("Folder"); |
202 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 202 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
203 ASSERT_EQ(1U, nodes.size()); | 203 ASSERT_EQ(1U, nodes.size()); |
204 EXPECT_TRUE(nodes[0] == folder1); | 204 EXPECT_TRUE(nodes[0] == folder1); |
205 nodes.clear(); | 205 nodes.clear(); |
206 } | 206 } |
207 | 207 |
208 // Check matching against a query with multiple predicates. | 208 // Check matching against a query with multiple predicates. |
209 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesConjunction) { | 209 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesConjunction) { |
210 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 210 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
211 const BookmarkNode* node1 = model->AddURL(model->other_node(), | 211 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
212 0, | 212 0, |
213 ASCIIToUTF16("Google"), | 213 ASCIIToUTF16("Google"), |
214 GURL("https://www.google.com/")); | 214 GURL("https://www.google.com/")); |
215 model->AddURL(model->other_node(), | 215 model->AddURL(model->other_node(), |
216 0, | 216 0, |
217 ASCIIToUTF16("Google Calendar"), | 217 ASCIIToUTF16("Google Calendar"), |
218 GURL("https://www.google.com/calendar")); | 218 GURL("https://www.google.com/calendar")); |
219 | 219 |
220 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); | 220 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); |
221 | 221 |
222 std::vector<const BookmarkNode*> nodes; | 222 std::vector<const BookmarkNode*> nodes; |
223 QueryFields query; | 223 QueryFields query; |
224 | 224 |
225 // Test all fields matching. | 225 // Test all fields matching. |
226 query.word_phrase_query.reset(new base::string16(ASCIIToUTF16("www"))); | 226 query.word_phrase_query.reset(new base::string16(ASCIIToUTF16("www"))); |
227 query.url.reset(new base::string16(ASCIIToUTF16("https://www.google.com/"))); | 227 query.url.reset(new base::string16(ASCIIToUTF16("https://www.google.com/"))); |
228 query.title.reset(new base::string16(ASCIIToUTF16("Google"))); | 228 query.title.reset(new base::string16(ASCIIToUTF16("Google"))); |
229 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 229 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
230 ASSERT_EQ(1U, nodes.size()); | 230 ASSERT_EQ(1U, nodes.size()); |
231 EXPECT_TRUE(nodes[0] == node1); | 231 EXPECT_TRUE(nodes[0] == node1); |
232 nodes.clear(); | 232 nodes.clear(); |
233 | 233 |
234 scoped_ptr<base::string16>* fields[] = { | 234 scoped_ptr<base::string16>* fields[] = { |
235 &query.word_phrase_query, &query.url, &query.title }; | 235 &query.word_phrase_query, &query.url, &query.title }; |
236 | 236 |
237 // Test two fields matching. | 237 // Test two fields matching. |
238 for (size_t i = 0; i < arraysize(fields); i++) { | 238 for (size_t i = 0; i < arraysize(fields); i++) { |
239 scoped_ptr<base::string16> original_value(fields[i]->release()); | 239 scoped_ptr<base::string16> original_value(fields[i]->release()); |
240 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 240 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
241 ASSERT_EQ(1U, nodes.size()); | 241 ASSERT_EQ(1U, nodes.size()); |
242 EXPECT_TRUE(nodes[0] == node1); | 242 EXPECT_TRUE(nodes[0] == node1); |
243 nodes.clear(); | 243 nodes.clear(); |
244 fields[i]->reset(original_value.release()); | 244 fields[i]->reset(original_value.release()); |
245 } | 245 } |
246 | 246 |
247 // Test two fields matching with one non-matching field. | 247 // Test two fields matching with one non-matching field. |
248 for (size_t i = 0; i < arraysize(fields); i++) { | 248 for (size_t i = 0; i < arraysize(fields); i++) { |
249 scoped_ptr<base::string16> original_value(fields[i]->release()); | 249 scoped_ptr<base::string16> original_value(fields[i]->release()); |
250 fields[i]->reset(new base::string16(ASCIIToUTF16("fjdkslafjkldsa"))); | 250 fields[i]->reset(new base::string16(ASCIIToUTF16("fjdkslafjkldsa"))); |
251 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 251 GetBookmarksMatchingProperties(model.get(), query, 100, &nodes); |
252 ASSERT_EQ(0U, nodes.size()); | 252 ASSERT_EQ(0U, nodes.size()); |
253 nodes.clear(); | 253 nodes.clear(); |
254 fields[i]->reset(original_value.release()); | 254 fields[i]->reset(original_value.release()); |
255 } | 255 } |
256 } | 256 } |
257 | 257 |
258 // Copy and paste is not yet supported on iOS. http://crbug.com/228147 | 258 // Copy and paste is not yet supported on iOS. http://crbug.com/228147 |
259 #if !defined(OS_IOS) | 259 #if !defined(OS_IOS) |
260 TEST_F(BookmarkUtilsTest, PasteBookmarkFromURL) { | 260 TEST_F(BookmarkUtilsTest, PasteBookmarkFromURL) { |
261 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); | 261 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 model->GetNodesByURL(url, &nodes); | 597 model->GetNodesByURL(url, &nodes); |
598 ASSERT_EQ(1u, nodes.size()); | 598 ASSERT_EQ(1u, nodes.size()); |
599 EXPECT_TRUE(model->bookmark_bar_node()->empty()); | 599 EXPECT_TRUE(model->bookmark_bar_node()->empty()); |
600 EXPECT_TRUE(model->other_node()->empty()); | 600 EXPECT_TRUE(model->other_node()->empty()); |
601 EXPECT_TRUE(model->mobile_node()->empty()); | 601 EXPECT_TRUE(model->mobile_node()->empty()); |
602 EXPECT_EQ(1, extra_node->child_count()); | 602 EXPECT_EQ(1, extra_node->child_count()); |
603 } | 603 } |
604 | 604 |
605 } // namespace | 605 } // namespace |
606 } // namespace bookmarks | 606 } // namespace bookmarks |
OLD | NEW |