1 | /* |
2 | * This content is released under the MIT License as specified in https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE |
3 | */ |
4 | #include "includes.h" |
5 | |
6 | using spdlog::details::os::create_dir; |
7 | using spdlog::details::os::path_exists; |
8 | |
9 | bool try_create_dir(const spdlog::filename_t &path, const spdlog::filename_t &normalized_path) |
10 | { |
11 | auto rv = create_dir(path); |
12 | REQUIRE(rv == true); |
13 | return path_exists(normalized_path); |
14 | } |
15 | |
16 | TEST_CASE("create_dir" , "[create_dir]" ) |
17 | { |
18 | prepare_logdir(); |
19 | |
20 | REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs/dir1/dir1" ), SPDLOG_FILENAME_T("test_logs/dir1/dir1" ))); |
21 | REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs/dir1/dir1" ), SPDLOG_FILENAME_T("test_logs/dir1/dir1" ))); // test existing |
22 | REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs/dir1///dir2//" ), SPDLOG_FILENAME_T("test_logs/dir1/dir2" ))); |
23 | REQUIRE(try_create_dir(SPDLOG_FILENAME_T("./test_logs/dir1/dir3" ), SPDLOG_FILENAME_T("test_logs/dir1/dir3" ))); |
24 | REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs/../test_logs/dir1/dir4" ), SPDLOG_FILENAME_T("test_logs/dir1/dir4" ))); |
25 | |
26 | #ifdef WIN32 |
27 | // test backslash folder separator |
28 | REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs\\dir1\\dir222" ), SPDLOG_FILENAME_T("test_logs\\dir1\\dir222" ))); |
29 | REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs\\dir1\\dir223\\" ), SPDLOG_FILENAME_T("test_logs\\dir1\\dir223\\" ))); |
30 | REQUIRE( |
31 | try_create_dir(SPDLOG_FILENAME_T(".\\test_logs\\dir1\\dir2\\dir99\\..\\dir23" ), SPDLOG_FILENAME_T("test_logs\\dir1\\dir2\\dir23" ))); |
32 | REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs\\..\\test_logs\\dir1\\dir5" ), SPDLOG_FILENAME_T("test_logs\\dir1\\dir5" ))); |
33 | #endif |
34 | } |
35 | |
36 | TEST_CASE("create_invalid_dir" , "[create_dir]" ) |
37 | { |
38 | REQUIRE(create_dir(SPDLOG_FILENAME_T("" )) == false); |
39 | REQUIRE(create_dir(spdlog::filename_t{}) == false); |
40 | #ifdef __linux__ |
41 | REQUIRE(create_dir("/proc/spdlog-utest" ) == false); |
42 | #endif |
43 | } |
44 | |
45 | TEST_CASE("dir_name" , "[create_dir]" ) |
46 | { |
47 | using spdlog::details::os::dir_name; |
48 | REQUIRE(dir_name(SPDLOG_FILENAME_T("" )).empty()); |
49 | REQUIRE(dir_name(SPDLOG_FILENAME_T("dir" )).empty()); |
50 | |
51 | #ifdef WIN32 |
52 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir\)" )) == SPDLOG_FILENAME_T("dir" )); |
53 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir\\\)" )) == SPDLOG_FILENAME_T(R"(dir\\)" )); |
54 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir\file)" )) == SPDLOG_FILENAME_T("dir" )); |
55 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir/file)" )) == SPDLOG_FILENAME_T("dir" )); |
56 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir\file.txt)" )) == SPDLOG_FILENAME_T("dir" )); |
57 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir/file)" )) == SPDLOG_FILENAME_T("dir" )); |
58 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir\file.txt\)" )) == SPDLOG_FILENAME_T(R"(dir\file.txt)" )); |
59 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(\dir\file.txt)" )) == SPDLOG_FILENAME_T(R"(\dir)" )); |
60 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(\\dir\file.txt)" )) == SPDLOG_FILENAME_T(R"(\\dir)" )); |
61 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(..\file.txt)" )) == SPDLOG_FILENAME_T(".." )); |
62 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(.\file.txt)" )) == SPDLOG_FILENAME_T("." )); |
63 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(c:\\a\b\c\d\file.txt)" )) == SPDLOG_FILENAME_T(R"(c:\\a\b\c\d)" )); |
64 | REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(c://a/b/c/d/file.txt)" )) == SPDLOG_FILENAME_T(R"(c://a/b/c/d)" )); |
65 | #endif |
66 | REQUIRE(dir_name(SPDLOG_FILENAME_T("dir/" )) == SPDLOG_FILENAME_T("dir" )); |
67 | REQUIRE(dir_name(SPDLOG_FILENAME_T("dir///" )) == SPDLOG_FILENAME_T("dir//" )); |
68 | REQUIRE(dir_name(SPDLOG_FILENAME_T("dir/file" )) == SPDLOG_FILENAME_T("dir" )); |
69 | REQUIRE(dir_name(SPDLOG_FILENAME_T("dir/file.txt" )) == SPDLOG_FILENAME_T("dir" )); |
70 | REQUIRE(dir_name(SPDLOG_FILENAME_T("dir/file.txt/" )) == SPDLOG_FILENAME_T("dir/file.txt" )); |
71 | REQUIRE(dir_name(SPDLOG_FILENAME_T("/dir/file.txt" )) == SPDLOG_FILENAME_T("/dir" )); |
72 | REQUIRE(dir_name(SPDLOG_FILENAME_T("//dir/file.txt" )) == SPDLOG_FILENAME_T("//dir" )); |
73 | REQUIRE(dir_name(SPDLOG_FILENAME_T("../file.txt" )) == SPDLOG_FILENAME_T(".." )); |
74 | REQUIRE(dir_name(SPDLOG_FILENAME_T("./file.txt" )) == SPDLOG_FILENAME_T("." )); |
75 | } |
76 | |