| Index: extensions/common/file_util_unittest.cc
|
| diff --git a/extensions/common/file_util_unittest.cc b/extensions/common/file_util_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9ca883cc73a915fd88366d262e873a33c46fd38c
|
| --- /dev/null
|
| +++ b/extensions/common/file_util_unittest.cc
|
| @@ -0,0 +1,121 @@
|
| +// Copyright 2013 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 "extensions/common/file_util.h"
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/file_util.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "url/gurl.h"
|
| +
|
| +typedef testing::Test FileUtilTest;
|
| +
|
| +TEST_F(FileUtilTest, ExtensionURLToRelativeFilePath) {
|
| +#define URL_PREFIX "chrome-extension://extension-id/"
|
| + struct TestCase {
|
| + const char* url;
|
| + const char* expected_relative_path;
|
| + } test_cases[] = {
|
| + { URL_PREFIX "simple.html",
|
| + "simple.html" },
|
| + { URL_PREFIX "directory/to/file.html",
|
| + "directory/to/file.html" },
|
| + { URL_PREFIX "escape%20spaces.html",
|
| + "escape spaces.html" },
|
| + { URL_PREFIX "%C3%9Cber.html",
|
| + "\xC3\x9C" "ber.html" },
|
| +#if defined(OS_WIN)
|
| + { URL_PREFIX "C%3A/simple.html",
|
| + "" },
|
| +#endif
|
| + { URL_PREFIX "////simple.html",
|
| + "simple.html" },
|
| + { URL_PREFIX "/simple.html",
|
| + "simple.html" },
|
| + { URL_PREFIX "\\simple.html",
|
| + "simple.html" },
|
| + { URL_PREFIX "\\\\foo\\simple.html",
|
| + "foo/simple.html" },
|
| + };
|
| +#undef URL_PREFIX
|
| +
|
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
|
| + GURL url(test_cases[i].url);
|
| + base::FilePath expected_path =
|
| + base::FilePath::FromUTF8Unsafe(test_cases[i].expected_relative_path);
|
| + base::FilePath actual_path =
|
| + extensions::file_util::ExtensionURLToRelativeFilePath(url);
|
| + EXPECT_FALSE(actual_path.IsAbsolute()) <<
|
| + " For the path " << actual_path.value();
|
| + EXPECT_EQ(expected_path.value(), actual_path.value()) <<
|
| + " For the path " << url;
|
| + }
|
| +}
|
| +
|
| +TEST_F(FileUtilTest, ExtensionResourceURLToFilePath) {
|
| + // Setup filesystem for testing.
|
| + base::FilePath root_path;
|
| + ASSERT_TRUE(file_util::CreateNewTempDirectory(
|
| + base::FilePath::StringType(), &root_path));
|
| + root_path = base::MakeAbsoluteFilePath(root_path);
|
| + ASSERT_FALSE(root_path.empty());
|
| +
|
| + base::FilePath api_path = root_path.Append(FILE_PATH_LITERAL("apiname"));
|
| + ASSERT_TRUE(file_util::CreateDirectory(api_path));
|
| +
|
| + const char data[] = "Test Data";
|
| + base::FilePath resource_path = api_path.Append(FILE_PATH_LITERAL("test.js"));
|
| + ASSERT_TRUE(file_util::WriteFile(resource_path, data, sizeof(data)));
|
| + resource_path = api_path.Append(FILE_PATH_LITERAL("escape spaces.js"));
|
| + ASSERT_TRUE(file_util::WriteFile(resource_path, data, sizeof(data)));
|
| +
|
| +#ifdef FILE_PATH_USES_WIN_SEPARATORS
|
| +#define SEP "\\"
|
| +#else
|
| +#define SEP "/"
|
| +#endif
|
| +#define URL_PREFIX "chrome-extension-resource://"
|
| + struct TestCase {
|
| + const char* url;
|
| + const base::FilePath::CharType* expected_path;
|
| + } test_cases[] = {
|
| + { URL_PREFIX "apiname/test.js",
|
| + FILE_PATH_LITERAL("test.js") },
|
| + { URL_PREFIX "/apiname/test.js",
|
| + FILE_PATH_LITERAL("test.js") },
|
| + // Test % escape
|
| + { URL_PREFIX "apiname/%74%65st.js",
|
| + FILE_PATH_LITERAL("test.js") },
|
| + { URL_PREFIX "apiname/escape%20spaces.js",
|
| + FILE_PATH_LITERAL("escape spaces.js") },
|
| + // Test file does not exist.
|
| + { URL_PREFIX "apiname/directory/to/file.js",
|
| + NULL },
|
| + // Test apiname/../../test.js
|
| + { URL_PREFIX "apiname/../../test.js",
|
| + FILE_PATH_LITERAL("test.js") },
|
| + { URL_PREFIX "apiname/..%2F../test.js",
|
| + NULL },
|
| + { URL_PREFIX "apiname/f/../../../test.js",
|
| + FILE_PATH_LITERAL("test.js") },
|
| + { URL_PREFIX "apiname/f%2F..%2F..%2F../test.js",
|
| + NULL },
|
| + };
|
| +#undef SEP
|
| +#undef URL_PREFIX
|
| +
|
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
|
| + GURL url(test_cases[i].url);
|
| + base::FilePath expected_path;
|
| + if (test_cases[i].expected_path)
|
| + expected_path = root_path.Append(FILE_PATH_LITERAL("apiname")).Append(
|
| + test_cases[i].expected_path);
|
| + base::FilePath actual_path =
|
| + extensions::file_util::ExtensionResourceURLToFilePath(url, root_path);
|
| + EXPECT_EQ(expected_path.value(), actual_path.value()) <<
|
| + " For the path " << url;
|
| + }
|
| + // Remove temp files.
|
| + ASSERT_TRUE(base::DeleteFile(root_path, true));
|
| +}
|
|
|