/* Self tests for path_join for GDB, the GNU debugger. Copyright (C) 2022-2024 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "gdbsupport/pathstuff.h" #include "gdbsupport/selftest.h" namespace selftests { namespace path_join { template static void test_one (const char *expected, Args... paths) { std::string actual = ::path_join (paths...); SELF_CHECK (actual == expected); } /* Test path_join. */ static void test () { test_one ("/foo/bar", "/foo", "bar"); test_one ("/bar", "/", "bar"); test_one ("foo/bar/", "foo", "bar", ""); test_one ("foo", "", "foo"); test_one ("foo/bar", "foo", "", "bar"); test_one ("foo/", "foo", ""); test_one ("foo/", "foo/", ""); test_one ("D:/foo/bar", "D:/foo", "bar"); test_one ("D:/foo/bar", "D:/foo/", "bar"); #if defined(_WIN32) /* The current implementation doesn't recognize backslashes as directory separators on Unix-like systems, so only run these tests on Windows. If we ever switch our implementation to use std::filesystem::path, they should work anywhere, in theory. */ test_one ("D:\\foo/bar", "D:\\foo", "bar"); test_one ("D:\\foo\\bar", "D:\\foo\\", "bar"); test_one ("\\\\server\\dir\\file", "\\\\server\\dir\\", "file"); test_one ("\\\\server\\dir/file", "\\\\server\\dir", "file"); #endif /* _WIN32 */ } } } void _initialize_path_join_selftests (); void _initialize_path_join_selftests () { selftests::register_test ("path_join", selftests::path_join::test); }