Index: webkit/fileapi/external_mount_points_unittest.cc |
diff --git a/webkit/fileapi/external_mount_points_unittest.cc b/webkit/fileapi/external_mount_points_unittest.cc |
index 379d146359518612941dd04f03f3d08bd8691e07..4668264a166a56f8b935ad931efe340c47b2ef1e 100644 |
--- a/webkit/fileapi/external_mount_points_unittest.cc |
+++ b/webkit/fileapi/external_mount_points_unittest.cc |
@@ -8,6 +8,7 @@ |
#include "base/file_path.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "webkit/fileapi/file_system_url.h" |
#define FPL FILE_PATH_LITERAL |
@@ -17,6 +18,8 @@ |
#define DRIVE |
#endif |
+using fileapi::FileSystemURL; |
+ |
namespace { |
TEST(ExternalMountPointsTest, AddMountPoint) { |
@@ -223,5 +226,237 @@ TEST(ExternalMountPointsTest, GetVirtualPath) { |
} |
} |
+TEST(ExternalMountPointsTest, HandlesFileSystemMountType) { |
+ scoped_refptr<fileapi::ExternalMountPoints> mount_points( |
+ fileapi::ExternalMountPoints::CreateRefCounted()); |
+ |
+ const GURL test_origin("http://chromium.org"); |
+ const FilePath test_path(FPL("/mount")); |
+ |
+ // Should handle External File System. |
+ EXPECT_TRUE(mount_points->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeExternal)); |
+ |
+ // Shouldn't handle the rest. |
+ EXPECT_FALSE(mount_points->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeIsolated)); |
+ EXPECT_FALSE(mount_points->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeTemporary)); |
+ EXPECT_FALSE(mount_points->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypePersistent)); |
+ EXPECT_FALSE(mount_points->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeTest)); |
+ // Not even if it's external subtype. |
+ EXPECT_FALSE(mount_points->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeNativeLocal)); |
+ EXPECT_FALSE(mount_points->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeRestrictedNativeLocal)); |
+ EXPECT_FALSE(mount_points->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeDrive)); |
+ EXPECT_FALSE(mount_points->HandlesFileSystemMountType( |
+ fileapi::kFileSystemTypeSyncable)); |
+} |
+ |
+TEST(ExternalMountPointsTest, CreateCrackedFileSystemURL) { |
+ scoped_refptr<fileapi::ExternalMountPoints> mount_points( |
+ fileapi::ExternalMountPoints::CreateRefCounted()); |
+ |
+ const GURL kTestOrigin("http://chromium.org"); |
+ |
+ mount_points->RegisterFileSystem("c", |
+ fileapi::kFileSystemTypeNativeLocal, |
+ FilePath(DRIVE FPL("/a/b/c"))); |
+ mount_points->RegisterFileSystem("c(1)", |
+ fileapi::kFileSystemTypeDrive, |
+ FilePath(DRIVE FPL("/a/b/c(1)"))); |
+ mount_points->RegisterFileSystem("empty_path", |
+ fileapi::kFileSystemTypeSyncable, |
+ FilePath(FPL(""))); |
+ mount_points->RegisterFileSystem("mount", |
+ fileapi::kFileSystemTypeDrive, |
+ FilePath(DRIVE FPL("/root"))); |
+ |
+ // Try cracking invalid GURL. |
+ FileSystemURL invalid = mount_points->CrackURL(GURL("http://chromium.og")); |
+ EXPECT_FALSE(invalid.is_valid()); |
+ |
+ // Try cracking isolated path. |
+ FileSystemURL isolated = mount_points->CreateCrackedFileSystemURL( |
+ kTestOrigin, fileapi::kFileSystemTypeIsolated, FilePath(FPL("c"))); |
+ EXPECT_FALSE(isolated.is_valid()); |
+ |
+ // Try native local which is not cracked. |
+ FileSystemURL native_local = mount_points->CreateCrackedFileSystemURL( |
+ kTestOrigin, fileapi::kFileSystemTypeNativeLocal, FilePath(FPL("c"))); |
+ EXPECT_FALSE(native_local.is_valid()); |
+ |
+ struct TestCase { |
+ const FilePath::CharType* const path; |
+ bool expect_valid; |
+ fileapi::FileSystemType expect_type; |
+ const FilePath::CharType* const expect_path; |
+ const char* const expect_fs_id; |
+ }; |
+ |
+ const TestCase kTestCases[] = { |
+ { FPL("c/d/e"), |
+ true, fileapi::kFileSystemTypeNativeLocal, DRIVE FPL("/a/b/c/d/e"), "c" }, |
+ { FPL("c(1)/d/e"), |
+ true, fileapi::kFileSystemTypeDrive, DRIVE FPL("/a/b/c(1)/d/e"), "c(1)" }, |
+ { FPL("c(1)"), |
+ true, fileapi::kFileSystemTypeDrive, DRIVE FPL("/a/b/c(1)"), "c(1)" }, |
+ { FPL("empty_path/a"), |
+ true, fileapi::kFileSystemTypeSyncable, FPL("a"), "empty_path" }, |
+ { FPL("empty_path"), |
+ true, fileapi::kFileSystemTypeSyncable, FPL(""), "empty_path" }, |
+ { FPL("mount/a/b"), |
+ true, fileapi::kFileSystemTypeDrive, DRIVE FPL("/root/a/b"), "mount" }, |
+ { FPL("mount"), |
+ true, fileapi::kFileSystemTypeDrive, DRIVE FPL("/root"), "mount" }, |
+ { FPL("cc"), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ { FPL(""), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ { FPL(".."), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ // Absolte paths. |
+ { FPL("/c/d/e"), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ { FPL("/c(1)/d/e"), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ { FPL("/empty_path"), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ // PAth references parent. |
+ { FPL("c/d/../e"), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ { FPL("/empty_path/a/../b"), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+#if defined(FILE_PATH_USES_WIN_SEPARATORS) |
+ { FPL("c/d\\e"), |
+ true, fileapi::kFileSystemTypeNativeLocal, DRIVE FPL("/a/b/c/d/e"), "c" }, |
+ { FPL("mount\\a\\b"), |
+ true, fileapi::kFileSystemTypeDrive, DRIVE FPL("/root/a/b"), "mount" }, |
+#endif |
+ }; |
+ |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { |
+ FileSystemURL cracked = mount_points->CreateCrackedFileSystemURL( |
+ kTestOrigin, |
+ fileapi::kFileSystemTypeExternal, |
+ FilePath(kTestCases[i].path)); |
+ |
+ EXPECT_EQ(kTestCases[i].expect_valid, cracked.is_valid()) |
+ << "Test case index: " << i; |
+ |
+ if (!kTestCases[i].expect_valid) |
+ continue; |
+ |
+ EXPECT_EQ(kTestOrigin, cracked.origin()) |
+ << "Test case index: " << i; |
+ EXPECT_EQ(kTestCases[i].expect_type, cracked.type()) |
+ << "Test case index: " << i; |
+ EXPECT_EQ(FilePath(kTestCases[i].expect_path).NormalizePathSeparators(), |
+ cracked.path()) |
+ << "Test case index: " << i; |
+ EXPECT_EQ(FilePath(kTestCases[i].path).NormalizePathSeparators(), |
+ cracked.virtual_path()) |
+ << "Test case index: " << i; |
+ EXPECT_EQ(kTestCases[i].expect_fs_id, cracked.filesystem_id()) |
+ << "Test case index: " << i; |
+ EXPECT_EQ(fileapi::kFileSystemTypeExternal, cracked.mount_type()) |
+ << "Test case index: " << i; |
+ } |
+} |
+ |
+TEST(ExternalMountPointsTest, CrackVirtualPath) { |
+ scoped_refptr<fileapi::ExternalMountPoints> mount_points( |
+ fileapi::ExternalMountPoints::CreateRefCounted()); |
+ |
+ const GURL kTestOrigin("http://chromium.org"); |
+ |
+ mount_points->RegisterFileSystem("c", |
+ fileapi::kFileSystemTypeNativeLocal, |
+ FilePath(DRIVE FPL("/a/b/c"))); |
+ mount_points->RegisterFileSystem("c(1)", |
+ fileapi::kFileSystemTypeDrive, |
+ FilePath(DRIVE FPL("/a/b/c(1)"))); |
+ mount_points->RegisterFileSystem("empty_path", |
+ fileapi::kFileSystemTypeSyncable, |
+ FilePath(FPL(""))); |
+ mount_points->RegisterFileSystem("mount", |
+ fileapi::kFileSystemTypeDrive, |
+ FilePath(DRIVE FPL("/root"))); |
+ |
+ struct TestCase { |
+ const FilePath::CharType* const path; |
+ bool expect_valid; |
+ fileapi::FileSystemType expect_type; |
+ const FilePath::CharType* const expect_path; |
+ const char* const expect_name; |
+ }; |
+ |
+ const TestCase kTestCases[] = { |
+ { FPL("c/d/e"), |
+ true, fileapi::kFileSystemTypeNativeLocal, DRIVE FPL("/a/b/c/d/e"), "c" }, |
+ { FPL("c(1)/d/e"), |
+ true, fileapi::kFileSystemTypeDrive, DRIVE FPL("/a/b/c(1)/d/e"), "c(1)" }, |
+ { FPL("c(1)"), |
+ true, fileapi::kFileSystemTypeDrive, DRIVE FPL("/a/b/c(1)"), "c(1)" }, |
+ { FPL("empty_path/a"), |
+ true, fileapi::kFileSystemTypeSyncable, FPL("a"), "empty_path" }, |
+ { FPL("empty_path"), |
+ true, fileapi::kFileSystemTypeSyncable, FPL(""), "empty_path" }, |
+ { FPL("mount/a/b"), |
+ true, fileapi::kFileSystemTypeDrive, DRIVE FPL("/root/a/b"), "mount" }, |
+ { FPL("mount"), |
+ true, fileapi::kFileSystemTypeDrive, DRIVE FPL("/root"), "mount" }, |
+ { FPL("cc"), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ { FPL(""), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ { FPL(".."), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ // Absolte paths. |
+ { FPL("/c/d/e"), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ { FPL("/c(1)/d/e"), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ { FPL("/empty_path"), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ // PAth references parent. |
+ { FPL("c/d/../e"), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+ { FPL("/empty_path/a/../b"), |
+ false, fileapi::kFileSystemTypeUnknown, FPL(""), "" }, |
+#if defined(FILE_PATH_USES_WIN_SEPARATORS) |
+ { FPL("c/d\\e"), |
+ true, fileapi::kFileSystemTypeNativeLocal, DRIVE FPL("/a/b/c/d/e"), "c" }, |
+ { FPL("mount\\a\\b"), |
+ true, fileapi::kFileSystemTypeDrive, DRIVE FPL("/root/a/b"), "mount" }, |
+#endif |
+ }; |
+ |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { |
+ std::string cracked_name; |
+ fileapi::FileSystemType cracked_type; |
+ FilePath cracked_path; |
+ EXPECT_EQ(kTestCases[i].expect_valid, |
+ mount_points->CrackVirtualPath(FilePath(kTestCases[i].path), |
+ &cracked_name, &cracked_type, &cracked_path)) |
+ << "Test case index: " << i; |
+ |
+ if (!kTestCases[i].expect_valid) |
+ continue; |
+ |
+ EXPECT_EQ(kTestCases[i].expect_type, cracked_type) |
+ << "Test case index: " << i; |
+ EXPECT_EQ(FilePath(kTestCases[i].expect_path).NormalizePathSeparators(), |
+ cracked_path) |
+ << "Test case index: " << i; |
+ EXPECT_EQ(kTestCases[i].expect_name, cracked_name) |
+ << "Test case index: " << i; |
+ } |
+} |
+ |
} // namespace |