Index: base/file_path_unittest.cc |
diff --git a/base/file_path_unittest.cc b/base/file_path_unittest.cc |
index ef6239f2790e589a575076a5d17019540ed74c02..df5c48ccae46be35c15dbf793ef8ed6f48a6d050 100644 |
--- a/base/file_path_unittest.cc |
+++ b/base/file_path_unittest.cc |
@@ -2,10 +2,13 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "base/file_path.h" |
- |
#include "base/basictypes.h" |
+#include "base/file_path.h" |
+#include "base/file_util.h" |
+#include "base/path_service.h" |
+#include "chrome/common/chrome_paths.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "testing/platform_test.h" |
// This macro helps avoid wrapped lines in the test structs. |
#define FPL(x) FILE_PATH_LITERAL(x) |
@@ -25,7 +28,19 @@ struct BinaryTestData { |
const FilePath::CharType* expected; |
}; |
-TEST(FilePathTest, DirName) { |
+// file_util winds up using autoreleased objects on the Mac, so this needs |
+// to be a PlatformTest |
+class FilePathTest : public PlatformTest { |
+ protected: |
+ virtual void SetUp() { |
+ PlatformTest::SetUp(); |
+ } |
+ virtual void TearDown() { |
+ PlatformTest::TearDown(); |
+ } |
+}; |
+ |
+TEST_F(FilePathTest, DirName) { |
const struct UnaryTestData cases[] = { |
{ FPL(""), FPL(".") }, |
{ FPL("aa"), FPL(".") }, |
@@ -114,7 +129,7 @@ TEST(FilePathTest, DirName) { |
} |
} |
-TEST(FilePathTest, BaseName) { |
+TEST_F(FilePathTest, BaseName) { |
const struct UnaryTestData cases[] = { |
{ FPL(""), FPL("") }, |
{ FPL("aa"), FPL("aa") }, |
@@ -201,7 +216,7 @@ TEST(FilePathTest, BaseName) { |
} |
} |
-TEST(FilePathTest, Append) { |
+TEST_F(FilePathTest, Append) { |
const struct BinaryTestData cases[] = { |
{ { FPL(""), FPL("cc") }, FPL("cc") }, |
{ { FPL("."), FPL("ff") }, FPL("ff") }, |
@@ -282,7 +297,7 @@ TEST(FilePathTest, Append) { |
} |
} |
-TEST(FilePathTest, IsAbsolute) { |
+TEST_F(FilePathTest, IsAbsolute) { |
const struct UnaryBooleanTestData cases[] = { |
{ FPL(""), false }, |
{ FPL("a"), false }, |
@@ -349,3 +364,46 @@ TEST(FilePathTest, IsAbsolute) { |
"i: " << i << ", input: " << input.value(); |
} |
} |
+ |
+TEST_F(FilePathTest, Contains) { |
+ FilePath data_dir; |
+ ASSERT_TRUE(PathService::Get(base::DIR_TEMP, &data_dir)); |
+ data_dir = data_dir.Append(FILE_PATH_LITERAL("FilePathTest")); |
+ |
+ // Create a fresh, empty copy of this directory. |
+ file_util::Delete(data_dir, true); |
+ file_util::CreateDirectory(data_dir); |
+ |
+ FilePath foo(data_dir.Append(FILE_PATH_LITERAL("foo"))); |
+ FilePath bar(foo.Append(FILE_PATH_LITERAL("bar.txt"))); |
+ FilePath baz(data_dir.Append(FILE_PATH_LITERAL("baz.txt"))); |
+ FilePath foobar(data_dir.Append(FILE_PATH_LITERAL("foobar.txt"))); |
+ |
+ // Annoyingly, the directories must actually exist in order for realpath(), |
+ // which Contains() relies on in posix, to work. |
+ file_util::CreateDirectory(foo); |
+ std::string data("hello"); |
+ file_util::WriteFile(bar.ToWStringHack(), data.c_str(), data.length()); |
+ file_util::WriteFile(baz.ToWStringHack(), data.c_str(), data.length()); |
+ file_util::WriteFile(foobar.ToWStringHack(), data.c_str(), data.length()); |
+ |
+ EXPECT_TRUE(foo.Contains(bar)); |
+ EXPECT_FALSE(foo.Contains(baz)); |
+ EXPECT_FALSE(foo.Contains(foobar)); |
+ EXPECT_FALSE(foo.Contains(foo)); |
+ |
+// Platform-specific concerns |
+ FilePath foo_caps(data_dir.Append(FILE_PATH_LITERAL("FOO"))); |
+#if defined(OS_WIN) |
+ EXPECT_TRUE(foo.Contains(foo_caps.Append(FILE_PATH_LITERAL("bar.txt")))); |
+ EXPECT_TRUE(foo.Contains( |
+ FilePath(foo.value() + FILE_PATH_LITERAL("/bar.txt")))); |
+#elif defined(OS_LINUX) |
+ EXPECT_FALSE(foo.Contains(foo_caps.Append(FILE_PATH_LITERAL("bar.txt")))); |
+#else |
+ // We can't really do this test on osx since the case-sensitivity of the |
+ // filesystem is configurable. |
+#endif |
+ |
+ // Note: whether |
+} |