Adds some additional tests to ensure that UNC paths are properly
handled (mainly decomposed) on MinGW.

libstdc++-v3/ChangeLog:

        * testsuite/27_io/filesystem/path/decompose/extension.cc:
        Test for UNC paths with dots in the root directory.
        * testsuite/27_io/filesystem/path/decompose/relative_path.cc:
        Test for UNC paths.
        * testsuite/27_io/filesystem/path/decompose/root_directory.cc:
        Test for UNC path.
        * testsuite/27_io/filesystem/path/decompose/root_name.cc:
        Test for Windows paths.
        * testsuite/27_io/filesystem/path/decompose/root_path.cc:
        Test for Windows paths.
        * testsuite/27_io/filesystem/path/decompose/stem.cc:
        Test for Windows paths.
        * testsuite/27_io/filesystem/path/generation/relative.cc:
        Test for Windows paths.

Signed-off-by: Johannes Grunenberg <johannes.grunenb...@stud.uni-hannover.de>
---
 .../filesystem/path/decompose/extension.cc    |  5 +++++
 .../path/decompose/relative_path.cc           |  9 +++++++++
 .../path/decompose/root_directory.cc          |  1 +
 .../filesystem/path/decompose/root_name.cc    | 20 +++++++++++++++++++
 .../filesystem/path/decompose/root_path.cc    | 13 ++++++++++++
 .../27_io/filesystem/path/decompose/stem.cc   |  5 +++++
 .../filesystem/path/generation/relative.cc    | 14 +++++++++++++
 7 files changed, 67 insertions(+)

diff --git 
a/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/extension.cc 
b/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/extension.cc
index 82887beea37..0965209d283 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/extension.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/extension.cc
@@ -45,6 +45,11 @@ test01()
   VERIFY( path(".").extension() == path("") );
 
   VERIFY( path().extension() == path() );
+
+#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
+  VERIFY( path("\\\\wsl.local").extension() == path("") );
+  VERIFY( path("\\\\wsl.local\\foo.bar").extension() == path(".bar") );
+#endif
 }
 
 void
diff --git 
a/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/relative_path.cc 
b/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/relative_path.cc
index 0c3eb4b333e..ebc56b99d56 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/relative_path.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/relative_path.cc
@@ -34,6 +34,15 @@ test01()
   VERIFY( p2.relative_path() == p2 );
   path p3 = "/foo/bar";
   VERIFY( p3.relative_path() == p2 );
+
+#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
+  path p4 = "\\\\baz/foo/bar";
+  VERIFY( p4.relative_path() == p2 );
+  path p5 = "foo\\bar";
+  VERIFY( p5.relative_path() == p5 );
+  path p6 = "\\\\baz\\foo\\bar";
+  VERIFY( p6.relative_path() == p5 );
+#endif
 }
 
 #include <iostream> // XXX
diff --git 
a/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_directory.cc 
b/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_directory.cc
index a7c90f99752..ffdf18929be 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_directory.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_directory.cc
@@ -35,6 +35,7 @@ test01()
   path p3 = "//foo";
 #if defined(__CYGWIN__) || defined(_GLIBCXX_FILESYSTEM_IS_WINDOWS)
   VERIFY( p3.root_directory() == path() );
+  VERIFY( path("//").root_directory() == path("//") );
 #else
   VERIFY( p3.root_directory() == path("/") );
 #endif
diff --git 
a/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_name.cc 
b/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_name.cc
index c32242ff6fe..d5d1934ec15 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_name.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_name.cc
@@ -34,8 +34,28 @@ test01()
   VERIFY( path("..").extension().empty() );
 }
 
+void
+test02()
+{
+#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
+  VERIFY( path("/foo/bar").root_name() == "" );
+  VERIFY( path("\\").root_name() == "" );
+  VERIFY( path("\\\\").root_name() == "" );
+  VERIFY( path("\\\\foo").root_name() == "\\\\foo" );
+  VERIFY( path("\\\\foo\\").root_name() == "\\\\foo" );
+  VERIFY( path("\\\\foo\\bar").root_name() == "\\\\foo" );
+  VERIFY( path("\\\\?\\c\\").root_name() == "\\\\?" );
+  VERIFY( path("c:/").root_name() == "c:" );
+  VERIFY( path("c:\\").root_name() == "c:" );
+  VERIFY( path("c:").root_name() == "c:" );
+  VERIFY( path("c:\\foo").root_name() == "c:" );
+#endif
+  VERIFY( path("").root_name() == "" );
+}
+
 int
 main()
 {
   test01();
+  test02();
 }
diff --git 
a/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_path.cc 
b/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_path.cc
index b01c75fa0b9..c393e5e4681 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_path.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_path.cc
@@ -32,6 +32,19 @@ test01()
   VERIFY( p1.root_path() == path() );
   path p2 = "/foo/bar";
   VERIFY( p2.root_path() == path("/") );
+
+#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
+  VERIFY( path("\\").root_path() == "\\" );
+  VERIFY( path("\\\\").root_path() == "\\\\" );
+  VERIFY( path("\\\\foo").root_path() == "\\\\foo" );
+  VERIFY( path("\\\\foo\\").root_path() == "\\\\foo\\" );
+  VERIFY( path("\\\\foo\\bar").root_path() == "\\\\foo\\" );
+  VERIFY( path("\\\\?\\c\\").root_path() == "\\\\?\\" );
+  VERIFY( path("c:/").root_path() == "c:/" );
+  VERIFY( path("c:\\").root_path() == "c:\\" );
+  VERIFY( path("c:").root_path() == "c:" );
+  VERIFY( path("c:\\foo").root_path() == "c:\\" );
+#endif
 }
 
 void
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/stem.cc 
b/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/stem.cc
index bb5a8f3d2ae..b3b5957eea5 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/stem.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/path/decompose/stem.cc
@@ -51,6 +51,11 @@ test01()
   VERIFY( path(".").stem() == path(".") );
 
   VERIFY( path().stem() == path() );
+
+#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
+  VERIFY( path("\\\\wsl.local").stem() == path("") );
+  VERIFY( path("\\\\wsl.local\\foo.bar").stem() == path("foo") );
+#endif
 }
 
 int
diff --git 
a/libstdc++-v3/testsuite/27_io/filesystem/path/generation/relative.cc 
b/libstdc++-v3/testsuite/27_io/filesystem/path/generation/relative.cc
index de99fe848ba..121be5c0655 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/path/generation/relative.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/path/generation/relative.cc
@@ -91,6 +91,19 @@ test04()
 #endif
 }
 
+void
+test05()
+{
+#ifdef _GLIBCXX_FILESYSTEM_IS_WINDOWS
+  compare_paths(path("f:/foo").lexically_relative("f:/foo/bar"), "..");
+  compare_paths(path("g:/foo").lexically_relative("f:/foo/bar"), "");
+  compare_paths(path("\\\\?\\f:/foo").lexically_relative("f:/foo/bar"), "");
+  compare_paths(path("\\\\a/b/c").lexically_relative("\\\\a/b"), "c");
+  compare_paths(path("\\\\a/b/c").lexically_relative("\\\\a/b/c/d"), "..");
+  compare_paths(path("\\\\b/b/c").lexically_relative("\\\\a/b/c/d"), "");
+#endif
+}
+
 int
 main()
 {
@@ -98,4 +111,5 @@ main()
   test02();
   test03();
   test04();
+  test05();
 }
-- 
2.49.0.windows.1

Reply via email to