test_utils.cpp 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. #include "test_utils.h"
  2. #include <QDebug>
  3. #include <QTemporaryDir>
  4. #include <QJsonArray>
  5. #include <utils/utils.h>
  6. #include <utils/pathutils.h>
  7. #include <utils/fileutils.h>
  8. using namespace tests;
  9. using namespace vnotex;
  10. TestUtils::TestUtils(QObject *p_parent)
  11. : QObject(p_parent)
  12. {
  13. }
  14. void TestUtils::initTestCase()
  15. {
  16. m_obj["a"] = "a";
  17. {
  18. QJsonObject objb;
  19. objb["a"] = "ba";
  20. objb["b"] = 2;
  21. {
  22. QJsonObject objbc;
  23. objbc["a"] = "bca";
  24. objb["c"] = objbc;
  25. }
  26. m_obj["b"] = objb;
  27. }
  28. {
  29. QJsonObject objc;
  30. objc["a"] = "ca";
  31. QJsonArray arr;
  32. arr.append("cb0");
  33. arr.append("cb1");
  34. arr.append("cb2");
  35. objc["b"] = arr;
  36. m_obj["c"] = objc;
  37. }
  38. }
  39. void TestUtils::testParseAndReadJson_data()
  40. {
  41. QTest::addColumn<QString>("exp");
  42. QTest::addColumn<QJsonValue>("result");
  43. QTest::newRow("empty") << "" << QJsonValue(m_obj);
  44. QTest::newRow("a") << "a" << QJsonValue("a");
  45. QTest::newRow("ba") << "b.a" << QJsonValue("ba");
  46. QTest::newRow("bb") << "b.b" << QJsonValue(2);
  47. QTest::newRow("bca") << "b.c.a" << QJsonValue("bca");
  48. QTest::newRow("ca") << "c.a" << QJsonValue("ca");
  49. QTest::newRow("cb0") << "c.b[0]" << QJsonValue("cb0");
  50. QTest::newRow("cb1") << "c.b[1]" << QJsonValue("cb1");
  51. QTest::newRow("cb2") << "c.b[2]" << QJsonValue("cb2");
  52. }
  53. void TestUtils::testParseAndReadJson()
  54. {
  55. QFETCH(QString, exp);
  56. QFETCH(QJsonValue, result);
  57. QCOMPARE(Utils::parseAndReadJson(m_obj, exp), result);
  58. }
  59. void TestUtils::testParentDirPath_data()
  60. {
  61. QTest::addColumn<QString>("path");
  62. QTest::addColumn<QString>("result");
  63. QTest::newRow("empty") << "" << "";
  64. #if defined(Q_OS_WIN)
  65. QTest::newRow("win_root") << "c:\\" << "C:/";
  66. QTest::newRow("win_normal") << "c:\\users\\tamlok" << "C:/users";
  67. QTest::newRow("win_slash") << "c:\\users\\tamlok\\" << "C:/users/tamlok";
  68. QTest::newRow("win_ext") << "c:\\users\\tamlok\\vnotex.md" << "C:/users/tamlok";
  69. QTest::newRow("win_case") << "c:\\users\\Tamlok\\Vnotex.md" << "C:/users/Tamlok";
  70. QTest::newRow("win_sep") << "c:/users/tamlok/vnotex.md" << "C:/users/tamlok";
  71. #else
  72. QTest::newRow("linux_root") << "/home" << "/";
  73. QTest::newRow("linux_normal") << "/home/tamlok" << "/home";
  74. QTest::newRow("linux_slash") << "/home/tamlok/" << "/home/tamlok";
  75. QTest::newRow("linux_ext") << "/home/tamlok/vnotex.md" << "/home/tamlok";
  76. QTest::newRow("linux_case") << "/home/Tamlok/vnotex.md" << "/home/Tamlok";
  77. #endif
  78. }
  79. void TestUtils::testParentDirPath()
  80. {
  81. QFETCH(QString, path);
  82. QFETCH(QString, result);
  83. QCOMPARE(PathUtils::parentDirPath(path), result);
  84. }
  85. void TestUtils::testCleanPath_data()
  86. {
  87. QTest::addColumn<QString>("path");
  88. QTest::addColumn<QString>("result");
  89. QTest::newRow("empty") << "" << "";
  90. #if defined(Q_OS_WIN)
  91. QTest::newRow("win_root") << "c:" << "c:";
  92. QTest::newRow("win_normal") << "c:\\users\\tamlok" << "c:/users/tamlok";
  93. QTest::newRow("win_slash") << "c:\\users\\tamlok\\" << "c:/users/tamlok";
  94. QTest::newRow("win_ext") << "C:\\users\\tamlok\\vnotex.md" << "C:/users/tamlok/vnotex.md";
  95. QTest::newRow("win_case") << "c:\\users\\Tamlok" << "c:/users/Tamlok";
  96. QTest::newRow("win_sep") << "c:/users/tamlok" << "c:/users/tamlok";
  97. #else
  98. QTest::newRow("linux_root") << "/home" << "/home";
  99. QTest::newRow("linux_normal") << "/home/tamlok" << "/home/tamlok";
  100. QTest::newRow("linux_slash") << "/home/tamlok/" << "/home/tamlok";
  101. QTest::newRow("linux_ext") << "/home/tamlok/vnotex.md" << "/home/tamlok/vnotex.md";
  102. QTest::newRow("linux_case") << "/home/Tamlok/vnotex.md" << "/home/Tamlok/vnotex.md";
  103. #endif
  104. }
  105. void TestUtils::testCleanPath()
  106. {
  107. QFETCH(QString, path);
  108. QFETCH(QString, result);
  109. QCOMPARE(PathUtils::cleanPath(path), result);
  110. }
  111. void TestUtils::testAreSamePaths_data()
  112. {
  113. QTest::addColumn<QString>("patha");
  114. QTest::addColumn<QString>("pathb");
  115. QTest::addColumn<bool>("result");
  116. QTest::newRow("empty") << "" << "" << true;
  117. #if defined(Q_OS_WIN)
  118. QTest::newRow("win_normal") << "c:\\users\\tamlok" << "c:\\users\\tamlok" << true;
  119. QTest::newRow("win_slash") << "c:\\users\\vnotex\\" << "c:/users/vnotex" << true;
  120. QTest::newRow("win_file") << "C:\\users\\tamlok\\vnotex.md" << "C:/users/tamlok/vnotex.md" << true;
  121. QTest::newRow("win_file_false") << "C:\\users\\tamlok\\vnote.md" << "C:/users/tamlok/vnotex.md" << false;
  122. QTest::newRow("win_case") << "c:\\users\\Tamlok" << "C:/users/tamlok" << true;
  123. #else
  124. QTest::newRow("linux_normal") << "/home/tamlok" << "/home/tamlok" << true;
  125. QTest::newRow("linux_slash") << "/home/tamlok/" << "/home/tamlok" << true;
  126. QTest::newRow("linux_file") << "/home/tamlok/vnotex.md" << "/home/tamlok/vnotex.md" << true;
  127. QTest::newRow("linux_file_false") << "/home/tamlok/vnote.md" << "/home/tamlok/vnotex.md" << false;
  128. QTest::newRow("linux_case") << "/home/Tamlok/vnotex.md" << "/home/tamlok/vnotex.md" << false;
  129. #endif
  130. }
  131. void TestUtils::testAreSamePaths()
  132. {
  133. QFETCH(QString, patha);
  134. QFETCH(QString, pathb);
  135. QFETCH(bool, result);
  136. QCOMPARE(PathUtils::areSamePaths(patha, pathb), result);
  137. }
  138. void TestUtils::testPathContains_data()
  139. {
  140. QTest::addColumn<QString>("patha");
  141. QTest::addColumn<QString>("pathb");
  142. QTest::addColumn<bool>("result");
  143. QTest::newRow("empty") << "" << "" << true;
  144. #if defined(Q_OS_WIN)
  145. QTest::newRow("win_same") << "c:\\users\\tamlok" << "c:\\users\\tamlok" << true;
  146. QTest::newRow("win_slash") << "c:\\users\\vnotex\\" << "c:\\users\\vnotex" << true;
  147. QTest::newRow("win_file") << "C:\\users\\tamlok" << "C:/users/tamlok/vnotex.md" << true;
  148. QTest::newRow("win_relative") << "C:\\users\\tamlok" << "tamlok/vnotex.md" << true;
  149. QTest::newRow("win_root") << "c:\\users\\Tamlok" << "D:/users/tamlok" << false;
  150. QTest::newRow("win_case") << "c:\\users\\Tamlok" << "c:/users/tamlok/abc" << true;
  151. QTest::newRow("win_parent") << "c:\\users\\Tamlok\\abc" << "c:/users/tamlok" << false;
  152. QTest::newRow("win_parents") << "c:\\users\\Tamlok\\abc\\def" << "c:/users/tamlok" << false;
  153. #else
  154. QTest::newRow("linux_same") << "/home/tamlok" << "/home/tamlok" << true;
  155. QTest::newRow("linux_slash") << "/home/tamlok/" << "/home/tamlok" << true;
  156. QTest::newRow("linux_file") << "/home/tamlok" << "/home/tamlok/vnotex.md" << true;
  157. QTest::newRow("linux_relative") << "/home/tamlok" << "tamlok/vnotex.md" << true;
  158. QTest::newRow("linux_root") << "/home/tamlok" << "/tamlok/vnotex.md" << false;
  159. QTest::newRow("linux_case") << "/home/Tamlok" << "/home/tamlok/vnotex.md" << false;
  160. QTest::newRow("linux_parent") << "/home/tamlok/abc" << "/home/tamlok" << false;
  161. QTest::newRow("linux_parents") << "/home/tamlok/abc/def" << "/home/tamlok" << false;
  162. #endif
  163. }
  164. void TestUtils::testPathContains()
  165. {
  166. QFETCH(QString, patha);
  167. QFETCH(QString, pathb);
  168. QFETCH(bool, result);
  169. QCOMPARE(PathUtils::pathContains(patha, pathb), result);
  170. }
  171. void TestUtils::testConcatenateFilePath_data()
  172. {
  173. QTest::addColumn<QString>("dirPath");
  174. QTest::addColumn<QString>("name");
  175. QTest::addColumn<QString>("result");
  176. QTest::newRow("emptyDir") << "" << "filea" << "filea";
  177. #if defined(Q_OS_WIN)
  178. QTest::newRow("win_absolute") << "c:\\users\\tamlok" << "filea" << "c:/users/tamlok/filea";
  179. QTest::newRow("win_slash") << "c:\\users\\vnotex\\" << "filea" << "c:/users/vnotex/filea";
  180. QTest::newRow("win_slash2") << "C:/users/tamlok///" << "filea" << "C:/users/tamlok/filea";
  181. QTest::newRow("win_relative") << "users\\tamlok" << "filea" << "users/tamlok/filea";
  182. QTest::newRow("win_path") << "c:\\users\\tamlok" << "folder/filea" << "c:/users/tamlok/folder/filea";
  183. #else
  184. QTest::newRow("linux_absolute") << "/home/tamlok" << "filea" << "/home/tamlok/filea";
  185. QTest::newRow("linux_slash") << "/home/tamlok///" << "filea" << "/home/tamlok/filea";
  186. QTest::newRow("linux_relative") << "home/tamlok" << "filea" << "home/tamlok/filea";
  187. QTest::newRow("linux_path") << "/home/tamloK" << "folder/filea" << "/home/tamloK/folder/filea";
  188. #endif
  189. }
  190. void TestUtils::testConcatenateFilePath()
  191. {
  192. QFETCH(QString, dirPath);
  193. QFETCH(QString, name);
  194. QFETCH(QString, result);
  195. QCOMPARE(PathUtils::concatenateFilePath(dirPath, name), result);
  196. }
  197. void TestUtils::testRenameFile()
  198. {
  199. QTemporaryDir dir;
  200. const QString testFolderPath(dir.path());
  201. // File.
  202. {
  203. QString fileAPath = testFolderPath + "/filea.md";
  204. QFile fileA(fileAPath);
  205. QVERIFY(fileA.open(QIODevice::WriteOnly | QIODevice::Text));
  206. fileA.write(QByteArray());
  207. fileA.close();
  208. QVERIFY(QFileInfo::exists(fileAPath));
  209. FileUtils::renameFile(fileAPath, "fileb.md");
  210. QString newFileAPath = testFolderPath + "/fileb.md";
  211. QVERIFY(QFileInfo::exists(newFileAPath));
  212. }
  213. // Folder.
  214. {
  215. QDir paDir(testFolderPath);
  216. QString dirAPath = testFolderPath + "/dira";
  217. QVERIFY(paDir.mkdir("dira"));
  218. FileUtils::renameFile(dirAPath, "dirb");
  219. QVERIFY(paDir.exists("dirb"));
  220. }
  221. }
  222. void TestUtils::testIsText()
  223. {
  224. QTemporaryDir dir;
  225. const QString testFolderPath(dir.path());
  226. {
  227. auto filePath = testFolderPath + "/text";
  228. QFile file(filePath);
  229. QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text));
  230. file.write(QByteArray(5, 'v'));
  231. file.close();
  232. QVERIFY(QFileInfo::exists(filePath));
  233. QVERIFY(FileUtils::isText(filePath));
  234. }
  235. {
  236. auto filePath = testFolderPath + "/bin";
  237. QFile file(filePath);
  238. QVERIFY(file.open(QIODevice::WriteOnly));
  239. file.write(reinterpret_cast<const char *>(&file), sizeof(file));
  240. file.close();
  241. QVERIFY(QFileInfo::exists(filePath));
  242. QVERIFY(!FileUtils::isText(filePath));
  243. }
  244. }
  245. QTEST_MAIN(tests::TestUtils)