| 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 |