Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(647)

Unified Diff: extensions/common/file_util_unittest.cc

Issue 65123002: Move chrome/common/extensions/background_info.h to src/extensions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase2 background_info Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/common/file_util.cc ('k') | extensions/common/manifest_handlers/background_info.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
+}
« no previous file with comments | « extensions/common/file_util.cc ('k') | extensions/common/manifest_handlers/background_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698