| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 | 
							- /*=========================================================================
 
-   Library:   CTK
 
-   Copyright (c) Kitware Inc.
 
-   Licensed under the Apache License, Version 2.0 (the "License");
 
-   you may not use this file except in compliance with the License.
 
-   You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0.txt
 
-   Unless required by applicable law or agreed to in writing, software
 
-   distributed under the License is distributed on an "AS IS" BASIS,
 
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
-   See the License for the specific language governing permissions and
 
-   limitations under the License.
 
- =========================================================================*/
 
- // Qt includes
 
- #include <QApplication>
 
- #include <QSettings>
 
- #include <QSignalSpy>
 
- #include <QSpinBox>
 
- // CTK includes
 
- #include "ctkSettingsPanel.h"
 
- #include "ctkSettingsPanelTest2Helper.h"
 
- #include "ctkTest.h"
 
- // STD includes
 
- #include <cstdlib>
 
- #include <iostream>
 
- // ----------------------------------------------------------------------------
 
- class ctkSettingsPanelTester: public QObject
 
- {
 
-   Q_OBJECT
 
- private slots:
 
-   void testChangeProperty();
 
-   void testChangeProperty_data();
 
-   void testEmptyQStringList();
 
- };
 
- //-----------------------------------------------------------------------------
 
- void ctkSettingsPanelTester::testChangeProperty()
 
- {
 
-   QFETCH(bool, registerSpecificSettings);
 
-   QSettings settings(QSettings::IniFormat, QSettings::UserScope, "Common ToolKit", "CTK");
 
-   QSettings specificSettings(QSettings::IniFormat, QSettings::UserScope, "Common ToolKit", "CTK-specific");
 
-   
 
-   // Clear settings
 
-   settings.clear();
 
-   settings.sync();
 
-   specificSettings.clear();
 
-   specificSettings.sync();
 
-   
 
-   QSpinBox spinBox;
 
-   ctkSettingsPanel panel;
 
-   panel.setSettings(&settings);
 
-   spinBox.setValue(1);
 
-   QFETCH(QString, label);
 
-   QFETCH(ctkSettingsPanel::SettingOptions, options);
 
-   panel.registerProperty("property", &spinBox,
 
-                          "value", SIGNAL(valueChanged(int)),
 
-                          label, options, registerSpecificSettings ? &specificSettings : 0);
 
-   QCOMPARE(spinBox.value(), 1);
 
-   QCOMPARE(panel.settingLabel("property"), label);
 
-   QCOMPARE(panel.settingOptions("property"), options);
 
-   qRegisterMetaType<QVariant>("QVariant");
 
-   QSignalSpy spy(&panel, SIGNAL(settingChanged(QString,QVariant)));
 
-   QFETCH(int, value);
 
-   QFETCH(bool, setOnObject);
 
-   if (setOnObject)
 
-     {
 
-     spinBox.setValue(value);
 
-     }
 
-   else
 
-     {
 
-     panel.setSetting("property", QVariant(value));
 
-     }
 
-   QFETCH(int, expectedSettingChangedCount);
 
-   QCOMPARE(spy.count(), expectedSettingChangedCount);
 
-   QFETCH(QStringList, expectedChangedSettings);
 
-   QCOMPARE(panel.changedSettings(), expectedChangedSettings);
 
-   // make sure it didn't change
 
-   QCOMPARE(panel.settingLabel("property"), label);
 
-   QCOMPARE(panel.settingOptions("property"), options);
 
-   
 
-   QString currentSettingContent;
 
-   {
 
-     settings.sync();
 
-     if (QFile::exists(settings.fileName()))
 
-       {
 
-       QFile file(settings.fileName());
 
-       QVERIFY(file.open(QIODevice::ReadOnly));
 
-       currentSettingContent = file.readAll();
 
-       file.close();
 
-       }
 
-   }
 
-   
 
-   QString currentSpecificSettingsContent;
 
-   {
 
-     specificSettings.sync();
 
-     if (QFile::exists(specificSettings.fileName()))
 
-       {
 
-       QFile file(specificSettings.fileName());
 
-       QVERIFY(file.open(QIODevice::ReadOnly));
 
-       currentSpecificSettingsContent = file.readAll();
 
-       file.close();
 
-       }
 
-   }
 
-   QString expectedSettingsContent = QLatin1String("[General]\nproperty=%1\n");
 
-  
 
-   if (expectedChangedSettings.count() > 0)
 
-     {
 
-     if (registerSpecificSettings)
 
-       {
 
-       QCOMPARE(currentSettingContent, QString(""));
 
-       QCOMPARE(currentSpecificSettingsContent, expectedSettingsContent.arg(value));
 
-       }
 
-     else
 
-       {
 
-       QCOMPARE(currentSettingContent, expectedSettingsContent.arg(value));
 
-       QCOMPARE(currentSpecificSettingsContent, QString(""));
 
-       }
 
-     }
 
-   else
 
-     {
 
-     if (registerSpecificSettings)
 
-       {
 
-       QCOMPARE(currentSettingContent, QString(""));
 
-       QCOMPARE(currentSpecificSettingsContent, expectedSettingsContent.arg(1));
 
-       }
 
-     else
 
-       {
 
-       QCOMPARE(currentSettingContent, expectedSettingsContent.arg(1));
 
-       QCOMPARE(currentSpecificSettingsContent, QString(""));
 
-       }
 
-     }
 
-   panel.resetSettings();
 
- }
 
- //-----------------------------------------------------------------------------
 
- void ctkSettingsPanelTester::testChangeProperty_data()
 
- {
 
-   QTest::addColumn<QString>("label");
 
-   QTest::addColumn<ctkSettingsPanel::SettingOptions>("options");
 
-   QTest::addColumn<int>("value");
 
-   QTest::addColumn<bool>("setOnObject");
 
-   QTest::addColumn<bool>("registerSpecificSettings");
 
-   QTest::addColumn<int>("expectedSettingChangedCount");
 
-   QTest::addColumn<QStringList>("expectedChangedSettings");
 
-   // registerSpecificSettings: false
 
-   QTest::newRow("null none changed obj") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 2 << true << false << 1 << QStringList("property");
 
-   QTest::newRow("null none changed panel") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 2 << false << false << 1 << QStringList("property");
 
-   QTest::newRow("null none unchanged obj") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 1 << true << false << 0 << QStringList();
 
-   QTest::newRow("null none unchanged panel") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 1 << false << false << 0 << QStringList();
 
-   QTest::newRow("null RequireRestart changed obj") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 2 << true << false << 1 << QStringList("property");
 
-   QTest::newRow("null RequireRestart changed panel") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 2 << false << false << 1 << QStringList("property");
 
-   QTest::newRow("null RequireRestart unchanged obj") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 1 << true << false << 0 << QStringList();
 
-   QTest::newRow("null RequireRestart unchanged panel") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 1 << false << false << 0 << QStringList();
 
-   QTest::newRow("empty none changed obj") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 2 << true << false << 1 << QStringList("property");
 
-   QTest::newRow("empty none changed panel") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 2 << false << false << 1 << QStringList("property");
 
-   QTest::newRow("empty none unchanged obj") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 1 << true << false << 0 << QStringList();
 
-   QTest::newRow("empty none unchanged panel") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 1 << false << false << 0 << QStringList();
 
-   QTest::newRow("empty RequireRestart changed obj") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 2 << true << false << 1 << QStringList("property");
 
-   QTest::newRow("empty RequireRestart changed panel") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 2 << false << false << 1 << QStringList("property");
 
-   QTest::newRow("empty RequireRestart unchanged obj") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 1 << true << false << 0 << QStringList();
 
-   QTest::newRow("empty RequireRestart unchanged panel") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 1 << false << false << 0 << QStringList();
 
-   QTest::newRow("label none changed obj") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 2 << true << false << 1 << QStringList("property");
 
-   QTest::newRow("label none changed panel") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 2 << false << false << 1 << QStringList("property");
 
-   QTest::newRow("label none unchanged obj") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 1 << true << false << 0 << QStringList();
 
-   QTest::newRow("label none unchanged panel") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 1 << false << false << 0 << QStringList();
 
-   QTest::newRow("label RequireRestart changed obj") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 2 << true << false << 1 << QStringList("property");
 
-   QTest::newRow("label RequireRestart changed panel") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 2 << false << false << 1 << QStringList("property");
 
-   QTest::newRow("label RequireRestart unchanged obj") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 1 << true << false << 0 << QStringList();
 
-   QTest::newRow("label RequireRestart unchanged panel") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 1 << false << false << 0 << QStringList();
 
-   
 
-   // registerSpecificSettings: true
 
-   QTest::newRow("null none changed obj") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 2 << true << true << 1 << QStringList("property");
 
-   QTest::newRow("null none changed panel") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 2 << false << true << 1 << QStringList("property");
 
-   QTest::newRow("null none unchanged obj") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 1 << true << true << 0 << QStringList();
 
-   QTest::newRow("null none unchanged panel") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 1 << false << true << 0 << QStringList();
 
-   QTest::newRow("null RequireRestart changed obj") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 2 << true << true << 1 << QStringList("property");
 
-   QTest::newRow("null RequireRestart changed panel") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 2 << false << true << 1 << QStringList("property");
 
-   QTest::newRow("null RequireRestart unchanged obj") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 1 << true << true << 0 << QStringList();
 
-   QTest::newRow("null RequireRestart unchanged panel") << QString() << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 1 << false << true << 0 << QStringList();
 
-   QTest::newRow("empty none changed obj") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 2 << true << true << 1 << QStringList("property");
 
-   QTest::newRow("empty none changed panel") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 2 << false << true << 1 << QStringList("property");
 
-   QTest::newRow("empty none unchanged obj") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 1 << true << true << 0 << QStringList();
 
-   QTest::newRow("empty none unchanged panel") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 1 << false << true << 0 << QStringList();
 
-   QTest::newRow("empty RequireRestart changed obj") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 2 << true << true << 1 << QStringList("property");
 
-   QTest::newRow("empty RequireRestart changed panel") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 2 << false << true << 1 << QStringList("property");
 
-   QTest::newRow("empty RequireRestart unchanged obj") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 1 << true << true << 0 << QStringList();
 
-   QTest::newRow("empty RequireRestart unchanged panel") << QString("") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 1 << false << true << 0 << QStringList();
 
-   QTest::newRow("label none changed obj") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 2 << true << true << 1 << QStringList("property");
 
-   QTest::newRow("label none changed panel") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 2 << false << true << 1 << QStringList("property");
 
-   QTest::newRow("label none unchanged obj") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 1 << true << true << 0 << QStringList();
 
-   QTest::newRow("label none unchanged panel") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionNone) << 1 << false << true << 0 << QStringList();
 
-   QTest::newRow("label RequireRestart changed obj") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 2 << true << true << 1 << QStringList("property");
 
-   QTest::newRow("label RequireRestart changed panel") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 2 << false << true << 1 << QStringList("property");
 
-   QTest::newRow("label RequireRestart unchanged obj") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 1 << true << true << 0 << QStringList();
 
-   QTest::newRow("label RequireRestart unchanged panel") << QString("label") << ctkSettingsPanel::SettingOptions(ctkSettingsPanel::OptionRequireRestart) << 1 << false << true << 0 << QStringList();
 
- }
 
- //-----------------------------------------------------------------------------
 
- void ctkSettingsPanelTester::testEmptyQStringList()
 
- {
 
-   {
 
-     // When QSettings goes out of scope, we are the settings file is up-to-date
 
-     QSettings settings(QSettings::IniFormat, QSettings::UserScope, "Common ToolKit", "CTK");
 
-     settings.clear();
 
-     settings.setValue("list", QVariant(QStringList()));
 
-   }
 
-   // Regression: Reading empty QStringList property from settings should be handled properly
 
-   ctkSettingsPanel settingsPanel;
 
-   ctkSettingsPanelTest2Helper * list = new ctkSettingsPanelTest2Helper(&settingsPanel);
 
-   settingsPanel.registerProperty("list", list, "list", SIGNAL(listChanged()));
 
-   QSettings settings2(QSettings::IniFormat, QSettings::UserScope, "Common ToolKit", "CTK");
 
-   settingsPanel.setSettings(&settings2);
 
- }
 
- // ----------------------------------------------------------------------------
 
- CTK_TEST_MAIN(ctkSettingsPanelTest)
 
- #include "moc_ctkSettingsPanelTest.cpp"
 
 
  |