ctkSettingsPanelTest1.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  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. // Update value using the object/widget API
  70. box->setChecked(true);
  71. // Check settings value after it has been updated using object/widget API
  72. boxVal = settings.value("key 1");
  73. CHECK_BOOL(boxVal.isValid(), true);
  74. CHECK_BOOL(boxVal.toBool(), true);
  75. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key 1").toBool(), false);
  76. CHECK_BOOL(settingsPanel.myPropertyValue("key 1").toBool(), true);
  77. //
  78. // QLineEdit
  79. //
  80. QLineEdit* lineEdit = new QLineEdit("default", &settingsPanel);
  81. settingsPanel.registerProperty("key 2", lineEdit, "text",
  82. SIGNAL(textChanged(QString)));
  83. // Check value after a property is registered
  84. QVariant lineEditVal = settings.value("key 2");
  85. CHECK_BOOL(lineEditVal.isValid(), true);
  86. CHECK_QSTRING(lineEditVal.toString(), QString("default"));
  87. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("default"));
  88. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  89. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("default"));
  90. // Update value using the object/widget API
  91. lineEdit->setText("first edit");
  92. // Check settings value after it has been updated using object/widget API
  93. lineEditVal = settings.value("key 2");
  94. CHECK_BOOL(lineEditVal.isValid(), true);
  95. CHECK_QSTRING(lineEditVal.toString(), QString("first edit"));
  96. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("default"));
  97. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  98. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("first edit"));
  99. // Check settings value after applySettings() has been called
  100. settingsPanel.applySettings();
  101. lineEditVal = settings.value("key 2");
  102. CHECK_BOOL(lineEditVal.isValid(), true);
  103. CHECK_QSTRING(lineEditVal.toString(), QString("first edit"));
  104. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("first edit"));
  105. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  106. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("first edit"));
  107. // Update value using the object/widget API
  108. lineEdit->setText("second edit");
  109. // Check settings value after it has been updated using object/widget API
  110. lineEditVal = settings.value("key 2");
  111. CHECK_BOOL(lineEditVal.isValid(), true);
  112. CHECK_QSTRING(lineEditVal.toString(), QString("second edit"));
  113. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("first edit"));
  114. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  115. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("second edit"));
  116. // Check settings value after applySettings() has been called
  117. settingsPanel.applySettings();
  118. lineEditVal = settings.value("key 2");
  119. CHECK_BOOL(lineEditVal.isValid(), true);
  120. CHECK_QSTRING(lineEditVal.toString(), QString("second edit"));
  121. CHECK_QSTRING(settingsPanel.myPreviousPropertyValue("key 2").toString(), QString("second edit"));
  122. CHECK_QSTRING(settingsPanel.myDefaultPropertyValue("key 2").toString(), QString("default"));
  123. CHECK_QSTRING(settingsPanel.myPropertyValue("key 2").toString(), QString("second edit"));
  124. //
  125. // QCheckBox + ctkBooleanMapper
  126. //
  127. box->setChecked(false);
  128. settingsPanel.registerProperty("key complement",
  129. new ctkBooleanMapper(box, "checked", SIGNAL(toggled(bool))),
  130. "complement",
  131. SIGNAL(complementChanged(bool)));
  132. // Check settings value after a property is registered
  133. boxVal = settings.value("key complement");
  134. CHECK_BOOL(boxVal.isValid(), true);
  135. CHECK_BOOL(boxVal.toBool(), true);
  136. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key complement").toBool(), true);
  137. CHECK_BOOL(settingsPanel.myPropertyValue("key complement").toBool(), true);
  138. // Update value using the object/widget API
  139. box->setChecked(true);
  140. // Check settings value after it has been updated using object/widget API
  141. boxVal = settings.value("key complement");
  142. CHECK_BOOL(boxVal.isValid(), true);
  143. CHECK_BOOL(boxVal.toBool(), false);
  144. CHECK_BOOL(settingsPanel.myPreviousPropertyValue("key complement").toBool(), true);
  145. CHECK_BOOL(settingsPanel.myPropertyValue("key complement").toBool(), false);
  146. //
  147. // ctkSettingsPanelTest2Helper: Test QStringList property
  148. //
  149. ctkSettingsPanelTest2Helper* list = new ctkSettingsPanelTest2Helper(&settingsPanel);
  150. settingsPanel.registerProperty("key list", list, "list",
  151. SIGNAL(listChanged()));
  152. // Check value after a property is registered
  153. QVariant listVal = settings.value("key list");
  154. CHECK_BOOL(listVal.isValid(), true);
  155. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList());
  156. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList());
  157. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  158. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList());
  159. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  160. // Update value using the object/widget API: Add one item
  161. list->setList(QStringList() << "first item");
  162. // Check settings value after it has been updated using object/widget API
  163. listVal = settings.value("key list");
  164. CHECK_BOOL(listVal.isValid(), true);
  165. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList() << "first item");
  166. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList());
  167. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  168. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList() << "first item");
  169. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key list");
  170. // Check settings value after applySettings() has been called
  171. settingsPanel.applySettings();
  172. listVal = settings.value("key list");
  173. CHECK_BOOL(listVal.isValid(), true);
  174. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList() << "first item");
  175. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList() << "first item");
  176. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  177. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList() << "first item");
  178. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  179. // Update value using the object/widget API: Add one other item
  180. list->setList(QStringList() << "first item" << "second item");
  181. // Check settings value after it has been updated using object/widget API
  182. listVal = settings.value("key list");
  183. CHECK_BOOL(listVal.isValid(), true);
  184. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList() << "first item" << "second item");
  185. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList() << "first item");
  186. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  187. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList() << "first item" << "second item");
  188. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key list");
  189. // Check settings value after applySettings() has been called
  190. settingsPanel.applySettings();
  191. listVal = settings.value("key list");
  192. CHECK_BOOL(listVal.isValid(), true);
  193. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList() << "first item" << "second item");
  194. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList() << "first item" << "second item");
  195. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  196. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList() << "first item" << "second item");
  197. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  198. // Update value using the object/widget API: Remove items
  199. list->setList(QStringList());
  200. // Check settings value after it has been updated using object/widget API
  201. listVal = settings.value("key list");
  202. CHECK_BOOL(listVal.isValid(), true);
  203. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList());
  204. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList() << "first item" << "second item");
  205. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  206. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList());
  207. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList() << "key list");
  208. // Check settings value after applySettings() has been called
  209. settingsPanel.applySettings();
  210. listVal = settings.value("key list");
  211. CHECK_BOOL(listVal.isValid(), true);
  212. CHECK_QSTRINGLIST(listVal.toStringList(), QStringList());
  213. CHECK_QSTRINGLIST(settingsPanel.myPreviousPropertyValue("key list").toStringList(), QStringList());
  214. CHECK_QSTRINGLIST(settingsPanel.myDefaultPropertyValue("key list").toStringList(), QStringList());
  215. CHECK_QSTRINGLIST(settingsPanel.myPropertyValue("key list").toStringList(), QStringList());
  216. CHECK_QSTRINGLIST(settingsPanel.changedSettings(), QStringList());
  217. settingsPanel.show();
  218. if (argc < 2 || QString(argv[1]) != "-I" )
  219. {
  220. QTimer::singleShot(200, &app, SLOT(quit()));
  221. }
  222. return app.exec();
  223. }