test_theme.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #include "test_theme.h"
  2. #include <QHash>
  3. #include <theme.h>
  4. using namespace tests;
  5. using namespace vnotex;
  6. TestTheme::TestTheme(QObject *p_parent)
  7. : QObject(p_parent)
  8. {
  9. }
  10. void TestTheme::checkKeyValue(const QJsonObject &p_obj,
  11. const QString &p_key,
  12. const QString &p_val)
  13. {
  14. auto val = Theme::findValueByKeyPath(p_obj, p_key);
  15. QCOMPARE(val.toString(), p_val);
  16. }
  17. void TestTheme::testTranslatePaletteObject()
  18. {
  19. QJsonObject palette;
  20. // Normal.
  21. {
  22. QJsonObject base;
  23. base["a"] = "green";
  24. base["b"] = "blue";
  25. palette["base"] = base;
  26. auto ret = Theme::translatePaletteObjectOnce(palette, palette, "base");
  27. QCOMPARE(ret.first, false);
  28. QCOMPARE(ret.second, 0);
  29. checkKeyValue(palette, "base#a", "green");
  30. checkKeyValue(palette, "base#b", "blue");
  31. }
  32. // @.
  33. {
  34. auto baseObj = palette["base"].toObject();
  35. baseObj["c"] = "@base#b";
  36. palette["base"] = baseObj;
  37. auto ret = Theme::translatePaletteObjectOnce(palette, palette, "base");
  38. QCOMPARE(ret.first, true);
  39. QCOMPARE(ret.second, 0);
  40. checkKeyValue(palette, "base#a", "green");
  41. checkKeyValue(palette, "base#b", "blue");
  42. checkKeyValue(palette, "base#c", "blue");
  43. }
  44. // @&@.
  45. {
  46. auto baseObj = palette["base"].toObject();
  47. baseObj["e"] = "@base#d";
  48. baseObj["d"] = "@base#a";
  49. palette["base"] = baseObj;
  50. auto ret = Theme::translatePaletteObjectOnce(palette, palette, "base");
  51. QCOMPARE(ret.first, true);
  52. QCOMPARE(ret.second, 1);
  53. ret = Theme::translatePaletteObjectOnce(palette, palette, "base");
  54. QCOMPARE(ret.first, true);
  55. QCOMPARE(ret.second, 0);
  56. checkKeyValue(palette, "base#d", "green");
  57. checkKeyValue(palette, "base#e", "green");
  58. }
  59. // Cyclic @.
  60. {
  61. auto baseObj = palette["base"].toObject();
  62. baseObj["f"] = "@base#g";
  63. baseObj["g"] = "@base#h";
  64. baseObj["h"] = "@base#f";
  65. palette["base"] = baseObj;
  66. auto ret = Theme::translatePaletteObjectOnce(palette, palette, "base");
  67. QCOMPARE(ret.first, true);
  68. QCOMPARE(ret.second, 3);
  69. ret = Theme::translatePaletteObjectOnce(palette, palette, "base");
  70. QCOMPARE(ret.first, true);
  71. QCOMPARE(ret.second, 3);
  72. checkKeyValue(palette, "base#a", "green");
  73. checkKeyValue(palette, "base#b", "blue");
  74. checkKeyValue(palette, "base#c", "blue");
  75. checkKeyValue(palette, "base#d", "green");
  76. checkKeyValue(palette, "base#e", "green");
  77. QVERIFY(Theme::isRef(Theme::findValueByKeyPath(palette, "base#f").toString()));
  78. QVERIFY(Theme::isRef(Theme::findValueByKeyPath(palette, "base#g").toString()));
  79. QVERIFY(Theme::isRef(Theme::findValueByKeyPath(palette, "base#h").toString()));
  80. }
  81. }
  82. void TestTheme::testTranslateStyleByPalette()
  83. {
  84. QJsonObject palette;
  85. {
  86. QJsonObject baseObj;
  87. baseObj["a"] = "green";
  88. baseObj["b"] = "blue";
  89. baseObj["c"] = "red";
  90. palette["base"] = baseObj;
  91. }
  92. // Space or column prefix.
  93. {
  94. QString style = "color: @base#a;\n background:@base#b;";
  95. Theme::translateStyleByPalette(palette, style);
  96. QVERIFY(style == "color: green;\n background:blue;");
  97. }
  98. // Reference beyond palette.
  99. {
  100. QString style = "color: @base#a;\n background: @base#d;";
  101. Theme::translateStyleByPalette(palette, style);
  102. QVERIFY(style == "color: green;\n background: @base#d;");
  103. }
  104. }
  105. void TestTheme::testTranslateUrlToAbsolute()
  106. {
  107. #if defined(Q_OS_WIN)
  108. const QString basePath("C:\\vnotex\\theme");
  109. QString style = "image: url(menu.svg); image:url(c:/vnotex/abs.svg);";
  110. Theme::translateUrlToAbsolute(basePath, style);
  111. QVERIFY(style == "image: url(C:/vnotex/theme/menu.svg); image:url(c:/vnotex/abs.svg);");
  112. #else
  113. const QString basePath("/usr/bin/vnotex/theme");
  114. QString style = "image: url(menu.svg); image:url(/usr/bin/abs.svg);";
  115. Theme::translateUrlToAbsolute(basePath, style);
  116. QVERIFY(style == "image: url(/usr/bin/vnotex/theme/menu.svg); image:url(/usr/bin/abs.svg);");
  117. #endif
  118. }
  119. void TestTheme::testTranslateScaledSize()
  120. {
  121. const qreal factor = 1.5;
  122. {
  123. QString style = "width: $20px; height:$-4px;";
  124. Theme::translateScaledSize(factor, style);
  125. QVERIFY(style == "width: 30px; height:-6px;");
  126. }
  127. }
  128. QTEST_MAIN(tests::TestTheme)