| OLD | NEW |
| (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 "google_apis/drive/gdata_wapi_parser.h" | |
| 6 | |
| 7 #include <string> | |
| 8 | |
| 9 #include "base/json/json_file_value_serializer.h" | |
| 10 #include "base/time/time.h" | |
| 11 #include "base/values.h" | |
| 12 #include "google_apis/drive/test_util.h" | |
| 13 #include "google_apis/drive/time_util.h" | |
| 14 #include "testing/gtest/include/gtest/gtest.h" | |
| 15 | |
| 16 namespace google_apis { | |
| 17 | |
| 18 // Test document feed parsing. | |
| 19 TEST(GDataWAPIParserTest, ResourceListJsonParser) { | |
| 20 std::string error; | |
| 21 scoped_ptr<base::Value> document = | |
| 22 test_util::LoadJSONFile("gdata/basic_feed.json"); | |
| 23 ASSERT_TRUE(document.get()); | |
| 24 ASSERT_EQ(base::Value::TYPE_DICTIONARY, document->GetType()); | |
| 25 scoped_ptr<ResourceList> feed(ResourceList::ExtractAndParse(*document)); | |
| 26 ASSERT_TRUE(feed.get()); | |
| 27 | |
| 28 base::Time update_time; | |
| 29 ASSERT_TRUE(util::GetTimeFromString("2011-12-14T01:03:21.151Z", | |
| 30 &update_time)); | |
| 31 | |
| 32 EXPECT_EQ(1, feed->start_index()); | |
| 33 EXPECT_EQ(1000, feed->items_per_page()); | |
| 34 EXPECT_EQ(update_time, feed->updated_time()); | |
| 35 | |
| 36 // Check authors. | |
| 37 ASSERT_EQ(1U, feed->authors().size()); | |
| 38 EXPECT_EQ("tester", feed->authors()[0]->name()); | |
| 39 EXPECT_EQ("tester@testing.com", feed->authors()[0]->email()); | |
| 40 | |
| 41 // Check links. | |
| 42 ASSERT_EQ(6U, feed->links().size()); | |
| 43 const Link* self_link = feed->GetLinkByType(Link::LINK_SELF); | |
| 44 ASSERT_TRUE(self_link); | |
| 45 EXPECT_EQ("https://self_link/", self_link->href().spec()); | |
| 46 EXPECT_EQ("application/atom+xml", self_link->mime_type()); | |
| 47 | |
| 48 const Link* resumable_link = | |
| 49 feed->GetLinkByType(Link::LINK_RESUMABLE_CREATE_MEDIA); | |
| 50 ASSERT_TRUE(resumable_link); | |
| 51 EXPECT_EQ("https://resumable_create_media_link/", | |
| 52 resumable_link->href().spec()); | |
| 53 EXPECT_EQ("application/atom+xml", resumable_link->mime_type()); | |
| 54 | |
| 55 // Check entries. | |
| 56 ASSERT_EQ(4U, feed->entries().size()); | |
| 57 | |
| 58 // Check a folder entry. | |
| 59 const ResourceEntry* folder_entry = feed->entries()[0]; | |
| 60 ASSERT_TRUE(folder_entry); | |
| 61 EXPECT_EQ(ResourceEntry::ENTRY_KIND_FOLDER, folder_entry->kind()); | |
| 62 EXPECT_EQ("\"HhMOFgcNHSt7ImBr\"", folder_entry->etag()); | |
| 63 EXPECT_EQ("folder:sub_sub_directory_folder_id", folder_entry->resource_id()); | |
| 64 EXPECT_EQ("https://1_folder_id", folder_entry->id()); | |
| 65 EXPECT_EQ("Entry 1 Title", folder_entry->title()); | |
| 66 base::Time entry1_update_time; | |
| 67 base::Time entry1_publish_time; | |
| 68 ASSERT_TRUE(util::GetTimeFromString("2011-04-01T18:34:08.234Z", | |
| 69 &entry1_update_time)); | |
| 70 ASSERT_TRUE(util::GetTimeFromString("2010-11-07T05:03:54.719Z", | |
| 71 &entry1_publish_time)); | |
| 72 EXPECT_EQ(entry1_update_time, folder_entry->updated_time()); | |
| 73 EXPECT_EQ(entry1_publish_time, folder_entry->published_time()); | |
| 74 | |
| 75 ASSERT_EQ(1U, folder_entry->authors().size()); | |
| 76 EXPECT_EQ("entry_tester", folder_entry->authors()[0]->name()); | |
| 77 EXPECT_EQ("entry_tester@testing.com", folder_entry->authors()[0]->email()); | |
| 78 EXPECT_EQ("https://1_folder_content_url/", | |
| 79 folder_entry->download_url().spec()); | |
| 80 EXPECT_EQ("application/atom+xml;type=feed", | |
| 81 folder_entry->content_mime_type()); | |
| 82 | |
| 83 ASSERT_EQ(1U, folder_entry->resource_links().size()); | |
| 84 const ResourceLink* feed_link = folder_entry->resource_links()[0]; | |
| 85 ASSERT_TRUE(feed_link); | |
| 86 ASSERT_EQ(ResourceLink::FEED_LINK_ACL, feed_link->type()); | |
| 87 | |
| 88 const Link* entry1_alternate_link = | |
| 89 folder_entry->GetLinkByType(Link::LINK_ALTERNATE); | |
| 90 ASSERT_TRUE(entry1_alternate_link); | |
| 91 EXPECT_EQ("https://1_folder_alternate_link/", | |
| 92 entry1_alternate_link->href().spec()); | |
| 93 EXPECT_EQ("text/html", entry1_alternate_link->mime_type()); | |
| 94 | |
| 95 const Link* entry1_edit_link = folder_entry->GetLinkByType(Link::LINK_EDIT); | |
| 96 ASSERT_TRUE(entry1_edit_link); | |
| 97 EXPECT_EQ("https://1_edit_link/", entry1_edit_link->href().spec()); | |
| 98 EXPECT_EQ("application/atom+xml", entry1_edit_link->mime_type()); | |
| 99 | |
| 100 // Check a file entry. | |
| 101 const ResourceEntry* file_entry = feed->entries()[1]; | |
| 102 ASSERT_TRUE(file_entry); | |
| 103 EXPECT_EQ(ResourceEntry::ENTRY_KIND_FILE, file_entry->kind()); | |
| 104 EXPECT_EQ("filename.m4a", file_entry->filename()); | |
| 105 EXPECT_EQ("sugg_file_name.m4a", file_entry->suggested_filename()); | |
| 106 EXPECT_EQ("3b4382ebefec6e743578c76bbd0575ce", file_entry->file_md5()); | |
| 107 EXPECT_EQ(892721, file_entry->file_size()); | |
| 108 const Link* file_parent_link = file_entry->GetLinkByType(Link::LINK_PARENT); | |
| 109 ASSERT_TRUE(file_parent_link); | |
| 110 EXPECT_EQ("https://file_link_parent/", file_parent_link->href().spec()); | |
| 111 EXPECT_EQ("application/atom+xml", file_parent_link->mime_type()); | |
| 112 EXPECT_EQ("Medical", file_parent_link->title()); | |
| 113 const Link* file_open_with_link = | |
| 114 file_entry->GetLinkByType(Link::LINK_OPEN_WITH); | |
| 115 ASSERT_TRUE(file_open_with_link); | |
| 116 EXPECT_EQ("https://xml_file_entry_open_with_link/", | |
| 117 file_open_with_link->href().spec()); | |
| 118 EXPECT_EQ("application/atom+xml", file_open_with_link->mime_type()); | |
| 119 EXPECT_EQ("the_app_id", file_open_with_link->app_id()); | |
| 120 EXPECT_EQ(654321, file_entry->changestamp()); | |
| 121 | |
| 122 const Link* file_unknown_link = file_entry->GetLinkByType(Link::LINK_UNKNOWN); | |
| 123 ASSERT_TRUE(file_unknown_link); | |
| 124 EXPECT_EQ("https://xml_file_fake_entry_open_with_link/", | |
| 125 file_unknown_link->href().spec()); | |
| 126 EXPECT_EQ("application/atom+xml", file_unknown_link->mime_type()); | |
| 127 EXPECT_EQ("", file_unknown_link->app_id()); | |
| 128 | |
| 129 // Check a file entry. | |
| 130 const ResourceEntry* resource_entry = feed->entries()[2]; | |
| 131 ASSERT_TRUE(resource_entry); | |
| 132 // Hosted documents are treated as unknown kind so that sync file system | |
| 133 // doesn't assume them as neither folders nor normal files. | |
| 134 EXPECT_EQ(ResourceEntry::ENTRY_KIND_UNKNOWN, resource_entry->kind()); | |
| 135 | |
| 136 // Check an external document entry. | |
| 137 const ResourceEntry* app_entry = feed->entries()[3]; | |
| 138 ASSERT_TRUE(app_entry); | |
| 139 // Hosted documents are treated as unknown kind so that sync file system | |
| 140 // doesn't assume them as neither folders nor normal files. | |
| 141 EXPECT_EQ(ResourceEntry::ENTRY_KIND_UNKNOWN, app_entry->kind()); | |
| 142 } | |
| 143 | |
| 144 | |
| 145 // Test document feed parsing. | |
| 146 TEST(GDataWAPIParserTest, ResourceEntryJsonParser) { | |
| 147 std::string error; | |
| 148 scoped_ptr<base::Value> document = | |
| 149 test_util::LoadJSONFile("gdata/file_entry.json"); | |
| 150 ASSERT_TRUE(document.get()); | |
| 151 ASSERT_EQ(base::Value::TYPE_DICTIONARY, document->GetType()); | |
| 152 scoped_ptr<ResourceEntry> entry(ResourceEntry::ExtractAndParse(*document)); | |
| 153 ASSERT_TRUE(entry.get()); | |
| 154 | |
| 155 EXPECT_EQ(ResourceEntry::ENTRY_KIND_FILE, entry->kind()); | |
| 156 EXPECT_EQ("\"HhMOFgxXHit7ImBr\"", entry->etag()); | |
| 157 EXPECT_EQ("file:2_file_resource_id", entry->resource_id()); | |
| 158 EXPECT_EQ("2_file_id", entry->id()); | |
| 159 EXPECT_EQ("File 1.mp3", entry->title()); | |
| 160 base::Time entry1_update_time; | |
| 161 base::Time entry1_publish_time; | |
| 162 ASSERT_TRUE(util::GetTimeFromString("2011-12-14T00:40:47.330Z", | |
| 163 &entry1_update_time)); | |
| 164 ASSERT_TRUE(util::GetTimeFromString("2011-12-13T00:40:47.330Z", | |
| 165 &entry1_publish_time)); | |
| 166 EXPECT_EQ(entry1_update_time, entry->updated_time()); | |
| 167 EXPECT_EQ(entry1_publish_time, entry->published_time()); | |
| 168 | |
| 169 EXPECT_EQ(1U, entry->authors().size()); | |
| 170 EXPECT_EQ("tester", entry->authors()[0]->name()); | |
| 171 EXPECT_EQ("tester@testing.com", entry->authors()[0]->email()); | |
| 172 EXPECT_EQ("https://file_content_url/", | |
| 173 entry->download_url().spec()); | |
| 174 EXPECT_EQ("audio/mpeg", | |
| 175 entry->content_mime_type()); | |
| 176 | |
| 177 // Check feed links. | |
| 178 ASSERT_EQ(1U, entry->resource_links().size()); | |
| 179 const ResourceLink* feed_link_1 = entry->resource_links()[0]; | |
| 180 ASSERT_TRUE(feed_link_1); | |
| 181 EXPECT_EQ(ResourceLink::FEED_LINK_REVISIONS, feed_link_1->type()); | |
| 182 | |
| 183 // Check links. | |
| 184 ASSERT_EQ(8U, entry->links().size()); | |
| 185 const Link* entry1_alternate_link = | |
| 186 entry->GetLinkByType(Link::LINK_ALTERNATE); | |
| 187 ASSERT_TRUE(entry1_alternate_link); | |
| 188 EXPECT_EQ("https://file_link_alternate/", | |
| 189 entry1_alternate_link->href().spec()); | |
| 190 EXPECT_EQ("text/html", entry1_alternate_link->mime_type()); | |
| 191 | |
| 192 const Link* entry1_edit_link = entry->GetLinkByType(Link::LINK_EDIT_MEDIA); | |
| 193 ASSERT_TRUE(entry1_edit_link); | |
| 194 EXPECT_EQ("https://file_edit_media/", | |
| 195 entry1_edit_link->href().spec()); | |
| 196 EXPECT_EQ("audio/mpeg", entry1_edit_link->mime_type()); | |
| 197 | |
| 198 const Link* entry1_self_link = entry->GetLinkByType(Link::LINK_SELF); | |
| 199 ASSERT_TRUE(entry1_self_link); | |
| 200 EXPECT_EQ("https://file1_link_self/file%3A2_file_resource_id", | |
| 201 entry1_self_link->href().spec()); | |
| 202 EXPECT_EQ("application/atom+xml", entry1_self_link->mime_type()); | |
| 203 EXPECT_EQ("", entry1_self_link->app_id()); | |
| 204 | |
| 205 const Link* entry1_open_with_link = | |
| 206 entry->GetLinkByType(Link::LINK_OPEN_WITH); | |
| 207 ASSERT_TRUE(entry1_open_with_link); | |
| 208 EXPECT_EQ("https://entry1_open_with_link/", | |
| 209 entry1_open_with_link->href().spec()); | |
| 210 EXPECT_EQ("application/atom+xml", entry1_open_with_link->mime_type()); | |
| 211 EXPECT_EQ("the_app_id", entry1_open_with_link->app_id()); | |
| 212 | |
| 213 const Link* entry1_unknown_link = entry->GetLinkByType(Link::LINK_UNKNOWN); | |
| 214 ASSERT_TRUE(entry1_unknown_link); | |
| 215 EXPECT_EQ("https://entry1_fake_entry_open_with_link/", | |
| 216 entry1_unknown_link->href().spec()); | |
| 217 EXPECT_EQ("application/atom+xml", entry1_unknown_link->mime_type()); | |
| 218 EXPECT_EQ("", entry1_unknown_link->app_id()); | |
| 219 | |
| 220 // Check a file properties. | |
| 221 EXPECT_EQ(ResourceEntry::ENTRY_KIND_FILE, entry->kind()); | |
| 222 EXPECT_EQ("File 1.mp3", entry->filename()); | |
| 223 EXPECT_EQ("File 1.mp3", entry->suggested_filename()); | |
| 224 EXPECT_EQ("3b4382ebefec6e743578c76bbd0575ce", entry->file_md5()); | |
| 225 EXPECT_EQ(892721, entry->file_size()); | |
| 226 | |
| 227 // WAPI doesn't provide image metadata, but these fields are available | |
| 228 // since this class can wrap data received from Drive API (via a converter). | |
| 229 EXPECT_EQ(-1, entry->image_width()); | |
| 230 EXPECT_EQ(-1, entry->image_height()); | |
| 231 EXPECT_EQ(-1, entry->image_rotation()); | |
| 232 } | |
| 233 | |
| 234 } // namespace google_apis | |
| OLD | NEW |