Index: base/file_util_unittest.cc |
=================================================================== |
--- base/file_util_unittest.cc (revision 6039) |
+++ base/file_util_unittest.cc (working copy) |
@@ -147,6 +147,8 @@ |
#endif |
} |
+// TODO(port): enable this test for non-Windows. |
+#if defined(OS_WIN) |
static const struct InsertBeforeExtensionCase { |
std::wstring path; |
std::wstring suffix; |
@@ -204,6 +206,7 @@ |
EXPECT_EQ(path, kInsertBeforeExtension[i].result); |
} |
} |
+#endif // defined(OS_WIN) |
static const struct filename_case { |
const wchar_t* path; |
@@ -785,6 +788,8 @@ |
} |
} |
+// TODO(port): enable this test for non-windows. |
+#if defined(OS_WIN) |
static const struct ReplaceExtensionCase { |
std::wstring file_name; |
std::wstring extension; |
@@ -827,6 +832,7 @@ |
file_util::ReplaceExtension(&result_path, L".baz"); |
EXPECT_EQ(path + L".baz", result_path); |
} |
+#endif // defined(OS_WIN) |
TEST_F(FileUtilTest, FileEnumeratorTest) { |
// Test an empty directory. |
@@ -925,4 +931,56 @@ |
// (we don't care what). |
} |
+ |
+void PathComponents(const std::wstring& path, |
+ std::vector<std::wstring>* components) { |
+ DCHECK(components != NULL); |
+ if (components == NULL) |
+ return; |
+ std::wstring::size_type start = 0; |
+ std::wstring::size_type end = path.find('/', start); |
+ |
+ // Special case the "/" or "\" directory. On Windows with a drive letter, |
+ // this code path won't hit, but the right thing should still happen. |
+ // "E:\foo" will turn into "E:","foo". |
+ if (end == start) { |
+ components->push_back(std::wstring(path, 0, 1)); |
+ start = end + 1; |
+ end = path.find('/', start); |
+ } |
+ while (end != std::wstring::npos) { |
+ std::wstring component = std::wstring(path, start, end - start); |
+ components->push_back(component); |
+ start = end + 1; |
+ end = path.find('/', start); |
+ } |
+ std::wstring component = std::wstring(path, start); |
+ components->push_back(component); |
+} |
+ |
+static const struct PathComponentsCase { |
+ std::wstring path; |
+ FilePath::StringType result; |
+} kPathComponents[] = { |
+ {L"/foo/bar/baz/", FILE_PATH_LITERAL("/|foo|bar|baz|")}, |
+ {L"/foo/bar/baz", FILE_PATH_LITERAL("/|foo|bar|baz")}, |
+ {L"e:/foo", FILE_PATH_LITERAL("e:|foo")}, |
+}; |
+ |
+TEST_F(FileUtilTest, PathComponentsTest) { |
+ for (size_t i = 0; i < arraysize(kPathComponents); ++i) { |
+ FilePath path = FilePath::FromWStringHack(kPathComponents[i].path); |
+ std::vector<FilePath::StringType> comps; |
+ file_util::PathComponents(path, &comps); |
+ |
+ FilePath::StringType result; |
+ for (size_t j = 0; j < comps.size(); ++j) { |
+ result.append(comps[j]); |
+ if (j < comps.size() - 1) |
+ result.append(FILE_PATH_LITERAL("|"), 1); |
+ } |
+ EXPECT_EQ(kPathComponents[i].result, result); |
+ } |
+} |
+ |
} // namespace |