OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 "google_apis/drive/gdata_wapi_parser.h" | 5 #include "google_apis/drive/gdata_wapi_parser.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/json/json_file_value_serializer.h" | 10 #include "base/json/json_file_value_serializer.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 EXPECT_EQ("https://resumable_create_media_link/", | 53 EXPECT_EQ("https://resumable_create_media_link/", |
54 resumable_link->href().spec()); | 54 resumable_link->href().spec()); |
55 EXPECT_EQ("application/atom+xml", resumable_link->mime_type()); | 55 EXPECT_EQ("application/atom+xml", resumable_link->mime_type()); |
56 | 56 |
57 // Check entries. | 57 // Check entries. |
58 ASSERT_EQ(4U, feed->entries().size()); | 58 ASSERT_EQ(4U, feed->entries().size()); |
59 | 59 |
60 // Check a folder entry. | 60 // Check a folder entry. |
61 const ResourceEntry* folder_entry = feed->entries()[0]; | 61 const ResourceEntry* folder_entry = feed->entries()[0]; |
62 ASSERT_TRUE(folder_entry); | 62 ASSERT_TRUE(folder_entry); |
63 EXPECT_EQ(ENTRY_KIND_FOLDER, folder_entry->kind()); | 63 EXPECT_EQ(ResourceEntry::ENTRY_KIND_FOLDER, folder_entry->kind()); |
64 EXPECT_EQ("\"HhMOFgcNHSt7ImBr\"", folder_entry->etag()); | 64 EXPECT_EQ("\"HhMOFgcNHSt7ImBr\"", folder_entry->etag()); |
65 EXPECT_EQ("folder:sub_sub_directory_folder_id", folder_entry->resource_id()); | 65 EXPECT_EQ("folder:sub_sub_directory_folder_id", folder_entry->resource_id()); |
66 EXPECT_EQ("https://1_folder_id", folder_entry->id()); | 66 EXPECT_EQ("https://1_folder_id", folder_entry->id()); |
67 EXPECT_EQ("Entry 1 Title", folder_entry->title()); | 67 EXPECT_EQ("Entry 1 Title", folder_entry->title()); |
68 base::Time entry1_update_time; | 68 base::Time entry1_update_time; |
69 base::Time entry1_publish_time; | 69 base::Time entry1_publish_time; |
70 ASSERT_TRUE(util::GetTimeFromString("2011-04-01T18:34:08.234Z", | 70 ASSERT_TRUE(util::GetTimeFromString("2011-04-01T18:34:08.234Z", |
71 &entry1_update_time)); | 71 &entry1_update_time)); |
72 ASSERT_TRUE(util::GetTimeFromString("2010-11-07T05:03:54.719Z", | 72 ASSERT_TRUE(util::GetTimeFromString("2010-11-07T05:03:54.719Z", |
73 &entry1_publish_time)); | 73 &entry1_publish_time)); |
(...skipping 21 matching lines...) Expand all Loading... |
95 EXPECT_EQ("text/html", entry1_alternate_link->mime_type()); | 95 EXPECT_EQ("text/html", entry1_alternate_link->mime_type()); |
96 | 96 |
97 const Link* entry1_edit_link = folder_entry->GetLinkByType(Link::LINK_EDIT); | 97 const Link* entry1_edit_link = folder_entry->GetLinkByType(Link::LINK_EDIT); |
98 ASSERT_TRUE(entry1_edit_link); | 98 ASSERT_TRUE(entry1_edit_link); |
99 EXPECT_EQ("https://1_edit_link/", entry1_edit_link->href().spec()); | 99 EXPECT_EQ("https://1_edit_link/", entry1_edit_link->href().spec()); |
100 EXPECT_EQ("application/atom+xml", entry1_edit_link->mime_type()); | 100 EXPECT_EQ("application/atom+xml", entry1_edit_link->mime_type()); |
101 | 101 |
102 // Check a file entry. | 102 // Check a file entry. |
103 const ResourceEntry* file_entry = feed->entries()[1]; | 103 const ResourceEntry* file_entry = feed->entries()[1]; |
104 ASSERT_TRUE(file_entry); | 104 ASSERT_TRUE(file_entry); |
105 EXPECT_EQ(ENTRY_KIND_FILE, file_entry->kind()); | 105 EXPECT_EQ(ResourceEntry::ENTRY_KIND_FILE, file_entry->kind()); |
106 EXPECT_EQ("filename.m4a", file_entry->filename()); | 106 EXPECT_EQ("filename.m4a", file_entry->filename()); |
107 EXPECT_EQ("sugg_file_name.m4a", file_entry->suggested_filename()); | 107 EXPECT_EQ("sugg_file_name.m4a", file_entry->suggested_filename()); |
108 EXPECT_EQ("3b4382ebefec6e743578c76bbd0575ce", file_entry->file_md5()); | 108 EXPECT_EQ("3b4382ebefec6e743578c76bbd0575ce", file_entry->file_md5()); |
109 EXPECT_EQ(892721, file_entry->file_size()); | 109 EXPECT_EQ(892721, file_entry->file_size()); |
110 const Link* file_parent_link = file_entry->GetLinkByType(Link::LINK_PARENT); | 110 const Link* file_parent_link = file_entry->GetLinkByType(Link::LINK_PARENT); |
111 ASSERT_TRUE(file_parent_link); | 111 ASSERT_TRUE(file_parent_link); |
112 EXPECT_EQ("https://file_link_parent/", file_parent_link->href().spec()); | 112 EXPECT_EQ("https://file_link_parent/", file_parent_link->href().spec()); |
113 EXPECT_EQ("application/atom+xml", file_parent_link->mime_type()); | 113 EXPECT_EQ("application/atom+xml", file_parent_link->mime_type()); |
114 EXPECT_EQ("Medical", file_parent_link->title()); | 114 EXPECT_EQ("Medical", file_parent_link->title()); |
115 const Link* file_open_with_link = | 115 const Link* file_open_with_link = |
116 file_entry->GetLinkByType(Link::LINK_OPEN_WITH); | 116 file_entry->GetLinkByType(Link::LINK_OPEN_WITH); |
117 ASSERT_TRUE(file_open_with_link); | 117 ASSERT_TRUE(file_open_with_link); |
118 EXPECT_EQ("https://xml_file_entry_open_with_link/", | 118 EXPECT_EQ("https://xml_file_entry_open_with_link/", |
119 file_open_with_link->href().spec()); | 119 file_open_with_link->href().spec()); |
120 EXPECT_EQ("application/atom+xml", file_open_with_link->mime_type()); | 120 EXPECT_EQ("application/atom+xml", file_open_with_link->mime_type()); |
121 EXPECT_EQ("the_app_id", file_open_with_link->app_id()); | 121 EXPECT_EQ("the_app_id", file_open_with_link->app_id()); |
122 EXPECT_EQ(654321, file_entry->changestamp()); | 122 EXPECT_EQ(654321, file_entry->changestamp()); |
123 | 123 |
124 const Link* file_unknown_link = file_entry->GetLinkByType(Link::LINK_UNKNOWN); | 124 const Link* file_unknown_link = file_entry->GetLinkByType(Link::LINK_UNKNOWN); |
125 ASSERT_TRUE(file_unknown_link); | 125 ASSERT_TRUE(file_unknown_link); |
126 EXPECT_EQ("https://xml_file_fake_entry_open_with_link/", | 126 EXPECT_EQ("https://xml_file_fake_entry_open_with_link/", |
127 file_unknown_link->href().spec()); | 127 file_unknown_link->href().spec()); |
128 EXPECT_EQ("application/atom+xml", file_unknown_link->mime_type()); | 128 EXPECT_EQ("application/atom+xml", file_unknown_link->mime_type()); |
129 EXPECT_EQ("", file_unknown_link->app_id()); | 129 EXPECT_EQ("", file_unknown_link->app_id()); |
130 | 130 |
131 // Check a file entry. | 131 // Check a file entry. |
132 const ResourceEntry* resource_entry = feed->entries()[2]; | 132 const ResourceEntry* resource_entry = feed->entries()[2]; |
133 ASSERT_TRUE(resource_entry); | 133 ASSERT_TRUE(resource_entry); |
134 EXPECT_EQ(ENTRY_KIND_DOCUMENT, resource_entry->kind()); | 134 // Hosted documents are treated as unknown kind so that sync file system |
135 EXPECT_TRUE(resource_entry->is_hosted_document()); | 135 // doesn't assume them as neither folders nor normal files. |
136 EXPECT_TRUE(resource_entry->is_google_document()); | 136 EXPECT_EQ(ResourceEntry::ENTRY_KIND_UNKNOWN, resource_entry->kind()); |
137 EXPECT_FALSE(resource_entry->is_external_document()); | |
138 | 137 |
139 // Check an external document entry. | 138 // Check an external document entry. |
140 const ResourceEntry* app_entry = feed->entries()[3]; | 139 const ResourceEntry* app_entry = feed->entries()[3]; |
141 ASSERT_TRUE(app_entry); | 140 ASSERT_TRUE(app_entry); |
142 EXPECT_EQ(ENTRY_KIND_EXTERNAL_APP, app_entry->kind()); | 141 // Hosted documents are treated as unknown kind so that sync file system |
143 EXPECT_TRUE(app_entry->is_hosted_document()); | 142 // doesn't assume them as neither folders nor normal files. |
144 EXPECT_TRUE(app_entry->is_external_document()); | 143 EXPECT_EQ(ResourceEntry::ENTRY_KIND_UNKNOWN, app_entry->kind()); |
145 EXPECT_FALSE(app_entry->is_google_document()); | |
146 } | 144 } |
147 | 145 |
148 | 146 |
149 // Test document feed parsing. | 147 // Test document feed parsing. |
150 TEST(GDataWAPIParserTest, ResourceEntryJsonParser) { | 148 TEST(GDataWAPIParserTest, ResourceEntryJsonParser) { |
151 std::string error; | 149 std::string error; |
152 scoped_ptr<base::Value> document = | 150 scoped_ptr<base::Value> document = |
153 test_util::LoadJSONFile("gdata/file_entry.json"); | 151 test_util::LoadJSONFile("gdata/file_entry.json"); |
154 ASSERT_TRUE(document.get()); | 152 ASSERT_TRUE(document.get()); |
155 ASSERT_EQ(base::Value::TYPE_DICTIONARY, document->GetType()); | 153 ASSERT_EQ(base::Value::TYPE_DICTIONARY, document->GetType()); |
156 scoped_ptr<ResourceEntry> entry(ResourceEntry::ExtractAndParse(*document)); | 154 scoped_ptr<ResourceEntry> entry(ResourceEntry::ExtractAndParse(*document)); |
157 ASSERT_TRUE(entry.get()); | 155 ASSERT_TRUE(entry.get()); |
158 | 156 |
159 EXPECT_EQ(ENTRY_KIND_FILE, entry->kind()); | 157 EXPECT_EQ(ResourceEntry::ENTRY_KIND_FILE, entry->kind()); |
160 EXPECT_EQ("\"HhMOFgxXHit7ImBr\"", entry->etag()); | 158 EXPECT_EQ("\"HhMOFgxXHit7ImBr\"", entry->etag()); |
161 EXPECT_EQ("file:2_file_resource_id", entry->resource_id()); | 159 EXPECT_EQ("file:2_file_resource_id", entry->resource_id()); |
162 EXPECT_EQ("2_file_id", entry->id()); | 160 EXPECT_EQ("2_file_id", entry->id()); |
163 EXPECT_EQ("File 1.mp3", entry->title()); | 161 EXPECT_EQ("File 1.mp3", entry->title()); |
164 base::Time entry1_update_time; | 162 base::Time entry1_update_time; |
165 base::Time entry1_publish_time; | 163 base::Time entry1_publish_time; |
166 ASSERT_TRUE(util::GetTimeFromString("2011-12-14T00:40:47.330Z", | 164 ASSERT_TRUE(util::GetTimeFromString("2011-12-14T00:40:47.330Z", |
167 &entry1_update_time)); | 165 &entry1_update_time)); |
168 ASSERT_TRUE(util::GetTimeFromString("2011-12-13T00:40:47.330Z", | 166 ASSERT_TRUE(util::GetTimeFromString("2011-12-13T00:40:47.330Z", |
169 &entry1_publish_time)); | 167 &entry1_publish_time)); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 EXPECT_EQ("the_app_id", entry1_open_with_link->app_id()); | 213 EXPECT_EQ("the_app_id", entry1_open_with_link->app_id()); |
216 | 214 |
217 const Link* entry1_unknown_link = entry->GetLinkByType(Link::LINK_UNKNOWN); | 215 const Link* entry1_unknown_link = entry->GetLinkByType(Link::LINK_UNKNOWN); |
218 ASSERT_TRUE(entry1_unknown_link); | 216 ASSERT_TRUE(entry1_unknown_link); |
219 EXPECT_EQ("https://entry1_fake_entry_open_with_link/", | 217 EXPECT_EQ("https://entry1_fake_entry_open_with_link/", |
220 entry1_unknown_link->href().spec()); | 218 entry1_unknown_link->href().spec()); |
221 EXPECT_EQ("application/atom+xml", entry1_unknown_link->mime_type()); | 219 EXPECT_EQ("application/atom+xml", entry1_unknown_link->mime_type()); |
222 EXPECT_EQ("", entry1_unknown_link->app_id()); | 220 EXPECT_EQ("", entry1_unknown_link->app_id()); |
223 | 221 |
224 // Check a file properties. | 222 // Check a file properties. |
225 EXPECT_EQ(ENTRY_KIND_FILE, entry->kind()); | 223 EXPECT_EQ(ResourceEntry::ENTRY_KIND_FILE, entry->kind()); |
226 EXPECT_EQ("File 1.mp3", entry->filename()); | 224 EXPECT_EQ("File 1.mp3", entry->filename()); |
227 EXPECT_EQ("File 1.mp3", entry->suggested_filename()); | 225 EXPECT_EQ("File 1.mp3", entry->suggested_filename()); |
228 EXPECT_EQ("3b4382ebefec6e743578c76bbd0575ce", entry->file_md5()); | 226 EXPECT_EQ("3b4382ebefec6e743578c76bbd0575ce", entry->file_md5()); |
229 EXPECT_EQ(892721, entry->file_size()); | 227 EXPECT_EQ(892721, entry->file_size()); |
230 | 228 |
231 // WAPI doesn't provide image metadata, but these fields are available | 229 // WAPI doesn't provide image metadata, but these fields are available |
232 // since this class can wrap data received from Drive API (via a converter). | 230 // since this class can wrap data received from Drive API (via a converter). |
233 EXPECT_EQ(-1, entry->image_width()); | 231 EXPECT_EQ(-1, entry->image_width()); |
234 EXPECT_EQ(-1, entry->image_height()); | 232 EXPECT_EQ(-1, entry->image_height()); |
235 EXPECT_EQ(-1, entry->image_rotation()); | 233 EXPECT_EQ(-1, entry->image_rotation()); |
236 } | 234 } |
237 | 235 |
238 TEST(GDataWAPIParserTest, ClassifyEntryKindByFileExtension) { | |
239 EXPECT_EQ( | |
240 ResourceEntry::KIND_OF_GOOGLE_DOCUMENT | | |
241 ResourceEntry::KIND_OF_HOSTED_DOCUMENT, | |
242 ResourceEntry::ClassifyEntryKindByFileExtension( | |
243 base::FilePath(FILE_PATH_LITERAL("Test.gdoc")))); | |
244 EXPECT_EQ( | |
245 ResourceEntry::KIND_OF_GOOGLE_DOCUMENT | | |
246 ResourceEntry::KIND_OF_HOSTED_DOCUMENT, | |
247 ResourceEntry::ClassifyEntryKindByFileExtension( | |
248 base::FilePath(FILE_PATH_LITERAL("Test.gsheet")))); | |
249 EXPECT_EQ( | |
250 ResourceEntry::KIND_OF_GOOGLE_DOCUMENT | | |
251 ResourceEntry::KIND_OF_HOSTED_DOCUMENT, | |
252 ResourceEntry::ClassifyEntryKindByFileExtension( | |
253 base::FilePath(FILE_PATH_LITERAL("Test.gslides")))); | |
254 EXPECT_EQ( | |
255 ResourceEntry::KIND_OF_GOOGLE_DOCUMENT | | |
256 ResourceEntry::KIND_OF_HOSTED_DOCUMENT, | |
257 ResourceEntry::ClassifyEntryKindByFileExtension( | |
258 base::FilePath(FILE_PATH_LITERAL("Test.gdraw")))); | |
259 EXPECT_EQ( | |
260 ResourceEntry::KIND_OF_GOOGLE_DOCUMENT | | |
261 ResourceEntry::KIND_OF_HOSTED_DOCUMENT, | |
262 ResourceEntry::ClassifyEntryKindByFileExtension( | |
263 base::FilePath(FILE_PATH_LITERAL("Test.gtable")))); | |
264 EXPECT_EQ( | |
265 ResourceEntry::KIND_OF_EXTERNAL_DOCUMENT | | |
266 ResourceEntry::KIND_OF_HOSTED_DOCUMENT, | |
267 ResourceEntry::ClassifyEntryKindByFileExtension( | |
268 base::FilePath(FILE_PATH_LITERAL("Test.glink")))); | |
269 EXPECT_EQ( | |
270 ResourceEntry::KIND_OF_NONE, | |
271 ResourceEntry::ClassifyEntryKindByFileExtension( | |
272 base::FilePath(FILE_PATH_LITERAL("Test.tar.gz")))); | |
273 EXPECT_EQ( | |
274 ResourceEntry::KIND_OF_NONE, | |
275 ResourceEntry::ClassifyEntryKindByFileExtension( | |
276 base::FilePath(FILE_PATH_LITERAL("Test.txt")))); | |
277 EXPECT_EQ( | |
278 ResourceEntry::KIND_OF_NONE, | |
279 ResourceEntry::ClassifyEntryKindByFileExtension( | |
280 base::FilePath(FILE_PATH_LITERAL("Test")))); | |
281 EXPECT_EQ( | |
282 ResourceEntry::KIND_OF_NONE, | |
283 ResourceEntry::ClassifyEntryKindByFileExtension( | |
284 base::FilePath())); | |
285 } | |
286 | |
287 TEST(GDataWAPIParserTest, ResourceEntryClassifyEntryKind) { | |
288 EXPECT_EQ(ResourceEntry::KIND_OF_NONE, | |
289 ResourceEntry::ClassifyEntryKind(ENTRY_KIND_UNKNOWN)); | |
290 EXPECT_EQ(ResourceEntry::KIND_OF_NONE, | |
291 ResourceEntry::ClassifyEntryKind(ENTRY_KIND_ITEM)); | |
292 EXPECT_EQ(ResourceEntry::KIND_OF_NONE, | |
293 ResourceEntry::ClassifyEntryKind(ENTRY_KIND_SITE)); | |
294 EXPECT_EQ(ResourceEntry::KIND_OF_GOOGLE_DOCUMENT | | |
295 ResourceEntry::KIND_OF_HOSTED_DOCUMENT, | |
296 ResourceEntry::ClassifyEntryKind(ENTRY_KIND_DOCUMENT)); | |
297 EXPECT_EQ(ResourceEntry::KIND_OF_GOOGLE_DOCUMENT | | |
298 ResourceEntry::KIND_OF_HOSTED_DOCUMENT, | |
299 ResourceEntry::ClassifyEntryKind(ENTRY_KIND_SPREADSHEET)); | |
300 EXPECT_EQ(ResourceEntry::KIND_OF_GOOGLE_DOCUMENT | | |
301 ResourceEntry::KIND_OF_HOSTED_DOCUMENT, | |
302 ResourceEntry::ClassifyEntryKind(ENTRY_KIND_PRESENTATION)); | |
303 EXPECT_EQ(ResourceEntry::KIND_OF_GOOGLE_DOCUMENT | | |
304 ResourceEntry::KIND_OF_HOSTED_DOCUMENT, | |
305 ResourceEntry::ClassifyEntryKind(ENTRY_KIND_DRAWING)); | |
306 EXPECT_EQ(ResourceEntry::KIND_OF_GOOGLE_DOCUMENT | | |
307 ResourceEntry::KIND_OF_HOSTED_DOCUMENT, | |
308 ResourceEntry::ClassifyEntryKind(ENTRY_KIND_TABLE)); | |
309 EXPECT_EQ(ResourceEntry::KIND_OF_EXTERNAL_DOCUMENT | | |
310 ResourceEntry::KIND_OF_HOSTED_DOCUMENT, | |
311 ResourceEntry::ClassifyEntryKind(ENTRY_KIND_EXTERNAL_APP)); | |
312 EXPECT_EQ(ResourceEntry::KIND_OF_FOLDER, | |
313 ResourceEntry::ClassifyEntryKind(ENTRY_KIND_FOLDER)); | |
314 EXPECT_EQ(ResourceEntry::KIND_OF_FILE, | |
315 ResourceEntry::ClassifyEntryKind(ENTRY_KIND_FILE)); | |
316 EXPECT_EQ(ResourceEntry::KIND_OF_FILE, | |
317 ResourceEntry::ClassifyEntryKind(ENTRY_KIND_PDF)); | |
318 } | |
319 | |
320 } // namespace google_apis | 236 } // namespace google_apis |
OLD | NEW |