ctkSettingsPanelTest1.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. /*=========================================================================
  2. Library: CTK
  3. Copyright (c) Kitware Inc.
  4. Licensed under the Apache License, Version 2.0 (the "License");
  5. you may not use this file except in compliance with the License.
  6. You may obtain a copy of the License at
  7. http://www.apache.org/licenses/LICENSE-2.0.txt
  8. Unless required by applicable law or agreed to in writing, software
  9. distributed under the License is distributed on an "AS IS" BASIS,
  10. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  11. See the License for the specific language governing permissions and
  12. limitations under the License.
  13. =========================================================================*/
  14. // Qt includes
  15. #include <QApplication>
  16. #include <QCheckBox>
  17. #include <QLineEdit>
  18. #include <QSettings>
  19. #include <QTimer>
  20. #include <QVariant>
  21. // CTK includes
  22. #include "ctkBooleanMapper.h"
  23. #include "ctkCoreTestingMacros.h"
  24. #include "ctkSettingsPanel.h"
  25. #include "ctkSettingsPanelTest2Helper.h"
  26. // STD includes
  27. #include <cstdlib>
  28. #include <iostream>
  29. namespace
  30. {
  31. //-----------------------------------------------------------------------------
  32. class ctkSettingsPanelForTest : public ctkSettingsPanel
  33. {
  34. public:
  35. QVariant myDefaultPropertyValue(const QString& key) const
  36. {
  37. return this->defaultPropertyValue(key);
  38. }
  39. QVariant myPreviousPropertyValue(const QString& key) const
  40. {
  41. return this->previousPropertyValue(key);
  42. }
  43. QVariant myPropertyValue(const QString& key) const
  44. {
  45. return this->propertyValue(key);
  46. }
  47. };
  48. } // end of anonymous namespace
  49. //-----------------------------------------------------------------------------
  50. int ctkSettingsPanelTest1(int argc, char * argv [] )
  51. {
  52. QApplication app(argc, argv);
  53. QSettings settings(QSettings::IniFormat, QSettings::UserScope, "Common ToolKit", "CTK");
  54. settings.clear();
  55. ctkSettingsPanelForTest settingsPanel;
  56. settingsPanel.setSettings(&settings);
  57. //
  58. // QCheckBox
  59. //
  60. QCheckBox* box = new QCheckBox(&settingsPanel);
  61. settingsPanel.registerProperty("key 1", box, "checked",
  62. SIGNAL(toggled(bool)));
  63. // Check settings value after a property is registered
  64. QVariant boxVal = settings.value("key 1");
  65. CHECK_BOOL(boxVal.isValid(), true);
  66. CHECK_BOOL(boxVal.toBool(), false);
  67. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key 1").toBool(), false);
  68. CHECK_BOOL(settingsPanel.myPropertyValue("key 1").toBool(), false);
  69. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  70. // Update value using the object/widget API
  71. box->setChecked(true);
  72. // Check settings value after it has been updated using object/widget API
  73. boxVal = settings.value("key 1");
  74. CHECK_BOOL(boxVal.isValid(), true);
  75. CHECK_BOOL(boxVal.toBool(), true);
  76. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key 1").toBool(), false);
  77. CHECK_BOOL(settingsPanel.myPropertyValue("key 1").toBool(), true);
  78. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key 1");
  79. // Check settings value after applySettings() has been called
  80. settingsPanel.applySettings();
  81. boxVal = settings.value("key 1");
  82. CHECK_BOOL(boxVal.isValid(), true);
  83. CHECK_BOOL(boxVal.toBool(), true);
  84. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key 1").toBool(), true);
  85. CHECK_BOOL(settingsPanel.myDefaultPropertyValue("key 1").toBool(), false);
  86. CHECK_BOOL(settingsPanel.myPropertyValue("key 1").toBool(), true);
  87. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  88. //
  89. // QLineEdit
  90. //
  91. QLineEdit* lineEdit = new QLineEdit("default", &settingsPanel);
  92. settingsPanel.registerProperty("key 2", lineEdit, "text",
  93. SIGNAL(textChanged(QString)));
  94. // Check value after a property is registered
  95. QVariant lineEditVal = settings.value("key 2");
  96. CHECK_BOOL(lineEditVal.isValid(), true);
  97. CHECK_QSTRING(lineEditVal.toString(), QString("default"));
  98. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("default"));
  99. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  100. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("default"));
  101. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  102. // Update value using the object/widget API
  103. lineEdit->setText("first edit");
  104. // Check settings value after it has been updated using object/widget API
  105. lineEditVal = settings.value("key 2");
  106. CHECK_BOOL(lineEditVal.isValid(), true);
  107. CHECK_QSTRING(lineEditVal.toString(), QString("first edit"));
  108. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("default"));
  109. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  110. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("first edit"));
  111. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key 2");
  112. // Check settings value after applySettings() has been called
  113. settingsPanel.applySettings();
  114. lineEditVal = settings.value("key 2");
  115. CHECK_BOOL(lineEditVal.isValid(), true);
  116. CHECK_QSTRING(lineEditVal.toString(), QString("first edit"));
  117. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("first edit"));
  118. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  119. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("first edit"));
  120. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  121. // Update value using the object/widget API
  122. lineEdit->setText("second edit");
  123. // Check settings value after it has been updated using object/widget API
  124. lineEditVal = settings.value("key 2");
  125. CHECK_BOOL(lineEditVal.isValid(), true);
  126. CHECK_QSTRING(lineEditVal.toString(), QString("second edit"));
  127. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("first edit"));
  128. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  129. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("second edit"));
  130. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key 2");
  131. // Check settings value after applySettings() has been called
  132. settingsPanel.applySettings();
  133. lineEditVal = settings.value("key 2");
  134. CHECK_BOOL(lineEditVal.isValid(), true);
  135. CHECK_QSTRING(lineEditVal.toString(), QString("second edit"));
  136. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("second edit"));
  137. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  138. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("second edit"));
  139. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  140. //
  141. // QCheckBox + ctkBooleanMapper
  142. //
  143. box = new QCheckBox(&settingsPanel);
  144. settingsPanel.registerProperty("key complement",
  145. new ctkBooleanMapper(box, "checked", SIGNAL(toggled(bool))),
  146. "complement",
  147. SIGNAL(complementChanged(bool)));
  148. // Check settings value after a property is registered
  149. boxVal = settings.value("key complement");
  150. CHECK_BOOL(boxVal.isValid(), true);
  151. CHECK_BOOL(boxVal.toBool(), true);
  152. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key complement").toBool(), true);
  153. CHECK_BOOL(settingsPanel.myPropertyValue("key complement").toBool(), true);
  154. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  155. // Update value using the object/widget API
  156. box->setChecked(true);
  157. // Check settings value after it has been updated using object/widget API
  158. boxVal = settings.value("key complement");
  159. CHECK_BOOL(boxVal.isValid(), true);
  160. CHECK_BOOL(boxVal.toBool(), false);
  161. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key complement").toBool(), true);
  162. CHECK_BOOL(settingsPanel.myPropertyValue("key complement").toBool(), false);
  163. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key complement");
  164. // Check settings value after applySettings() has been called
  165. settingsPanel.applySettings();
  166. boxVal = settings.value("key complement");
  167. CHECK_BOOL(boxVal.isValid(), true);
  168. CHECK_BOOL(boxVal.toBool(), false);
  169. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key complement").toBool(), false);
  170. CHECK_BOOL(settingsPanel.myDefaultPropertyValue("key complement").toBool(), true);
  171. CHECK_BOOL(settingsPanel.myPropertyValue("key complement").toBool(), false);
  172. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  173. //
  174. // ctkSettingsPanelTest2Helper: Test QStringList property
  175. //
  176. ctkSettingsPanelTest2Helper* list = new ctkSettingsPanelTest2Helper(&settingsPanel);
  177. settingsPanel.registerProperty("key list", list, "list",
  178. SIGNAL(listChanged()));
  179. // Check value after a property is registered
  180. QVariant listVal = settings.value("key list");
  181. CHECK_BOOL(listVal.isValid(), true);
  182. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList());
  183. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList());
  184. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  185. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList());
  186. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  187. // Update value using the object/widget API: Add one item
  188. list->setList(QStringList() << "first item");
  189. // Check settings value after it has been updated using object/widget API
  190. listVal = settings.value("key list");
  191. CHECK_BOOL(listVal.isValid(), true);
  192. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList() << "first item");
  193. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList());
  194. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  195. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList() << "first item");
  196. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key list");
  197. // Check settings value after applySettings() has been called
  198. settingsPanel.applySettings();
  199. listVal = settings.value("key list");
  200. CHECK_BOOL(listVal.isValid(), true);
  201. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList() << "first item");
  202. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList() << "first item");
  203. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  204. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList() << "first item");
  205. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  206. // Update value using the object/widget API: Add one other item
  207. list->setList(QStringList() << "first item" << "second item");
  208. // Check settings value after it has been updated using object/widget API
  209. listVal = settings.value("key list");
  210. CHECK_BOOL(listVal.isValid(), true);
  211. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList() << "first item" << "second item");
  212. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList() << "first item");
  213. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  214. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList() << "first item" << "second item");
  215. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key list");
  216. // Check settings value after applySettings() has been called
  217. settingsPanel.applySettings();
  218. listVal = settings.value("key list");
  219. CHECK_BOOL(listVal.isValid(), true);
  220. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList() << "first item" << "second item");
  221. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList() << "first item" << "second item");
  222. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  223. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList() << "first item" << "second item");
  224. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  225. // Update value using the object/widget API: Remove items
  226. list->setList(QStringList());
  227. // Check settings value after it has been updated using object/widget API
  228. listVal = settings.value("key list");
  229. CHECK_BOOL(listVal.isValid(), true);
  230. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList());
  231. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList() << "first item" << "second item");
  232. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  233. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList());
  234. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key list");
  235. // Check settings value after applySettings() has been called
  236. settingsPanel.applySettings();
  237. listVal = settings.value("key list");
  238. CHECK_BOOL(listVal.isValid(), true);
  239. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList());
  240. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList());
  241. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  242. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList());
  243. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  244. settingsPanel.show();
  245. if (argc < 2 || QString(argv[1]) != "-I" )
  246. {
  247. QTimer::singleShot(200, &app, SLOT(quit()));
  248. }
  249. return app.exec();
  250. }