OSDN Git Service

Reduce the number of #include <Windows.h> and <tchar.h>.
[winmerge-jp/winmerge-jp.git] / Testing / GoogleTest / Paths / paths_test.cpp
1 #include "pch.h"\r
2 #include <gtest/gtest.h>\r
3 #include <filesystem>\r
4 #include "Environment.h"\r
5 #include "paths.h"\r
6 \r
7 // Expects that C:\Temp exists for creating temporary testing files.\r
8 \r
9 // TODO:\r
10 // paths::normalize() with rel path returns drive letter? how to test?\r
11 // paths::GetLongPath() - how to test?\r
12 // paths::GetPairComparability() tests\r
13 // paths::IsShortcut() how to test so that test data is in SVN?\r
14 // ExpandShortcut() how to test so that test data is in SVN?\r
15 // paths::EnsurePathExist() tests\r
16 \r
17 \r
18 namespace\r
19 {\r
20         // The fixture for testing paths functions.\r
21         class PathTest : public testing::Test\r
22         {\r
23         protected:\r
24                 // You can remove any or all of the following functions if its body\r
25                 // is   empty.\r
26 \r
27                 PathTest()\r
28                 {\r
29                         // You can do set-up work for each test here.\r
30                 }\r
31 \r
32                 virtual ~PathTest()\r
33                 {\r
34                         // You can do clean-up work     that doesn't throw exceptions here.\r
35                 }\r
36 \r
37                 // If   the     constructor     and     destructor are not enough for setting up\r
38                 // and cleaning up each test, you can define the following methods:\r
39 \r
40                 virtual void SetUp()\r
41                 {\r
42                         // Code here will be called     immediately     after the constructor (right\r
43                         // before each test).\r
44                 }\r
45 \r
46                 virtual void TearDown()\r
47                 {\r
48                         // Code here will be called     immediately     after each test (right\r
49                         // before the destructor).\r
50                 }\r
51 \r
52                 // Objects declared here can be used by all tests in the test case for Foo.\r
53         };\r
54 \r
55         //*************************\r
56         // paths::EndsWithSlash()\r
57         //*************************\r
58 \r
59         TEST_F(PathTest, EndsWithSlash_rootfolders)\r
60         {\r
61                 const TCHAR path[] = _T("c:");\r
62                 const TCHAR path2[] = _T("c:\\");\r
63                 EXPECT_FALSE(paths::EndsWithSlash(path));\r
64                 EXPECT_TRUE(paths::EndsWithSlash(path2));\r
65         }\r
66 \r
67         TEST_F(PathTest, EndsWithSlash_shortfolders)\r
68         {\r
69                 const TCHAR path[] = _T("c:\\path");\r
70                 const TCHAR path2[] = _T("c:\\path\\");\r
71                 EXPECT_FALSE(paths::EndsWithSlash(path));\r
72                 EXPECT_TRUE(paths::EndsWithSlash(path2));\r
73         }\r
74 \r
75         TEST_F(PathTest, EndsWithSlash_relfolders)\r
76         {\r
77                 const TCHAR path[] = _T("\\path");\r
78                 const TCHAR path2[] = _T("\\path\\");\r
79                 EXPECT_FALSE(paths::EndsWithSlash(path));\r
80                 EXPECT_TRUE(paths::EndsWithSlash(path2));\r
81         }\r
82 \r
83         //*************************\r
84         // paths::DoesPathExist()\r
85         //*************************\r
86 \r
87         TEST_F(PathTest, Exists_specialfolders)\r
88         {\r
89                 const TCHAR path[] = _T(".");\r
90                 const TCHAR path2[] = _T("..");\r
91                 EXPECT_EQ(paths::IS_EXISTING_DIR, paths::DoesPathExist(path));\r
92                 EXPECT_EQ(paths::IS_EXISTING_DIR, paths::DoesPathExist(path2));\r
93         }\r
94         TEST_F(PathTest, Exists_files)\r
95         {\r
96                 const TCHAR path2[] = _T("notfound.txt");\r
97                 String path = env::GetProgPath() + _T("../README.md");\r
98                 EXPECT_EQ(paths::IS_EXISTING_FILE, paths::DoesPathExist(path));\r
99                 EXPECT_EQ(paths::DOES_NOT_EXIST, paths::DoesPathExist(path2));\r
100         }\r
101         TEST_F(PathTest, Exists_relfolder)\r
102         {\r
103                 const TCHAR path[] = _T("..\\");\r
104                 const TCHAR path2[] = _T("..\\Paths");\r
105                 EXPECT_EQ(paths::IS_EXISTING_DIR, paths::DoesPathExist(path));\r
106                 EXPECT_EQ(paths::IS_EXISTING_DIR, paths::DoesPathExist(path2));\r
107         }\r
108         TEST_F(PathTest, Exists_relfiles)\r
109         {\r
110                 const TCHAR path[] = _T(".\\..\\Paths\\paths_test.cpp");\r
111                 const TCHAR path2[] = _T("..\\Paths\\paths_test.cpp");\r
112                 EXPECT_EQ(paths::IS_EXISTING_FILE, paths::DoesPathExist(path));\r
113                 EXPECT_EQ(paths::IS_EXISTING_FILE, paths::DoesPathExist(path2));\r
114         }\r
115         TEST_F(PathTest, Exists_absfolders)\r
116         {\r
117                 const TCHAR path[] = _T("C:");\r
118                 const TCHAR path2[] = _T("C:\\");\r
119                 EXPECT_EQ(paths::IS_EXISTING_DIR, paths::DoesPathExist(path));\r
120                 EXPECT_EQ(paths::IS_EXISTING_DIR, paths::DoesPathExist(path2));\r
121         }\r
122         TEST_F(PathTest, Exists_absfolders2)\r
123         {\r
124                 const TCHAR path[] = _T("C:\\windows");\r
125                 const TCHAR path2[] = _T("C:\\windows\\");\r
126                 const TCHAR path3[] = _T("C:\\gack");\r
127                 const TCHAR path4[] = _T("C:\\gack\\");\r
128                 EXPECT_EQ(paths::IS_EXISTING_DIR, paths::DoesPathExist(path));\r
129                 EXPECT_EQ(paths::IS_EXISTING_DIR, paths::DoesPathExist(path2));\r
130                 EXPECT_EQ(paths::DOES_NOT_EXIST, paths::DoesPathExist(path3));\r
131                 EXPECT_EQ(paths::DOES_NOT_EXIST, paths::DoesPathExist(path4));\r
132         }\r
133         TEST_F(PathTest, Exists_absfiles)\r
134         {\r
135                 const TCHAR path1[] = _T("C:\\windows\\notepad.exe");\r
136                 const TCHAR path2[] = _T("C:\\windows\\gack.txt");\r
137                 EXPECT_EQ(paths::IS_EXISTING_FILE, paths::DoesPathExist(path1));\r
138                 EXPECT_EQ(paths::DOES_NOT_EXIST, paths::DoesPathExist(path2));\r
139         }\r
140 \r
141         //*************************\r
142         // paths::FindFileName()\r
143         //*************************\r
144 \r
145         TEST_F(PathTest, FindName_absfiles)\r
146         {\r
147                 TCHAR path[] = _T("c:\\abc.txt");\r
148                 EXPECT_EQ(path + 3, paths::FindFileName(path));\r
149         }\r
150 \r
151         TEST_F(PathTest, FindName_absfiles2)\r
152         {\r
153                 TCHAR path[] = _T("c:\\temp\\abc.txt");\r
154                 EXPECT_EQ(path + 8, paths::FindFileName(path));\r
155         }\r
156 \r
157         //*************************\r
158         // paths::normalize()\r
159         //*************************\r
160 \r
161         TEST_F(PathTest, Normalize_abspath)\r
162         {\r
163                 String path = _T("c:\\abc.txt");\r
164                 String path_orig = path;\r
165                 paths::normalize(path);\r
166                 EXPECT_EQ(path_orig, path);\r
167         }\r
168         TEST_F(PathTest, Normalize_abspath2)\r
169         {\r
170                 String path = _T("c:\\temp\\abc.txt");\r
171                 String path_orig = path;\r
172                 paths::normalize(path);\r
173                 EXPECT_EQ(path_orig, path);\r
174         }\r
175         TEST_F(PathTest, Normalize_abspath3)\r
176         {\r
177                 String curdir = std::filesystem::current_path().native();\r
178                 String path(curdir, 2);\r
179                 String path_orig = curdir;\r
180                 paths::normalize(path);\r
181                 EXPECT_EQ(path_orig, path);\r
182         }\r
183 \r
184         TEST_F(PathTest, Normalize_abspath4)\r
185         {\r
186                 String path = _T("c:\\");\r
187                 String path_orig = path;\r
188                 paths::normalize(path);\r
189                 EXPECT_EQ(path_orig, path);\r
190         }\r
191         TEST_F(PathTest, Normalize_abspath5)\r
192         {\r
193                 String path = _T("c:\\Temp\\");\r
194                 String path_orig = _T("c:\\Temp");\r
195                 paths::normalize(path);\r
196                 EXPECT_EQ(path_orig, path);\r
197         }\r
198 \r
199         //*************************\r
200         // paths::CreateIfNeeded()\r
201         //*************************\r
202 \r
203         TEST_F(PathTest, Create_abspath1)\r
204         {\r
205                 EXPECT_TRUE(paths::CreateIfNeeded(_T("c:\\Temp")));\r
206         }\r
207         TEST_F(PathTest, Create_abspath2)\r
208         {\r
209                 EXPECT_TRUE(paths::CreateIfNeeded(_T("c:\\Temp\\wm_test")));\r
210                 EXPECT_EQ(0, _taccess(_T("c:\\Temp\\wm_test"), 0));\r
211         }\r
212         TEST_F(PathTest, Create_abspath3)\r
213         {\r
214                 EXPECT_TRUE(paths::CreateIfNeeded(_T("c:\\Temp\\wm_test")));\r
215                 EXPECT_EQ(0, _taccess(_T("c:\\Temp\\wm_test"), 0));\r
216                 EXPECT_EQ(0, _trmdir(_T("c:\\Temp\\wm_test")));\r
217                 EXPECT_NE(0, _taccess(_T("c:\\Temp\\wm_test"), 0));\r
218         }\r
219         TEST_F(PathTest, Create_abspath4)\r
220         {\r
221                 EXPECT_TRUE(paths::CreateIfNeeded(_T("c:\\Temp\\wm_test\\abc\\dce")));\r
222                 EXPECT_EQ(0, _taccess(_T("c:\\Temp\\wm_test\\abc\\dce"), 0));\r
223         }\r
224         TEST_F(PathTest, Create_abspath5)\r
225         {\r
226                 EXPECT_TRUE(paths::CreateIfNeeded(_T("c:\\Temp\\wm_test\\abc\\dce")));\r
227                 EXPECT_EQ(0, _taccess(_T("c:\\Temp\\wm_test\\abc\\dce"), 0));\r
228                 EXPECT_EQ(0, _trmdir(_T("c:\\Temp\\wm_test\\abc\\dce")));\r
229                 EXPECT_NE(0, _taccess(_T("c:\\Temp\\wm_test\\abc\\dce"), 0));\r
230                 EXPECT_EQ(0, _trmdir(_T("c:\\Temp\\wm_test\\abc")));\r
231                 EXPECT_NE(0, _taccess(_T("c:\\Temp\\wm_test\\abc"), 0));\r
232                 EXPECT_EQ(0, _trmdir(_T("c:\\Temp\\wm_test")));\r
233                 EXPECT_NE(0, _taccess(_T("c:\\Temp\\wm_test"), 0));\r
234         }\r
235 \r
236         //*********************\r
237         // paths::ConcatPath()\r
238         //*********************\r
239 \r
240         TEST_F(PathTest, Concat_abspath1)\r
241         {\r
242                 EXPECT_EQ(_T("c:\\Temp\\wm_test"), paths::ConcatPath(_T("c:\\Temp"), _T("wm_test")));\r
243         }\r
244         TEST_F(PathTest, Concat_abspath2)\r
245         {\r
246                 EXPECT_EQ(_T("c:\\Temp\\wm_test"), paths::ConcatPath(_T("c:\\Temp\\"), _T("wm_test")));\r
247         }\r
248         TEST_F(PathTest, Concat_abspath3)\r
249         {\r
250                 EXPECT_EQ(_T("c:\\Temp\\wm_test"), paths::ConcatPath(_T("c:\\Temp"), _T("\\wm_test")));\r
251         }\r
252         TEST_F(PathTest, Concat_abspath4)\r
253         {\r
254                 EXPECT_EQ(_T("c:\\Temp\\wm_test"), paths::ConcatPath(_T("c:\\Temp\\"), _T("\\wm_test")));\r
255         }\r
256         TEST_F(PathTest, Concat_relpath1)\r
257         {\r
258                 EXPECT_EQ(_T("\\Temp\\wm_test"), paths::ConcatPath(_T("\\Temp"), _T("wm_test")));\r
259         }\r
260         TEST_F(PathTest, Concat_relpath2)\r
261         {\r
262                 EXPECT_EQ(_T("\\Temp\\wm_test"), paths::ConcatPath(_T("\\Temp\\"), _T("wm_test")));\r
263         }\r
264         TEST_F(PathTest, Concat_relpath3)\r
265         {\r
266                 EXPECT_EQ(_T("\\Temp\\wm_test"), paths::ConcatPath(_T("\\Temp"), _T("\\wm_test")));\r
267         }\r
268         TEST_F(PathTest, Concat_relpath4)\r
269         {\r
270                 EXPECT_EQ(_T("\\Temp\\wm_test"), paths::ConcatPath(_T("\\Temp\\"), _T("\\wm_test")));\r
271         }\r
272         TEST_F(PathTest, Concat_missingFilename1)\r
273         {\r
274                 EXPECT_EQ(_T("c:\\Temp"), paths::ConcatPath(_T("c:\\Temp"), _T("")));\r
275         }\r
276         TEST_F(PathTest, Concat_missingFilename2)\r
277         {\r
278                 EXPECT_EQ(_T("\\Temp\\"), paths::ConcatPath(_T("\\Temp\\"), _T("")));\r
279         }\r
280 \r
281         //*************************\r
282         // paths::GetParentPath()\r
283         //*************************\r
284 \r
285         TEST_F(PathTest, Parent_abspath1)\r
286         {\r
287                 EXPECT_EQ(_T("c:\\Temp"), paths::GetParentPath(_T("c:\\Temp\\wm_test")));\r
288         }\r
289         TEST_F(PathTest, Parent_abspath2)\r
290         {\r
291                 EXPECT_EQ(_T("c:\\Temp\\abc"), paths::GetParentPath(_T("c:\\Temp\\abc\\wm_test")));\r
292         }\r
293         \r
294         // FAILS!\r
295         // paths::GetParentPath(_T("c:\\Temp")) "returns c:"\r
296         TEST_F(PathTest, Parent_abspath3)\r
297         {\r
298                 EXPECT_EQ(_T("c:\\"), paths::GetParentPath(_T("c:\\Temp")));\r
299         }\r
300 \r
301         // FAILS!\r
302         // paths::GetParentPath(_T("c:\\Temp\\")) "returns c:"\r
303         TEST_F(PathTest, Parent_abspath4)\r
304         {\r
305                 EXPECT_EQ(_T("c:\\"), paths::GetParentPath(_T("c:\\Temp\\")));\r
306         }\r
307         TEST_F(PathTest, Parent_relpath1)\r
308         {\r
309                 EXPECT_EQ(_T("\\temp"), paths::GetParentPath(_T("\\temp\\abc")));\r
310         }\r
311         TEST_F(PathTest, Parent_relpath2)\r
312         {\r
313                 EXPECT_EQ(_T("\\temp\\abc"), paths::GetParentPath(_T("\\temp\\abc\\cde")));\r
314         }\r
315 \r
316         //*************************\r
317         // paths::GetLastSubdir()\r
318         //*************************\r
319 \r
320         TEST_F(PathTest, LastSubdir_abspath1)\r
321         {\r
322                 EXPECT_EQ(_T("\\abc"), paths::GetLastSubdir(_T("c:\\temp\\abc")));\r
323         }\r
324         \r
325         // FAILS!\r
326         // paths::GetLastSubdir(_T("c:\\temp")) returns "c:\\temp"\r
327         TEST_F(PathTest, LastSubdir_abspath2)\r
328         {\r
329                 EXPECT_EQ(_T("\\temp"), paths::GetLastSubdir(_T("c:\\temp")));\r
330         }\r
331 \r
332         // FAILS!\r
333         // paths::GetLastSubdir(_T("c:\\temp")) returns "c:\\temp"\r
334         TEST_F(PathTest, LastSubdir_abspath3)\r
335         {\r
336                 EXPECT_EQ(_T("\\temp"), paths::GetLastSubdir(_T("c:\\temp\\")));\r
337         }\r
338         TEST_F(PathTest, LastSubdir_relpath1)\r
339         {\r
340                 EXPECT_EQ(_T("\\temp"), paths::GetLastSubdir(_T("abc\\temp\\")));\r
341         }\r
342         TEST_F(PathTest, LastSubdir_relpath2)\r
343         {\r
344                 EXPECT_EQ(_T("\\dce"), paths::GetLastSubdir(_T("abc\\temp\\dce")));\r
345         }\r
346 \r
347         //*************************\r
348         // paths::IsPathAbsolute()\r
349         //*************************\r
350 \r
351         TEST_F(PathTest, IsAbsolute_abspath1)\r
352         {\r
353                 EXPECT_TRUE(paths::IsPathAbsolute(_T("c:\\abc")));\r
354         }\r
355         TEST_F(PathTest, IsAbsolute_abspath2)\r
356         {\r
357                 EXPECT_TRUE(paths::IsPathAbsolute(_T("c:\\abc\\")));\r
358         }\r
359         TEST_F(PathTest, IsAbsolute_abspath3)\r
360         {\r
361                 EXPECT_TRUE(paths::IsPathAbsolute(_T("c:\\abc\\cde")));\r
362         }\r
363         TEST_F(PathTest, IsAbsolute_abspath4)\r
364         {\r
365                 EXPECT_TRUE(paths::IsPathAbsolute(_T("c:\\abc\\cde\\")));\r
366         }\r
367         TEST_F(PathTest, IsAbsolute_abspath5)\r
368         {\r
369                 EXPECT_TRUE(paths::IsPathAbsolute(_T("c:\\")));\r
370         }\r
371         TEST_F(PathTest, IsAbsolute_relpath1)\r
372         {\r
373                 EXPECT_FALSE(paths::IsPathAbsolute(_T("\\cde")));\r
374         }\r
375         TEST_F(PathTest, IsAbsolute_relpath2)\r
376         {\r
377                 EXPECT_FALSE(paths::IsPathAbsolute(_T("\\cde\\")));\r
378         }\r
379         TEST_F(PathTest, IsAbsolute_relpath3)\r
380         {\r
381                 EXPECT_FALSE(paths::IsPathAbsolute(_T("\\cde\\abd")));\r
382         }\r
383         TEST_F(PathTest, IsAbsolute_relpath4)\r
384         {\r
385                 EXPECT_FALSE(paths::IsPathAbsolute(_T("\\cde\\abd\\")));\r
386         }\r
387         TEST_F(PathTest, IsAbsolute_relpath5)\r
388         {\r
389                 EXPECT_FALSE(paths::IsPathAbsolute(_T("cde\\abd")));\r
390         }\r
391 \r
392         TEST_F(PathTest, IsAbsolute_relpath6)\r
393         {\r
394                 EXPECT_FALSE(paths::IsPathAbsolute(_T("cde\\abd")));\r
395         }\r
396 \r
397 }  // namespace\r