1// Copyright (c) 2011 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 "net/ftp/ftp_directory_listing_parser_unittest.h" 6 7#include "base/format_macros.h" 8#include "base/string_util.h" 9#include "base/stringprintf.h" 10#include "net/ftp/ftp_directory_listing_parser_windows.h" 11 12namespace net { 13 14namespace { 15 16typedef FtpDirectoryListingParserTest FtpDirectoryListingParserWindowsTest; 17 18TEST_F(FtpDirectoryListingParserWindowsTest, Good) { 19 const struct SingleLineTestData good_cases[] = { 20 { "11-02-09 05:32PM <DIR> NT", 21 FtpDirectoryListingEntry::DIRECTORY, "NT", -1, 22 2009, 11, 2, 17, 32 }, 23 { "01-06-09 02:42PM 458 Readme.txt", 24 FtpDirectoryListingEntry::FILE, "Readme.txt", 458, 25 2009, 1, 6, 14, 42 }, 26 { "01-06-09 02:42AM 1 Readme.txt", 27 FtpDirectoryListingEntry::FILE, "Readme.txt", 1, 28 2009, 1, 6, 2, 42 }, 29 { "01-06-01 02:42AM 458 Readme.txt", 30 FtpDirectoryListingEntry::FILE, "Readme.txt", 458, 31 2001, 1, 6, 2, 42 }, 32 { "01-06-00 02:42AM 458 Corner1.txt", 33 FtpDirectoryListingEntry::FILE, "Corner1.txt", 458, 34 2000, 1, 6, 2, 42 }, 35 { "01-06-99 02:42AM 458 Corner2.txt", 36 FtpDirectoryListingEntry::FILE, "Corner2.txt", 458, 37 1999, 1, 6, 2, 42 }, 38 { "01-06-80 02:42AM 458 Corner3.txt", 39 FtpDirectoryListingEntry::FILE, "Corner3.txt", 458, 40 1980, 1, 6, 2, 42 }, 41#if !defined(OS_LINUX) 42 // TODO(phajdan.jr): Re-enable when 2038-year problem is fixed on Linux. 43 { "01-06-79 02:42AM 458 Corner4", 44 FtpDirectoryListingEntry::FILE, "Corner4", 458, 45 2079, 1, 6, 2, 42 }, 46#endif // !defined (OS_LINUX) 47 { "01-06-1979 02:42AM 458 Readme.txt", 48 FtpDirectoryListingEntry::FILE, "Readme.txt", 458, 49 1979, 1, 6, 2, 42 }, 50 { "11-02-09 05:32PM <DIR> My Directory", 51 FtpDirectoryListingEntry::DIRECTORY, "My Directory", -1, 52 2009, 11, 2, 17, 32 }, 53 { "12-25-10 12:00AM <DIR> Christmas Midnight", 54 FtpDirectoryListingEntry::DIRECTORY, "Christmas Midnight", -1, 55 2010, 12, 25, 0, 0 }, 56 { "12-25-10 12:00PM <DIR> Christmas Midday", 57 FtpDirectoryListingEntry::DIRECTORY, "Christmas Midday", -1, 58 2010, 12, 25, 12, 0 }, 59 }; 60 for (size_t i = 0; i < arraysize(good_cases); i++) { 61 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i, 62 good_cases[i].input)); 63 64 std::vector<FtpDirectoryListingEntry> entries; 65 EXPECT_TRUE(ParseFtpDirectoryListingWindows( 66 GetSingleLineTestCase(good_cases[i].input), 67 &entries)); 68 VerifySingleLineTestCase(good_cases[i], entries); 69 } 70} 71 72TEST_F(FtpDirectoryListingParserWindowsTest, Ignored) { 73 const char* ignored_cases[] = { 74 "12-07-10 12:05AM <DIR> ", // http://crbug.com/66097 75 "12-07-10 12:05AM 1234 ", 76 }; 77 for (size_t i = 0; i < arraysize(ignored_cases); i++) { 78 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i, 79 ignored_cases[i])); 80 81 std::vector<FtpDirectoryListingEntry> entries; 82 EXPECT_TRUE(ParseFtpDirectoryListingWindows( 83 GetSingleLineTestCase(ignored_cases[i]), 84 &entries)); 85 EXPECT_EQ(0U, entries.size()); 86 } 87} 88 89TEST_F(FtpDirectoryListingParserWindowsTest, Bad) { 90 const char* bad_cases[] = { 91 "garbage", 92 "11-02-09 05:32PM <GARBAGE>", 93 "11-02-09 05:32PM <GARBAGE> NT", 94 "11-02-09 05:32 <DIR>", 95 "11-FEB-09 05:32PM <DIR>", 96 "11-02 05:32PM <DIR>", 97 "11-02-09 05:32PM -1", 98 "11-02-09 05:32 <DIR> NT", 99 "11-FEB-09 05:32PM <DIR> NT", 100 "11-02 05:32PM <DIR> NT", 101 "11-02-09 05:32PM -1 NT", 102 "99-25-10 12:00AM 0", 103 "12-99-10 12:00AM 0", 104 "12-25-10 99:00AM 0", 105 "12-25-10 12:99AM 0", 106 "12-25-10 12:00ZM 0", 107 "99-25-10 12:00AM 0 months out of range", 108 "12-99-10 12:00AM 0 days out of range", 109 "12-25-10 99:00AM 0 hours out of range", 110 "12-25-10 12:99AM 0 minutes out of range", 111 "12-25-10 12:00ZM 0 what does ZM mean", 112 }; 113 for (size_t i = 0; i < arraysize(bad_cases); i++) { 114 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i, 115 bad_cases[i])); 116 117 std::vector<FtpDirectoryListingEntry> entries; 118 EXPECT_FALSE(ParseFtpDirectoryListingWindows( 119 GetSingleLineTestCase(bad_cases[i]), 120 &entries)); 121 } 122} 123 124} // namespace 125 126} // namespace net 127