1 | #include "includes.h" |
2 | |
3 | #ifdef _WIN32 |
4 | # include <windows.h> |
5 | #else |
6 | # include <sys/types.h> |
7 | # include <dirent.h> |
8 | #endif |
9 | |
10 | void prepare_logdir() |
11 | { |
12 | spdlog::drop_all(); |
13 | #ifdef _WIN32 |
14 | system("rmdir /S /Q test_logs" ); |
15 | #else |
16 | auto rv = system("rm -rf test_logs" ); |
17 | if (rv != 0) |
18 | { |
19 | throw std::runtime_error("Failed to rm -rf test_logs" ); |
20 | } |
21 | #endif |
22 | } |
23 | |
24 | std::string file_contents(const std::string &filename) |
25 | { |
26 | std::ifstream ifs(filename, std::ios_base::binary); |
27 | if (!ifs) |
28 | { |
29 | throw std::runtime_error("Failed open file " ); |
30 | } |
31 | return std::string((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>())); |
32 | } |
33 | |
34 | std::size_t count_lines(const std::string &filename) |
35 | { |
36 | std::ifstream ifs(filename); |
37 | if (!ifs) |
38 | { |
39 | throw std::runtime_error("Failed open file " ); |
40 | } |
41 | |
42 | std::string line; |
43 | size_t counter = 0; |
44 | while (std::getline(ifs, line)) |
45 | counter++; |
46 | return counter; |
47 | } |
48 | |
49 | void require_message_count(const std::string &filename, const std::size_t messages) |
50 | { |
51 | if (strlen(spdlog::details::os::default_eol) == 0) |
52 | { |
53 | REQUIRE(count_lines(filename) == 1); |
54 | } |
55 | else |
56 | { |
57 | REQUIRE(count_lines(filename) == messages); |
58 | } |
59 | } |
60 | |
61 | std::size_t get_filesize(const std::string &filename) |
62 | { |
63 | std::ifstream ifs(filename, std::ifstream::ate | std::ifstream::binary); |
64 | if (!ifs) |
65 | { |
66 | throw std::runtime_error("Failed open file " ); |
67 | } |
68 | |
69 | return static_cast<std::size_t>(ifs.tellg()); |
70 | } |
71 | |
72 | // source: https://stackoverflow.com/a/2072890/192001 |
73 | bool ends_with(std::string const &value, std::string const &ending) |
74 | { |
75 | if (ending.size() > value.size()) |
76 | { |
77 | return false; |
78 | } |
79 | return std::equal(ending.rbegin(), ending.rend(), value.rbegin()); |
80 | } |
81 | |
82 | #ifdef _WIN32 |
83 | // Based on: https://stackoverflow.com/a/37416569/192001 |
84 | std::size_t count_files(const std::string &folder) |
85 | { |
86 | size_t counter = 0; |
87 | WIN32_FIND_DATAA ffd; |
88 | |
89 | // Start iterating over the files in the folder directory. |
90 | HANDLE hFind = ::FindFirstFileA((folder + "\\*" ).c_str(), &ffd); |
91 | if (hFind != INVALID_HANDLE_VALUE) |
92 | { |
93 | do // Managed to locate and create an handle to that folder. |
94 | { |
95 | if (ffd.cFileName[0] != '.') |
96 | counter++; |
97 | } while (::FindNextFileA(hFind, &ffd) != 0); |
98 | ::FindClose(hFind); |
99 | } |
100 | else |
101 | { |
102 | throw std::runtime_error("Failed open folder " + folder); |
103 | } |
104 | |
105 | return counter; |
106 | } |
107 | #else |
108 | // Based on: https://stackoverflow.com/a/2802255/192001 |
109 | std::size_t count_files(const std::string &folder) |
110 | { |
111 | size_t counter = 0; |
112 | DIR *dp = opendir(folder.c_str()); |
113 | if (dp == nullptr) |
114 | { |
115 | throw std::runtime_error("Failed open folder " + folder); |
116 | } |
117 | |
118 | struct dirent *ep = nullptr; |
119 | while ((ep = readdir(dp)) != nullptr) |
120 | { |
121 | if (ep->d_name[0] != '.') |
122 | counter++; |
123 | } |
124 | (void)closedir(dp); |
125 | return counter; |
126 | } |
127 | #endif |
128 | |