aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Astals Cid <aacid@kde.org>2015-01-07 00:54:10 +0100
committerAlbert Astals Cid <aacid@kde.org>2015-01-07 00:55:00 +0100
commit257b66e049483d198723e515c3c1e65e18b6afb3 (patch)
tree8fda0c355cbbebda4249ed737807206ea243cf9c
parent915976c1238be811f169eab1b02f7e8dad6410e0 (diff)
downloadkconfig-257b66e049483d198723e515c3c1e65e18b6afb3.tar.gz
kconfig-257b66e049483d198723e515c3c1e65e18b6afb3.tar.bz2
Fix KCoreConfigSkeleton when toggling a value with saves in between
REVIEW: 121838 Acked by Matthew Dawson
-rw-r--r--autotests/kconfigskeletontest.cpp84
-rw-r--r--autotests/kconfigskeletontest.h9
-rw-r--r--src/core/kcoreconfigskeleton.cpp5
-rw-r--r--src/core/kcoreconfigskeleton.h1
4 files changed, 76 insertions, 23 deletions
diff --git a/autotests/kconfigskeletontest.cpp b/autotests/kconfigskeletontest.cpp
index f401b9f0..898366c0 100644
--- a/autotests/kconfigskeletontest.cpp
+++ b/autotests/kconfigskeletontest.cpp
@@ -35,15 +35,17 @@ QTEST_MAIN(KConfigSkeletonTest)
#define WRITE_SETTING3 QFont("helvetica",14)
#define WRITE_SETTING4 QString("KDE")
-void KConfigSkeletonTest::initTestCase()
+void KConfigSkeletonTest::init()
{
- setCurrentGroup("MyGroup");
- addItemBool("MySetting1", mMyBool, DEFAULT_SETTING1);
- addItemColor("MySetting2", mMyColor, DEFAULT_SETTING2);
+ QFile::remove(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/kconfigskeletontestrc");
+ s = new KConfigSkeleton("kconfigskeletontestrc");
+ s->setCurrentGroup("MyGroup");
+ itemBool = s->addItemBool("MySetting1", mMyBool, DEFAULT_SETTING1);
+ s->addItemColor("MySetting2", mMyColor, DEFAULT_SETTING2);
- setCurrentGroup("MyOtherGroup");
- addItemFont("MySetting3", mMyFont, DEFAULT_SETTING3);
- addItemString("MySetting4", mMyString, DEFAULT_SETTING4);
+ s->setCurrentGroup("MyOtherGroup");
+ s->addItemFont("MySetting3", mMyFont, DEFAULT_SETTING3);
+ s->addItemString("MySetting4", mMyString, DEFAULT_SETTING4);
QCOMPARE(mMyBool, DEFAULT_SETTING1);
QCOMPARE(mMyColor, DEFAULT_SETTING2);
@@ -51,6 +53,11 @@ void KConfigSkeletonTest::initTestCase()
QCOMPARE(mMyString, DEFAULT_SETTING4);
}
+void KConfigSkeletonTest::cleanup()
+{
+ delete s;
+}
+
void KConfigSkeletonTest::testSimple()
{
mMyBool = WRITE_SETTING1;
@@ -58,14 +65,14 @@ void KConfigSkeletonTest::testSimple()
mMyFont = WRITE_SETTING3;
mMyString = WRITE_SETTING4;
- save();
+ s->save();
mMyBool = false;
mMyColor = QColor();
mMyString.clear();
mMyFont = QFont();
- read();
+ s->read();
QCOMPARE(mMyBool, WRITE_SETTING1);
QCOMPARE(mMyColor, WRITE_SETTING2);
@@ -75,33 +82,68 @@ void KConfigSkeletonTest::testSimple()
void KConfigSkeletonTest::testRemoveItem()
{
- QVERIFY(findItem("MySetting1"));
- removeItem("MySetting1");
- QVERIFY(!findItem("MySetting1"));
+ QVERIFY(s->findItem("MySetting1"));
+ s->removeItem("MySetting1");
+ QVERIFY(!s->findItem("MySetting1"));
}
void KConfigSkeletonTest::testClear()
{
- QVERIFY(findItem("MySetting2"));
- QVERIFY(findItem("MySetting3"));
- QVERIFY(findItem("MySetting4"));
+ QVERIFY(s->findItem("MySetting2"));
+ QVERIFY(s->findItem("MySetting3"));
+ QVERIFY(s->findItem("MySetting4"));
- clearItems();
+ s->clearItems();
- QVERIFY(!findItem("MySetting2"));
- QVERIFY(!findItem("MySetting3"));
- QVERIFY(!findItem("MySetting4"));
+ QVERIFY(!s->findItem("MySetting2"));
+ QVERIFY(!s->findItem("MySetting3"));
+ QVERIFY(!s->findItem("MySetting4"));
}
void KConfigSkeletonTest::testDefaults()
{
- setDefaults();
+ mMyBool = WRITE_SETTING1;
+ mMyColor = WRITE_SETTING2;
+ mMyFont = WRITE_SETTING3;
+ mMyString = WRITE_SETTING4;
+
+ s->save();
+
+ s->setDefaults();
QCOMPARE(mMyBool, DEFAULT_SETTING1);
QCOMPARE(mMyColor, DEFAULT_SETTING2);
QCOMPARE(mMyFont, DEFAULT_SETTING3);
QCOMPARE(mMyString, DEFAULT_SETTING4);
- save();
+ s->save();
}
+void KConfigSkeletonTest::testKConfigDirty()
+{
+ itemBool->setValue(true);
+ itemBool->writeConfig(s->sharedConfig().data());
+ QVERIFY(s->sharedConfig()->isDirty());
+ s->save();
+ QVERIFY(!s->sharedConfig()->isDirty());
+
+ itemBool->setValue(false);
+ itemBool->writeConfig(s->sharedConfig().data());
+ QVERIFY(s->sharedConfig()->isDirty());
+ s->save();
+ QVERIFY(!s->sharedConfig()->isDirty());
+}
+
+void KConfigSkeletonTest::testSaveRead()
+{
+ itemBool->setValue(true);
+ s->save();
+
+ itemBool->setValue(false);
+ s->save();
+
+ mMyBool = true;
+
+ s->read();
+ QCOMPARE(mMyBool, false);
+}
diff --git a/autotests/kconfigskeletontest.h b/autotests/kconfigskeletontest.h
index c54c7b07..5cdcc9d3 100644
--- a/autotests/kconfigskeletontest.h
+++ b/autotests/kconfigskeletontest.h
@@ -21,19 +21,24 @@
#include <kconfigskeleton.h>
-class KConfigSkeletonTest : public KConfigSkeleton
+class KConfigSkeletonTest : public QObject
{
Q_OBJECT
public:
private Q_SLOTS:
- void initTestCase();
+ void init();
+ void cleanup();
void testSimple();
void testDefaults();
void testRemoveItem();
void testClear();
+ void testKConfigDirty();
+ void testSaveRead();
private:
+ KConfigSkeleton *s;
+ KConfigSkeleton::ItemBool *itemBool;
bool mMyBool;
QColor mMyColor;
QFont mMyFont;
diff --git a/src/core/kcoreconfigskeleton.cpp b/src/core/kcoreconfigskeleton.cpp
index e4255a60..1569a94f 100644
--- a/src/core/kcoreconfigskeleton.cpp
+++ b/src/core/kcoreconfigskeleton.cpp
@@ -152,6 +152,7 @@ void KCoreConfigSkeleton::ItemString::writeConfig(KConfig *config)
} else {
cg.writeEntry(mKey, mReference);
}
+ mLoadedValue = mReference;
}
}
@@ -218,6 +219,7 @@ void KCoreConfigSkeleton::ItemUrl::writeConfig(KConfig *config)
} else {
cg.writeEntry<QString>(mKey, mReference.toString());
}
+ mLoadedValue = mReference;
}
}
@@ -483,6 +485,7 @@ void KCoreConfigSkeleton::ItemEnum::writeConfig(KConfig *config)
} else {
cg.writeEntry(mKey, mReference);
}
+ mLoadedValue = mReference;
}
}
@@ -881,6 +884,7 @@ void KCoreConfigSkeleton::ItemPathList::writeConfig(KConfig *config)
QStringList sl = mReference;
cg.writePathEntry(mKey, sl);
}
+ mLoadedValue = mReference;
}
}
@@ -925,6 +929,7 @@ void KCoreConfigSkeleton::ItemUrlList::writeConfig(KConfig *config)
}
cg.writeEntry<QStringList>(mKey, strList);
}
+ mLoadedValue = mReference;
}
}
diff --git a/src/core/kcoreconfigskeleton.h b/src/core/kcoreconfigskeleton.h
index f8313d1e..bb3d0f61 100644
--- a/src/core/kcoreconfigskeleton.h
+++ b/src/core/kcoreconfigskeleton.h
@@ -277,6 +277,7 @@ public:
} else {
cg.writeEntry(mKey, mReference);
}
+ mLoadedValue = mReference;
}
}