1
/* ============================================================
3
* This file is a part of digiKam project
4
* http://www.digikam.org
7
* Description : a test for the StateSavingObject class
9
* Copyright (C) 2009 by Johannes Wienke <languitar at semipol dot de>
11
* This program is free software; you can redistribute it
12
* and/or modify it under the terms of the GNU General
13
* Public License as published by the Free Software Foundation;
14
* either version 2, or (at your option)
17
* This program is distributed in the hope that it will be useful,
18
* but WITHOUT ANY WARRANTY; without even the implied warranty of
19
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
* GNU General Public License for more details.
22
* ============================================================ */
24
#include "statesavingobjecttest.moc"
32
#include <kconfiggroup.h>
34
#include <ksharedconfig.h>
38
#include "statesavingobject.h"
40
using namespace Digikam;
42
QTEST_MAIN(StateSavingObjectTest)
44
class StubStateSaverPriv
48
StubStateSaverPriv() :
54
unsigned int loadCalls;
55
unsigned int saveCalls;
58
StubStateSaver::StubStateSaver(QObject* parent)
59
: QObject(parent), StateSavingObject(this), d(new StubStateSaverPriv)
63
StubStateSaver::~StubStateSaver()
68
KConfigGroup StubStateSaver::getGroup()
70
return getConfigGroup();
73
QString StubStateSaver::getEntryKey(const QString& base)
75
return entryName(base);
78
void StubStateSaver::doLoadState()
83
void StubStateSaver::doSaveState()
88
bool StubStateSaver::loadCalled()
90
return d->loadCalls > 0;
93
bool StubStateSaver::saveCalled()
95
return d->saveCalls > 0;
98
unsigned int StubStateSaver::numLoadCalls()
103
unsigned int StubStateSaver::numSaveCalls()
108
// -----------------------------------------------------------------------------
110
void StateSavingObjectTest::testGroupName()
113
StubStateSaver saver;
114
QCOMPARE(saver.getGroup().name(), QString("<default>"));
116
const QString name = "testName 2";
117
saver.setObjectName(name);
118
QCOMPARE(saver.getGroup().name(), name);
120
KConfigGroup group = KGlobal::config()->group("SimpleTest Group");
121
saver.setConfigGroup(group);
122
QCOMPARE(saver.getGroup().name(), group.name());
124
// setting object name must not change returned group
125
saver.setObjectName("new Name");
126
QCOMPARE(saver.getGroup().name(), group.name());
128
// resetting group must work
129
KConfigGroup group2 = KGlobal::config()->group("Another SimpleTest Group");
130
saver.setConfigGroup(group2);
131
QCOMPARE(saver.getGroup().name(), group2.name());
135
void StateSavingObjectTest::testPrefixUsage()
138
// default, empty prefix
139
StubStateSaver saver;
140
QCOMPARE(saver.getEntryKey(""), QString(""));
141
QCOMPARE(saver.getEntryKey("test"), QString("test"));
143
const QString prefix = " _Pr efix_ ";
144
saver.setEntryPrefix(prefix);
145
QCOMPARE(saver.getEntryKey(""), prefix);
146
QCOMPARE(saver.getEntryKey("test"), prefix + QString("test"));
150
void StateSavingObjectTest::testDirectCalling()
153
StubStateSaver loader;
154
QVERIFY(!loader.loadCalled());
156
QVERIFY(loader.loadCalled());
157
QVERIFY(!loader.saveCalled());
159
StubStateSaver saver;
160
QVERIFY(!saver.saveCalled());
162
QVERIFY(saver.saveCalled());
163
QVERIFY(!saver.loadCalled());
167
void StateSavingObjectTest::testDirectChildrenLoading()
170
StubStateSaver* parentSaver = new StubStateSaver(0);
171
StubStateSaver* directChild1 = new StubStateSaver(parentSaver);
172
StubStateSaver* directChild2 = new StubStateSaver(parentSaver);
173
StubStateSaver* indirectChild = new StubStateSaver(directChild1);
175
parentSaver->setStateSavingDepth(StateSavingObject::DIRECT_CHILDREN);
177
parentSaver->loadState();
179
QVERIFY(parentSaver->loadCalled());
180
QVERIFY(directChild1->loadCalled());
181
QVERIFY(directChild2->loadCalled());
182
QVERIFY(!indirectChild->loadCalled());
184
QVERIFY(!parentSaver->saveCalled());
185
QVERIFY(!directChild1->saveCalled());
186
QVERIFY(!directChild2->saveCalled());
187
QVERIFY(!indirectChild->saveCalled());
193
void StateSavingObjectTest::testDirectChildrenSaving()
196
StubStateSaver* parentSaver = new StubStateSaver(0);
197
StubStateSaver* directChild1 = new StubStateSaver(parentSaver);
198
StubStateSaver* directChild2 = new StubStateSaver(parentSaver);
199
StubStateSaver* indirectChild = new StubStateSaver(directChild1);
201
parentSaver->setStateSavingDepth(StateSavingObject::DIRECT_CHILDREN);
203
parentSaver->saveState();
205
QVERIFY(parentSaver->saveCalled());
206
QVERIFY(directChild1->saveCalled());
207
QVERIFY(directChild2->saveCalled());
208
QVERIFY(!indirectChild->saveCalled());
210
QVERIFY(!parentSaver->loadCalled());
211
QVERIFY(!directChild1->loadCalled());
212
QVERIFY(!directChild2->loadCalled());
213
QVERIFY(!indirectChild->loadCalled());
219
void StateSavingObjectTest::testRecursiveChildrenLoading()
222
StubStateSaver* parentSaver = new StubStateSaver(0);
223
StubStateSaver* directChild1 = new StubStateSaver(parentSaver);
224
StubStateSaver* directChild2 = new StubStateSaver(parentSaver);
225
StubStateSaver* indirectChild1 = new StubStateSaver(directChild1);
226
StubStateSaver* indirectChild2 = new StubStateSaver(directChild2);
227
StubStateSaver* indirectChild3 = new StubStateSaver(directChild2);
228
QBuffer* directChildStateless = new QBuffer(parentSaver);
229
StubStateSaver* indirectStatelessChild = new StubStateSaver(directChildStateless);
231
parentSaver->setStateSavingDepth(StateSavingObject::RECURSIVE);
232
directChild1->setStateSavingDepth(StateSavingObject::RECURSIVE);
234
parentSaver->loadState();
236
QVERIFY(parentSaver->loadCalled());
237
QVERIFY(directChild1->loadCalled());
238
QVERIFY(directChild2->loadCalled());
239
QVERIFY(indirectChild1->loadCalled());
240
QVERIFY(indirectChild2->loadCalled());
241
QVERIFY(indirectChild3->loadCalled());
242
QVERIFY(indirectStatelessChild->loadCalled());
244
const unsigned int desiredCalls = 1;
245
QCOMPARE(parentSaver->numLoadCalls(), desiredCalls);
246
QCOMPARE(directChild1->numLoadCalls(), desiredCalls);
247
QCOMPARE(directChild2->numLoadCalls(), desiredCalls);
248
QCOMPARE(indirectChild1->numLoadCalls(), desiredCalls);
249
QCOMPARE(indirectChild2->numLoadCalls(), desiredCalls);
250
QCOMPARE(indirectChild3->numLoadCalls(), desiredCalls);
251
QCOMPARE(indirectStatelessChild->numLoadCalls(), desiredCalls);
253
QCOMPARE(directChild1->getStateSavingDepth(), StateSavingObject::RECURSIVE);
259
void StateSavingObjectTest::testRecursiveChildrenSaving()
262
StubStateSaver* parentSaver = new StubStateSaver(0);
263
StubStateSaver* directChild1 = new StubStateSaver(parentSaver);
264
StubStateSaver* directChild2 = new StubStateSaver(parentSaver);
265
StubStateSaver* indirectChild1 = new StubStateSaver(directChild1);
266
StubStateSaver* indirectChild2 = new StubStateSaver(directChild2);
267
StubStateSaver* indirectChild3 = new StubStateSaver(directChild2);
268
QBuffer* directChildStateless = new QBuffer(parentSaver);
269
StubStateSaver* indirectStatelessChild = new StubStateSaver(directChildStateless);
271
parentSaver->setStateSavingDepth(StateSavingObject::RECURSIVE);
272
directChild1->setStateSavingDepth(StateSavingObject::RECURSIVE);
274
parentSaver->saveState();
276
QVERIFY(parentSaver->saveCalled());
277
QVERIFY(directChild1->saveCalled());
278
QVERIFY(directChild2->saveCalled());
279
QVERIFY(indirectChild1->saveCalled());
280
QVERIFY(indirectChild2->saveCalled());
281
QVERIFY(indirectChild3->saveCalled());
282
QVERIFY(indirectStatelessChild->saveCalled());
284
const unsigned int desiredCalls = 1;
285
QCOMPARE(parentSaver->numSaveCalls(), desiredCalls);
286
QCOMPARE(directChild1->numSaveCalls(), desiredCalls);
287
QCOMPARE(directChild2->numSaveCalls(), desiredCalls);
288
QCOMPARE(indirectChild1->numSaveCalls(), desiredCalls);
289
QCOMPARE(indirectChild2->numSaveCalls(), desiredCalls);
290
QCOMPARE(indirectChild3->numSaveCalls(), desiredCalls);
291
QCOMPARE(indirectStatelessChild->numSaveCalls(), desiredCalls);
293
QCOMPARE(directChild1->getStateSavingDepth(), StateSavingObject::RECURSIVE);