Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: chrome/browser/chromeos/gdata/gdata_wapi_parser_unittest.cc

Issue 10920091: Move Drive API files to google_apis directory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Disable some tests Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/gdata/gdata_wapi_parser.h"
6
7 #include "base/file_path.h"
8 #include "base/file_util.h"
9 #include "base/json/json_file_value_serializer.h"
10 #include "base/path_service.h"
11 #include "base/string16.h"
12 #include "base/time.h"
13 #include "base/utf_string_conversions.h"
14 #include "base/values.h"
15 #include "chrome/browser/chromeos/gdata/gdata_test_util.h"
16 #include "chrome/browser/chromeos/gdata/gdata_util.h"
17 #include "chrome/common/chrome_paths.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "third_party/libxml/chromium/libxml_utils.h"
20
21 using base::Value;
22 using base::DictionaryValue;
23 using base::ListValue;
24
25 namespace gdata {
26
27 class GDataWAPIParserTest : public testing::Test {
28 protected:
29 static DocumentEntry* LoadDocumentEntryFromXml(const std::string& filename) {
30 FilePath path;
31 std::string error;
32 PathService::Get(chrome::DIR_TEST_DATA, &path);
33 path = path.AppendASCII("chromeos")
34 .AppendASCII("gdata")
35 .AppendASCII(filename.c_str());
36 EXPECT_TRUE(file_util::PathExists(path)) <<
37 "Couldn't find " << path.value();
38 std::string contents;
39 EXPECT_TRUE(file_util::ReadFileToString(path, &contents));
40 XmlReader reader;
41 if (!reader.Load(contents)) {
42 NOTREACHED() << "Invalid xml:\n" << contents;
43 return NULL;
44 }
45 scoped_ptr<DocumentEntry> entry;
46 while (reader.Read()) {
47 if (reader.NodeName() == "entry") {
48 entry.reset(DocumentEntry::CreateFromXml(&reader));
49 break;
50 }
51 }
52 return entry.release();
53 }
54 };
55
56 // Test document feed parsing.
57 TEST_F(GDataWAPIParserTest, DocumentFeedJsonParser) {
58 std::string error;
59 scoped_ptr<Value> document =
60 test_util::LoadJSONFile("gdata/basic_feed.json");
61 ASSERT_TRUE(document.get());
62 ASSERT_EQ(Value::TYPE_DICTIONARY, document->GetType());
63 scoped_ptr<DocumentFeed> feed(DocumentFeed::ExtractAndParse(*document));
64 ASSERT_TRUE(feed.get());
65
66 base::Time update_time;
67 ASSERT_TRUE(gdata::util::GetTimeFromString("2011-12-14T01:03:21.151Z",
68 &update_time));
69
70 EXPECT_EQ(1, feed->start_index());
71 EXPECT_EQ(1000, feed->items_per_page());
72 EXPECT_EQ(update_time, feed->updated_time());
73
74 // Check authors.
75 ASSERT_EQ(1U, feed->authors().size());
76 EXPECT_EQ(ASCIIToUTF16("tester"), feed->authors()[0]->name());
77 EXPECT_EQ("tester@testing.com", feed->authors()[0]->email());
78
79 // Check links.
80 ASSERT_EQ(6U, feed->links().size());
81 const Link* self_link = feed->GetLinkByType(Link::LINK_SELF);
82 ASSERT_TRUE(self_link);
83 EXPECT_EQ("https://self_link/", self_link->href().spec());
84 EXPECT_EQ("application/atom+xml", self_link->mime_type());
85
86
87 const Link* resumable_link =
88 feed->GetLinkByType(Link::LINK_RESUMABLE_CREATE_MEDIA);
89 ASSERT_TRUE(resumable_link);
90 EXPECT_EQ("https://resumable_create_media_link/",
91 resumable_link->href().spec());
92 EXPECT_EQ("application/atom+xml", resumable_link->mime_type());
93
94 // Check entries.
95 ASSERT_EQ(4U, feed->entries().size());
96
97 // Check a folder entry.
98 const DocumentEntry* folder_entry = feed->entries()[0];
99 ASSERT_TRUE(folder_entry);
100 EXPECT_EQ(ENTRY_KIND_FOLDER, folder_entry->kind());
101 EXPECT_EQ("\"HhMOFgcNHSt7ImBr\"", folder_entry->etag());
102 EXPECT_EQ("folder:sub_sub_directory_folder_id", folder_entry->resource_id());
103 EXPECT_EQ("https://1_folder_id", folder_entry->id());
104 EXPECT_EQ(ASCIIToUTF16("Entry 1 Title"), folder_entry->title());
105 base::Time entry1_update_time;
106 base::Time entry1_publish_time;
107 ASSERT_TRUE(gdata::util::GetTimeFromString("2011-04-01T18:34:08.234Z",
108 &entry1_update_time));
109 ASSERT_TRUE(gdata::util::GetTimeFromString("2010-11-07T05:03:54.719Z",
110 &entry1_publish_time));
111 EXPECT_EQ(entry1_update_time, folder_entry->updated_time());
112 EXPECT_EQ(entry1_publish_time, folder_entry->published_time());
113
114 ASSERT_EQ(1U, folder_entry->authors().size());
115 EXPECT_EQ(ASCIIToUTF16("entry_tester"), folder_entry->authors()[0]->name());
116 EXPECT_EQ("entry_tester@testing.com", folder_entry->authors()[0]->email());
117 EXPECT_EQ("https://1_folder_content_url/",
118 folder_entry->content_url().spec());
119 EXPECT_EQ("application/atom+xml;type=feed",
120 folder_entry->content_mime_type());
121
122 ASSERT_EQ(1U, folder_entry->feed_links().size());
123 const FeedLink* feed_link = folder_entry->feed_links()[0];
124 ASSERT_TRUE(feed_link);
125 ASSERT_EQ(FeedLink::FEED_LINK_ACL, feed_link->type());
126
127 const Link* entry1_alternate_link =
128 folder_entry->GetLinkByType(Link::LINK_ALTERNATE);
129 ASSERT_TRUE(entry1_alternate_link);
130 EXPECT_EQ("https://1_folder_alternate_link/",
131 entry1_alternate_link->href().spec());
132 EXPECT_EQ("text/html", entry1_alternate_link->mime_type());
133
134 const Link* entry1_edit_link = folder_entry->GetLinkByType(Link::LINK_EDIT);
135 ASSERT_TRUE(entry1_edit_link);
136 EXPECT_EQ("https://1_edit_link/", entry1_edit_link->href().spec());
137 EXPECT_EQ("application/atom+xml", entry1_edit_link->mime_type());
138
139 // Check a file entry.
140 const DocumentEntry* file_entry = feed->entries()[1];
141 ASSERT_TRUE(file_entry);
142 EXPECT_EQ(ENTRY_KIND_FILE, file_entry->kind());
143 EXPECT_EQ(ASCIIToUTF16("filename.m4a"), file_entry->filename());
144 EXPECT_EQ(ASCIIToUTF16("sugg_file_name.m4a"),
145 file_entry->suggested_filename());
146 EXPECT_EQ("3b4382ebefec6e743578c76bbd0575ce", file_entry->file_md5());
147 EXPECT_EQ(892721, file_entry->file_size());
148 const Link* file_parent_link = file_entry->GetLinkByType(Link::LINK_PARENT);
149 ASSERT_TRUE(file_parent_link);
150 EXPECT_EQ("https://file_link_parent/", file_parent_link->href().spec());
151 EXPECT_EQ("application/atom+xml", file_parent_link->mime_type());
152 EXPECT_EQ(ASCIIToUTF16("Medical"), file_parent_link->title());
153 const Link* file_open_with_link =
154 file_entry->GetLinkByType(Link::LINK_OPEN_WITH);
155 ASSERT_TRUE(file_open_with_link);
156 EXPECT_EQ("https://xml_file_entry_open_with_link/",
157 file_open_with_link->href().spec());
158 EXPECT_EQ("application/atom+xml", file_open_with_link->mime_type());
159 EXPECT_EQ("the_app_id", file_open_with_link->app_id());
160
161 const Link* file_unknown_link = file_entry->GetLinkByType(Link::LINK_UNKNOWN);
162 ASSERT_TRUE(file_unknown_link);
163 EXPECT_EQ("https://xml_file_fake_entry_open_with_link/",
164 file_unknown_link->href().spec());
165 EXPECT_EQ("application/atom+xml", file_unknown_link->mime_type());
166 EXPECT_EQ("", file_unknown_link->app_id());
167
168 // Check a file entry.
169 const DocumentEntry* document_entry = feed->entries()[2];
170 ASSERT_TRUE(document_entry);
171 EXPECT_EQ(ENTRY_KIND_DOCUMENT, document_entry->kind());
172 EXPECT_TRUE(document_entry->is_hosted_document());
173 EXPECT_TRUE(document_entry->is_google_document());
174 EXPECT_FALSE(document_entry->is_external_document());
175
176 // Check an external document entry.
177 const DocumentEntry* app_entry = feed->entries()[3];
178 ASSERT_TRUE(app_entry);
179 EXPECT_EQ(ENTRY_KIND_EXTERNAL_APP, app_entry->kind());
180 EXPECT_TRUE(app_entry->is_hosted_document());
181 EXPECT_TRUE(app_entry->is_external_document());
182 EXPECT_FALSE(app_entry->is_google_document());
183 }
184
185
186 // Test document feed parsing.
187 TEST_F(GDataWAPIParserTest, DocumentEntryXmlParser) {
188 scoped_ptr<DocumentEntry> entry(LoadDocumentEntryFromXml("entry.xml"));
189 ASSERT_TRUE(entry.get());
190
191 EXPECT_EQ(ENTRY_KIND_FILE, entry->kind());
192 EXPECT_EQ("\"HhMOFgcNHSt7ImBr\"", entry->etag());
193 EXPECT_EQ("file:xml_file_resource_id", entry->resource_id());
194 EXPECT_EQ("https://xml_file_id", entry->id());
195 EXPECT_EQ(ASCIIToUTF16("Xml Entry File Title.tar"), entry->title());
196 base::Time entry1_update_time;
197 base::Time entry1_publish_time;
198 ASSERT_TRUE(gdata::util::GetTimeFromString("2011-04-01T18:34:08.234Z",
199 &entry1_update_time));
200 ASSERT_TRUE(gdata::util::GetTimeFromString("2010-11-07T05:03:54.719Z",
201 &entry1_publish_time));
202 EXPECT_EQ(entry1_update_time, entry->updated_time());
203 EXPECT_EQ(entry1_publish_time, entry->published_time());
204
205 EXPECT_EQ(1U, entry->authors().size());
206 EXPECT_EQ(ASCIIToUTF16("entry_tester"), entry->authors()[0]->name());
207 EXPECT_EQ("entry_tester@testing.com", entry->authors()[0]->email());
208 EXPECT_EQ("https://1_xml_file_entry_content_url/",
209 entry->content_url().spec());
210 EXPECT_EQ("application/x-tar",
211 entry->content_mime_type());
212
213 // Check feed links.
214 ASSERT_EQ(2U, entry->feed_links().size());
215 const FeedLink* feed_link_1 = entry->feed_links()[0];
216 ASSERT_TRUE(feed_link_1);
217 EXPECT_EQ(FeedLink::FEED_LINK_ACL, feed_link_1->type());
218
219 const FeedLink* feed_link_2 = entry->feed_links()[1];
220 ASSERT_TRUE(feed_link_2);
221 EXPECT_EQ(FeedLink::FEED_LINK_REVISIONS, feed_link_2->type());
222
223 // Check links.
224 ASSERT_EQ(9U, entry->links().size());
225 const Link* entry1_alternate_link =
226 entry->GetLinkByType(Link::LINK_ALTERNATE);
227 ASSERT_TRUE(entry1_alternate_link);
228 EXPECT_EQ("https://xml_file_entry_id_alternate_link/",
229 entry1_alternate_link->href().spec());
230 EXPECT_EQ("text/html", entry1_alternate_link->mime_type());
231
232 const Link* entry1_edit_link = entry->GetLinkByType(Link::LINK_EDIT_MEDIA);
233 ASSERT_TRUE(entry1_edit_link);
234 EXPECT_EQ("https://xml_file_entry_id_edit_media_link/",
235 entry1_edit_link->href().spec());
236 EXPECT_EQ("application/x-tar", entry1_edit_link->mime_type());
237
238 const Link* entry1_self_link = entry->GetLinkByType(Link::LINK_SELF);
239 ASSERT_TRUE(entry1_self_link);
240 EXPECT_EQ("https://xml_file_entry_id_self_link/",
241 entry1_self_link->href().spec());
242 EXPECT_EQ("application/atom+xml", entry1_self_link->mime_type());
243 EXPECT_EQ("", entry1_self_link->app_id());
244
245 const Link* entry1_open_with_link =
246 entry->GetLinkByType(Link::LINK_OPEN_WITH);
247 ASSERT_TRUE(entry1_open_with_link);
248 EXPECT_EQ("https://xml_file_entry_open_with_link/",
249 entry1_open_with_link->href().spec());
250 EXPECT_EQ("application/atom+xml", entry1_open_with_link->mime_type());
251 EXPECT_EQ("the_app_id", entry1_open_with_link->app_id());
252
253 const Link* entry1_unknown_link = entry->GetLinkByType(Link::LINK_UNKNOWN);
254 ASSERT_TRUE(entry1_unknown_link);
255 EXPECT_EQ("https://xml_file_fake_entry_open_with_link/",
256 entry1_unknown_link->href().spec());
257 EXPECT_EQ("application/atom+xml", entry1_unknown_link->mime_type());
258 EXPECT_EQ("", entry1_unknown_link->app_id());
259
260 // Check a file properties.
261 EXPECT_EQ(ENTRY_KIND_FILE, entry->kind());
262 EXPECT_EQ(ASCIIToUTF16("Xml Entry File Name.tar"), entry->filename());
263 EXPECT_EQ(ASCIIToUTF16("Xml Entry Suggested File Name.tar"),
264 entry->suggested_filename());
265 EXPECT_EQ("e48f4d5c46a778de263e0e3f4b3d2a7d", entry->file_md5());
266 EXPECT_EQ(26562560, entry->file_size());
267 }
268
269 TEST_F(GDataWAPIParserTest, AccountMetadataFeedParser) {
270 scoped_ptr<Value> document =
271 test_util::LoadJSONFile("gdata/account_metadata.json");
272 ASSERT_TRUE(document.get());
273 ASSERT_EQ(Value::TYPE_DICTIONARY, document->GetType());
274 DictionaryValue* entry_value = NULL;
275 ASSERT_TRUE(reinterpret_cast<DictionaryValue*>(document.get())->GetDictionary(
276 std::string("entry"), &entry_value));
277 ASSERT_TRUE(entry_value);
278
279 scoped_ptr<AccountMetadataFeed> feed(
280 AccountMetadataFeed::CreateFrom(*document));
281 ASSERT_TRUE(feed.get());
282 EXPECT_EQ(GG_LONGLONG(6789012345), feed->quota_bytes_used());
283 EXPECT_EQ(GG_LONGLONG(9876543210), feed->quota_bytes_total());
284 EXPECT_EQ(654321, feed->largest_changestamp());
285 EXPECT_EQ(2U, feed->installed_apps().size());
286 const InstalledApp* first_app = feed->installed_apps()[0];
287 const InstalledApp* second_app = feed->installed_apps()[1];
288
289 ASSERT_TRUE(first_app);
290 EXPECT_EQ("Drive App 1", UTF16ToUTF8(first_app->app_name()));
291 EXPECT_EQ("Drive App Object 1", UTF16ToUTF8(first_app->object_type()));
292 EXPECT_TRUE(first_app->supports_create());
293 EXPECT_EQ("https://chrome.google.com/webstore/detail/abcdefabcdef",
294 first_app->GetProductUrl().spec());
295
296 ASSERT_EQ(2U, first_app->primary_mimetypes().size());
297 EXPECT_EQ("application/test_type_1",
298 *first_app->primary_mimetypes()[0]);
299 EXPECT_EQ("application/vnd.google-apps.drive-sdk.11111111",
300 *first_app->primary_mimetypes()[1]);
301
302 ASSERT_EQ(1U, first_app->secondary_mimetypes().size());
303 EXPECT_EQ("image/jpeg", *first_app->secondary_mimetypes()[0]);
304
305 ASSERT_EQ(2U, first_app->primary_extensions().size());
306 EXPECT_EQ("ext_1", *first_app->primary_extensions()[0]);
307 EXPECT_EQ("ext_2", *first_app->primary_extensions()[1]);
308
309 ASSERT_EQ(1U, first_app->secondary_extensions().size());
310 EXPECT_EQ("ext_3", *first_app->secondary_extensions()[0]);
311
312 ASSERT_EQ(1U, first_app->app_icons().size());
313 EXPECT_EQ(AppIcon::ICON_DOCUMENT, first_app->app_icons()[0]->category());
314 EXPECT_EQ(16, first_app->app_icons()[0]->icon_side_length());
315 GURL icon_url = first_app->app_icons()[0]->GetIconURL();
316 EXPECT_EQ("https://www.google.com/images/srpr/logo3w.png", icon_url.spec());
317 InstalledApp::IconList icons =
318 first_app->GetIconsForCategory(AppIcon::ICON_DOCUMENT);
319 EXPECT_EQ("https://www.google.com/images/srpr/logo3w.png",
320 icons[0].second.spec());
321 icons = first_app->GetIconsForCategory(AppIcon::ICON_SHARED_DOCUMENT);
322 EXPECT_TRUE(icons.empty());
323
324 ASSERT_TRUE(second_app);
325 EXPECT_EQ("Drive App 2", UTF16ToUTF8(second_app->app_name()));
326 EXPECT_EQ("Drive App Object 2", UTF16ToUTF8(second_app->object_type()));
327 EXPECT_EQ("https://chrome.google.com/webstore/detail/deadbeefdeadbeef",
328 second_app->GetProductUrl().spec());
329 EXPECT_FALSE(second_app->supports_create());
330 EXPECT_EQ(2U, second_app->primary_mimetypes().size());
331 EXPECT_EQ(0U, second_app->secondary_mimetypes().size());
332 EXPECT_EQ(1U, second_app->primary_extensions().size());
333 EXPECT_EQ(0U, second_app->secondary_extensions().size());
334 }
335
336 // Test file extension checking in DocumentEntry::HasDocumentExtension().
337 TEST_F(GDataWAPIParserTest, DocumentEntryHasDocumentExtension) {
338 EXPECT_TRUE(DocumentEntry::HasHostedDocumentExtension(
339 FilePath(FILE_PATH_LITERAL("Test.gdoc"))));
340 EXPECT_TRUE(DocumentEntry::HasHostedDocumentExtension(
341 FilePath(FILE_PATH_LITERAL("Test.gsheet"))));
342 EXPECT_TRUE(DocumentEntry::HasHostedDocumentExtension(
343 FilePath(FILE_PATH_LITERAL("Test.gslides"))));
344 EXPECT_TRUE(DocumentEntry::HasHostedDocumentExtension(
345 FilePath(FILE_PATH_LITERAL("Test.gdraw"))));
346 EXPECT_TRUE(DocumentEntry::HasHostedDocumentExtension(
347 FilePath(FILE_PATH_LITERAL("Test.gtable"))));
348 EXPECT_FALSE(DocumentEntry::HasHostedDocumentExtension(
349 FilePath(FILE_PATH_LITERAL("Test.tar.gz"))));
350 EXPECT_FALSE(DocumentEntry::HasHostedDocumentExtension(
351 FilePath(FILE_PATH_LITERAL("Test.txt"))));
352 EXPECT_FALSE(DocumentEntry::HasHostedDocumentExtension(
353 FilePath(FILE_PATH_LITERAL("Test"))));
354 EXPECT_FALSE(DocumentEntry::HasHostedDocumentExtension(
355 FilePath(FILE_PATH_LITERAL(""))));
356 }
357
358 TEST_F(GDataWAPIParserTest, DocumentEntryClassifyEntryKind) {
359 EXPECT_EQ(DocumentEntry::KIND_OF_NONE,
360 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_UNKNOWN));
361 EXPECT_EQ(DocumentEntry::KIND_OF_NONE,
362 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_ITEM));
363 EXPECT_EQ(DocumentEntry::KIND_OF_NONE,
364 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_SITE));
365 EXPECT_EQ(DocumentEntry::KIND_OF_GOOGLE_DOCUMENT |
366 DocumentEntry::KIND_OF_HOSTED_DOCUMENT,
367 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_DOCUMENT));
368 EXPECT_EQ(DocumentEntry::KIND_OF_GOOGLE_DOCUMENT |
369 DocumentEntry::KIND_OF_HOSTED_DOCUMENT,
370 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_SPREADSHEET));
371 EXPECT_EQ(DocumentEntry::KIND_OF_GOOGLE_DOCUMENT |
372 DocumentEntry::KIND_OF_HOSTED_DOCUMENT,
373 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_PRESENTATION));
374 EXPECT_EQ(DocumentEntry::KIND_OF_GOOGLE_DOCUMENT |
375 DocumentEntry::KIND_OF_HOSTED_DOCUMENT,
376 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_DRAWING));
377 EXPECT_EQ(DocumentEntry::KIND_OF_GOOGLE_DOCUMENT |
378 DocumentEntry::KIND_OF_HOSTED_DOCUMENT,
379 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_TABLE));
380 EXPECT_EQ(DocumentEntry::KIND_OF_EXTERNAL_DOCUMENT |
381 DocumentEntry::KIND_OF_HOSTED_DOCUMENT,
382 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_EXTERNAL_APP));
383 EXPECT_EQ(DocumentEntry::KIND_OF_FOLDER,
384 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_FOLDER));
385 EXPECT_EQ(DocumentEntry::KIND_OF_FILE,
386 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_FILE));
387 EXPECT_EQ(DocumentEntry::KIND_OF_FILE,
388 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_PDF));
389 }
390
391 } // namespace gdata
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698