OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <set> | 5 #include <set> |
6 #include <string> | 6 #include <string> |
7 | 7 |
8 #include "base/base_paths.h" | 8 #include "base/base_paths.h" |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 #include "testing/gtest/include/gtest/gtest.h" | 34 #include "testing/gtest/include/gtest/gtest.h" |
35 #include "ui/base/models/tree_node_iterator.h" | 35 #include "ui/base/models/tree_node_iterator.h" |
36 #include "ui/base/models/tree_node_model.h" | 36 #include "ui/base/models/tree_node_model.h" |
37 | 37 |
38 using base::Time; | 38 using base::Time; |
39 using base::TimeDelta; | 39 using base::TimeDelta; |
40 using content::BrowserThread; | 40 using content::BrowserThread; |
41 | 41 |
42 namespace { | 42 namespace { |
43 | 43 |
| 44 // Test cases used to test the removal of extra whitespace when adding |
| 45 // a new folder/bookmark or updating a title of a folder/bookmark. |
| 46 static struct { |
| 47 const std::string input_title; |
| 48 const std::string expected_title; |
| 49 } whitespace_test_cases[] = { |
| 50 {"foobar", "foobar"}, |
| 51 // Newlines. |
| 52 {"foo\nbar", "foo bar"}, |
| 53 {"foo\n\nbar", "foo bar"}, |
| 54 {"foo\n\n\nbar", "foo bar"}, |
| 55 {"foo\r\nbar", "foo bar"}, |
| 56 {"foo\r\n\r\nbar", "foo bar"}, |
| 57 {"\nfoo\nbar\n", "foo bar"}, |
| 58 // Spaces. |
| 59 {"foo bar", "foo bar"}, |
| 60 {" foo bar ", "foo bar"}, |
| 61 {" foo bar ", "foo bar"}, |
| 62 // Tabs. |
| 63 {"\tfoo\tbar\t", "foo bar"}, |
| 64 {"\tfoo bar\t", "foo bar"}, |
| 65 // Mixed cases. |
| 66 {"\tfoo\nbar\t", "foo bar"}, |
| 67 {"\tfoo\r\nbar\t", "foo bar"}, |
| 68 {" foo\tbar\n", "foo bar"}, |
| 69 {"\t foo \t bar \t", "foo bar"}, |
| 70 {"\n foo\r\n\tbar\n \t", "foo bar"}, |
| 71 }; |
| 72 |
44 // Helper to get a mutable bookmark node. | 73 // Helper to get a mutable bookmark node. |
45 BookmarkNode* AsMutable(const BookmarkNode* node) { | 74 BookmarkNode* AsMutable(const BookmarkNode* node) { |
46 return const_cast<BookmarkNode*>(node); | 75 return const_cast<BookmarkNode*>(node); |
47 } | 76 } |
48 | 77 |
49 void SwapDateAdded(BookmarkNode* n1, BookmarkNode* n2) { | 78 void SwapDateAdded(BookmarkNode* n1, BookmarkNode* n2) { |
50 Time tmp = n1->date_added(); | 79 Time tmp = n1->date_added(); |
51 n1->set_date_added(n2->date_added()); | 80 n1->set_date_added(n2->date_added()); |
52 n2->set_date_added(tmp); | 81 n2->set_date_added(tmp); |
53 } | 82 } |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 ASSERT_EQ(title, new_node->GetTitle()); | 234 ASSERT_EQ(title, new_node->GetTitle()); |
206 ASSERT_TRUE(url == new_node->url()); | 235 ASSERT_TRUE(url == new_node->url()); |
207 ASSERT_EQ(BookmarkNode::URL, new_node->type()); | 236 ASSERT_EQ(BookmarkNode::URL, new_node->type()); |
208 ASSERT_TRUE(new_node == model_.GetMostRecentlyAddedNodeForURL(url)); | 237 ASSERT_TRUE(new_node == model_.GetMostRecentlyAddedNodeForURL(url)); |
209 | 238 |
210 EXPECT_TRUE(new_node->id() != root->id() && | 239 EXPECT_TRUE(new_node->id() != root->id() && |
211 new_node->id() != model_.other_node()->id() && | 240 new_node->id() != model_.other_node()->id() && |
212 new_node->id() != model_.synced_node()->id()); | 241 new_node->id() != model_.synced_node()->id()); |
213 } | 242 } |
214 | 243 |
| 244 TEST_F(BookmarkModelTest, AddURLWithWhitespaceTitle) { |
| 245 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(whitespace_test_cases); ++i) { |
| 246 const BookmarkNode* root = model_.bookmark_bar_node(); |
| 247 const string16 title(ASCIIToUTF16(whitespace_test_cases[i].input_title)); |
| 248 const GURL url("http://foo.com"); |
| 249 |
| 250 const BookmarkNode* new_node = model_.AddURL(root, i, title, url); |
| 251 |
| 252 int size = i + 1; |
| 253 EXPECT_EQ(size, root->child_count()); |
| 254 EXPECT_EQ(ASCIIToUTF16(whitespace_test_cases[i].expected_title), |
| 255 new_node->GetTitle()); |
| 256 EXPECT_EQ(BookmarkNode::URL, new_node->type()); |
| 257 } |
| 258 } |
| 259 |
215 TEST_F(BookmarkModelTest, AddURLToSyncedBookmarks) { | 260 TEST_F(BookmarkModelTest, AddURLToSyncedBookmarks) { |
216 const BookmarkNode* root = model_.synced_node(); | 261 const BookmarkNode* root = model_.synced_node(); |
217 const string16 title(ASCIIToUTF16("foo")); | 262 const string16 title(ASCIIToUTF16("foo")); |
218 const GURL url("http://foo.com"); | 263 const GURL url("http://foo.com"); |
219 | 264 |
220 const BookmarkNode* new_node = model_.AddURL(root, 0, title, url); | 265 const BookmarkNode* new_node = model_.AddURL(root, 0, title, url); |
221 AssertObserverCount(1, 0, 0, 0, 0); | 266 AssertObserverCount(1, 0, 0, 0, 0); |
222 observer_details_.ExpectEquals(root, NULL, 0, -1); | 267 observer_details_.ExpectEquals(root, NULL, 0, -1); |
223 | 268 |
224 ASSERT_EQ(1, root->child_count()); | 269 ASSERT_EQ(1, root->child_count()); |
(...skipping 23 matching lines...) Expand all Loading... |
248 new_node->id() != model_.other_node()->id() && | 293 new_node->id() != model_.other_node()->id() && |
249 new_node->id() != model_.synced_node()->id()); | 294 new_node->id() != model_.synced_node()->id()); |
250 | 295 |
251 // Add another folder, just to make sure folder_ids are incremented correctly. | 296 // Add another folder, just to make sure folder_ids are incremented correctly. |
252 ClearCounts(); | 297 ClearCounts(); |
253 model_.AddFolder(root, 0, title); | 298 model_.AddFolder(root, 0, title); |
254 AssertObserverCount(1, 0, 0, 0, 0); | 299 AssertObserverCount(1, 0, 0, 0, 0); |
255 observer_details_.ExpectEquals(root, NULL, 0, -1); | 300 observer_details_.ExpectEquals(root, NULL, 0, -1); |
256 } | 301 } |
257 | 302 |
| 303 TEST_F(BookmarkModelTest, AddFolderWithWhitespaceTitle) { |
| 304 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(whitespace_test_cases); ++i) { |
| 305 const BookmarkNode* root = model_.bookmark_bar_node(); |
| 306 const string16 title(ASCIIToUTF16(whitespace_test_cases[i].input_title)); |
| 307 |
| 308 const BookmarkNode* new_node = model_.AddFolder(root, i, title); |
| 309 |
| 310 int size = i + 1; |
| 311 EXPECT_EQ(size, root->child_count()); |
| 312 EXPECT_EQ(ASCIIToUTF16(whitespace_test_cases[i].expected_title), |
| 313 new_node->GetTitle()); |
| 314 EXPECT_EQ(BookmarkNode::FOLDER, new_node->type()); |
| 315 } |
| 316 } |
| 317 |
258 TEST_F(BookmarkModelTest, RemoveURL) { | 318 TEST_F(BookmarkModelTest, RemoveURL) { |
259 const BookmarkNode* root = model_.bookmark_bar_node(); | 319 const BookmarkNode* root = model_.bookmark_bar_node(); |
260 const string16 title(ASCIIToUTF16("foo")); | 320 const string16 title(ASCIIToUTF16("foo")); |
261 const GURL url("http://foo.com"); | 321 const GURL url("http://foo.com"); |
262 model_.AddURL(root, 0, title, url); | 322 model_.AddURL(root, 0, title, url); |
263 ClearCounts(); | 323 ClearCounts(); |
264 | 324 |
265 model_.Remove(root, 0); | 325 model_.Remove(root, 0); |
266 ASSERT_EQ(0, root->child_count()); | 326 ASSERT_EQ(0, root->child_count()); |
267 AssertObserverCount(0, 0, 1, 0, 0); | 327 AssertObserverCount(0, 0, 1, 0, 0); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 | 362 |
303 ClearCounts(); | 363 ClearCounts(); |
304 | 364 |
305 title = ASCIIToUTF16("foo2"); | 365 title = ASCIIToUTF16("foo2"); |
306 model_.SetTitle(node, title); | 366 model_.SetTitle(node, title); |
307 AssertObserverCount(0, 0, 0, 1, 0); | 367 AssertObserverCount(0, 0, 0, 1, 0); |
308 observer_details_.ExpectEquals(node, NULL, -1, -1); | 368 observer_details_.ExpectEquals(node, NULL, -1, -1); |
309 EXPECT_EQ(title, node->GetTitle()); | 369 EXPECT_EQ(title, node->GetTitle()); |
310 } | 370 } |
311 | 371 |
| 372 TEST_F(BookmarkModelTest, SetTitleWithWhitespace) { |
| 373 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(whitespace_test_cases); ++i) { |
| 374 const BookmarkNode* root = model_.bookmark_bar_node(); |
| 375 string16 title(ASCIIToUTF16("dummy")); |
| 376 const GURL url("http://foo.com"); |
| 377 const BookmarkNode* node = model_.AddURL(root, 0, title, url); |
| 378 |
| 379 title = ASCIIToUTF16(whitespace_test_cases[i].input_title); |
| 380 model_.SetTitle(node, title); |
| 381 EXPECT_EQ(ASCIIToUTF16(whitespace_test_cases[i].expected_title), |
| 382 node->GetTitle()); |
| 383 } |
| 384 } |
| 385 |
312 TEST_F(BookmarkModelTest, SetURL) { | 386 TEST_F(BookmarkModelTest, SetURL) { |
313 const BookmarkNode* root = model_.bookmark_bar_node(); | 387 const BookmarkNode* root = model_.bookmark_bar_node(); |
314 const string16 title(ASCIIToUTF16("foo")); | 388 const string16 title(ASCIIToUTF16("foo")); |
315 GURL url("http://foo.com"); | 389 GURL url("http://foo.com"); |
316 const BookmarkNode* node = model_.AddURL(root, 0, title, url); | 390 const BookmarkNode* node = model_.AddURL(root, 0, title, url); |
317 | 391 |
318 ClearCounts(); | 392 ClearCounts(); |
319 | 393 |
320 url = GURL("http://foo2.com"); | 394 url = GURL("http://foo2.com"); |
321 model_.SetURL(node, url); | 395 model_.SetURL(node, url); |
(...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1030 TEST_F(BookmarkModelTest, SyncNodeVisibileWithChildren) { | 1104 TEST_F(BookmarkModelTest, SyncNodeVisibileWithChildren) { |
1031 const BookmarkNode* root = model_.synced_node(); | 1105 const BookmarkNode* root = model_.synced_node(); |
1032 const string16 title(ASCIIToUTF16("foo")); | 1106 const string16 title(ASCIIToUTF16("foo")); |
1033 const GURL url("http://foo.com"); | 1107 const GURL url("http://foo.com"); |
1034 | 1108 |
1035 model_.AddURL(root, 0, title, url); | 1109 model_.AddURL(root, 0, title, url); |
1036 EXPECT_TRUE(model_.synced_node()->IsVisible()); | 1110 EXPECT_TRUE(model_.synced_node()->IsVisible()); |
1037 } | 1111 } |
1038 | 1112 |
1039 } // namespace | 1113 } // namespace |
OLD | NEW |