#include "filesystem.hpp" #include int main() { { auto path = filesystem::get_home_path(); g_assert(!path.empty()); g_assert(boost::filesystem::exists(path)); g_assert(boost::filesystem::is_directory(path)); } { auto path = filesystem::get_current_path(); g_assert(!path.empty()); g_assert(boost::filesystem::exists(path)); g_assert(boost::filesystem::is_directory(path)); } { auto paths = filesystem::get_executable_search_paths(); g_assert(!paths.empty()); for(auto &path : paths) { g_assert(!path.empty()); g_assert(boost::filesystem::exists(path)); g_assert(boost::filesystem::is_directory(path)); } } { auto original = "test () '\""; auto escaped = filesystem::escape_argument(original); g_assert_cmpstr(escaped.c_str(), ==, "test\\ \\(\\)\\ \\'\\\""); auto unescaped = filesystem::unescape_argument(escaped); g_assert_cmpstr(unescaped.c_str(), ==, original); } { auto unescaped = filesystem::unescape_argument("'test \\()\"\\''"); g_assert_cmpstr(unescaped.c_str(), ==, "test \\()\"'"); } { auto unescaped = filesystem::unescape_argument("\"test \\'()\\\"\""); g_assert_cmpstr(unescaped.c_str(), ==, "test \\'()\""); } { auto unescaped = filesystem::unescape_argument("\\\\"); g_assert_cmpstr(unescaped.c_str(), ==, "\\"); } { auto unescaped = filesystem::unescape_argument("\\\\\\ "); g_assert_cmpstr(unescaped.c_str(), ==, "\\ "); } { auto unescaped = filesystem::unescape_argument("\\\\\\ \\ \\ \\\\"); g_assert_cmpstr(unescaped.c_str(), ==, "\\ \\"); } { auto unescaped = filesystem::unescape_argument("c:\\a\\ b\\c"); g_assert_cmpstr(unescaped.c_str(), ==, "c:\\a b\\c"); } { auto unescaped = filesystem::unescape_argument("\"\\\\\\\"\""); g_assert_cmpstr(unescaped.c_str(), ==, "\\\""); } { auto unescaped = filesystem::unescape_argument("\"\\\"\""); g_assert_cmpstr(unescaped.c_str(), ==, "\""); } { auto unescaped = filesystem::unescape_argument("\"a\\b\""); g_assert_cmpstr(unescaped.c_str(), ==, "a\\b"); } auto tests_path = boost::filesystem::canonical(JUCI_TESTS_PATH); { g_assert(filesystem::file_in_path(tests_path / "filesystem_test.cc", tests_path)); g_assert(!filesystem::file_in_path(boost::filesystem::canonical(tests_path / ".." / "CMakeLists.txt"), tests_path)); } auto license_file = boost::filesystem::canonical(tests_path / ".." / "LICENSE"); { g_assert(filesystem::find_file_in_path_parents("LICENSE", tests_path) == license_file); } { g_assert(filesystem::get_normal_path(tests_path / ".." / "LICENSE") == license_file); g_assert(filesystem::get_normal_path("/foo") == "/foo"); g_assert(filesystem::get_normal_path("/foo/") == "/foo"); g_assert(filesystem::get_normal_path("/foo/.") == "/foo"); g_assert(filesystem::get_normal_path("/foo/./bar/..////") == "/foo"); g_assert(filesystem::get_normal_path("/foo/.///bar/../") == "/foo"); g_assert(filesystem::get_normal_path("../foo") == "../foo"); g_assert(filesystem::get_normal_path("../../foo") == "../../foo"); g_assert(filesystem::get_normal_path("../././foo") == "../foo"); g_assert(filesystem::get_normal_path("/../foo") == "/../foo"); } { boost::filesystem::path relative_path = "filesystem_test.cc"; g_assert(filesystem::get_relative_path(tests_path / relative_path, tests_path) == relative_path); g_assert(filesystem::get_relative_path(tests_path / "test" / relative_path, tests_path) == boost::filesystem::path("test") / relative_path); g_assert(filesystem::get_relative_path("/test/test/test.cc", "/test/base") == boost::filesystem::path("..") / "test" / "test.cc"); g_assert(filesystem::get_relative_path("/test/test/test/test.cc", "/test/base") == boost::filesystem::path("..") / "test" / "test" / "test.cc"); g_assert(filesystem::get_relative_path("/test2/test.cc", "/test/base") == boost::filesystem::path("..") / ".." / "test2" / "test.cc"); } { boost::filesystem::path path = "/ro ot/te stæøå.txt"; auto uri = filesystem::get_uri_from_path(path); g_assert(uri == "file:///ro%20ot/te%20st%C3%A6%C3%B8%C3%A5.txt"); g_assert(path == filesystem::get_path_from_uri(uri)); } }