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 "net/ftp/ftp_directory_listing_parser.h" | 5 #include "net/ftp/ftp_directory_listing_parser.h" |
6 | 6 |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/format_macros.h" | 8 #include "base/format_macros.h" |
9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
11 #include "base/string_number_conversions.h" | 11 #include "base/string_number_conversions.h" |
12 #include "base/string_tokenizer.h" | 12 #include "base/string_split.h" |
13 #include "base/utf_string_conversions.h" | 13 #include "base/utf_string_conversions.h" |
14 #include "net/base/net_errors.h" | 14 #include "net/base/net_errors.h" |
15 #include "net/ftp/ftp_directory_listing_parser.h" | 15 #include "net/ftp/ftp_directory_listing_parser.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
17 | 17 |
18 namespace net { | 18 namespace net { |
19 | 19 |
20 namespace { | 20 namespace { |
21 | 21 |
22 class FtpDirectoryListingParserTest | 22 class FtpDirectoryListingParserTest |
(...skipping 26 matching lines...) Expand all Loading... |
49 EXPECT_EQ(OK, ParseFtpDirectoryListing(test_listing, | 49 EXPECT_EQ(OK, ParseFtpDirectoryListing(test_listing, |
50 mock_current_time, | 50 mock_current_time, |
51 &entries)); | 51 &entries)); |
52 | 52 |
53 std::string expected_listing; | 53 std::string expected_listing; |
54 ASSERT_TRUE(file_util::ReadFileToString( | 54 ASSERT_TRUE(file_util::ReadFileToString( |
55 test_dir.AppendASCII(std::string(GetParam()) + ".expected"), | 55 test_dir.AppendASCII(std::string(GetParam()) + ".expected"), |
56 &expected_listing)); | 56 &expected_listing)); |
57 | 57 |
58 std::vector<std::string> lines; | 58 std::vector<std::string> lines; |
59 StringTokenizer tokenizer(expected_listing, "\r\n"); | 59 base::SplitStringUsingSubstr(expected_listing, "\r\n", &lines); |
60 while (tokenizer.GetNext()) | |
61 lines.push_back(tokenizer.token()); | |
62 | 60 |
63 ASSERT_EQ(8 * entries.size(), lines.size()); | 61 // Special case for empty listings. |
| 62 if (lines.size() == 1 && lines[0].empty()) |
| 63 lines.clear(); |
64 | 64 |
65 for (size_t i = 0; i < lines.size() / 8; i++) { | 65 ASSERT_EQ(9 * entries.size(), lines.size()); |
66 std::string type(lines[8 * i]); | 66 |
67 std::string name(lines[8 * i + 1]); | 67 for (size_t i = 0; i < lines.size() / 9; i++) { |
| 68 std::string type(lines[9 * i]); |
| 69 std::string name(lines[9 * i + 1]); |
68 int64 size; | 70 int64 size; |
69 base::StringToInt64(lines[8 * i + 2], &size); | 71 base::StringToInt64(lines[9 * i + 2], &size); |
70 | 72 |
71 SCOPED_TRACE(base::StringPrintf("Filename: %s", name.c_str())); | 73 SCOPED_TRACE(base::StringPrintf("Filename: %s", name.c_str())); |
72 | 74 |
73 int year, month, day_of_month, hour, minute; | 75 int year, month, day_of_month, hour, minute; |
74 base::StringToInt(lines[8 * i + 3], &year); | 76 base::StringToInt(lines[9 * i + 3], &year); |
75 base::StringToInt(lines[8 * i + 4], &month); | 77 base::StringToInt(lines[9 * i + 4], &month); |
76 base::StringToInt(lines[8 * i + 5], &day_of_month); | 78 base::StringToInt(lines[9 * i + 5], &day_of_month); |
77 base::StringToInt(lines[8 * i + 6], &hour); | 79 base::StringToInt(lines[9 * i + 6], &hour); |
78 base::StringToInt(lines[8 * i + 7], &minute); | 80 base::StringToInt(lines[9 * i + 7], &minute); |
79 | 81 |
80 const FtpDirectoryListingEntry& entry = entries[i]; | 82 const FtpDirectoryListingEntry& entry = entries[i]; |
81 | 83 |
82 if (type == "d") { | 84 if (type == "d") { |
83 EXPECT_EQ(FtpDirectoryListingEntry::DIRECTORY, entry.type); | 85 EXPECT_EQ(FtpDirectoryListingEntry::DIRECTORY, entry.type); |
84 } else if (type == "-") { | 86 } else if (type == "-") { |
85 EXPECT_EQ(FtpDirectoryListingEntry::FILE, entry.type); | 87 EXPECT_EQ(FtpDirectoryListingEntry::FILE, entry.type); |
86 } else if (type == "l") { | 88 } else if (type == "l") { |
87 EXPECT_EQ(FtpDirectoryListingEntry::SYMLINK, entry.type); | 89 EXPECT_EQ(FtpDirectoryListingEntry::SYMLINK, entry.type); |
88 } else { | 90 } else { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 | 133 |
132 // Tests for Russian listings. The only difference between those | 134 // Tests for Russian listings. The only difference between those |
133 // files is character encoding: | 135 // files is character encoding: |
134 "dir-listing-ls-25", // UTF-8 | 136 "dir-listing-ls-25", // UTF-8 |
135 "dir-listing-ls-26", // KOI8-R | 137 "dir-listing-ls-26", // KOI8-R |
136 "dir-listing-ls-27", // windows-1251 | 138 "dir-listing-ls-27", // windows-1251 |
137 | 139 |
138 "dir-listing-ls-28", // Hylafax FTP server | 140 "dir-listing-ls-28", // Hylafax FTP server |
139 "dir-listing-ls-29", | 141 "dir-listing-ls-29", |
140 "dir-listing-ls-30", | 142 "dir-listing-ls-30", |
| 143 "dir-listing-ls-31", |
141 | 144 |
142 "dir-listing-netware-1", | 145 "dir-listing-netware-1", |
143 "dir-listing-netware-2", | 146 "dir-listing-netware-2", |
144 "dir-listing-netware-3", // Spaces in file names. | 147 "dir-listing-netware-3", // Spaces in file names. |
145 "dir-listing-os2-1", | 148 "dir-listing-os2-1", |
146 "dir-listing-vms-1", | 149 "dir-listing-vms-1", |
147 "dir-listing-vms-2", | 150 "dir-listing-vms-2", |
148 "dir-listing-vms-3", | 151 "dir-listing-vms-3", |
149 "dir-listing-vms-4", | 152 "dir-listing-vms-4", |
150 "dir-listing-vms-5", | 153 "dir-listing-vms-5", |
151 "dir-listing-windows-1", | 154 "dir-listing-windows-1", |
152 "dir-listing-windows-2", | 155 "dir-listing-windows-2", |
153 }; | 156 }; |
154 | 157 |
155 INSTANTIATE_TEST_CASE_P(, FtpDirectoryListingParserTest, | 158 INSTANTIATE_TEST_CASE_P(, FtpDirectoryListingParserTest, |
156 testing::ValuesIn(kTestFiles)); | 159 testing::ValuesIn(kTestFiles)); |
157 | 160 |
158 } // namespace | 161 } // namespace |
159 | 162 |
160 } // namespace net | 163 } // namespace net |
OLD | NEW |