tst_cstlcompiler.cpp 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #include "tst_cstlcompiler.h"
  2. #include <QFile>
  3. void TST_CSTLCompiler::test()
  4. {
  5. testImport();
  6. testForOutIf();
  7. }
  8. void TST_CSTLCompiler::testImport()
  9. {
  10. QMap<QString, QObject *> objects;
  11. createFile("header.html", header);
  12. QByteArray originalHtml;
  13. originalHtml = "<html>";
  14. originalHtml += "<body>";
  15. originalHtml += "xxx";
  16. originalHtml += "</body>";
  17. originalHtml += "</html>";
  18. QByteArray copy1(originalHtml);
  19. QByteArray copy2(originalHtml);
  20. QByteArray copy3(originalHtml);
  21. QByteArray copy4(originalHtml);
  22. copy1.replace("xxx", "<import url=\"/header.html\"/>");
  23. copy2.replace("xxx", "<import/>");
  24. copy3.replace("xxx", "<import url=\"/header.html\" url2=\"/header.html\"/>");
  25. copy4.replace("xxx", "<import x=\"/header.html\"/>");
  26. createFile("home.html", copy1);
  27. QVERIFY2(CWF::CSTLCompiler(copy1, QDir().currentPath(), objects, false).output().contains("TestHeader"), "Should contains 'TestHeader'");
  28. QVERIFY2(!CWF::CSTLCompiler(copy1, "xxx", objects, false).output().contains("TestHeader"), "Should not contains 'TestHeader'");
  29. QVERIFY2(CWF::CSTLCompiler((QDir().currentPath() + "/home.html").toLatin1(), QDir().currentPath(), objects).output().contains("import url"), "Should contains 'import url'");
  30. QVERIFY2(CWF::CSTLCompiler(copy2, QDir().currentPath(), objects, false).output().contains("NEEDS THE URL"), "Should contains 'NEEDS THE URL'");
  31. QVERIFY2(CWF::CSTLCompiler(copy3, QDir().currentPath(), objects, false).output().contains("ONLY NEEDS"), "Should contains 'ONLY NEEDS'");
  32. QVERIFY2(CWF::CSTLCompiler(copy4, QDir().currentPath(), objects, false).output().contains("NEEDS THE URL"), "Should contains 'NEEDS THE URL'");
  33. }
  34. void TST_CSTLCompiler::testForOutIf()
  35. {
  36. ClientTest a, b;
  37. fillClient(a, 0);
  38. fillClient(b, 1);
  39. CWF::QListObject obj;
  40. obj.add(&a);
  41. obj.add(&b);
  42. QMap<QString, QObject *> objects({{"clients", &obj}});
  43. QByteArray equal(buildHtmlForIf("equal"));
  44. QByteArray different(buildHtmlForIf("different"));
  45. QByteArray greater(buildHtmlForIf("greater"));
  46. QByteArray greaterEqual(buildHtmlForIf("greater_equal"));
  47. QByteArray lessEqual(buildHtmlForIf("less_equal"));
  48. QByteArray less(buildHtmlForIf("less"));
  49. QByteArray dontExists(buildHtmlForIf("dont_exists"));
  50. QByteArray zero(buildHtmlForIf("less", NUMBER_ATTR::ZERO));
  51. QByteArray three(buildHtmlForIf("less", NUMBER_ATTR::THREE));
  52. QByteArray xx = CWF::CSTLCompiler(equal, QDir().currentPath(), objects, false).output();
  53. QVERIFY2(CWF::CSTLCompiler(equal, QDir().currentPath(), objects, false).output().contains("ab1DE111111111.51.5"), "Should contains 'ab1DE111111111.51.5'");
  54. QVERIFY2(CWF::CSTLCompiler(different, QDir().currentPath(), objects, false).output().contains("ab1DE011111111.51.5"), "Should contains 'ab1DE011111111.51.5'");
  55. QVERIFY2(!CWF::CSTLCompiler(greater, QDir().currentPath(), objects, false).output().contains("ab1DE"), "Should not contains 'ab1DE'");
  56. QVERIFY2(CWF::CSTLCompiler(less, QDir().currentPath(), objects, false).output().contains("ab1DE011111111.51.5"), "Should contains 'ab1DE011111111.51.5'");
  57. QVERIFY2(CWF::CSTLCompiler(greaterEqual, QDir().currentPath(), objects, false).output().contains("ab1DE111111111.51.5"), "Should contains 'ab1DE111111111.51.5'");
  58. QVERIFY2(CWF::CSTLCompiler(lessEqual, QDir().currentPath(), objects, false).output().contains("ab1DE111111111.51.5"), "Should contains 'ab1DE111111111.51.5'");
  59. QVERIFY2(CWF::CSTLCompiler(dontExists, QDir().currentPath(), objects, false).output().contains("IF TAG DOESN'T"), "Should contains 'IF TAG DOESN'T'");
  60. QVERIFY2(CWF::CSTLCompiler(zero, QDir().currentPath(), objects, false).output().contains("IF TAG NEEDS"), "Should contains 'IF TAG NEEDS'");
  61. QVERIFY2(CWF::CSTLCompiler(three, QDir().currentPath(), objects, false).output().contains("IF TAG DOESN'T"), "Should contains 'IF TAG DOESN'T'");
  62. }
  63. void TST_CSTLCompiler::fillClient(ClientTest &client, short h)
  64. {
  65. client.setA("a");
  66. client.setB("b");
  67. client.setC(true);
  68. client.setD('D');
  69. client.setE('E');
  70. client.setH(h);
  71. client.setI(1);
  72. client.setJ(1);
  73. client.setK(1);
  74. client.setL(1);
  75. client.setM(1);
  76. client.setN(1);
  77. client.setO(1);
  78. client.setP(1.5);
  79. client.setQ(1.5);
  80. }
  81. QByteArray TST_CSTLCompiler::buildHtmlForIf(const QByteArray &condition, NUMBER_ATTR number)
  82. {
  83. QByteArray html;
  84. html += "<!DOCTYPE html>";
  85. html += "<html>";
  86. html += "<body>";
  87. html += "<for items=\"clients\" var=\"client\">";
  88. if(number == NUMBER_ATTR::ZERO)
  89. html += "<if>";
  90. else if(number == NUMBER_ATTR::TWO)
  91. html += "<if var=\"#{client.getH}\" " + condition + "=\"1\">";
  92. else if(number == NUMBER_ATTR::THREE)
  93. html += "<if var=\"#{client.getH}\" " + condition + "=\"1\" test=\"0\">";
  94. html += "<out value=\"#{client.getA}\"/>";
  95. html += "<out value=\"#{client.getB}\"/>";
  96. html += "<out value=\"#{client.getC}\"/>";
  97. html += "<out value=\"#{client.getD}\"/>";
  98. html += "<out value=\"#{client.getE}\"/>";
  99. html += "<out value=\"#{client.getH}\"/>";
  100. html += "<out value=\"#{client.getI}\"/>";
  101. html += "<out value=\"#{client.getJ}\"/>";
  102. html += "<out value=\"#{client.getK}\"/>";
  103. html += "<out value=\"#{client.getL}\"/>";
  104. html += "<out value=\"#{client.getM}\"/>";
  105. html += "<out value=\"#{client.getN}\"/>";
  106. html += "<out value=\"#{client.getO}\"/>";
  107. html += "<out value=\"#{client.getP}\"/>";
  108. html += "<out value=\"#{client.getQ}\"/>";
  109. html += "</if>";
  110. html += "</for>";
  111. html += "</body>";
  112. html += "</html>";
  113. return html;
  114. }
  115. void TST_CSTLCompiler::createFile(const QString &name, const QByteArray &content)
  116. {
  117. QFile file(name);
  118. QVERIFY2(file.open(QIODevice::WriteOnly), ("Could not create " + name).toStdString().data());
  119. file.write(content);
  120. }