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)#ifndef NET_FTP_FTP_DIRECTORY_LISTING_PARSER_UNITTEST_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_FTP_FTP_DIRECTORY_LISTING_PARSER_UNITTEST_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/ftp/ftp_directory_listing_parser.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FtpDirectoryListingParserTest : public testing::Test {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct SingleLineTestData {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* input;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FtpDirectoryListingEntry::Type type;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* filename;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 size;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int year;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int month;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int day_of_month;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int hour;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int minute;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FtpDirectoryListingParserTest() {}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<base::string16> GetSingleLineTestCase(const std::string& text) {
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    std::vector<base::string16> lines;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    lines.push_back(UTF8ToUTF16(text));
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return lines;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void VerifySingleLineTestCase(
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const SingleLineTestData& test_case,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::vector<FtpDirectoryListingEntry>& entries) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_FALSE(entries.empty());
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FtpDirectoryListingEntry entry = entries[0];
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(test_case.type, entry.type);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(UTF8ToUTF16(test_case.filename), entry.name);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(test_case.size, entry.size);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time::Exploded time_exploded;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    entry.last_modified.LocalExplode(&time_exploded);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Only test members displayed on the directory listing.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(test_case.year, time_exploded.year);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(test_case.month, time_exploded.month);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(test_case.day_of_month, time_exploded.day_of_month);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(test_case.hour, time_exploded.hour);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(test_case.minute, time_exploded.minute);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(1U, entries.size());
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time GetMockCurrentTime() {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time::Exploded mock_current_time_exploded = { 0 };
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock_current_time_exploded.year = 1994;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock_current_time_exploded.month = 11;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock_current_time_exploded.day_of_month = 15;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock_current_time_exploded.hour = 12;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock_current_time_exploded.minute = 45;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return base::Time::FromLocalExploded(mock_current_time_exploded);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // NET_FTP_FTP_DIRECTORY_LISTING_PARSER_UNITTEST_H_
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
77