Tests: add BLI_path_slash_* tests

Ref !127304
This commit is contained in:
James Fulop
2024-10-30 12:27:15 +11:00
committed by Campbell Barton
parent 49242a6b68
commit 42657cd1b6

View File

@@ -1303,6 +1303,246 @@ TEST(path_utils, Suffix)
/** \} */
/* -------------------------------------------------------------------- */
/** \name Tests for: #BLI_path_slash_find
* \{ */
#define PATH_SLASH_FIND(path, expect_index) \
{ \
const char *result = BLI_path_slash_find(path); \
EXPECT_EQ(result, &path[expect_index]); \
} \
(void)0;
TEST(path_util, SlashFind)
{
PATH_SLASH_FIND("/", 0);
PATH_SLASH_FIND("\\", 0);
PATH_SLASH_FIND("\\tmp\\", 0);
PATH_SLASH_FIND("/tmp\\", 0);
PATH_SLASH_FIND("\\tmp/", 0);
PATH_SLASH_FIND("/tmp/", 0);
PATH_SLASH_FIND("tmp\\", 3);
PATH_SLASH_FIND("tmp/", 3);
EXPECT_EQ(BLI_path_slash_find("no_slashes"), nullptr);
EXPECT_EQ(BLI_path_slash_find(""), nullptr);
EXPECT_EQ(BLI_path_slash_find("."), nullptr);
}
#undef PATH_SLASH_FIND
/** \} */
/* -------------------------------------------------------------------- */
/** \name Tests for: #BLI_path_slash_rfind
* \{ */
#define PATH_SLASH_RFIND(path, expect_index) \
{ \
const char *result = BLI_path_slash_rfind(path); \
EXPECT_STREQ(result, &path[expect_index]); \
} \
(void)0;
TEST(path_util, SlashRFind)
{
PATH_SLASH_RFIND("/", 0);
PATH_SLASH_RFIND("\\", 0);
PATH_SLASH_RFIND("\\tmp\\", 4);
PATH_SLASH_RFIND("/tmp\\", 4);
PATH_SLASH_RFIND("\\tmp/", 4);
PATH_SLASH_RFIND("/tmp/", 4);
PATH_SLASH_RFIND("tmp\\", 3);
PATH_SLASH_RFIND("tmp/", 3);
PATH_SLASH_RFIND("/tmp", 0);
PATH_SLASH_RFIND("\\tmp", 0);
EXPECT_EQ(BLI_path_slash_rfind("no_slashes"), nullptr);
EXPECT_EQ(BLI_path_slash_rfind(""), nullptr);
EXPECT_EQ(BLI_path_slash_rfind("."), nullptr);
}
#undef PATH_SLASH_RFIND
/** \} */
/* -------------------------------------------------------------------- */
/** \name Tests for: #BLI_path_slash_ensure
* \{ */
#define PATH_SLASH_ENSURE(input, size, output_expect, length_expect) \
{ \
char path[size] = input; \
if (SEP == '\\') { \
BLI_string_replace_char(path, '/', '\\'); \
} \
int result = BLI_path_slash_ensure(path, size); \
if (SEP == '\\') { \
BLI_string_replace_char(path, '\\', '/'); \
} \
EXPECT_STREQ(path, output_expect); \
EXPECT_EQ(result, length_expect); \
} \
((void)0)
TEST(path_util, SlashEnsure)
{
PATH_SLASH_ENSURE("/tmp", FILE_MAX, "/tmp/", 5);
PATH_SLASH_ENSURE("", FILE_MAX, "/", 1);
PATH_SLASH_ENSURE("", 2, "/", 1);
/* no change */
PATH_SLASH_ENSURE("/tmp/", FILE_MAX, "/tmp/", 5);
PATH_SLASH_ENSURE("/", FILE_MAX, "/", 1);
/* Not enough space reserved to add a slash, so do nothing. */
PATH_SLASH_ENSURE("", 1, "", 0);
PATH_SLASH_ENSURE("/tmp", 5, "/tmp", 4);
}
#undef PATH_SLASH_ENSURE
/** \} */
/* -------------------------------------------------------------------- */
/** \name Tests for: #BLI_path_slash_rstrip
* \{ */
#define PATH_SLASH_RSTRIP(input, expected) \
{ \
char path[FILE_MAX] = input; \
if (SEP == '\\') { \
BLI_string_replace_char(path, '/', '\\'); \
} \
BLI_path_slash_rstrip(path); \
if (SEP == '\\') { \
BLI_string_replace_char(path, '\\', '/'); \
} \
EXPECT_STREQ(path, expected); \
} \
((void)0)
TEST(path_util, SlashRStrip)
{
PATH_SLASH_RSTRIP("/brown/cow/", "/brown/cow");
PATH_SLASH_RSTRIP("/brown/cow", "/brown/cow");
PATH_SLASH_RSTRIP("/brown/", "/brown");
PATH_SLASH_RSTRIP("/brown", "/brown");
PATH_SLASH_RSTRIP("/brown/../", "/brown/..");
PATH_SLASH_RSTRIP("/brown/..", "/brown/..");
PATH_SLASH_RSTRIP("/brown///", "/brown");
PATH_SLASH_RSTRIP("/", "");
PATH_SLASH_RSTRIP("", "");
PATH_SLASH_RSTRIP(".", ".");
}
#undef PATH_SLASH_RSTRIP
/** \} */
/* -------------------------------------------------------------------- */
/** \name Tests for: #BLI_path_slash_skip
* \{ */
#define PATH_SLASH_SKIP(input, expected) \
{ \
char path[FILE_MAX] = input; \
if (SEP == '\\') { \
BLI_string_replace_char(path, '/', '\\'); \
} \
const char *skipped = BLI_path_slash_skip(path); \
if (SEP == '\\') { \
BLI_string_replace_char(path, '\\', '/'); \
} \
EXPECT_STREQ(skipped, expected); \
} \
((void)0)
TEST(path_util, SlashSkip)
{
PATH_SLASH_SKIP("/brown", "brown");
PATH_SLASH_SKIP("brown", "brown");
PATH_SLASH_SKIP("////brown", "brown");
PATH_SLASH_SKIP("/../brown", "../brown");
PATH_SLASH_SKIP("../brown", "../brown");
PATH_SLASH_SKIP("/", "");
PATH_SLASH_SKIP("/////", "");
PATH_SLASH_SKIP("", "");
PATH_SLASH_SKIP(".", ".");
}
#undef PATH_SLASH_SKIP
/** \} */
/* -------------------------------------------------------------------- */
/** \name Tests for: #BLI_path_slash_native
* \{ */
#define PATH_SLASH_NATIVE(input, expected) \
{ \
char path[FILE_MAX] = input; \
BLI_path_slash_native(path); \
EXPECT_STREQ(path, expected); \
} \
((void)0)
TEST(path_util, SlashNative)
{
#ifdef WIN32
PATH_SLASH_NATIVE("C:/", "C:\\");
PATH_SLASH_NATIVE("C:\\", "C:\\");
PATH_SLASH_NATIVE("C:\\tmp\\", "C:\\tmp\\");
PATH_SLASH_NATIVE("C:/tmp\\", "C:\\tmp\\");
PATH_SLASH_NATIVE("C:\\tmp/", "C:\\tmp\\");
PATH_SLASH_NATIVE("C:/tmp/", "C:\\tmp\\");
PATH_SLASH_NATIVE("tmp\\", "tmp\\");
PATH_SLASH_NATIVE("tmp/", "tmp\\");
PATH_SLASH_NATIVE("..\\tmp\\", "..\\tmp\\");
PATH_SLASH_NATIVE("../tmp/", "..\\tmp\\");
PATH_SLASH_NATIVE("C:/tmp", "C:\\tmp");
PATH_SLASH_NATIVE("C:\\tmp", "C:\\tmp");
PATH_SLASH_NATIVE("tmp", "tmp");
PATH_SLASH_NATIVE("", "");
PATH_SLASH_NATIVE(".", ".");
PATH_SLASH_NATIVE("\\\\server\\share", "\\\\server\\share");
PATH_SLASH_NATIVE("\\\\server/share", "\\\\server\\share");
PATH_SLASH_NATIVE("\\\\?\\server\\share", "\\\\?\\server\\share");
PATH_SLASH_NATIVE("\\\\?\\server/share", "\\\\?\\server\\share");
PATH_SLASH_NATIVE("\\\\?\\C:\\file.txt", "\\\\?\\C:\\file.txt");
PATH_SLASH_NATIVE("\\\\?\\C:/file.txt", "\\\\?\\C:\\file.txt");
#else
PATH_SLASH_NATIVE("/", "/");
PATH_SLASH_NATIVE("\\", "/");
PATH_SLASH_NATIVE("\\tmp\\", "/tmp/");
PATH_SLASH_NATIVE("/tmp\\", "/tmp/");
PATH_SLASH_NATIVE("\\tmp/", "/tmp/");
PATH_SLASH_NATIVE("/tmp/", "/tmp/");
PATH_SLASH_NATIVE("tmp\\", "tmp/");
PATH_SLASH_NATIVE("tmp/", "tmp/");
PATH_SLASH_NATIVE("..\\tmp\\", "../tmp/");
PATH_SLASH_NATIVE("../tmp/", "../tmp/");
PATH_SLASH_NATIVE("/tmp", "/tmp");
PATH_SLASH_NATIVE("\\tmp", "/tmp");
PATH_SLASH_NATIVE("tmp", "tmp");
PATH_SLASH_NATIVE("", "");
PATH_SLASH_NATIVE(".", ".");
PATH_SLASH_NATIVE("\\\\server\\share", "\\\\server/share");
PATH_SLASH_NATIVE("\\\\server/share", "\\\\server/share");
PATH_SLASH_NATIVE("\\\\?\\server\\share", "\\\\?\\server/share");
PATH_SLASH_NATIVE("\\\\?\\server/share", "\\\\?\\server/share");
PATH_SLASH_NATIVE("\\\\?\\home\\user\\file.txt", "\\\\?\\home/user/file.txt");
PATH_SLASH_NATIVE("\\\\?\\home\\user/file.txt", "\\\\?\\home/user/file.txt");
#endif
}
#undef PATH_SLASH_NATIVE
/** \} */
/* -------------------------------------------------------------------- */
/** \name Tests for: #BLI_path_rel
* \{ */