kicad/thirdparty/sentry-native/tests/unit/test_path.c

219 lines
6.8 KiB
C

#include "sentry_path.h"
#include "sentry_string.h"
#include "sentry_testsupport.h"
SENTRY_TEST(recursive_paths)
{
sentry_path_t *base = sentry__path_from_str(".foo");
sentry_path_t *nested = sentry__path_join_str(base, "bar");
sentry_path_t *nested2 = sentry__path_join_str(nested, "baz");
sentry_path_t *file =
#ifdef SENTRY_PLATFORM_WINDOWS
sentry__path_join_wstr(nested2, L"unicode ❤️ Юля.txt");
#else
sentry__path_join_str(nested2, "unicode ❤️ Юля.txt");
#endif
sentry__path_create_dir_all(nested2);
sentry__path_touch(file);
TEST_CHECK(sentry__path_is_file(file));
sentry__path_remove_all(nested);
TEST_CHECK(!sentry__path_is_file(file));
TEST_CHECK(!sentry__path_is_file(nested));
TEST_CHECK(sentry__path_is_dir(base));
sentry__path_remove_all(base);
sentry__path_free(file);
sentry__path_free(nested2);
sentry__path_free(nested);
sentry__path_free(base);
}
SENTRY_TEST(path_joining_unix)
{
#ifndef SENTRY_PLATFORM_UNIX
SKIP_TEST();
#else
sentry_path_t *path = sentry__path_new("foo/bar/baz.txt");
sentry_path_t *joined;
TEST_CHECK(strcmp(path->path, "foo/bar/baz.txt") == 0);
TEST_CHECK(strcmp(sentry__path_filename(path), "baz.txt") == 0);
joined = sentry__path_join_str(path, "extra");
TEST_CHECK(strcmp(joined->path, "foo/bar/baz.txt/extra") == 0);
TEST_CHECK(strcmp(sentry__path_filename(joined), "extra") == 0);
sentry__path_free(joined);
joined = sentry__path_join_str(path, "/root/path");
TEST_CHECK(strcmp(joined->path, "/root/path") == 0);
TEST_CHECK(strcmp(sentry__path_filename(joined), "path") == 0);
sentry__path_free(joined);
sentry__path_free(path);
#endif
}
SENTRY_TEST(path_from_str_null)
{
TEST_CHECK(NULL == sentry__path_from_str(NULL));
TEST_CHECK(NULL == sentry__path_from_str_n(NULL, 0));
TEST_CHECK(NULL == sentry__path_from_str_n(NULL, 10));
}
SENTRY_TEST(path_from_str_n_wo_null_termination)
{
// provide non-null-terminated path string with buffer character at the end.
char path_str[] = { 't', 'e', 's', 't', 'X' };
sentry_path_t *test_path = sentry__path_from_str_n(path_str, 4);
#ifdef SENTRY_PLATFORM_WINDOWS
TEST_CHECK_WSTRING_EQUAL(test_path->path, L"test");
#else
TEST_CHECK_STRING_EQUAL(test_path->path, "test");
#endif
sentry__path_free(test_path);
}
SENTRY_TEST(path_joining_windows)
{
#ifndef SENTRY_PLATFORM_WINDOWS
SKIP_TEST();
#else
sentry_path_t *path = sentry__path_new(L"foo/bar/baz.txt");
sentry_path_t *winpath = sentry__path_new(L"foo\\bar\\baz.txt");
sentry_path_t *awinpath = sentry__path_from_str("foo\\bar\\baz.txt");
sentry_path_t *cpath = sentry__path_from_str("C:\\foo\\bar\\baz.txt");
sentry_path_t *joined;
TEST_CHECK(_wcsicmp(path->path, L"foo/bar/baz.txt") == 0);
TEST_CHECK(_wcsicmp(sentry__path_filename(path), L"baz.txt") == 0);
TEST_CHECK(_wcsicmp(winpath->path, L"foo\\bar\\baz.txt") == 0);
TEST_CHECK(_wcsicmp(awinpath->path, L"foo\\bar\\baz.txt") == 0);
TEST_CHECK(_wcsicmp(sentry__path_filename(winpath), L"baz.txt") == 0);
joined = sentry__path_join_str(path, "extra");
TEST_CHECK(_wcsicmp(joined->path, L"foo/bar/baz.txt\\extra") == 0);
TEST_CHECK(_wcsicmp(sentry__path_filename(joined), L"extra") == 0);
sentry__path_free(joined);
joined = sentry__path_join_str(path, "/root/path");
TEST_CHECK(_wcsicmp(joined->path, L"/root/path") == 0);
TEST_CHECK(_wcsicmp(sentry__path_filename(joined), L"path") == 0);
sentry__path_free(joined);
joined = sentry__path_join_str(cpath, "/root/path");
TEST_CHECK(_wcsicmp(joined->path, L"C:/root/path") == 0);
sentry__path_free(joined);
joined = sentry__path_join_str(cpath, "D:\\root\\path");
TEST_CHECK(_wcsicmp(joined->path, L"D:\\root\\path") == 0);
sentry__path_free(joined);
joined = sentry__path_join_str(cpath, "\\root\\path");
TEST_CHECK(_wcsicmp(joined->path, L"C:\\root\\path") == 0);
sentry__path_free(joined);
sentry__path_free(cpath);
sentry__path_free(awinpath);
sentry__path_free(winpath);
sentry__path_free(path);
#endif
}
SENTRY_TEST(path_relative_filename)
{
sentry_path_t *path = sentry__path_from_str("foobar.txt");
#ifdef SENTRY_PLATFORM_WINDOWS
char *filename = sentry__string_from_wstr(sentry__path_filename(path));
TEST_CHECK_STRING_EQUAL(filename, "foobar.txt");
sentry_free(filename);
#else
TEST_CHECK_STRING_EQUAL(sentry__path_filename(path), "foobar.txt");
#endif
sentry__path_free(path);
}
SENTRY_TEST(path_basics)
{
size_t items = 0;
const sentry_path_t *p;
sentry_path_t *path = sentry__path_from_str(".");
TEST_CHECK(!!path);
sentry_pathiter_t *piter = sentry__path_iter_directory(path);
while ((p = sentry__pathiter_next(piter)) != NULL) {
bool is_file = sentry__path_is_file(p);
bool is_dir = sentry__path_is_dir(p);
TEST_CHECK(is_file || is_dir);
items += 1;
}
TEST_CHECK(items > 0);
sentry__pathiter_free(piter);
sentry__path_free(path);
}
SENTRY_TEST(path_current_exe)
{
sentry_path_t *path = sentry__path_current_exe();
TEST_CHECK(sentry__path_is_file(path));
sentry__path_free(path);
}
SENTRY_TEST(path_directory)
{
sentry_path_t *path_1 = sentry__path_from_str("foo");
sentry_path_t *path_2 = sentry__path_from_str("foo/bar");
#ifdef SENTRY_PLATFORM_WINDOWS
sentry_path_t *path_3 = sentry__path_from_str("foo/bar\\baz");
// `%TEMP%\sentry_test_unit`
wchar_t temp_folder[MAX_PATH];
GetEnvironmentVariableW(L"TEMP", temp_folder, sizeof(temp_folder));
sentry_path_t *path_4 = sentry__path_from_wstr(temp_folder);
path_4 = sentry__path_join_str(path_4, "sentry_test_unit");
#endif
// cleanup before tests
sentry__path_remove_all(path_1);
// create single directory
sentry__path_create_dir_all(path_1);
TEST_CHECK(sentry__path_is_dir(path_1));
sentry__path_remove(path_1);
TEST_CHECK(!sentry__path_is_dir(path_1));
// create directories by path with forward slash
sentry__path_create_dir_all(path_2);
TEST_CHECK(sentry__path_is_dir(path_2));
sentry__path_remove_all(path_2);
TEST_CHECK(!sentry__path_is_dir(path_2));
#ifdef SENTRY_PLATFORM_WINDOWS
// create directories by path with forward slash and backward slashes
sentry__path_create_dir_all(path_3);
TEST_CHECK(sentry__path_is_dir(path_3));
sentry__path_remove_all(path_3);
TEST_CHECK(!sentry__path_is_dir(path_3));
sentry__path_free(path_3);
// create directories with absolute path
sentry__path_create_dir_all(path_4);
TEST_CHECK(sentry__path_is_dir(path_4));
sentry__path_remove_all(path_4);
TEST_CHECK(!sentry__path_is_dir(path_4));
sentry__path_free(path_4);
#endif
sentry__path_free(path_1);
sentry__path_free(path_2);
}