test_file.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. #include <gtest/gtest.h>
  2. #include "fileutil.h"
  3. #include "array.h"
  4. TEST(FileUtilTest, TestGetSubFile)
  5. {
  6. const auto args = ::testing::internal::GetArgvs();
  7. EXPECT_FALSE(args.empty());
  8. std::string test_dir("");
  9. if (args.size() == 1) {
  10. auto dir = args[0].find_last_of('/');
  11. if (dir == std::string::npos) {
  12. dir = args[0].find_last_of('\\');
  13. }
  14. if (dir != std::string::npos) {
  15. test_dir = args[0].substr(0, dir + 1);
  16. test_dir += "test_libtoolkit_area";
  17. }
  18. ASSERT_TRUE(!test_dir.empty()) << test_dir;
  19. }
  20. else {
  21. test_dir = args[1];
  22. }
  23. std::cout << "test dir: " << test_dir << std::endl;
  24. auto files = fileutil_get_sub_files_a((test_dir + "/test_dir_4").c_str());
  25. ASSERT_TRUE(array_empty(files));
  26. files = fileutil_get_sub_files_a(NULL);
  27. ASSERT_TRUE(files == NULL);
  28. files = fileutil_get_sub_files_a("C");
  29. ASSERT_TRUE(files == NULL);
  30. files = fileutil_get_sub_dirs_a(test_dir.c_str());
  31. ASSERT_TRUE(files != NULL);
  32. EXPECT_TRUE(files->nelts == 4);
  33. toolkit_array_free2(files);
  34. files = fileutil_get_sub_dirs2_a(test_dir.c_str(), 2);
  35. ASSERT_TRUE(files != NULL);
  36. EXPECT_TRUE(files->nelts == 2);
  37. toolkit_array_free2(files);
  38. files = fileutil_get_sub_files_a((test_dir + "/test_dir_3").c_str());
  39. ASSERT_TRUE(files != NULL);
  40. EXPECT_TRUE(files->nelts == 3);
  41. toolkit_array_free2(files);
  42. files = fileutil_get_sub_files2_a((test_dir + "/test_dir_3").c_str(), 2);
  43. EXPECT_TRUE(files->nelts == 2);
  44. toolkit_array_free2(files);
  45. files = fileutil_get_sub_dirs_a((test_dir + "/test_dir_3").c_str());
  46. ASSERT_TRUE(array_empty(files));
  47. files = fileutil_get_sub_dirs2_a((test_dir + "/test_dir_3").c_str(), 2);
  48. ASSERT_TRUE(array_empty(files));
  49. }
  50. /*
  51. D:/GitReposity/Framework/out/build/x86-Debug/bin/Debug/test_libtoolkit_area
  52. */
  53. TEST(FileUtilTest, DealWithSlash)
  54. {
  55. const auto args = ::testing::internal::GetArgvs();
  56. EXPECT_FALSE(args.empty());
  57. std::string test_dir("");
  58. if (args.size() == 1) {
  59. auto dir = args[0].find_last_of('/');
  60. if (dir == std::string::npos) {
  61. dir = args[0].find_last_of('\\');
  62. }
  63. if(dir != std::string::npos)
  64. {
  65. test_dir = args[0].substr(0, dir + 1);
  66. test_dir += "test_libtoolkit_area";
  67. }
  68. EXPECT_TRUE(!test_dir.empty());
  69. } else {
  70. test_dir = args[1];
  71. }
  72. std::cout << "test dir: " << test_dir << std::endl;
  73. ASSERT_TRUE(ExistsDirA(test_dir.c_str()));
  74. #ifdef _WIN32
  75. ASSERT_TRUE(ExistsFileA((test_dir + "\\test_file3.txt").c_str()));
  76. ASSERT_TRUE(ExistsFileA((test_dir + "\\test_dir_3\\test_dir_3_file_3.txt").c_str()));
  77. /*create dir*/
  78. EXPECT_FALSE(ExistsDirA((test_dir + "\\new_dir_3").c_str()));
  79. ASSERT_TRUE(CreateDirRecursiveA((test_dir + "\\new_dir_3\\new_dir_3_1").c_str()));
  80. EXPECT_TRUE(ExistsDirA((test_dir + "\\new_dir_3\\new_dir_3_1").c_str()));
  81. /*remove dir*/
  82. ASSERT_TRUE(RemoveDirRecursiveA((test_dir + "\\new_dir_3").c_str()));
  83. ASSERT_FALSE(ExistsDirA((test_dir + "\\new_dir_3\\new_dir_3_1").c_str()));
  84. ASSERT_FALSE(ExistsDirA((test_dir + "\\new_dir_3").c_str()));
  85. /*copy dir*/
  86. EXPECT_FALSE(ExistsDirA((test_dir + "\\new_dir_1").c_str()));
  87. ASSERT_TRUE(CopyDirA((test_dir + "\\test_dir_3").c_str(), (test_dir + "\\new_dir_1").c_str()));
  88. EXPECT_TRUE(ExistsDirA((test_dir + "\\new_dir_1").c_str()));
  89. ASSERT_TRUE(RemoveDirRecursiveA((test_dir + "\\new_dir_1").c_str()));
  90. EXPECT_FALSE(ExistsDirA((test_dir + "\\new_dir_1").c_str()));
  91. /*backup*/
  92. CopyDirA((test_dir + "\\test_dir_2").c_str(), (test_dir + "\\new_bk_2").c_str());
  93. CopyDirA((test_dir + "\\test_dir_3").c_str(), (test_dir + "\\new_bk_3").c_str());
  94. /*remove file*/
  95. ASSERT_TRUE(RemoveFileA((test_dir + "\\test_dir_3\\test_dir_3_file_3.txt").c_str()));
  96. EXPECT_FALSE(ExistsFileA((test_dir + "\\test_dir_3\\test_dir_3_file_3.txt").c_str()));
  97. /*rollback new_dir_3*/
  98. CopyDirA((test_dir + "\\new_bk_3").c_str(), (test_dir + "\\test_dir_3").c_str());
  99. RemoveDirRecursiveA((test_dir + "\\new_bk_3").c_str());
  100. /*create grandson directory*/
  101. EXPECT_FALSE(ExistsDirA((test_dir + "\\new_dir_2\\new_dir_2_1").c_str()));
  102. EXPECT_FALSE(CreateDirA((test_dir + "\\new_dir_2\\new_dir_2_1").c_str(), FALSE));
  103. EXPECT_FALSE(ExistsDirA((test_dir + "\\new_dir_2").c_str()));
  104. EXPECT_FALSE(ExistsDirA((test_dir + "\\new_dir_2\\new_dir_2_1").c_str()));
  105. EXPECT_TRUE(CreateDirA((test_dir + "\\new_dir_2\\new_dir_2_1").c_str(), TRUE));
  106. EXPECT_TRUE(ExistsDirA((test_dir + "\\new_dir_2\\new_dir_2_1").c_str()));
  107. /*remove dir*/
  108. RemoveDirRecursiveA((test_dir + "\\new_dir_2").c_str());
  109. /*create parent dir*/
  110. EXPECT_FALSE(ExistsDirA((test_dir + "\\new_dir_4").c_str()));
  111. EXPECT_FALSE(CreateParentDirA((test_dir + "\\new_dir_4\\new_dir_4_1\\new_dir_4_1_1").c_str(), FALSE));
  112. EXPECT_FALSE(ExistsDirA((test_dir + "\\new_dir_4").c_str()));
  113. EXPECT_TRUE(CreateParentDirA((test_dir + "\\new_dir_4\\new_dir_4_1\\new_dir_4_1_1").c_str(), TRUE));
  114. EXPECT_TRUE(ExistsDirA((test_dir + "\\new_dir_4\\new_dir_4_1").c_str()));
  115. RemoveDirRecursiveA((test_dir + "\\new_dir_4").c_str());
  116. /*clear dir*/
  117. EXPECT_TRUE(ExistsFileA((test_dir + "\\test_dir_2\\test_sub_dir_2\\test_sub_dir_2_file_1.txt").c_str()));
  118. EXPECT_TRUE(ClearDirRecursiveA((test_dir + "\\test_dir_2").c_str()));
  119. EXPECT_FALSE(ExistsFileA((test_dir + "\\test_dir_2\\test_sub_dir_2\\test_sub_dir_2_file_1.txt").c_str()));
  120. EXPECT_TRUE(ExistsDirA((test_dir + "\\test_dir_2\\test_sub_dir_2").c_str()));
  121. /*rollback new_dir_2*/
  122. CopyDirA((test_dir + "\\new_bk_2").c_str(), (test_dir + "\\test_dir_2").c_str());
  123. RemoveDirRecursiveA((test_dir + "\\new_bk_2").c_str());
  124. #else
  125. ASSERT_TRUE(ExistsFileA((test_dir + "/test_file3.txt").c_str()));
  126. ASSERT_TRUE(ExistsFileA((test_dir + "/test_dir_3/test_dir_3_file_3.txt").c_str()));
  127. /*create dir*/
  128. EXPECT_FALSE(ExistsDirA((test_dir + "/new_dir_3").c_str()));
  129. ASSERT_TRUE(CreateDirRecursiveA((test_dir + "/new_dir_3/new_dir_3_1").c_str()));
  130. EXPECT_TRUE(ExistsDirA((test_dir + "/new_dir_3/new_dir_3_1").c_str()));
  131. /*remove dir*/
  132. ASSERT_TRUE(RemoveDirRecursiveA((test_dir + "/new_dir_3").c_str()));
  133. ASSERT_FALSE(ExistsDirA((test_dir + "/new_dir_3/new_dir_3_1").c_str()));
  134. ASSERT_FALSE(ExistsDirA((test_dir + "/new_dir_3").c_str()));
  135. /*copy dir*/
  136. EXPECT_FALSE(ExistsDirA((test_dir + "/new_dir_1").c_str()));
  137. ASSERT_TRUE(CopyDirA((test_dir + "/test_dir_3").c_str(), (test_dir + "/new_dir_1").c_str()));
  138. EXPECT_TRUE(ExistsDirA((test_dir + "/new_dir_1").c_str()));
  139. ASSERT_TRUE(RemoveDirRecursiveA((test_dir + "/new_dir_1").c_str()));
  140. EXPECT_FALSE(ExistsDirA((test_dir + "/new_dir_1").c_str()));
  141. /*backup*/
  142. CopyDirA((test_dir + "/test_dir_2").c_str(), (test_dir + "/new_bk_2").c_str());
  143. CopyDirA((test_dir + "/test_dir_3").c_str(), (test_dir + "/new_bk_3").c_str());
  144. /*remove file*/
  145. ASSERT_TRUE(RemoveFileA((test_dir + "/test_dir_3/test_dir_3_file_3.txt").c_str()));
  146. EXPECT_FALSE(ExistsFileA((test_dir + "/test_dir_3/test_dir_3_file_3.txt").c_str()));
  147. /*rollback new_dir_3*/
  148. CopyDirA((test_dir + "/new_bk_3").c_str(), (test_dir + "/test_dir_3").c_str());
  149. RemoveDirRecursiveA((test_dir + "/new_bk_3").c_str());
  150. /*create grandson directory*/
  151. EXPECT_FALSE(ExistsDirA((test_dir + "/new_dir_2/new_dir_2_1").c_str()));
  152. EXPECT_FALSE(CreateDirA((test_dir + "/new_dir_2/new_dir_2_1").c_str(), FALSE));
  153. EXPECT_FALSE(ExistsDirA((test_dir + "/new_dir_2").c_str()));
  154. EXPECT_FALSE(ExistsDirA((test_dir + "/new_dir_2/new_dir_2_1").c_str()));
  155. EXPECT_TRUE(CreateDirA((test_dir + "/new_dir_2/new_dir_2_1").c_str(), TRUE));
  156. EXPECT_TRUE(ExistsDirA((test_dir + "/new_dir_2/new_dir_2_1").c_str()));
  157. /*remove dir*/
  158. RemoveDirRecursiveA((test_dir + "/new_dir_2").c_str());
  159. /*create parent dir*/
  160. EXPECT_FALSE(ExistsDirA((test_dir + "/new_dir_4").c_str()));
  161. EXPECT_FALSE(CreateParentDirA((test_dir + "/new_dir_4/new_dir_4_1/new_dir_4_1_1").c_str(), FALSE));
  162. EXPECT_FALSE(ExistsDirA((test_dir + "/new_dir_4").c_str()));
  163. EXPECT_TRUE(CreateParentDirA((test_dir + "/new_dir_4/new_dir_4_1/new_dir_4_1_1").c_str(), TRUE));
  164. EXPECT_TRUE(ExistsDirA((test_dir + "/new_dir_4/new_dir_4_1").c_str()));
  165. RemoveDirRecursiveA((test_dir + "/new_dir_4").c_str());
  166. /*clear dir*/
  167. EXPECT_TRUE(ExistsFileA((test_dir + "/test_dir_2/test_sub_dir_2/test_sub_dir_2_file_1.txt").c_str()));
  168. EXPECT_TRUE(ClearDirRecursiveA((test_dir + "/test_dir_2").c_str()));
  169. EXPECT_FALSE(ExistsFileA((test_dir + "/test_dir_2/test_sub_dir_2/test_sub_dir_2_file_1.txt").c_str()));
  170. EXPECT_TRUE(ExistsDirA((test_dir + "/test_dir_2/test_sub_dir_2").c_str()));
  171. /*rollback new_dir_2*/
  172. CopyDirA((test_dir + "/new_bk_2").c_str(), (test_dir + "/test_dir_2").c_str());
  173. RemoveDirRecursiveA((test_dir + "/new_bk_2").c_str());
  174. #endif // _WIN32
  175. }
  176. TEST(FileUtilTest, TestSplitDir)
  177. {
  178. char drive[_MAX_DRIVE] = "", dir[_MAX_DIR] = "", fname[_MAX_FNAME] = "", ext[_MAX_EXT] = "";
  179. char chpath[MAX_PATH] = "";
  180. #ifdef _WIN32
  181. strcpy(chpath, "D:\\first\\seccond\\third\\run.exe");
  182. _splitpath(chpath, drive, dir, fname, ext);
  183. printf("drive: %s\n", drive); //D:
  184. printf("dir: %s\n", dir); // "\dir\"
  185. printf("fname: %s\n", fname); //test_file
  186. printf("ext: %s\n", ext); //.exe
  187. printf("chpath: %s\n", chpath); //D:\dir\test_file.exe
  188. #else
  189. strcpy(chpath, "/opt/first/second/third/filename.out");
  190. _splitpath(chpath, drive, dir, fname, ext);
  191. ASSERT_STREQ(drive, "/opt") << drive;
  192. ASSERT_STREQ(dir, "/first/second/third/") << dir;
  193. ASSERT_STREQ(fname, "filename") << fname;
  194. ASSERT_STREQ(ext, ".out") << ext;
  195. strcpy(chpath, "/opt/first/second/third/filename");
  196. _splitpath(chpath, drive, dir, fname, ext);
  197. ASSERT_STREQ(drive, "/opt") << drive;
  198. ASSERT_STREQ(dir, "/first/second/third/") << dir;
  199. ASSERT_STREQ(fname, "filename") << fname;
  200. ASSERT_STREQ(ext, "") << ext;
  201. strcpy(chpath, "/opt/first/second/third/");
  202. _splitpath(chpath, drive, dir, fname, ext);
  203. ASSERT_STREQ(drive, "/opt") << drive;
  204. ASSERT_STREQ(dir, "/first/second/third/") << dir;
  205. ASSERT_STREQ(fname, "") << fname;
  206. ASSERT_STREQ(ext, "") << ext;
  207. strcpy(chpath, "opt/first/second/third/filename.out");
  208. _splitpath(chpath, drive, dir, fname, ext);
  209. EXPECT_STREQ(drive, "") << drive;
  210. EXPECT_STREQ(dir, "opt/first/second/third/") << dir;
  211. ASSERT_STREQ(fname, "filename") << fname;
  212. ASSERT_STREQ(ext, ".out") << ext;
  213. strcpy(chpath, "/opt/first/second/third/filename.out");
  214. _splitpath(chpath, NULL, NULL, NULL, NULL);
  215. _splitpath(NULL, NULL, NULL, NULL, NULL);
  216. /*
  217. /root/.vs/Framework/0a5e75f4-a518-42b3-ae7c-d348093722be/out/build/Linux-Debug/bin/spshell
  218. */
  219. strcpy(chpath, "/root/.vs/Framework/0a5e75f4-a518-42b3-ae7c-d348093722be/out/build/Linux-Debug/bin/spshell");
  220. _splitpath(chpath, drive, dir, fname, ext);
  221. EXPECT_STREQ(drive, "/root") << drive;
  222. EXPECT_STREQ(dir, "/.vs/Framework/0a5e75f4-a518-42b3-ae7c-d348093722be/out/build/Linux-Debug/bin/") << dir;
  223. ASSERT_STREQ(fname, "spshell") << fname;
  224. #endif //_WIN32
  225. }