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

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: Keep some files in the original place 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 // TODO(nhiroki): Make it possible to run these tests on any platforms after
57 // moving json files to out of 'chromeos' directory (http://crbug.com/149788).
58 #if defined(OS_CHROMEOS)
59 // Test document feed parsing.
60 TEST_F(GDataWAPIParserTest, DocumentFeedJsonParser) {
61 std::string error;
62 scoped_ptr<Value> document =
63 test_util::LoadJSONFile("gdata/basic_feed.json");
64 ASSERT_TRUE(document.get());
65 ASSERT_EQ(Value::TYPE_DICTIONARY, document->GetType());
66 scoped_ptr<DocumentFeed> feed(DocumentFeed::ExtractAndParse(*document));
67 ASSERT_TRUE(feed.get());
68
69 base::Time update_time;
70 ASSERT_TRUE(gdata::util::GetTimeFromString("2011-12-14T01:03:21.151Z",
71 &update_time));
72
73 EXPECT_EQ(1, feed->start_index());
74 EXPECT_EQ(1000, feed->items_per_page());
75 EXPECT_EQ(update_time, feed->updated_time());
76
77 // Check authors.
78 ASSERT_EQ(1U, feed->authors().size());
79 EXPECT_EQ(ASCIIToUTF16("tester"), feed->authors()[0]->name());
80 EXPECT_EQ("tester@testing.com", feed->authors()[0]->email());
81
82 // Check links.
83 ASSERT_EQ(6U, feed->links().size());
84 const Link* self_link = feed->GetLinkByType(Link::LINK_SELF);
85 ASSERT_TRUE(self_link);
86 EXPECT_EQ("https://self_link/", self_link->href().spec());
87 EXPECT_EQ("application/atom+xml", self_link->mime_type());
88
89
90 const Link* resumable_link =
91 feed->GetLinkByType(Link::LINK_RESUMABLE_CREATE_MEDIA);
92 ASSERT_TRUE(resumable_link);
93 EXPECT_EQ("https://resumable_create_media_link/",
94 resumable_link->href().spec());
95 EXPECT_EQ("application/atom+xml", resumable_link->mime_type());
96
97 // Check entries.
98 ASSERT_EQ(4U, feed->entries().size());
99
100 // Check a folder entry.
101 const DocumentEntry* folder_entry = feed->entries()[0];
102 ASSERT_TRUE(folder_entry);
103 EXPECT_EQ(ENTRY_KIND_FOLDER, folder_entry->kind());
104 EXPECT_EQ("\"HhMOFgcNHSt7ImBr\"", folder_entry->etag());
105 EXPECT_EQ("folder:sub_sub_directory_folder_id", folder_entry->resource_id());
106 EXPECT_EQ("https://1_folder_id", folder_entry->id());
107 EXPECT_EQ(ASCIIToUTF16("Entry 1 Title"), folder_entry->title());
108 base::Time entry1_update_time;
109 base::Time entry1_publish_time;
110 ASSERT_TRUE(gdata::util::GetTimeFromString("2011-04-01T18:34:08.234Z",
111 &entry1_update_time));
112 ASSERT_TRUE(gdata::util::GetTimeFromString("2010-11-07T05:03:54.719Z",
113 &entry1_publish_time));
114 EXPECT_EQ(entry1_update_time, folder_entry->updated_time());
115 EXPECT_EQ(entry1_publish_time, folder_entry->published_time());
116
117 ASSERT_EQ(1U, folder_entry->authors().size());
118 EXPECT_EQ(ASCIIToUTF16("entry_tester"), folder_entry->authors()[0]->name());
119 EXPECT_EQ("entry_tester@testing.com", folder_entry->authors()[0]->email());
120 EXPECT_EQ("https://1_folder_content_url/",
121 folder_entry->content_url().spec());
122 EXPECT_EQ("application/atom+xml;type=feed",
123 folder_entry->content_mime_type());
124
125 ASSERT_EQ(1U, folder_entry->feed_links().size());
126 const FeedLink* feed_link = folder_entry->feed_links()[0];
127 ASSERT_TRUE(feed_link);
128 ASSERT_EQ(FeedLink::FEED_LINK_ACL, feed_link->type());
129
130 const Link* entry1_alternate_link =
131 folder_entry->GetLinkByType(Link::LINK_ALTERNATE);
132 ASSERT_TRUE(entry1_alternate_link);
133 EXPECT_EQ("https://1_folder_alternate_link/",
134 entry1_alternate_link->href().spec());
135 EXPECT_EQ("text/html", entry1_alternate_link->mime_type());
136
137 const Link* entry1_edit_link = folder_entry->GetLinkByType(Link::LINK_EDIT);
138 ASSERT_TRUE(entry1_edit_link);
139 EXPECT_EQ("https://1_edit_link/", entry1_edit_link->href().spec());
140 EXPECT_EQ("application/atom+xml", entry1_edit_link->mime_type());
141
142 // Check a file entry.
143 const DocumentEntry* file_entry = feed->entries()[1];
144 ASSERT_TRUE(file_entry);
145 EXPECT_EQ(ENTRY_KIND_FILE, file_entry->kind());
146 EXPECT_EQ(ASCIIToUTF16("filename.m4a"), file_entry->filename());
147 EXPECT_EQ(ASCIIToUTF16("sugg_file_name.m4a"),
148 file_entry->suggested_filename());
149 EXPECT_EQ("3b4382ebefec6e743578c76bbd0575ce", file_entry->file_md5());
150 EXPECT_EQ(892721, file_entry->file_size());
151 const Link* file_parent_link = file_entry->GetLinkByType(Link::LINK_PARENT);
152 ASSERT_TRUE(file_parent_link);
153 EXPECT_EQ("https://file_link_parent/", file_parent_link->href().spec());
154 EXPECT_EQ("application/atom+xml", file_parent_link->mime_type());
155 EXPECT_EQ(ASCIIToUTF16("Medical"), file_parent_link->title());
156 const Link* file_open_with_link =
157 file_entry->GetLinkByType(Link::LINK_OPEN_WITH);
158 ASSERT_TRUE(file_open_with_link);
159 EXPECT_EQ("https://xml_file_entry_open_with_link/",
160 file_open_with_link->href().spec());
161 EXPECT_EQ("application/atom+xml", file_open_with_link->mime_type());
162 EXPECT_EQ("the_app_id", file_open_with_link->app_id());
163
164 const Link* file_unknown_link = file_entry->GetLinkByType(Link::LINK_UNKNOWN);
165 ASSERT_TRUE(file_unknown_link);
166 EXPECT_EQ("https://xml_file_fake_entry_open_with_link/",
167 file_unknown_link->href().spec());
168 EXPECT_EQ("application/atom+xml", file_unknown_link->mime_type());
169 EXPECT_EQ("", file_unknown_link->app_id());
170
171 // Check a file entry.
172 const DocumentEntry* document_entry = feed->entries()[2];
173 ASSERT_TRUE(document_entry);
174 EXPECT_EQ(ENTRY_KIND_DOCUMENT, document_entry->kind());
175 EXPECT_TRUE(document_entry->is_hosted_document());
176 EXPECT_TRUE(document_entry->is_google_document());
177 EXPECT_FALSE(document_entry->is_external_document());
178
179 // Check an external document entry.
180 const DocumentEntry* app_entry = feed->entries()[3];
181 ASSERT_TRUE(app_entry);
182 EXPECT_EQ(ENTRY_KIND_EXTERNAL_APP, app_entry->kind());
183 EXPECT_TRUE(app_entry->is_hosted_document());
184 EXPECT_TRUE(app_entry->is_external_document());
185 EXPECT_FALSE(app_entry->is_google_document());
186 }
187
188
189 // Test document feed parsing.
190 TEST_F(GDataWAPIParserTest, DocumentEntryXmlParser) {
191 scoped_ptr<DocumentEntry> entry(LoadDocumentEntryFromXml("entry.xml"));
192 ASSERT_TRUE(entry.get());
193
194 EXPECT_EQ(ENTRY_KIND_FILE, entry->kind());
195 EXPECT_EQ("\"HhMOFgcNHSt7ImBr\"", entry->etag());
196 EXPECT_EQ("file:xml_file_resource_id", entry->resource_id());
197 EXPECT_EQ("https://xml_file_id", entry->id());
198 EXPECT_EQ(ASCIIToUTF16("Xml Entry File Title.tar"), entry->title());
199 base::Time entry1_update_time;
200 base::Time entry1_publish_time;
201 ASSERT_TRUE(gdata::util::GetTimeFromString("2011-04-01T18:34:08.234Z",
202 &entry1_update_time));
203 ASSERT_TRUE(gdata::util::GetTimeFromString("2010-11-07T05:03:54.719Z",
204 &entry1_publish_time));
205 EXPECT_EQ(entry1_update_time, entry->updated_time());
206 EXPECT_EQ(entry1_publish_time, entry->published_time());
207
208 EXPECT_EQ(1U, entry->authors().size());
209 EXPECT_EQ(ASCIIToUTF16("entry_tester"), entry->authors()[0]->name());
210 EXPECT_EQ("entry_tester@testing.com", entry->authors()[0]->email());
211 EXPECT_EQ("https://1_xml_file_entry_content_url/",
212 entry->content_url().spec());
213 EXPECT_EQ("application/x-tar",
214 entry->content_mime_type());
215
216 // Check feed links.
217 ASSERT_EQ(2U, entry->feed_links().size());
218 const FeedLink* feed_link_1 = entry->feed_links()[0];
219 ASSERT_TRUE(feed_link_1);
220 EXPECT_EQ(FeedLink::FEED_LINK_ACL, feed_link_1->type());
221
222 const FeedLink* feed_link_2 = entry->feed_links()[1];
223 ASSERT_TRUE(feed_link_2);
224 EXPECT_EQ(FeedLink::FEED_LINK_REVISIONS, feed_link_2->type());
225
226 // Check links.
227 ASSERT_EQ(9U, entry->links().size());
228 const Link* entry1_alternate_link =
229 entry->GetLinkByType(Link::LINK_ALTERNATE);
230 ASSERT_TRUE(entry1_alternate_link);
231 EXPECT_EQ("https://xml_file_entry_id_alternate_link/",
232 entry1_alternate_link->href().spec());
233 EXPECT_EQ("text/html", entry1_alternate_link->mime_type());
234
235 const Link* entry1_edit_link = entry->GetLinkByType(Link::LINK_EDIT_MEDIA);
236 ASSERT_TRUE(entry1_edit_link);
237 EXPECT_EQ("https://xml_file_entry_id_edit_media_link/",
238 entry1_edit_link->href().spec());
239 EXPECT_EQ("application/x-tar", entry1_edit_link->mime_type());
240
241 const Link* entry1_self_link = entry->GetLinkByType(Link::LINK_SELF);
242 ASSERT_TRUE(entry1_self_link);
243 EXPECT_EQ("https://xml_file_entry_id_self_link/",
244 entry1_self_link->href().spec());
245 EXPECT_EQ("application/atom+xml", entry1_self_link->mime_type());
246 EXPECT_EQ("", entry1_self_link->app_id());
247
248 const Link* entry1_open_with_link =
249 entry->GetLinkByType(Link::LINK_OPEN_WITH);
250 ASSERT_TRUE(entry1_open_with_link);
251 EXPECT_EQ("https://xml_file_entry_open_with_link/",
252 entry1_open_with_link->href().spec());
253 EXPECT_EQ("application/atom+xml", entry1_open_with_link->mime_type());
254 EXPECT_EQ("the_app_id", entry1_open_with_link->app_id());
255
256 const Link* entry1_unknown_link = entry->GetLinkByType(Link::LINK_UNKNOWN);
257 ASSERT_TRUE(entry1_unknown_link);
258 EXPECT_EQ("https://xml_file_fake_entry_open_with_link/",
259 entry1_unknown_link->href().spec());
260 EXPECT_EQ("application/atom+xml", entry1_unknown_link->mime_type());
261 EXPECT_EQ("", entry1_unknown_link->app_id());
262
263 // Check a file properties.
264 EXPECT_EQ(ENTRY_KIND_FILE, entry->kind());
265 EXPECT_EQ(ASCIIToUTF16("Xml Entry File Name.tar"), entry->filename());
266 EXPECT_EQ(ASCIIToUTF16("Xml Entry Suggested File Name.tar"),
267 entry->suggested_filename());
268 EXPECT_EQ("e48f4d5c46a778de263e0e3f4b3d2a7d", entry->file_md5());
269 EXPECT_EQ(26562560, entry->file_size());
270 }
271
272 TEST_F(GDataWAPIParserTest, AccountMetadataFeedParser) {
273 scoped_ptr<Value> document =
274 test_util::LoadJSONFile("gdata/account_metadata.json");
275 ASSERT_TRUE(document.get());
276 ASSERT_EQ(Value::TYPE_DICTIONARY, document->GetType());
277 DictionaryValue* entry_value = NULL;
278 ASSERT_TRUE(reinterpret_cast<DictionaryValue*>(document.get())->GetDictionary(
279 std::string("entry"), &entry_value));
280 ASSERT_TRUE(entry_value);
281
282 scoped_ptr<AccountMetadataFeed> feed(
283 AccountMetadataFeed::CreateFrom(*document));
284 ASSERT_TRUE(feed.get());
285 EXPECT_EQ(GG_LONGLONG(6789012345), feed->quota_bytes_used());
286 EXPECT_EQ(GG_LONGLONG(9876543210), feed->quota_bytes_total());
287 EXPECT_EQ(654321, feed->largest_changestamp());
288 EXPECT_EQ(2U, feed->installed_apps().size());
289 const InstalledApp* first_app = feed->installed_apps()[0];
290 const InstalledApp* second_app = feed->installed_apps()[1];
291
292 ASSERT_TRUE(first_app);
293 EXPECT_EQ("Drive App 1", UTF16ToUTF8(first_app->app_name()));
294 EXPECT_EQ("Drive App Object 1", UTF16ToUTF8(first_app->object_type()));
295 EXPECT_TRUE(first_app->supports_create());
296 EXPECT_EQ("https://chrome.google.com/webstore/detail/abcdefabcdef",
297 first_app->GetProductUrl().spec());
298
299 ASSERT_EQ(2U, first_app->primary_mimetypes().size());
300 EXPECT_EQ("application/test_type_1",
301 *first_app->primary_mimetypes()[0]);
302 EXPECT_EQ("application/vnd.google-apps.drive-sdk.11111111",
303 *first_app->primary_mimetypes()[1]);
304
305 ASSERT_EQ(1U, first_app->secondary_mimetypes().size());
306 EXPECT_EQ("image/jpeg", *first_app->secondary_mimetypes()[0]);
307
308 ASSERT_EQ(2U, first_app->primary_extensions().size());
309 EXPECT_EQ("ext_1", *first_app->primary_extensions()[0]);
310 EXPECT_EQ("ext_2", *first_app->primary_extensions()[1]);
311
312 ASSERT_EQ(1U, first_app->secondary_extensions().size());
313 EXPECT_EQ("ext_3", *first_app->secondary_extensions()[0]);
314
315 ASSERT_EQ(1U, first_app->app_icons().size());
316 EXPECT_EQ(AppIcon::ICON_DOCUMENT, first_app->app_icons()[0]->category());
317 EXPECT_EQ(16, first_app->app_icons()[0]->icon_side_length());
318 GURL icon_url = first_app->app_icons()[0]->GetIconURL();
319 EXPECT_EQ("https://www.google.com/images/srpr/logo3w.png", icon_url.spec());
320 InstalledApp::IconList icons =
321 first_app->GetIconsForCategory(AppIcon::ICON_DOCUMENT);
322 EXPECT_EQ("https://www.google.com/images/srpr/logo3w.png",
323 icons[0].second.spec());
324 icons = first_app->GetIconsForCategory(AppIcon::ICON_SHARED_DOCUMENT);
325 EXPECT_TRUE(icons.empty());
326
327 ASSERT_TRUE(second_app);
328 EXPECT_EQ("Drive App 2", UTF16ToUTF8(second_app->app_name()));
329 EXPECT_EQ("Drive App Object 2", UTF16ToUTF8(second_app->object_type()));
330 EXPECT_EQ("https://chrome.google.com/webstore/detail/deadbeefdeadbeef",
331 second_app->GetProductUrl().spec());
332 EXPECT_FALSE(second_app->supports_create());
333 EXPECT_EQ(2U, second_app->primary_mimetypes().size());
334 EXPECT_EQ(0U, second_app->secondary_mimetypes().size());
335 EXPECT_EQ(1U, second_app->primary_extensions().size());
336 EXPECT_EQ(0U, second_app->secondary_extensions().size());
337 }
338 #endif // OS_CHROMEOS
339
340 // Test file extension checking in DocumentEntry::HasDocumentExtension().
341 TEST_F(GDataWAPIParserTest, DocumentEntryHasDocumentExtension) {
342 EXPECT_TRUE(DocumentEntry::HasHostedDocumentExtension(
343 FilePath(FILE_PATH_LITERAL("Test.gdoc"))));
344 EXPECT_TRUE(DocumentEntry::HasHostedDocumentExtension(
345 FilePath(FILE_PATH_LITERAL("Test.gsheet"))));
346 EXPECT_TRUE(DocumentEntry::HasHostedDocumentExtension(
347 FilePath(FILE_PATH_LITERAL("Test.gslides"))));
348 EXPECT_TRUE(DocumentEntry::HasHostedDocumentExtension(
349 FilePath(FILE_PATH_LITERAL("Test.gdraw"))));
350 EXPECT_TRUE(DocumentEntry::HasHostedDocumentExtension(
351 FilePath(FILE_PATH_LITERAL("Test.gtable"))));
352 EXPECT_FALSE(DocumentEntry::HasHostedDocumentExtension(
353 FilePath(FILE_PATH_LITERAL("Test.tar.gz"))));
354 EXPECT_FALSE(DocumentEntry::HasHostedDocumentExtension(
355 FilePath(FILE_PATH_LITERAL("Test.txt"))));
356 EXPECT_FALSE(DocumentEntry::HasHostedDocumentExtension(
357 FilePath(FILE_PATH_LITERAL("Test"))));
358 EXPECT_FALSE(DocumentEntry::HasHostedDocumentExtension(
359 FilePath(FILE_PATH_LITERAL(""))));
360 }
361
362 TEST_F(GDataWAPIParserTest, DocumentEntryClassifyEntryKind) {
363 EXPECT_EQ(DocumentEntry::KIND_OF_NONE,
364 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_UNKNOWN));
365 EXPECT_EQ(DocumentEntry::KIND_OF_NONE,
366 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_ITEM));
367 EXPECT_EQ(DocumentEntry::KIND_OF_NONE,
368 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_SITE));
369 EXPECT_EQ(DocumentEntry::KIND_OF_GOOGLE_DOCUMENT |
370 DocumentEntry::KIND_OF_HOSTED_DOCUMENT,
371 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_DOCUMENT));
372 EXPECT_EQ(DocumentEntry::KIND_OF_GOOGLE_DOCUMENT |
373 DocumentEntry::KIND_OF_HOSTED_DOCUMENT,
374 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_SPREADSHEET));
375 EXPECT_EQ(DocumentEntry::KIND_OF_GOOGLE_DOCUMENT |
376 DocumentEntry::KIND_OF_HOSTED_DOCUMENT,
377 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_PRESENTATION));
378 EXPECT_EQ(DocumentEntry::KIND_OF_GOOGLE_DOCUMENT |
379 DocumentEntry::KIND_OF_HOSTED_DOCUMENT,
380 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_DRAWING));
381 EXPECT_EQ(DocumentEntry::KIND_OF_GOOGLE_DOCUMENT |
382 DocumentEntry::KIND_OF_HOSTED_DOCUMENT,
383 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_TABLE));
384 EXPECT_EQ(DocumentEntry::KIND_OF_EXTERNAL_DOCUMENT |
385 DocumentEntry::KIND_OF_HOSTED_DOCUMENT,
386 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_EXTERNAL_APP));
387 EXPECT_EQ(DocumentEntry::KIND_OF_FOLDER,
388 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_FOLDER));
389 EXPECT_EQ(DocumentEntry::KIND_OF_FILE,
390 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_FILE));
391 EXPECT_EQ(DocumentEntry::KIND_OF_FILE,
392 DocumentEntry::ClassifyEntryKind(ENTRY_KIND_PDF));
393 }
394
395 } // namespace gdata
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698