• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "testing/gtest/include/gtest/gtest.h"
6 
7 #include "base/message_loop.h"
8 #include "base/string_util.h"
9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/bookmarks/bookmark_model.h"
11 #include "chrome/browser/bookmarks/bookmark_utils.h"
12 #include "chrome/test/testing_browser_process_test.h"
13 #include "ui/base/clipboard/scoped_clipboard_writer.h"
14 
15 #if !defined(OS_MACOSX)
16 #include "chrome/browser/browser_process.h"
17 #endif
18 
19 typedef TestingBrowserProcessTest BookmarkUtilsTest;
20 
TEST_F(BookmarkUtilsTest,GetBookmarksContainingText)21 TEST_F(BookmarkUtilsTest, GetBookmarksContainingText) {
22   BookmarkModel model(NULL);
23   const BookmarkNode* n1 =
24       model.AddURL(model.other_node(), 0, ASCIIToUTF16("foo bar"),
25                    GURL("http://www.google.com"));
26   const BookmarkNode* n2 =
27       model.AddURL(model.other_node(), 0, ASCIIToUTF16("baz buz"),
28                    GURL("http://www.cnn.com"));
29 
30   model.AddFolder(model.other_node(), 0, ASCIIToUTF16("foo"));
31 
32   std::vector<const BookmarkNode*> nodes;
33   bookmark_utils::GetBookmarksContainingText(
34       &model, ASCIIToUTF16("foo"), 100, std::string(), &nodes);
35   ASSERT_EQ(1U, nodes.size());
36   EXPECT_TRUE(nodes[0] == n1);
37   EXPECT_TRUE(bookmark_utils::DoesBookmarkContainText(
38       n1, ASCIIToUTF16("foo"), std::string()));
39   nodes.clear();
40 
41   bookmark_utils::GetBookmarksContainingText(
42       &model, ASCIIToUTF16("cnn"), 100, std::string(), &nodes);
43   ASSERT_EQ(1U, nodes.size());
44   EXPECT_TRUE(nodes[0] == n2);
45   EXPECT_TRUE(bookmark_utils::DoesBookmarkContainText(
46       n2, ASCIIToUTF16("cnn"), std::string()));
47   nodes.clear();
48 
49   bookmark_utils::GetBookmarksContainingText(
50       &model, ASCIIToUTF16("foo bar"), 100, std::string(), &nodes);
51   ASSERT_EQ(1U, nodes.size());
52   EXPECT_TRUE(nodes[0] == n1);
53   EXPECT_TRUE(bookmark_utils::DoesBookmarkContainText(
54       n1, ASCIIToUTF16("foo bar"), std::string()));
55   nodes.clear();
56 }
57 
TEST_F(BookmarkUtilsTest,DoesBookmarkContainText)58 TEST_F(BookmarkUtilsTest, DoesBookmarkContainText) {
59   BookmarkModel model(NULL);
60   const BookmarkNode* node = model.AddURL(model.other_node(), 0,
61                                           ASCIIToUTF16("foo bar"),
62                                           GURL("http://www.google.com"));
63   // Matches to the title.
64   ASSERT_TRUE(bookmark_utils::DoesBookmarkContainText(
65       node, ASCIIToUTF16("ar"), std::string()));
66   // Matches to the URL
67   ASSERT_TRUE(bookmark_utils::DoesBookmarkContainText(
68       node, ASCIIToUTF16("www"), std::string()));
69   // No match.
70   ASSERT_FALSE(bookmark_utils::DoesBookmarkContainText(
71       node, ASCIIToUTF16("cnn"), std::string()));
72 
73   // Tests for a Japanese IDN.
74   const string16 kDecodedIdn = WideToUTF16(L"\x30B0\x30FC\x30B0\x30EB");
75   node = model.AddURL(model.other_node(), 0, ASCIIToUTF16("foo bar"),
76                       GURL("http://xn--qcka1pmc.jp"));
77   // Unicode query doesn't match if languages have no "ja".
78   ASSERT_FALSE(bookmark_utils::DoesBookmarkContainText(
79       node, kDecodedIdn, "en"));
80   // Unicode query matches if languages have "ja".
81   ASSERT_TRUE(bookmark_utils::DoesBookmarkContainText(
82       node, kDecodedIdn, "ja"));
83   // Punycode query also matches as ever.
84   ASSERT_TRUE(bookmark_utils::DoesBookmarkContainText(
85       node, ASCIIToUTF16("qcka1pmc"), "ja"));
86 
87   // Tests with various lower/upper case characters.
88   node = model.AddURL(model.other_node(), 0, ASCIIToUTF16("FOO bar"),
89                       GURL("http://www.google.com/search?q=ABC"));
90   ASSERT_TRUE(bookmark_utils::DoesBookmarkContainText(
91       node, ASCIIToUTF16("foo"), std::string()));
92   ASSERT_TRUE(bookmark_utils::DoesBookmarkContainText(
93       node, ASCIIToUTF16("Foo"), std::string()));
94   ASSERT_TRUE(bookmark_utils::DoesBookmarkContainText(
95       node, ASCIIToUTF16("FOO"), std::string()));
96   ASSERT_TRUE(bookmark_utils::DoesBookmarkContainText(
97       node, ASCIIToUTF16("google abc"), std::string()));
98   ASSERT_TRUE(bookmark_utils::DoesBookmarkContainText(
99       node, ASCIIToUTF16("google ABC"), std::string()));
100   ASSERT_TRUE(bookmark_utils::DoesBookmarkContainText(
101       node, ASCIIToUTF16("http://www.google.com/search?q=A"), std::string()));
102 }
103 
104 #if !defined(OS_MACOSX)
TEST_F(BookmarkUtilsTest,CopyPaste)105 TEST_F(BookmarkUtilsTest, CopyPaste) {
106   // Clipboard requires a message loop.
107   MessageLoopForUI loop;
108 
109   BookmarkModel model(NULL);
110   const BookmarkNode* node = model.AddURL(model.other_node(), 0,
111                                           ASCIIToUTF16("foo bar"),
112                                           GURL("http://www.google.com"));
113 
114   // Copy a node to the clipboard.
115   std::vector<const BookmarkNode*> nodes;
116   nodes.push_back(node);
117   bookmark_utils::CopyToClipboard(&model, nodes, false);
118 
119   // And make sure we can paste a bookmark from the clipboard.
120   EXPECT_TRUE(
121       bookmark_utils::CanPasteFromClipboard(model.GetBookmarkBarNode()));
122 
123   // Write some text to the clipboard.
124   {
125     ui::ScopedClipboardWriter clipboard_writer(g_browser_process->clipboard());
126     clipboard_writer.WriteText(ASCIIToUTF16("foo"));
127   }
128 
129   // Now we shouldn't be able to paste from the clipboard.
130   EXPECT_FALSE(
131       bookmark_utils::CanPasteFromClipboard(model.GetBookmarkBarNode()));
132 }
133 #endif
134