blob: cac922f58feff4c8130bc420c884e084572b07bf [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/base/net_util.h"
#include <stdint.h>
#include <string>
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace net {
namespace {
struct GetDirectoryListingEntryCase {
const wchar_t* name;
const char* const raw_bytes;
bool is_dir;
int64_t filesize;
base::Time time;
const char* const expected;
};
TEST(NetUtilTest, GetDirectoryListingEntry) {
const GetDirectoryListingEntryCase test_cases[] = {
{L"Foo",
"",
false,
10000,
base::Time(),
"<script>addRow(\"Foo\",\"Foo\",0,\"9.8 kB\",\"\");</script>\n"},
{L"quo\"tes",
"",
false,
10000,
base::Time(),
"<script>addRow(\"quo\\\"tes\",\"quo%22tes\",0,\"9.8 kB\",\"\");</script>"
"\n"},
{L"quo\"tes",
"quo\"tes",
false,
10000,
base::Time(),
"<script>addRow(\"quo\\\"tes\",\"quo%22tes\",0,\"9.8 kB\",\"\");</script>"
"\n"},
// U+D55C0 U+AE00. raw_bytes is empty (either a local file with
// UTF-8/UTF-16 encoding or a remote file on an ftp server using UTF-8
{L"\xD55C\xAE00.txt",
"",
false,
10000,
base::Time(),
"<script>addRow(\"\xED\x95\x9C\xEA\xB8\x80.txt\","
"\"%ED%95%9C%EA%B8%80.txt\",0,\"9.8 kB\",\"\");</script>\n"},
// U+D55C0 U+AE00. raw_bytes is the corresponding EUC-KR sequence:
// a local or remote file in EUC-KR.
{L"\xD55C\xAE00.txt",
"\xC7\xD1\xB1\xDB.txt",
false,
10000,
base::Time(),
"<script>addRow(\"\xED\x95\x9C\xEA\xB8\x80.txt\",\"%C7%D1%B1%DB.txt\""
",0,\"9.8 kB\",\"\");</script>\n"},
};
for (size_t i = 0; i < arraysize(test_cases); ++i) {
const std::string results = GetDirectoryListingEntry(
base::WideToUTF16(test_cases[i].name), test_cases[i].raw_bytes,
test_cases[i].is_dir, test_cases[i].filesize, test_cases[i].time);
EXPECT_EQ(test_cases[i].expected, results);
}
}
} // namespace
} // namespace net