#endif
size_t n = path.find_last_of(delim);
if (n == std::string::npos) {
+ // "foo" -> "."
return ".";
+ } else if (n == 0) {
+ // "/" -> "/" (Windows: or "\\" -> "\\")
+ return path.substr(0, 1);
+#ifdef _WIN32
+ } else if (n == 2 && path[1] == ':') {
+ // Windows: "C:\\foo" -> "C:\\" or "C:/foo" -> "C:/"
+ return path.substr(0, 3);
+#endif
} else {
- return n == 0 ? "/" : path.substr(0, n);
+ // "/dir/foo" -> "/dir" (Windows: or "C:\\dir\\foo" -> "C:\\dir")
+ return path.substr(0, n);
}
}
CHECK(Util::dir_name("/") == "/");
CHECK(Util::dir_name("/foo") == "/");
CHECK(Util::dir_name("/foo/bar/f.txt") == "/foo/bar");
+
+#ifdef _WIN32
+ CHECK(Util::dir_name("C:/x/y") == "C:/x");
+ CHECK(Util::dir_name("X:/x/y") == "X:/x");
+ CHECK(Util::dir_name("C:\\x\\y") == "C:\\x");
+ CHECK(Util::dir_name("C:/x") == "C:/");
+ CHECK(Util::dir_name("C:\\x") == "C:\\");
+ CHECK(Util::dir_name("C:/") == "C:/");
+ CHECK(Util::dir_name("C:\\") == "C:\\");
+#endif
}
TEST_CASE("Util::strip_ansi_csi_seqs")