1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/ftp/ftp_directory_listing_parser_unittest.h" 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/format_macros.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h" 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/stringprintf.h" 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/ftp/ftp_directory_listing_parser_windows.h" 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace net { 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace { 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsentypedef FtpDirectoryListingParserTest FtpDirectoryListingParserWindowsTest; 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(FtpDirectoryListingParserWindowsTest, Good) { 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const struct SingleLineTestData good_cases[] = { 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "11-02-09 05:32PM <DIR> NT", 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FtpDirectoryListingEntry::DIRECTORY, "NT", -1, 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 2009, 11, 2, 17, 32 }, 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "01-06-09 02:42PM 458 Readme.txt", 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FtpDirectoryListingEntry::FILE, "Readme.txt", 458, 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 2009, 1, 6, 14, 42 }, 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "01-06-09 02:42AM 1 Readme.txt", 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FtpDirectoryListingEntry::FILE, "Readme.txt", 1, 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 2009, 1, 6, 2, 42 }, 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "01-06-01 02:42AM 458 Readme.txt", 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FtpDirectoryListingEntry::FILE, "Readme.txt", 458, 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 2001, 1, 6, 2, 42 }, 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "01-06-00 02:42AM 458 Corner1.txt", 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FtpDirectoryListingEntry::FILE, "Corner1.txt", 458, 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 2000, 1, 6, 2, 42 }, 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "01-06-99 02:42AM 458 Corner2.txt", 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FtpDirectoryListingEntry::FILE, "Corner2.txt", 458, 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1999, 1, 6, 2, 42 }, 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "01-06-80 02:42AM 458 Corner3.txt", 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FtpDirectoryListingEntry::FILE, "Corner3.txt", 458, 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1980, 1, 6, 2, 42 }, 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !defined(OS_LINUX) 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // TODO(phajdan.jr): Re-enable when 2038-year problem is fixed on Linux. 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "01-06-79 02:42AM 458 Corner4", 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FtpDirectoryListingEntry::FILE, "Corner4", 458, 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 2079, 1, 6, 2, 42 }, 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // !defined (OS_LINUX) 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "01-06-1979 02:42AM 458 Readme.txt", 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FtpDirectoryListingEntry::FILE, "Readme.txt", 458, 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1979, 1, 6, 2, 42 }, 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "11-02-09 05:32PM <DIR> My Directory", 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FtpDirectoryListingEntry::DIRECTORY, "My Directory", -1, 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 2009, 11, 2, 17, 32 }, 533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { "12-25-10 12:00AM <DIR> Christmas Midnight", 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FtpDirectoryListingEntry::DIRECTORY, "Christmas Midnight", -1, 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2010, 12, 25, 0, 0 }, 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { "12-25-10 12:00PM <DIR> Christmas Midday", 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FtpDirectoryListingEntry::DIRECTORY, "Christmas Midday", -1, 583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2010, 12, 25, 12, 0 }, 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < arraysize(good_cases); i++) { 613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i, 623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick good_cases[i].input)); 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<FtpDirectoryListingEntry> entries; 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(ParseFtpDirectoryListingWindows( 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetSingleLineTestCase(good_cases[i].input), 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &entries)); 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen VerifySingleLineTestCase(good_cases[i], entries); 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(FtpDirectoryListingParserWindowsTest, Ignored) { 7321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const char* ignored_cases[] = { 7421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "12-07-10 12:05AM <DIR> ", // http://crbug.com/66097 7521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "12-07-10 12:05AM 1234 ", 7621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen }; 7721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen for (size_t i = 0; i < arraysize(ignored_cases); i++) { 7821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i, 7921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ignored_cases[i])); 8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<FtpDirectoryListingEntry> entries; 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(ParseFtpDirectoryListingWindows( 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetSingleLineTestCase(ignored_cases[i]), 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &entries)); 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(0U, entries.size()); 8621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 8721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 8821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(FtpDirectoryListingParserWindowsTest, Bad) { 90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* bad_cases[] = { 91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott "garbage", 9221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "11-02-09 05:32PM <GARBAGE>", 93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott "11-02-09 05:32PM <GARBAGE> NT", 9421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "11-02-09 05:32 <DIR>", 9521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "11-FEB-09 05:32PM <DIR>", 9621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "11-02 05:32PM <DIR>", 9721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "11-02-09 05:32PM -1", 98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott "11-02-09 05:32 <DIR> NT", 99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott "11-FEB-09 05:32PM <DIR> NT", 100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott "11-02 05:32PM <DIR> NT", 101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott "11-02-09 05:32PM -1 NT", 10221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "99-25-10 12:00AM 0", 10321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "12-99-10 12:00AM 0", 10421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "12-25-10 99:00AM 0", 10521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "12-25-10 12:99AM 0", 10621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "12-25-10 12:00ZM 0", 1073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick "99-25-10 12:00AM 0 months out of range", 1083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick "12-99-10 12:00AM 0 days out of range", 1093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick "12-25-10 99:00AM 0 hours out of range", 1103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick "12-25-10 12:99AM 0 minutes out of range", 1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick "12-25-10 12:00ZM 0 what does ZM mean", 112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < arraysize(bad_cases); i++) { 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i, 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bad_cases[i])); 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<FtpDirectoryListingEntry> entries; 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(ParseFtpDirectoryListingWindows( 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetSingleLineTestCase(bad_cases[i]), 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &entries)); 121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace net 127