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