ctkSettingsPanelTest1.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  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 TestBoolean(QSettings& settings,
  51. ctkSettingsPanelForTest& settingsPanel);
  52. int TestString(QSettings& settings,
  53. ctkSettingsPanelForTest& settingsPanel);
  54. int TestBooleanMapper(QSettings& settings,
  55. ctkSettingsPanelForTest& settingsPanel);
  56. int TestStringList(QSettings& settings,
  57. ctkSettingsPanelForTest& settingsPanel);
  58. //-----------------------------------------------------------------------------
  59. int ctkSettingsPanelTest1(int argc, char * argv [] )
  60. {
  61. QApplication app(argc, argv);
  62. QSettings settings(QSettings::IniFormat, QSettings::UserScope, "Common ToolKit", "CTK");
  63. settings.clear();
  64. ctkSettingsPanelForTest settingsPanel;
  65. settingsPanel.setSettings(&settings);
  66. CHECK_EXIT_SUCCESS(TestBoolean(settings, settingsPanel));
  67. CHECK_EXIT_SUCCESS(TestString(settings, settingsPanel));
  68. CHECK_EXIT_SUCCESS(TestBooleanMapper(settings, settingsPanel));
  69. CHECK_EXIT_SUCCESS(TestStringList(settings, settingsPanel));
  70. settingsPanel.show();
  71. if (argc < 2 || QString(argv[1]) != "-I" )
  72. {
  73. QTimer::singleShot(200, &app, SLOT(quit()));
  74. }
  75. return app.exec();
  76. }
  77. //-----------------------------------------------------------------------------
  78. int TestBoolean(QSettings& settings,
  79. ctkSettingsPanelForTest& settingsPanel)
  80. {
  81. QCheckBox* box = new QCheckBox(&settingsPanel);
  82. settingsPanel.registerProperty("key 1", box, "checked",
  83. SIGNAL(toggled(bool)));
  84. // Check settings value after a property is registered
  85. QVariant boxVal = settings.value("key 1");
  86. CHECK_BOOL(boxVal.isValid(), true);
  87. CHECK_QVARIANT(boxVal, QVariant(false));
  88. CHECK_BOOL(boxVal.toBool(), false);
  89. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key 1").toBool(), false);
  90. CHECK_BOOL(settingsPanel.myPropertyValue("key 1").toBool(), false);
  91. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  92. // Update value using the object/widget API
  93. box->setChecked(true);
  94. // Check settings value after it has been updated using object/widget API
  95. boxVal = settings.value("key 1");
  96. CHECK_BOOL(boxVal.isValid(), true);
  97. CHECK_QVARIANT(boxVal, QVariant(true));
  98. CHECK_BOOL(boxVal.toBool(), true);
  99. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key 1").toBool(), false);
  100. CHECK_BOOL(settingsPanel.myPropertyValue("key 1").toBool(), true);
  101. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key 1");
  102. // Check settings value after applySettings() has been called
  103. settingsPanel.applySettings();
  104. boxVal = settings.value("key 1");
  105. CHECK_BOOL(boxVal.isValid(), true);
  106. CHECK_QVARIANT(boxVal, QVariant(true));
  107. CHECK_BOOL(boxVal.toBool(), true);
  108. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key 1").toBool(), true);
  109. CHECK_BOOL(settingsPanel.myDefaultPropertyValue("key 1").toBool(), false);
  110. CHECK_BOOL(settingsPanel.myPropertyValue("key 1").toBool(), true);
  111. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  112. return EXIT_SUCCESS;
  113. }
  114. //-----------------------------------------------------------------------------
  115. int TestString(QSettings& settings,
  116. ctkSettingsPanelForTest& settingsPanel)
  117. {
  118. QLineEdit* lineEdit = new QLineEdit("default", &settingsPanel);
  119. settingsPanel.registerProperty("key 2", lineEdit, "text",
  120. SIGNAL(textChanged(QString)));
  121. // Check value after a property is registered
  122. QVariant lineEditVal = settings.value("key 2");
  123. CHECK_BOOL(lineEditVal.isValid(), true);
  124. CHECK_QVARIANT(lineEditVal, QVariant("default"));
  125. CHECK_QSTRING(lineEditVal.toString(), QString("default"));
  126. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("default"));
  127. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  128. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("default"));
  129. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  130. // Update value using the object/widget API
  131. lineEdit->setText("first edit");
  132. // Check settings value after it has been updated using object/widget API
  133. lineEditVal = settings.value("key 2");
  134. CHECK_BOOL(lineEditVal.isValid(), true);
  135. CHECK_QVARIANT(lineEditVal, QVariant("first edit"));
  136. CHECK_QSTRING(lineEditVal.toString(), QString("first edit"));
  137. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("default"));
  138. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  139. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("first edit"));
  140. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key 2");
  141. // Check settings value after applySettings() has been called
  142. settingsPanel.applySettings();
  143. lineEditVal = settings.value("key 2");
  144. CHECK_BOOL(lineEditVal.isValid(), true);
  145. CHECK_QVARIANT(lineEditVal, QVariant("first edit"));
  146. CHECK_QSTRING(lineEditVal.toString(), QString("first edit"));
  147. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("first edit"));
  148. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  149. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("first edit"));
  150. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  151. // Update value using the object/widget API
  152. lineEdit->setText("second edit");
  153. // Check settings value after it has been updated using object/widget API
  154. lineEditVal = settings.value("key 2");
  155. CHECK_BOOL(lineEditVal.isValid(), true);
  156. CHECK_QVARIANT(lineEditVal, QVariant("second edit"));
  157. CHECK_QSTRING(lineEditVal.toString(), QString("second edit"));
  158. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("first edit"));
  159. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  160. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("second edit"));
  161. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key 2");
  162. // Check settings value after applySettings() has been called
  163. settingsPanel.applySettings();
  164. lineEditVal = settings.value("key 2");
  165. CHECK_BOOL(lineEditVal.isValid(), true);
  166. CHECK_QVARIANT(lineEditVal, QVariant("second edit"));
  167. CHECK_QSTRING(lineEditVal.toString(), QString("second edit"));
  168. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("second edit"));
  169. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  170. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("second edit"));
  171. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  172. return EXIT_SUCCESS;
  173. }
  174. //-----------------------------------------------------------------------------
  175. int TestBooleanMapper(QSettings& settings,
  176. ctkSettingsPanelForTest& settingsPanel)
  177. {
  178. QCheckBox* box = new QCheckBox(&settingsPanel);
  179. settingsPanel.registerProperty("key complement",
  180. new ctkBooleanMapper(box, "checked", SIGNAL(toggled(bool))),
  181. "complement",
  182. SIGNAL(complementChanged(bool)));
  183. // Check settings value after a property is registered
  184. QVariant boxVal = settings.value("key complement");
  185. CHECK_BOOL(boxVal.isValid(), true);
  186. CHECK_QVARIANT(boxVal, QVariant(true));
  187. CHECK_BOOL(boxVal.toBool(), true);
  188. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key complement").toBool(), true);
  189. CHECK_BOOL(settingsPanel.myPropertyValue("key complement").toBool(), true);
  190. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  191. // Update value using the object/widget API
  192. box->setChecked(true);
  193. // Check settings value after it has been updated using object/widget API
  194. boxVal = settings.value("key complement");
  195. CHECK_BOOL(boxVal.isValid(), true);
  196. CHECK_QVARIANT(boxVal, QVariant(false));
  197. CHECK_BOOL(boxVal.toBool(), false);
  198. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key complement").toBool(), true);
  199. CHECK_BOOL(settingsPanel.myPropertyValue("key complement").toBool(), false);
  200. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key complement");
  201. // Check settings value after applySettings() has been called
  202. settingsPanel.applySettings();
  203. boxVal = settings.value("key complement");
  204. CHECK_BOOL(boxVal.isValid(), true);
  205. CHECK_QVARIANT(boxVal, QVariant(false));
  206. CHECK_BOOL(boxVal.toBool(), false);
  207. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key complement").toBool(), false);
  208. CHECK_BOOL(settingsPanel.myDefaultPropertyValue("key complement").toBool(), true);
  209. CHECK_BOOL(settingsPanel.myPropertyValue("key complement").toBool(), false);
  210. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  211. return EXIT_SUCCESS;
  212. }
  213. //-----------------------------------------------------------------------------
  214. int TestStringList(QSettings& settings,
  215. ctkSettingsPanelForTest& settingsPanel)
  216. {
  217. ctkSettingsPanelTest2Helper* list = new ctkSettingsPanelTest2Helper(&settingsPanel);
  218. settingsPanel.registerProperty("key list", list, "list",
  219. SIGNAL(listChanged()));
  220. // Check value after a property is registered
  221. QVariant listVal = settings.value("key list");
  222. CHECK_BOOL(listVal.isValid(), true);
  223. CHECK_QVARIANT(listVal, QVariant(QStringList()));
  224. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList());
  225. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList());
  226. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  227. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList());
  228. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  229. // Update value using the object/widget API: Add one item
  230. list->setList(QStringList() << "first item");
  231. // Check settings value after it has been updated using object/widget API
  232. listVal = settings.value("key list");
  233. CHECK_BOOL(listVal.isValid(), true);
  234. CHECK_QVARIANT(listVal, QVariant(QStringList() << "first item"));
  235. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList() << "first item");
  236. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList());
  237. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  238. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList() << "first item");
  239. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key list");
  240. // Check settings value after applySettings() has been called
  241. settingsPanel.applySettings();
  242. listVal = settings.value("key list");
  243. CHECK_BOOL(listVal.isValid(), true);
  244. CHECK_QVARIANT(listVal, QVariant(QStringList() << "first item"));
  245. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList() << "first item");
  246. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList() << "first item");
  247. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  248. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList() << "first item");
  249. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  250. // Update value using the object/widget API: Add one other item
  251. list->setList(QStringList() << "first item" << "second item");
  252. // Check settings value after it has been updated using object/widget API
  253. listVal = settings.value("key list");
  254. CHECK_BOOL(listVal.isValid(), true);
  255. CHECK_QVARIANT(listVal, QVariant(QStringList() << "first item" << "second item"));
  256. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList() << "first item" << "second item");
  257. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList() << "first item");
  258. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  259. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList() << "first item" << "second item");
  260. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key list");
  261. // Check settings value after applySettings() has been called
  262. settingsPanel.applySettings();
  263. listVal = settings.value("key list");
  264. CHECK_BOOL(listVal.isValid(), true);
  265. CHECK_QVARIANT(listVal, QVariant(QStringList() << "first item" << "second item"));
  266. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList() << "first item" << "second item");
  267. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList() << "first item" << "second item");
  268. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  269. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList() << "first item" << "second item");
  270. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  271. // Update value using the object/widget API: Remove items
  272. list->setList(QStringList());
  273. // Check settings value after it has been updated using object/widget API
  274. listVal = settings.value("key list");
  275. CHECK_BOOL(listVal.isValid(), true);
  276. CHECK_QVARIANT(listVal, QVariant(QStringList()));
  277. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList());
  278. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList() << "first item" << "second item");
  279. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  280. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList());
  281. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key list");
  282. // Check settings value after applySettings() has been called
  283. settingsPanel.applySettings();
  284. listVal = settings.value("key list");
  285. CHECK_BOOL(listVal.isValid(), true);
  286. CHECK_QVARIANT(listVal, QVariant(QStringList()));
  287. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList());
  288. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList());
  289. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  290. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList());
  291. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  292. return EXIT_SUCCESS;
  293. }