Use the host instead of the title for streamlined hosted apps.
[chromium-blink-merge.git] / components / enhanced_bookmarks / metadata_accessor_unittest.cc
blob8ffd4577732b990a9463d31bac5facc7d7c89b91
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
3 // found in the LICENSE file.
5 #include "components/enhanced_bookmarks/metadata_accessor.h"
7 #include "base/base64.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "components/bookmarks/browser/bookmark_model.h"
10 #include "components/bookmarks/test/test_bookmark_client.h"
11 #include "components/enhanced_bookmarks/proto/metadata.pb.h"
12 #include "testing/gtest/include/gtest/gtest.h"
14 namespace {
16 using namespace image::collections;
18 const std::string BOOKMARK_URL("http://example.com/index.html");
20 class MetadataAccessorTest : public testing::Test {
21 public:
22 MetadataAccessorTest() {}
23 virtual ~MetadataAccessorTest() {}
25 protected:
26 DISALLOW_COPY_AND_ASSIGN(MetadataAccessorTest);
28 // Adds a bookmark as the subnode at index 0 to other_node.
29 // |name| should be ASCII encoded.
30 // Returns the newly added bookmark.
31 const BookmarkNode* AddBookmark(BookmarkModel* model, std::string name) {
32 return model->AddURL(model->other_node(),
33 0, // index.
34 base::ASCIIToUTF16(name),
35 GURL(BOOKMARK_URL));
39 TEST_F(MetadataAccessorTest, TestEmptySnippet) {
40 scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(BOOKMARK_URL)));
42 std::string snippet(enhanced_bookmarks::SnippetFromBookmark(node.get()));
43 CHECK_EQ(snippet, "");
46 TEST_F(MetadataAccessorTest, TestSnippet) {
47 scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(BOOKMARK_URL)));
49 // Binary serialize the protobuf.
50 PageData data;
51 data.set_snippet("I'm happy!");
52 ASSERT_TRUE(data.IsInitialized());
53 std::string output;
54 bool result = data.SerializeToString(&output);
55 ASSERT_TRUE(result);
57 // base64 encode the output.
58 std::string encoded;
59 base::Base64Encode(output, &encoded);
60 node->SetMetaInfo(enhanced_bookmarks::kPageDataKey, encoded);
62 std::string snippet(enhanced_bookmarks::SnippetFromBookmark(node.get()));
63 CHECK_EQ(snippet, "I'm happy!");
66 TEST_F(MetadataAccessorTest, TestBadEncodingSnippet) {
67 scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(BOOKMARK_URL)));
69 // Binary serialize the protobuf.
70 PageData data;
71 data.set_snippet("You are happy!");
72 ASSERT_TRUE(data.IsInitialized());
73 std::string output;
74 bool result = data.SerializeToString(&output);
75 ASSERT_TRUE(result);
77 // don't base 64 encode the output.
78 node->SetMetaInfo(enhanced_bookmarks::kPageDataKey, output);
80 std::string snippet(enhanced_bookmarks::SnippetFromBookmark(node.get()));
81 CHECK_EQ(snippet, "");
84 TEST_F(MetadataAccessorTest, TestOriginalImage) {
85 scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(BOOKMARK_URL)));
87 ImageData data;
88 // Intentionally make raw pointer.
89 ImageData_ImageInfo* info = new ImageData_ImageInfo;
90 info->set_url("http://example.com/foobar");
91 info->set_width(15);
92 info->set_height(55);
93 // This method consumes the pointer.
94 data.set_allocated_original_info(info);
96 std::string output;
97 bool result = data.SerializePartialToString(&output);
98 ASSERT_TRUE(result);
100 // base64 encode the output.
101 std::string encoded;
102 base::Base64Encode(output, &encoded);
103 node->SetMetaInfo(enhanced_bookmarks::kImageDataKey, encoded);
105 GURL url;
106 int width;
107 int height;
108 result = enhanced_bookmarks::OriginalImageFromBookmark(
109 node.get(), &url, &width, &height);
110 ASSERT_TRUE(result);
111 CHECK_EQ(url, GURL("http://example.com/foobar"));
112 CHECK_EQ(width, 15);
113 CHECK_EQ(height, 55);
116 TEST_F(MetadataAccessorTest, TestThumbnailImage) {
117 scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(BOOKMARK_URL)));
119 ImageData data;
120 // Intentionally make raw pointer.
121 ImageData_ImageInfo* info = new ImageData_ImageInfo;
122 info->set_url("http://example.com/foobar");
123 info->set_width(15);
124 info->set_height(55);
125 // This method consumes the pointer.
126 data.set_allocated_thumbnail_info(info);
128 std::string output;
129 bool result = data.SerializePartialToString(&output);
130 ASSERT_TRUE(result);
132 // base64 encode the output.
133 std::string encoded;
134 base::Base64Encode(output, &encoded);
135 node->SetMetaInfo(enhanced_bookmarks::kImageDataKey, encoded);
137 GURL url;
138 int width;
139 int height;
140 result = enhanced_bookmarks::ThumbnailImageFromBookmark(
141 node.get(), &url, &width, &height);
142 ASSERT_TRUE(result);
143 CHECK_EQ(url, GURL("http://example.com/foobar"));
144 CHECK_EQ(width, 15);
145 CHECK_EQ(height, 55);
148 TEST_F(MetadataAccessorTest, TestOriginalImageMissingDimensions) {
149 scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(BOOKMARK_URL)));
151 ImageData data;
152 // Intentionally make raw pointer.
153 ImageData_ImageInfo* info = new ImageData_ImageInfo;
154 info->set_url("http://example.com/foobar");
155 // This method consumes the pointer.
156 data.set_allocated_original_info(info);
158 std::string output;
159 bool result = data.SerializePartialToString(&output);
160 ASSERT_TRUE(result);
162 // base64 encode the output.
163 std::string encoded;
164 base::Base64Encode(output, &encoded);
165 node->SetMetaInfo(enhanced_bookmarks::kImageDataKey, encoded);
167 GURL url;
168 int width;
169 int height;
170 result = enhanced_bookmarks::OriginalImageFromBookmark(
171 node.get(), &url, &width, &height);
172 ASSERT_FALSE(result);
175 TEST_F(MetadataAccessorTest, TestOriginalImageBadUrl) {
176 scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(BOOKMARK_URL)));
178 ImageData data;
179 // Intentionally make raw pointer.
180 ImageData_ImageInfo* info = new ImageData_ImageInfo;
181 info->set_url("asdf. 13r");
182 info->set_width(15);
183 info->set_height(55);
184 // This method consumes the pointer.
185 data.set_allocated_original_info(info);
187 std::string output;
188 bool result = data.SerializePartialToString(&output);
189 ASSERT_TRUE(result);
191 // base64 encode the output.
192 std::string encoded;
193 base::Base64Encode(output, &encoded);
194 node->SetMetaInfo(enhanced_bookmarks::kImageDataKey, encoded);
196 GURL url;
197 int width;
198 int height;
199 result = enhanced_bookmarks::OriginalImageFromBookmark(
200 node.get(), &url, &width, &height);
201 ASSERT_FALSE(result);
204 TEST_F(MetadataAccessorTest, TestEncodeDecode) {
205 test::TestBookmarkClient bookmark_client;
206 scoped_ptr<BookmarkModel> bookmark_model(bookmark_client.CreateModel(false));
207 const BookmarkNode* node =
208 bookmark_model->AddURL(bookmark_model->other_node(),
209 0, // index.
210 base::ASCIIToUTF16("whatever"),
211 GURL(BOOKMARK_URL));
213 bool result = enhanced_bookmarks::SetOriginalImageForBookmark(
214 bookmark_model.get(), node, GURL("http://example.com/i.jpg"), 22, 33);
215 ASSERT_TRUE(result);
217 GURL url;
218 int width;
219 int height;
220 result = enhanced_bookmarks::OriginalImageFromBookmark(
221 node, &url, &width, &height);
222 ASSERT_TRUE(result);
223 CHECK_EQ(url, GURL("http://example.com/i.jpg"));
224 CHECK_EQ(width, 22);
225 CHECK_EQ(height, 33);
228 TEST_F(MetadataAccessorTest, TestDoubleEncodeDecode) {
229 test::TestBookmarkClient bookmark_client;
230 scoped_ptr<BookmarkModel> bookmark_model(bookmark_client.CreateModel(false));
231 const BookmarkNode* node =
232 bookmark_model->AddURL(bookmark_model->other_node(),
233 0, // index.
234 base::ASCIIToUTF16("whatever"),
235 GURL(BOOKMARK_URL));
237 // Encode some information.
238 bool result = enhanced_bookmarks::SetOriginalImageForBookmark(
239 bookmark_model.get(), node, GURL("http://example.com/i.jpg"), 22, 33);
240 ASSERT_TRUE(result);
241 // Encode some different information.
242 result = enhanced_bookmarks::SetOriginalImageForBookmark(
243 bookmark_model.get(), node, GURL("http://example.com/i.jpg"), 33, 44);
244 ASSERT_TRUE(result);
246 GURL url;
247 int width;
248 int height;
249 result = enhanced_bookmarks::OriginalImageFromBookmark(
250 node, &url, &width, &height);
251 ASSERT_TRUE(result);
252 CHECK_EQ(url, GURL("http://example.com/i.jpg"));
253 CHECK_EQ(width, 33);
254 CHECK_EQ(height, 44);
257 TEST_F(MetadataAccessorTest, TestThumbnail) {
258 test::TestBookmarkClient bookmark_client;
259 scoped_ptr<BookmarkModel> bookmark_model(bookmark_client.CreateModel(false));
260 const BookmarkNode* node =
261 bookmark_model->AddURL(bookmark_model->other_node(),
262 0, // index.
263 base::ASCIIToUTF16("whatever"),
264 GURL(BOOKMARK_URL));
266 // Encode some information.
267 ASSERT_TRUE(enhanced_bookmarks::SetAllImagesForBookmark(
268 bookmark_model.get(),
269 node,
270 GURL(),
273 GURL("http://google.com/img/thumb.jpg"),
275 44));
276 GURL url;
277 int width;
278 int height;
279 bool result = enhanced_bookmarks::ThumbnailImageFromBookmark(
280 node, &url, &width, &height);
281 ASSERT_TRUE(result);
282 CHECK_EQ(url, GURL("http://google.com/img/thumb.jpg"));
283 CHECK_EQ(width, 33);
284 CHECK_EQ(height, 44);
287 TEST_F(MetadataAccessorTest, TestRemoteId) {
288 test::TestBookmarkClient bookmark_client;
289 scoped_ptr<BookmarkModel> bookmark_model(bookmark_client.CreateModel(false));
290 const BookmarkNode* node = AddBookmark(bookmark_model.get(), "Aga Khan");
292 // First call creates the UUID, second call should return the same.
293 ASSERT_EQ(
294 enhanced_bookmarks::RemoteIdFromBookmark(bookmark_model.get(), node),
295 enhanced_bookmarks::RemoteIdFromBookmark(bookmark_model.get(), node));
298 TEST_F(MetadataAccessorTest, TestEmptyDescription) {
299 scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(BOOKMARK_URL)));
301 std::string description(
302 enhanced_bookmarks::DescriptionFromBookmark(node.get()));
303 CHECK_EQ(description, "");
306 TEST_F(MetadataAccessorTest, TestDescription) {
307 test::TestBookmarkClient bookmark_client;
308 scoped_ptr<BookmarkModel> bookmark_model(bookmark_client.CreateModel(false));
309 scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(BOOKMARK_URL)));
310 const std::string description("This is the most useful description of all.");
312 // Set the description.
313 enhanced_bookmarks::SetDescriptionForBookmark(
314 bookmark_model.get(), node.get(), description);
316 // Check the description is the one that was set.
317 CHECK_EQ(enhanced_bookmarks::DescriptionFromBookmark(node.get()),
318 description);
321 // If there is no notes field, the description should fall back on the snippet.
322 TEST_F(MetadataAccessorTest, TestDescriptionFallback) {
323 test::TestBookmarkClient bookmark_client;
324 scoped_ptr<BookmarkModel> bookmark_model(bookmark_client.CreateModel(false));
325 scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(BOOKMARK_URL)));
327 // Binary serialize the protobuf.
328 PageData data;
329 data.set_snippet("Joe Bar Team");
330 ASSERT_TRUE(data.IsInitialized());
331 std::string output;
332 bool result = data.SerializeToString(&output);
333 ASSERT_TRUE(result);
335 // base64 encode the output.
336 std::string encoded;
337 base::Base64Encode(output, &encoded);
338 node->SetMetaInfo(enhanced_bookmarks::kPageDataKey, encoded);
340 // The snippet is used as the description.
341 std::string snippet(enhanced_bookmarks::SnippetFromBookmark(node.get()));
342 CHECK_EQ("Joe Bar Team",
343 enhanced_bookmarks::DescriptionFromBookmark(node.get()));
345 // Set the description.
346 const std::string description("This is the most useful description of all.");
347 enhanced_bookmarks::SetDescriptionForBookmark(
348 bookmark_model.get(), node.get(), description);
350 // Check the description is the one that was set.
351 CHECK_EQ(enhanced_bookmarks::DescriptionFromBookmark(node.get()),
352 description);
354 } // namespace