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_util.h" 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/basictypes.h" 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/format_macros.h" 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/string_util.h" 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/stringprintf.h" 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/time.h" 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h" 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "testing/gtest/include/gtest/gtest.h" 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace { 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(FtpUtilTest, UnixFilePathToVMS) { 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const struct { 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* input; 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected_output; 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } kTestCases[] = { 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "", "" }, 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/", "[]" }, 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a", "a" }, 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/b", "a:[000000]b" }, 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/b/c", "a:[b]c" }, 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/b/c/d", "a:[b.c]d" }, 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/b/c/d/e", "a:[b.c.d]e" }, 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a", "a" }, 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a/b", "[.a]b" }, 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a/b/c", "[.a.b]c" }, 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a/b/c/d", "[.a.b.c]d" }, 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); i++) { 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(kTestCases[i].expected_output, 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott net::FtpUtil::UnixFilePathToVMS(kTestCases[i].input)) 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott << kTestCases[i].input; 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(FtpUtilTest, UnixDirectoryPathToVMS) { 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const struct { 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* input; 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected_output; 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } kTestCases[] = { 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "", "" }, 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/", "" }, 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a", "a:[000000]" }, 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/", "a:[000000]" }, 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/b", "a:[b]" }, 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/b/", "a:[b]" }, 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/b/c", "a:[b.c]" }, 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/b/c/", "a:[b.c]" }, 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/b/c/d", "a:[b.c.d]" }, 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/b/c/d/", "a:[b.c.d]" }, 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/b/c/d/e", "a:[b.c.d.e]" }, 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "/a/b/c/d/e/", "a:[b.c.d.e]" }, 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a", "[.a]" }, 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a/", "[.a]" }, 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a/b", "[.a.b]" }, 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a/b/", "[.a.b]" }, 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a/b/c", "[.a.b.c]" }, 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a/b/c/", "[.a.b.c]" }, 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a/b/c/d", "[.a.b.c.d]" }, 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a/b/c/d/", "[.a.b.c.d]" }, 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); i++) { 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(kTestCases[i].expected_output, 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott net::FtpUtil::UnixDirectoryPathToVMS(kTestCases[i].input)) 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott << kTestCases[i].input; 71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(FtpUtilTest, VMSPathToUnix) { 75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const struct { 76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* input; 77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected_output; 78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } kTestCases[] = { 79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "", "." }, 80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "[]", "/" }, 81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a", "/a" }, 82c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a:[000000]", "/a" }, 83c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a:[000000]b", "/a/b" }, 84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a:[b]", "/a/b" }, 85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a:[b]c", "/a/b/c" }, 86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a:[b.c]", "/a/b/c" }, 87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a:[b.c]d", "/a/b/c/d" }, 88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a:[b.c.d]", "/a/b/c/d" }, 89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a:[b.c.d]e", "/a/b/c/d/e" }, 90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "a:[b.c.d.e]", "/a/b/c/d/e" }, 91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "[.a]", "a" }, 92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "[.a]b", "a/b" }, 93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "[.a.b]", "a/b" }, 94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "[.a.b]c", "a/b/c" }, 95c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "[.a.b.c]", "a/b/c" }, 96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "[.a.b.c]d", "a/b/c/d" }, 97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "[.a.b.c.d]", "a/b/c/d" }, 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { "[.", "" }, 99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); i++) { 101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(kTestCases[i].expected_output, 102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott net::FtpUtil::VMSPathToUnix(kTestCases[i].input)) 103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott << kTestCases[i].input; 104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(FtpUtilTest, LsDateListingToTime) { 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time mock_current_time; 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(base::Time::FromString(L"Tue, 15 Nov 1994 12:45:26 GMT", 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &mock_current_time)); 111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const struct { 113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Input. 114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* month; 115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* day; 116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* rest; 117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Expected output. 119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int expected_year; 120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int expected_month; 121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int expected_day_of_month; 122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int expected_hour; 123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int expected_minute; 124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } kTestCases[] = { 125c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "Nov", "01", "2007", 2007, 11, 1, 0, 0 }, 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { "Jul", "25", "13:37", 1994, 7, 25, 13, 37 }, 127c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Test date listings in German. 129c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "M\xc3\xa4r", "13", "2009", 2009, 3, 13, 0, 0 }, 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { "Mai", "1", "10:10", 1994, 5, 1, 10, 10 }, 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { "Okt", "14", "21:18", 1994, 10, 14, 21, 18 }, 132c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "Dez", "25", "2008", 2008, 12, 25, 0, 0 }, 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Test date listings in Russian. 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "\xd1\x8f\xd0\xbd\xd0\xb2", "1", "2011", 2011, 1, 1, 0, 0 }, 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "\xd1\x84\xd0\xb5\xd0\xb2", "1", "2011", 2011, 2, 1, 0, 0 }, 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "\xd0\xbc\xd0\xb0\xd1\x80", "1", "2011", 2011, 3, 1, 0, 0 }, 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "\xd0\xb0\xd0\xbf\xd1\x80", "1", "2011", 2011, 4, 1, 0, 0 }, 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "\xd0\xbc\xd0\xb0\xd0\xb9", "1", "2011", 2011, 5, 1, 0, 0 }, 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "\xd0\xb8\xd1\x8e\xd0\xbd", "1", "2011", 2011, 6, 1, 0, 0 }, 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "\xd0\xb8\xd1\x8e\xd0\xbb", "1", "2011", 2011, 7, 1, 0, 0 }, 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "\xd0\xb0\xd0\xb2\xd0\xb3", "1", "2011", 2011, 8, 1, 0, 0 }, 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "\xd1\x81\xd0\xb5\xd0\xbd", "1", "2011", 2011, 9, 1, 0, 0 }, 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "\xd0\xbe\xd0\xba\xd1\x82", "1", "2011", 2011, 10, 1, 0, 0 }, 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "\xd0\xbd\xd0\xbe\xd1\x8f", "1", "2011", 2011, 11, 1, 0, 0 }, 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { "\xd0\xb4\xd0\xb5\xd0\xba", "1", "2011", 2011, 12, 1, 0, 0 }, 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test current year detection. 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { "Nov", "01", "12:00", 1994, 11, 1, 12, 0 }, 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { "Nov", "15", "12:00", 1994, 11, 15, 12, 0 }, 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { "Nov", "16", "12:00", 1993, 11, 16, 12, 0 }, 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { "Jan", "01", "08:30", 1994, 1, 1, 8, 30 }, 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { "Sep", "02", "09:00", 1994, 9, 2, 9, 0 }, 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { "Dec", "06", "21:00", 1993, 12, 6, 21, 0 }, 155c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 156c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); i++) { 1573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s %s %s", i, 1583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick kTestCases[i].month, kTestCases[i].day, 1593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick kTestCases[i].rest)); 160c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 161c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott base::Time time; 162c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_TRUE(net::FtpUtil::LsDateListingToTime( 163c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott UTF8ToUTF16(kTestCases[i].month), UTF8ToUTF16(kTestCases[i].day), 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UTF8ToUTF16(kTestCases[i].rest), mock_current_time, &time)); 165c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 166c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott base::Time::Exploded time_exploded; 167c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott time.LocalExplode(&time_exploded); 168c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(kTestCases[i].expected_year, time_exploded.year); 169c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(kTestCases[i].expected_month, time_exploded.month); 170c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(kTestCases[i].expected_day_of_month, time_exploded.day_of_month); 171c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(kTestCases[i].expected_hour, time_exploded.hour); 172c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(kTestCases[i].expected_minute, time_exploded.minute); 173c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(0, time_exploded.second); 174c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(0, time_exploded.millisecond); 175c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 176c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 177c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 178c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(FtpUtilTest, GetStringPartAfterColumns) { 179c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const struct { 180c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* text; 181c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int column; 182c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected_result; 183c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } kTestCases[] = { 184c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "", 0, "" }, 185c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "", 1, "" }, 186c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "foo abc", 0, "foo abc" }, 187c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { "foo abc", 1, "abc" }, 188c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { " foo abc", 0, "foo abc" }, 189c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { " foo abc", 1, "abc" }, 190c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { " foo abc", 2, "" }, 191c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { " foo abc ", 0, "foo abc" }, 192c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { " foo abc ", 1, "abc" }, 193c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { " foo abc ", 2, "" }, 194c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 195c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); i++) { 1963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s %d", i, 1973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick kTestCases[i].text, kTestCases[i].column)); 198c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 199c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(ASCIIToUTF16(kTestCases[i].expected_result), 200c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott net::FtpUtil::GetStringPartAfterColumns( 201c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASCIIToUTF16(kTestCases[i].text), kTestCases[i].column)); 202c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 203c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 204c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 205c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace 206