OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "net/ftp/ftp_directory_listing_parsers.h" | 5 #include "net/ftp/ftp_directory_listing_parsers.h" |
6 | 6 |
| 7 #include "base/format_macros.h" |
7 #include "base/string_util.h" | 8 #include "base/string_util.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
9 | 10 |
10 namespace { | 11 namespace { |
11 | 12 |
12 struct SingleLineTestData { | 13 struct SingleLineTestData { |
13 const char* input; | 14 const char* input; |
14 net::FtpDirectoryListingEntry::Type type; | 15 net::FtpDirectoryListingEntry::Type type; |
15 const char* filename; | 16 const char* filename; |
16 int64 size; | 17 int64 size; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 net::FtpDirectoryListingEntry::DIRECTORY, "directory", -1, | 63 net::FtpDirectoryListingEntry::DIRECTORY, "directory", -1, |
63 now_exploded.year, 5, 15, 18, 11 }, | 64 now_exploded.year, 5, 15, 18, 11 }, |
64 { "lrwxrwxrwx 1 0 0 26 Sep 18 2008 pub -> vol/1/.CLUSTER/var_ftp/pub", | 65 { "lrwxrwxrwx 1 0 0 26 Sep 18 2008 pub -> vol/1/.CLUSTER/var_ftp/pub", |
65 net::FtpDirectoryListingEntry::SYMLINK, "pub", -1, | 66 net::FtpDirectoryListingEntry::SYMLINK, "pub", -1, |
66 2008, 9, 18, 0, 0 }, | 67 2008, 9, 18, 0, 0 }, |
67 { "lrwxrwxrwx 1 0 0 3 Oct 12 13:37 mirror -> pub", | 68 { "lrwxrwxrwx 1 0 0 3 Oct 12 13:37 mirror -> pub", |
68 net::FtpDirectoryListingEntry::SYMLINK, "mirror", -1, | 69 net::FtpDirectoryListingEntry::SYMLINK, "mirror", -1, |
69 now_exploded.year, 10, 12, 13, 37 }, | 70 now_exploded.year, 10, 12, 13, 37 }, |
70 }; | 71 }; |
71 for (size_t i = 0; i < arraysize(good_cases); i++) { | 72 for (size_t i = 0; i < arraysize(good_cases); i++) { |
72 SCOPED_TRACE(StringPrintf("Test[%d]: %s", i, good_cases[i].input)); | 73 SCOPED_TRACE(StringPrintf("Test[%" PRIuS "]: %s", i, good_cases[i].input)); |
73 | 74 |
74 net::FtpLsDirectoryListingParser parser; | 75 net::FtpLsDirectoryListingParser parser; |
75 RunSingleLineTestCase(&parser, good_cases[i]); | 76 RunSingleLineTestCase(&parser, good_cases[i]); |
76 } | 77 } |
77 | 78 |
78 const char* bad_cases[] = { | 79 const char* bad_cases[] = { |
79 "garbage", | 80 "garbage", |
80 "-rw-r--r-- 1 ftp ftp", | 81 "-rw-r--r-- 1 ftp ftp", |
81 "-rw-r--rgb 1 ftp ftp 528 Nov 01 2007 README", | 82 "-rw-r--rgb 1 ftp ftp 528 Nov 01 2007 README", |
82 "-rw-rgbr-- 1 ftp ftp 528 Nov 01 2007 README", | 83 "-rw-rgbr-- 1 ftp ftp 528 Nov 01 2007 README", |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 // TODO(phajdan.jr): Re-enable when 2038-year problem is fixed on Linux. | 122 // TODO(phajdan.jr): Re-enable when 2038-year problem is fixed on Linux. |
122 { "01-06-79 02:42AM 458 Corner4", | 123 { "01-06-79 02:42AM 458 Corner4", |
123 net::FtpDirectoryListingEntry::FILE, "Corner4", 458, | 124 net::FtpDirectoryListingEntry::FILE, "Corner4", 458, |
124 2079, 1, 6, 2, 42 }, | 125 2079, 1, 6, 2, 42 }, |
125 #endif // !defined (OS_LINUX) | 126 #endif // !defined (OS_LINUX) |
126 { "01-06-1979 02:42AM 458 Readme.txt", | 127 { "01-06-1979 02:42AM 458 Readme.txt", |
127 net::FtpDirectoryListingEntry::FILE, "Readme.txt", 458, | 128 net::FtpDirectoryListingEntry::FILE, "Readme.txt", 458, |
128 1979, 1, 6, 2, 42 }, | 129 1979, 1, 6, 2, 42 }, |
129 }; | 130 }; |
130 for (size_t i = 0; i < arraysize(good_cases); i++) { | 131 for (size_t i = 0; i < arraysize(good_cases); i++) { |
131 SCOPED_TRACE(StringPrintf("Test[%d]: %s", i, good_cases[i].input)); | 132 SCOPED_TRACE(StringPrintf("Test[%" PRIuS "]: %s", i, good_cases[i].input)); |
132 | 133 |
133 net::FtpWindowsDirectoryListingParser parser; | 134 net::FtpWindowsDirectoryListingParser parser; |
134 RunSingleLineTestCase(&parser, good_cases[i]); | 135 RunSingleLineTestCase(&parser, good_cases[i]); |
135 } | 136 } |
136 | 137 |
137 const char* bad_cases[] = { | 138 const char* bad_cases[] = { |
138 "", | 139 "", |
139 "garbage", | 140 "garbage", |
140 "11-02-09 05:32PM <GARBAGE> NT", | 141 "11-02-09 05:32PM <GARBAGE> NT", |
141 "11-02-09 05:32 <DIR> NT", | 142 "11-02-09 05:32 <DIR> NT", |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 net::FtpDirectoryListingEntry::FILE, "announce.txt", 512, | 174 net::FtpDirectoryListingEntry::FILE, "announce.txt", 512, |
174 2005, 3, 12, 8, 44 }, | 175 2005, 3, 12, 8, 44 }, |
175 { "ANNOUNCE.TXT;2 1 12-MAR-2005 08:44:57 [X] (R,RW,RWD,RE)", | 176 { "ANNOUNCE.TXT;2 1 12-MAR-2005 08:44:57 [X] (R,RW,RWD,RE)", |
176 net::FtpDirectoryListingEntry::FILE, "announce.txt", 512, | 177 net::FtpDirectoryListingEntry::FILE, "announce.txt", 512, |
177 2005, 3, 12, 8, 44 }, | 178 2005, 3, 12, 8, 44 }, |
178 { "ANNOUNCE.TXT;2 1 12-MAR-2005 08:44:57 [X] (ED,RED,WD,WED)", | 179 { "ANNOUNCE.TXT;2 1 12-MAR-2005 08:44:57 [X] (ED,RED,WD,WED)", |
179 net::FtpDirectoryListingEntry::FILE, "announce.txt", 512, | 180 net::FtpDirectoryListingEntry::FILE, "announce.txt", 512, |
180 2005, 3, 12, 8, 44 }, | 181 2005, 3, 12, 8, 44 }, |
181 }; | 182 }; |
182 for (size_t i = 0; i < arraysize(good_cases); i++) { | 183 for (size_t i = 0; i < arraysize(good_cases); i++) { |
183 SCOPED_TRACE(StringPrintf("Test[%d]: %s", i, good_cases[i].input)); | 184 SCOPED_TRACE(StringPrintf("Test[%" PRIuS "]: %s", i, good_cases[i].input)); |
184 | 185 |
185 net::FtpVmsDirectoryListingParser parser; | 186 net::FtpVmsDirectoryListingParser parser; |
186 ASSERT_TRUE( | 187 ASSERT_TRUE( |
187 parser.ConsumeLine(ASCIIToUTF16("Directory ANONYMOUS_ROOT:[000000]"))); | 188 parser.ConsumeLine(ASCIIToUTF16("Directory ANONYMOUS_ROOT:[000000]"))); |
188 RunSingleLineTestCase(&parser, good_cases[i]); | 189 RunSingleLineTestCase(&parser, good_cases[i]); |
189 } | 190 } |
190 | 191 |
191 const char* bad_cases[] = { | 192 const char* bad_cases[] = { |
192 "Directory ROOT|garbage", | 193 "Directory ROOT|garbage", |
193 | 194 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 (SYSTEM) (RWED,RWED,RE,RE)", | 228 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 (SYSTEM) (RWED,RWED,RE,RE)", |
228 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [SYSTEM] [RWED,RWED,RE,RE]", | 229 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [SYSTEM] [RWED,RWED,RE,RE]", |
229 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [X] (RWED)", | 230 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [X] (RWED)", |
230 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [X] (RWED,RWED,RE,RE,RE)", | 231 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [X] (RWED,RWED,RE,RE,RE)", |
231 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [X] (RWED,RWEDRWED,RE,RE)", | 232 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [X] (RWED,RWEDRWED,RE,RE)", |
232 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [X] (RWED,DEWR,RE,RE)", | 233 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [X] (RWED,DEWR,RE,RE)", |
233 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [X] (RWED,RWED,Q,RE)", | 234 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [X] (RWED,RWED,Q,RE)", |
234 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [X] (RWED,RRWWEEDD,RE,RE)", | 235 "Directory ROOT|X.TXT;2 1 12-MAR-2005 08:44:57 [X] (RWED,RRWWEEDD,RE,RE)", |
235 }; | 236 }; |
236 for (size_t i = 0; i < arraysize(bad_cases); i++) { | 237 for (size_t i = 0; i < arraysize(bad_cases); i++) { |
237 SCOPED_TRACE(StringPrintf("Test[%d]: %s", i, bad_cases[i])); | 238 SCOPED_TRACE(StringPrintf("Test[%" PRIuS "]: %s", i, bad_cases[i])); |
238 | 239 |
239 std::vector<std::string> lines; | 240 std::vector<std::string> lines; |
240 SplitString(bad_cases[i], '|', &lines); | 241 SplitString(bad_cases[i], '|', &lines); |
241 net::FtpVmsDirectoryListingParser parser; | 242 net::FtpVmsDirectoryListingParser parser; |
242 bool failed = false; | 243 bool failed = false; |
243 for (std::vector<std::string>::const_iterator i = lines.begin(); | 244 for (std::vector<std::string>::const_iterator i = lines.begin(); |
244 i != lines.end(); ++i) { | 245 i != lines.end(); ++i) { |
245 if (!parser.ConsumeLine(UTF8ToUTF16(*i))) { | 246 if (!parser.ConsumeLine(UTF8ToUTF16(*i))) { |
246 failed = true; | 247 failed = true; |
247 break; | 248 break; |
248 } | 249 } |
249 } | 250 } |
250 EXPECT_TRUE(failed); | 251 EXPECT_TRUE(failed); |
251 } | 252 } |
252 } | 253 } |
253 | 254 |
254 } // namespace | 255 } // namespace |
OLD | NEW |