Repository: mesos
Updated Branches:
  refs/heads/master 729ec6203 -> 9ecd9a4e8


Windows: Ported the rest of `path_tests.cpp`.

This port does not attempt to use `path::join()` to avoid duplicated
test logic since that function strips the path separator from its
arguments, thus making it difficult to correctly construct a path like
`a//b/`. Instead, a semi-programatical approach was taken to duplicate
the POSIX paths and then replace `/` with `\\`.

Review: https://reviews.apache.org/r/67041/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/9ecd9a4e
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/9ecd9a4e
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/9ecd9a4e

Branch: refs/heads/master
Commit: 9ecd9a4e86c05220803dd3cba472d3ccc5fe994f
Parents: 729ec62
Author: Andrew Schwartzmeyer <and...@schwartzmeyer.com>
Authored: Mon May 14 14:20:04 2018 -0700
Committer: Andrew Schwartzmeyer <and...@schwartzmeyer.com>
Committed: Mon May 14 14:20:04 2018 -0700

----------------------------------------------------------------------
 3rdparty/stout/tests/path_tests.cpp | 134 +++++++++++++++++++++++++++++--
 1 file changed, 128 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/9ecd9a4e/3rdparty/stout/tests/path_tests.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/stout/tests/path_tests.cpp 
b/3rdparty/stout/tests/path_tests.cpp
index 433a6c6..452865b 100644
--- a/3rdparty/stout/tests/path_tests.cpp
+++ b/3rdparty/stout/tests/path_tests.cpp
@@ -31,65 +31,123 @@ using std::vector;
 
 
 // Test many corner cases of Path::basename.
-TEST_TEMP_DISABLED_ON_WINDOWS(PathTest, Basename)
+TEST(PathTest, Basename)
 {
   // Empty path check.
   EXPECT_EQ(".", Path("").basename());
 
   // Check common path patterns.
+#ifdef __WINDOWS__
+  EXPECT_EQ("\\", Path("\\").basename());
+#else
   EXPECT_EQ("/", Path("/").basename());
+#endif // __WINDOWS__
   EXPECT_EQ(".", Path(".").basename());
   EXPECT_EQ("..", Path("..").basename());
 
   EXPECT_EQ("a", Path("a").basename());
+#ifdef __WINDOWS__
+  EXPECT_EQ("b", Path("a\\b").basename());
+  EXPECT_EQ("c", Path("a\\b\\c").basename());
+#else
   EXPECT_EQ("b", Path("a/b").basename());
   EXPECT_EQ("c", Path("a/b/c").basename());
+#endif // __WINDOWS__
 
   // Check leading slashes get cleaned up properly.
+#ifdef __WINDOWS__
+  EXPECT_EQ("a", Path("\\a").basename());
+  EXPECT_EQ("a", Path("\\\\a").basename());
+  EXPECT_EQ("a", Path("\\a\\").basename());
+  EXPECT_EQ("c", Path("\\a\\b\\c").basename());
+  EXPECT_EQ("b", Path("\\a\\b").basename());
+  EXPECT_EQ("b", Path("\\\\a\\\\b").basename());
+#else
   EXPECT_EQ("a", Path("/a").basename());
   EXPECT_EQ("a", Path("//a").basename());
   EXPECT_EQ("a", Path("/a/").basename());
   EXPECT_EQ("c", Path("/a/b/c").basename());
   EXPECT_EQ("b", Path("/a/b").basename());
   EXPECT_EQ("b", Path("//a//b").basename());
+#endif // __WINDOWS__
 
   // Check trailing slashes get cleaned up properly.
+#ifdef __WINDOWS__
+  EXPECT_EQ("a", Path("a\\").basename());
+  EXPECT_EQ("c", Path("\\a\\b\\c\\\\").basename());
+  EXPECT_EQ("c", Path("\\a\\b\\c\\\\\\").basename());
+  EXPECT_EQ("\\", Path("\\\\").basename());
+  EXPECT_EQ("\\", Path("\\\\\\").basename());
+#else
   EXPECT_EQ("a", Path("a/").basename());
   EXPECT_EQ("c", Path("/a/b/c//").basename());
   EXPECT_EQ("c", Path("/a/b/c///").basename());
   EXPECT_EQ("/", Path("//").basename());
   EXPECT_EQ("/", Path("///").basename());
+#endif // __WINDOWS__
 }
 
 
 // Test many corner cases of Path::dirname.
-TEST_TEMP_DISABLED_ON_WINDOWS(PathTest, Dirname)
+TEST(PathTest, Dirname)
 {
   // Empty path check.
   EXPECT_EQ(".", Path("").dirname());
 
   // Check common path patterns.
+#ifdef __WINDOWS__
+  EXPECT_EQ("\\", Path("\\").dirname());
+#else
   EXPECT_EQ("/", Path("/").dirname());
+#endif // __WINDOWS__
   EXPECT_EQ(".", Path(".").dirname());
   EXPECT_EQ(".", Path("..").dirname());
 
   EXPECT_EQ(".", Path("a").dirname());
+#ifdef __WINDOWS__
+  EXPECT_EQ("a", Path("a\\b").dirname());
+  EXPECT_EQ("a\\b", Path("a\\b\\c\\").dirname());
+#else
   EXPECT_EQ("a", Path("a/b").dirname());
   EXPECT_EQ("a/b", Path("a/b/c/").dirname());
+#endif // __WINDOWS__
 
   // Check leading slashes get cleaned up properly.
+#ifdef __WINDOWS__
+  EXPECT_EQ("\\", Path("\\a").dirname());
+  EXPECT_EQ("\\", Path("\\\\a").dirname());
+  EXPECT_EQ("\\", Path("\\a\\").dirname());
+  EXPECT_EQ("\\a", Path("\\a\\b").dirname());
+  EXPECT_EQ("\\\\a", Path("\\\\a\\\\b").dirname());
+  EXPECT_EQ("\\a\\b", Path("\\a\\b\\c").dirname());
+#else
   EXPECT_EQ("/", Path("/a").dirname());
   EXPECT_EQ("/", Path("//a").dirname());
   EXPECT_EQ("/", Path("/a/").dirname());
   EXPECT_EQ("/a", Path("/a/b").dirname());
   EXPECT_EQ("//a", Path("//a//b").dirname());
   EXPECT_EQ("/a/b", Path("/a/b/c").dirname());
+#endif // __WINDOWS__
 
   // Check intermittent slashes get handled just like ::dirname does.
+#ifdef __WINDOWS__
+  EXPECT_EQ("\\a\\\\b", Path("\\a\\\\b\\\\c\\\\").dirname());
+  EXPECT_EQ("\\\\a\\b", Path("\\\\a\\b\\\\c").dirname());
+#else
   EXPECT_EQ("/a//b", Path("/a//b//c//").dirname());
   EXPECT_EQ("//a/b", Path("//a/b//c").dirname());
+#endif // __WINDOWS__
 
   // Check trailing slashes get cleaned up properly.
+#ifdef __WINDOWS__
+  EXPECT_EQ(".", Path("a\\").dirname());
+  EXPECT_EQ("a\\b", Path("a\\b\\c").dirname());
+  EXPECT_EQ("\\a\\b", Path("\\a\\b\\c\\").dirname());
+  EXPECT_EQ("\\a\\b", Path("\\a\\b\\c\\\\").dirname());
+  EXPECT_EQ("\\a\\b", Path("\\a\\b\\c\\\\\\").dirname());
+  EXPECT_EQ("\\", Path("\\\\").dirname());
+  EXPECT_EQ("\\", Path("\\\\\\").dirname());
+#else
   EXPECT_EQ(".", Path("a/").dirname());
   EXPECT_EQ("a/b", Path("a/b/c").dirname());
   EXPECT_EQ("/a/b", Path("/a/b/c/").dirname());
@@ -97,56 +155,120 @@ TEST_TEMP_DISABLED_ON_WINDOWS(PathTest, Dirname)
   EXPECT_EQ("/a/b", Path("/a/b/c///").dirname());
   EXPECT_EQ("/", Path("//").dirname());
   EXPECT_EQ("/", Path("///").dirname());
+#endif // __WINDOWS__
 }
 
 
-TEST_TEMP_DISABLED_ON_WINDOWS(PathTest, Extension)
+TEST(PathTest, Extension)
 {
   EXPECT_NONE(Path(".").extension());
   EXPECT_NONE(Path("..").extension());
 
   EXPECT_NONE(Path("a").extension());
+#ifdef __WINDOWS__
+  EXPECT_NONE(Path("\\a").extension());
+  EXPECT_NONE(Path("\\").extension());
+#else
   EXPECT_NONE(Path("/a").extension());
   EXPECT_NONE(Path("/").extension());
+#endif // __WINDOWS__
 
+#ifdef __WINDOWS__
+  EXPECT_NONE(Path("\\a.b\\c").extension());
+#else
   EXPECT_NONE(Path("/a.b/c").extension());
+#endif // __WINDOWS__
 
   EXPECT_SOME_EQ(".txt", Path("a.txt").extension());
+#ifdef __WINDOWS__
+  EXPECT_SOME_EQ(".txt", Path("\\a\\b.txt").extension());
+  EXPECT_SOME_EQ(".txt", Path("\\a.b\\c.txt").extension());
+#else
   EXPECT_SOME_EQ(".txt", Path("/a/b.txt").extension());
   EXPECT_SOME_EQ(".txt", Path("/a.b/c.txt").extension());
+#endif // __WINDOWS__
 
   EXPECT_SOME_EQ(".gz", Path("a.tar.gz").extension());
-  EXPECT_SOME_EQ(".gz", Path("/a.tar.gz").extension());
-
   EXPECT_SOME_EQ(".bashrc", Path(".bashrc").extension());
+#ifdef __WINDOWS__
+  EXPECT_SOME_EQ(".gz", Path("\\a.tar.gz").extension());
+  EXPECT_SOME_EQ(".bashrc", Path("\\.bashrc").extension());
+#else
+  EXPECT_SOME_EQ(".gz", Path("/a.tar.gz").extension());
   EXPECT_SOME_EQ(".bashrc", Path("/.bashrc").extension());
+#endif // __WINDOWS__
 }
 
 
-TEST_TEMP_DISABLED_ON_WINDOWS(PathTest, Join)
+TEST(PathTest, Join)
 {
+  EXPECT_EQ("a%b", path::join("a", "b", '%'));
+
+#ifndef __WINDOWS__
+  EXPECT_EQ("/", path::join("", ""));
+  EXPECT_EQ("/", path::join("", "", ""));
+  EXPECT_EQ("/a", path::join("", "a"));
+  EXPECT_EQ("a/", path::join("a", ""));
+  EXPECT_EQ("a/b", path::join("a", "b"));
+#else
+  EXPECT_EQ("\\", path::join("", ""));
+  EXPECT_EQ("\\", path::join("", "", ""));
+  EXPECT_EQ("\\a", path::join("", "a"));
+  EXPECT_EQ("a\\", path::join("a", ""));
+  EXPECT_EQ("a\\b", path::join("a", "b"));
+#endif // __WINDOWS__
+
+#ifdef __WINDOWS__
+  EXPECT_EQ("a\\b\\c", path::join("a", "b", "c"));
+  EXPECT_EQ("\\a\\b\\c", path::join("\\a", "b", "c"));
+#else
   EXPECT_EQ("a/b/c", path::join("a", "b", "c"));
   EXPECT_EQ("/a/b/c", path::join("/a", "b", "c"));
+#endif // __WINDOWS__
 
   EXPECT_EQ("", path::join(vector<string>()));
+#ifdef __WINDOWS__
+  EXPECT_EQ("a\\b\\c", path::join(vector<string>({"a", "b", "c"})));
+#else
   EXPECT_EQ("a/b/c", path::join(vector<string>({"a", "b", "c"})));
+#endif // __WINDOWS__
 
   // TODO(cmaloney): This should join to ""
+#ifdef __WINDOWS__
+  EXPECT_EQ("\\", path::join(vector<string>({"", "", ""})));
+#else
   EXPECT_EQ("/", path::join(vector<string>({"", "", ""})));
+#endif // __WINDOWS__
 
   // Interesting corner cases around being the first, middle, last.
+#ifdef __WINDOWS__
+  EXPECT_EQ("\\asdf", path::join("\\", "asdf"));
+  EXPECT_EQ("\\", path::join("", "\\", ""));
+  EXPECT_EQ("ab\\", path::join("ab\\", "", "\\"));
+  EXPECT_EQ("\\ab", path::join("\\", "\\", "ab"));
+  EXPECT_EQ("ab\\", path::join("ab", "\\", "\\"));
+  EXPECT_EQ("\\ab", path::join("\\", "", "\\ab"));
+#else
   EXPECT_EQ("/asdf", path::join("/", "asdf"));
   EXPECT_EQ("/", path::join("", "/", ""));
   EXPECT_EQ("ab/", path::join("ab/", "", "/"));
   EXPECT_EQ("/ab", path::join("/", "/", "ab"));
   EXPECT_EQ("ab/", path::join("ab", "/", "/"));
   EXPECT_EQ("/ab", path::join("/", "", "/ab"));
+#endif // __WINDOWS__
 
   // Check trailing and leading slashes get cleaned up.
+#ifdef __WINDOWS__
+  EXPECT_EQ("a\\b\\c\\", path::join("a\\", "b\\", "c\\"));
+  EXPECT_EQ("\\a\\b\\c", path::join("\\a", "\\b", "\\c"));
+  EXPECT_EQ("\\a\\b\\c\\", path::join("\\a\\", "\\b\\", "\\c\\"));
+  EXPECT_EQ("a\\b\\c\\", path::join("a\\", "\\b\\", "\\c\\"));
+#else
   EXPECT_EQ("a/b/c/", path::join("a/", "b/", "c/"));
   EXPECT_EQ("/a/b/c", path::join("/a", "/b", "/c"));
   EXPECT_EQ("/a/b/c/", path::join("/a/", "/b/", "/c/"));
   EXPECT_EQ("a/b/c/", path::join("a/", "/b/", "/c/"));
+#endif // __WINDOWS__
 }
 
 

Reply via email to