ftp_directory_listing_parser_windows_unittest.cc revision 5e3f23d412006dc4db4e659864679f29341e113f
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/ftp/ftp_directory_listing_parser_unittest.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/format_macros.h"
85e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h"
95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/ftp/ftp_directory_listing_parser_windows.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef FtpDirectoryListingParserTest FtpDirectoryListingParserWindowsTest;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FtpDirectoryListingParserWindowsTest, Good) {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const struct SingleLineTestData good_cases[] = {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "11-02-09  05:32PM       <DIR>          NT",
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::DIRECTORY, "NT", -1,
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      2009, 11, 2, 17, 32 },
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "01-06-09  02:42PM                  458 Readme.txt",
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::FILE, "Readme.txt", 458,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      2009, 1, 6, 14, 42 },
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "01-06-09  02:42AM                  1 Readme.txt",
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::FILE, "Readme.txt", 1,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      2009, 1, 6, 2, 42 },
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "01-06-01  02:42AM                  458 Readme.txt",
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::FILE, "Readme.txt", 458,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      2001, 1, 6, 2, 42 },
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "01-06-00  02:42AM                  458 Corner1.txt",
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::FILE, "Corner1.txt", 458,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      2000, 1, 6, 2, 42 },
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "01-06-99  02:42AM                  458 Corner2.txt",
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::FILE, "Corner2.txt", 458,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      1999, 1, 6, 2, 42 },
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "01-06-80  02:42AM                  458 Corner3.txt",
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::FILE, "Corner3.txt", 458,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      1980, 1, 6, 2, 42 },
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_LINUX) && !defined(OS_ANDROID)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(phajdan.jr): Re-enable when 2038-year problem is fixed on Linux.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "01-06-79  02:42AM                  458 Corner4",
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::FILE, "Corner4", 458,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      2079, 1, 6, 2, 42 },
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // !defined (OS_LINUX) && !defined(OS_ANDROID)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "01-06-1979  02:42AM                458 Readme.txt",
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::FILE, "Readme.txt", 458,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      1979, 1, 6, 2, 42 },
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "11-02-09  05:32PM       <DIR>          My Directory",
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::DIRECTORY, "My Directory", -1,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      2009, 11, 2, 17, 32 },
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "12-25-10  12:00AM       <DIR>          Christmas Midnight",
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::DIRECTORY, "Christmas Midnight", -1,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      2010, 12, 25, 0, 0 },
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "12-25-10  12:00PM       <DIR>          Christmas Midday",
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FtpDirectoryListingEntry::DIRECTORY, "Christmas Midday", -1,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      2010, 12, 25, 12, 0 },
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(good_cases); i++) {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    good_cases[i].input));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<FtpDirectoryListingEntry> entries;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(ParseFtpDirectoryListingWindows(
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetSingleLineTestCase(good_cases[i].input),
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &entries));
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    VerifySingleLineTestCase(good_cases[i], entries);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FtpDirectoryListingParserWindowsTest, Ignored) {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* ignored_cases[] = {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "12-07-10  12:05AM       <DIR>    ",  // http://crbug.com/66097
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "12-07-10  12:05AM       1234    ",
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "11-02-09  05:32         <DIR>",
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "11-02-09  05:32PM       <DIR>",
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(ignored_cases); i++) {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    ignored_cases[i]));
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<FtpDirectoryListingEntry> entries;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(ParseFtpDirectoryListingWindows(
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    GetSingleLineTestCase(ignored_cases[i]),
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    &entries));
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(0U, entries.size());
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FtpDirectoryListingParserWindowsTest, Bad) {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* bad_cases[] = {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "garbage",
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "11-02-09  05:32PM       <GARBAGE>",
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "11-02-09  05:32PM       <GARBAGE>      NT",
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "11-FEB-09 05:32PM       <DIR>",
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "11-02     05:32PM       <DIR>",
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "11-02-09  05:32PM                 -1",
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "11-FEB-09 05:32PM       <DIR>          NT",
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "11-02     05:32PM       <DIR>          NT",
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "11-02-09  05:32PM                 -1   NT",
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "99-25-10  12:00AM                  0",
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "12-99-10  12:00AM                  0",
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "12-25-10  99:00AM                  0",
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "12-25-10  12:99AM                  0",
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "12-25-10  12:00ZM                  0",
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "99-25-10  12:00AM                  0   months out of range",
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "12-99-10  12:00AM                  0   days out of range",
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "12-25-10  99:00AM                  0   hours out of range",
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "12-25-10  12:99AM                  0   minutes out of range",
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "12-25-10  12:00ZM                  0   what does ZM mean",
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(bad_cases); i++) {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i,
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    bad_cases[i]));
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<FtpDirectoryListingEntry> entries;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(ParseFtpDirectoryListingWindows(
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     GetSingleLineTestCase(bad_cases[i]),
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     &entries));
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
127