48
62
CPPUNIT_TEST_SUITE_END();
53
67
Setup the common test members, etc
57
mFile = "test.project";
58
mTitle = "test title";
59
mScope = "project_test";
61
mNumValueKey = "/values/myNum";
63
mDoubleValueKey = "/values/myDouble";
65
mBoolValueKey = "/values/myBool";
67
mStringValueKey = "/values/very/nested/myString";
69
mStringListValueKey = "/values/myStrings/myStringlist";
74
mDoubleValueConst = 12345.6789;
76
mBoolValueConst = true;
78
mStringValueConst = "Test String";
80
mStringListValueConst += "first";
81
mStringListValueConst += "second";
82
mStringListValueConst += "third";
71
mFile = "test.project";
72
mTitle = "test title";
73
mScope = "project_test";
75
mNumValueKey = "/values/myNum";
77
mDoubleValueKey = "/values/myDouble";
79
mBoolValueKey = "/values/myBool";
81
mStringValueKey = "/values/very/nested/myString";
83
mStringListValueKey = "/values/myStrings/myStringlist";
88
mDoubleValueConst = 12345.6789;
90
mBoolValueConst = true;
92
mStringValueConst = "Test String";
94
mStringListValueConst += "first";
95
mStringListValueConst += "second";
96
mStringListValueConst += "third";
87
101
void testFileName()
89
QgsProject::instance()->dirty( false );
90
QgsProject::instance()->filename( mFile );
103
QgsProject::instance()->dirty( false );
104
QgsProject::instance()->setFileName( mFile );
92
CPPUNIT_ASSERT( mFile == QgsProject::instance()->filename() );
93
CPPUNIT_ASSERT( QgsProject::instance()->dirty() );
106
CPPUNIT_ASSERT( mFile == QgsProject::instance()->fileName() );
107
CPPUNIT_ASSERT( QgsProject::instance()->isDirty() );
100
QgsProject::instance()->dirty( false );
101
QgsProject::instance()->title( mTitle );
114
QgsProject::instance()->dirty( false );
115
QgsProject::instance()->title( mTitle );
103
CPPUNIT_ASSERT( mTitle == QgsProject::instance()->title() );
104
CPPUNIT_ASSERT( QgsProject::instance()->dirty() );
117
CPPUNIT_ASSERT( mTitle == QgsProject::instance()->title() );
118
CPPUNIT_ASSERT( QgsProject::instance()->isDirty() );
108
122
void testMapUnits()
110
QgsProject::instance()->dirty( false );
111
QgsProject::instance()->mapUnits( QGis::METERS );
112
CPPUNIT_ASSERT( QGis::METERS == QgsProject::instance()->mapUnits() );
113
CPPUNIT_ASSERT( QgsProject::instance()->dirty() );
115
QgsProject::instance()->dirty( false );
116
QgsProject::instance()->mapUnits( QGis::FEET );
117
CPPUNIT_ASSERT( QGis::FEET == QgsProject::instance()->mapUnits() );
118
CPPUNIT_ASSERT( QgsProject::instance()->dirty() );
120
QgsProject::instance()->dirty( false );
121
QgsProject::instance()->mapUnits( QGis::DEGREES );
122
CPPUNIT_ASSERT( QGis::DEGREES == QgsProject::instance()->mapUnits() );
123
CPPUNIT_ASSERT( QgsProject::instance()->dirty() );
124
QgsProject::instance()->dirty( false );
125
QgsProject::instance()->mapUnits( QGis::Meters );
126
CPPUNIT_ASSERT( QGis::Meters == QgsProject::instance()->mapUnits() );
127
CPPUNIT_ASSERT( QgsProject::instance()->isDirty() );
129
QgsProject::instance()->dirty( false );
130
QgsProject::instance()->mapUnits( QGis::Feet );
131
CPPUNIT_ASSERT( QGis::Feet == QgsProject::instance()->mapUnits() );
132
CPPUNIT_ASSERT( QgsProject::instance()->isDirty() );
134
QgsProject::instance()->dirty( false );
135
QgsProject::instance()->mapUnits( QGis::Degrees );
136
CPPUNIT_ASSERT( QGis::Degrees == QgsProject::instance()->mapUnits() );
137
CPPUNIT_ASSERT( QgsProject::instance()->isDirty() );
124
138
} // testMapUnits
128
142
void testDirtyFlag()
130
QgsProject::instance()->dirty( true );
131
CPPUNIT_ASSERT( QgsProject::instance()->dirty() );
144
QgsProject::instance()->dirty( true );
145
CPPUNIT_ASSERT( QgsProject::instance()->isDirty() );
133
QgsProject::instance()->dirty( false );
134
CPPUNIT_ASSERT( ! QgsProject::instance()->dirty() );
147
QgsProject::instance()->dirty( false );
148
CPPUNIT_ASSERT( ! QgsProject::instance()->isDirty() );
135
149
} // testDirtyFlag
139
153
Reading entries that are known not to exist should fail and use default
142
156
void readNullEntries()
146
bool b = QgsProject::instance()->readBoolEntry( mScope, mBoolValueKey, false, &status );
147
CPPUNIT_ASSERT( false == b && ! status );
149
int i = QgsProject::instance()->readNumEntry( mScope, mNumValueKey, 13, &status );
150
CPPUNIT_ASSERT( 13 == i && ! status );
152
double d = QgsProject::instance()->readDoubleEntry( mScope, mDoubleValueKey, 99.0, &status );
153
CPPUNIT_ASSERT( 99.0 == d && ! status );
155
QString s = QgsProject::instance()->readEntry( mScope, mStringValueKey, "FOO", &status );
156
CPPUNIT_ASSERT( "FOO" == s && ! status );
158
QStringList sl = QgsProject::instance()->readListEntry( mScope, mStringListValueKey, &status );
159
CPPUNIT_ASSERT( sl.empty() && ! status );
160
bool b = QgsProject::instance()->readBoolEntry( mScope, mBoolValueKey, false, &status );
161
CPPUNIT_ASSERT( false == b && ! status );
163
int i = QgsProject::instance()->readNumEntry( mScope, mNumValueKey, 13, &status );
164
CPPUNIT_ASSERT( 13 == i && ! status );
166
double d = QgsProject::instance()->readDoubleEntry( mScope, mDoubleValueKey, 99.0, &status );
167
CPPUNIT_ASSERT( 99.0 == d && ! status );
169
QString s = QgsProject::instance()->readEntry( mScope, mStringValueKey, "FOO", &status );
170
CPPUNIT_ASSERT( "FOO" == s && ! status );
172
QStringList sl = QgsProject::instance()->readListEntry( mScope, mStringListValueKey, &status );
173
CPPUNIT_ASSERT( sl.empty() && ! status );
161
175
} // readNullEntries
164
178
/** check that writing entries works */
165
179
void testWriteEntries()
167
QgsProject::instance()->dirty( false );
168
CPPUNIT_ASSERT( QgsProject::instance()->writeEntry( mScope, mBoolValueKey, mBoolValueConst ) );
169
CPPUNIT_ASSERT( QgsProject::instance()->dirty() );
171
QgsProject::instance()->dirty( false );
172
CPPUNIT_ASSERT( QgsProject::instance()->writeEntry( mScope, mNumValueKey, mNumValueConst ) );
173
CPPUNIT_ASSERT( QgsProject::instance()->dirty() );
175
QgsProject::instance()->dirty( false );
176
CPPUNIT_ASSERT( QgsProject::instance()->writeEntry( mScope, mDoubleValueKey, mDoubleValueConst ) );
177
CPPUNIT_ASSERT( QgsProject::instance()->dirty() );
179
QgsProject::instance()->dirty( false );
180
CPPUNIT_ASSERT( QgsProject::instance()->writeEntry( mScope, mStringValueKey, mStringValueConst ) );
181
CPPUNIT_ASSERT( QgsProject::instance()->dirty() );
183
QgsProject::instance()->dirty( false );
184
CPPUNIT_ASSERT( QgsProject::instance()->writeEntry( mScope, mStringListValueKey, mStringListValueConst ) );
185
CPPUNIT_ASSERT( QgsProject::instance()->dirty() );
190
int i = QgsProject::instance()->readNumEntry( mScope, mNumValueKey, 13, &status );
191
CPPUNIT_ASSERT( mNumValueConst == i && status );
193
bool b = QgsProject::instance()->readBoolEntry( mScope, mBoolValueKey, false, &status );
194
CPPUNIT_ASSERT( mBoolValueConst == b && status );
196
double d = QgsProject::instance()->readDoubleEntry( mScope, mDoubleValueKey, 99.0, &status );
197
CPPUNIT_ASSERT( mDoubleValueConst == d && status );
199
QString s = QgsProject::instance()->readEntry( mScope, mStringValueKey, "FOO", &status );
200
CPPUNIT_ASSERT( mStringValueConst == s && status );
202
QStringList sl = QgsProject::instance()->readListEntry( mScope, mStringListValueKey, &status );
203
CPPUNIT_ASSERT( mStringListValueConst == sl && status );
181
QgsProject::instance()->dirty( false );
182
CPPUNIT_ASSERT( QgsProject::instance()->writeEntry( mScope, mBoolValueKey, mBoolValueConst ) );
183
CPPUNIT_ASSERT( QgsProject::instance()->isDirty() );
185
QgsProject::instance()->dirty( false );
186
CPPUNIT_ASSERT( QgsProject::instance()->writeEntry( mScope, mNumValueKey, mNumValueConst ) );
187
CPPUNIT_ASSERT( QgsProject::instance()->isDirty() );
189
QgsProject::instance()->dirty( false );
190
CPPUNIT_ASSERT( QgsProject::instance()->writeEntry( mScope, mDoubleValueKey, mDoubleValueConst ) );
191
CPPUNIT_ASSERT( QgsProject::instance()->isDirty() );
193
QgsProject::instance()->dirty( false );
194
CPPUNIT_ASSERT( QgsProject::instance()->writeEntry( mScope, mStringValueKey, mStringValueConst ) );
195
CPPUNIT_ASSERT( QgsProject::instance()->isDirty() );
197
QgsProject::instance()->dirty( false );
198
CPPUNIT_ASSERT( QgsProject::instance()->writeEntry( mScope, mStringListValueKey, mStringListValueConst ) );
199
CPPUNIT_ASSERT( QgsProject::instance()->isDirty() );
204
int i = QgsProject::instance()->readNumEntry( mScope, mNumValueKey, 13, &status );
205
CPPUNIT_ASSERT( mNumValueConst == i && status );
207
bool b = QgsProject::instance()->readBoolEntry( mScope, mBoolValueKey, false, &status );
208
CPPUNIT_ASSERT( mBoolValueConst == b && status );
210
double d = QgsProject::instance()->readDoubleEntry( mScope, mDoubleValueKey, 99.0, &status );
211
CPPUNIT_ASSERT( mDoubleValueConst == d && status );
213
QString s = QgsProject::instance()->readEntry( mScope, mStringValueKey, "FOO", &status );
214
CPPUNIT_ASSERT( mStringValueConst == s && status );
216
QStringList sl = QgsProject::instance()->readListEntry( mScope, mStringListValueKey, &status );
217
CPPUNIT_ASSERT( mStringListValueConst == sl && status );
205
219
} // testWriteEntries
208
222
{ // write out the state, clear the project, reload it, and see if we got
210
CPPUNIT_ASSERT( QgsProject::instance()->write() );
212
QgsProject::instance()->clearProperties();
216
CPPUNIT_ASSERT( QgsProject::instance()->read() );
218
catch( QgsException & e )
220
// since we're not running the full application, this exception is
221
// expected, so we can safely ignore it
223
qDebug( "%s:%d caught expected exception %s", __FILE__, __LINE__, e.what() );
229
bool b = QgsProject::instance()->readBoolEntry( mScope, mBoolValueKey, false, &status );
230
CPPUNIT_ASSERT( mBoolValueConst == b && status );
232
int i = QgsProject::instance()->readNumEntry( mScope, mNumValueKey, 13, &status );
233
CPPUNIT_ASSERT( mNumValueConst == i && status );
235
double d = QgsProject::instance()->readDoubleEntry( mScope, mDoubleValueKey, 99.0, &status );
236
CPPUNIT_ASSERT( mDoubleValueConst == d && status );
238
QString s = QgsProject::instance()->readEntry( mScope, mStringValueKey, "FOO", &status );
239
CPPUNIT_ASSERT( mStringValueConst == s && status );
241
QStringList sl = QgsProject::instance()->readListEntry( mScope, mStringListValueKey, &status );
242
CPPUNIT_ASSERT( mStringListValueConst == sl && status );
224
CPPUNIT_ASSERT( QgsProject::instance()->write() );
226
QgsProject::instance()->clearProperties();
230
CPPUNIT_ASSERT( QgsProject::instance()->read() );
232
catch ( QgsException & e )
234
// since we're not running the full application, this exception is
235
// expected, so we can safely ignore it
237
qDebug( "%s:%d caught expected exception %s", __FILE__, __LINE__, e.what() );
243
bool b = QgsProject::instance()->readBoolEntry( mScope, mBoolValueKey, false, &status );
244
CPPUNIT_ASSERT( mBoolValueConst == b && status );
246
int i = QgsProject::instance()->readNumEntry( mScope, mNumValueKey, 13, &status );
247
CPPUNIT_ASSERT( mNumValueConst == i && status );
249
double d = QgsProject::instance()->readDoubleEntry( mScope, mDoubleValueKey, 99.0, &status );
250
CPPUNIT_ASSERT( mDoubleValueConst == d && status );
252
QString s = QgsProject::instance()->readEntry( mScope, mStringValueKey, "FOO", &status );
253
CPPUNIT_ASSERT( mStringValueConst == s && status );
255
QStringList sl = QgsProject::instance()->readListEntry( mScope, mStringListValueKey, &status );
256
CPPUNIT_ASSERT( mStringListValueConst == sl && status );
244
258
// qDebug( "%s:%d testXML after read" );
250
264
void testRemoveEntry()
252
// presume that testWriteEntries() already invoked so that properties are set
254
CPPUNIT_ASSERT( QgsProject::instance()->removeEntry( mScope, mBoolValueKey ) );
255
CPPUNIT_ASSERT( QgsProject::instance()->removeEntry( mScope, mNumValueKey ) );
256
CPPUNIT_ASSERT( QgsProject::instance()->removeEntry( mScope, mDoubleValueKey ) );
257
CPPUNIT_ASSERT( QgsProject::instance()->removeEntry( mScope, mStringValueKey ) );
258
CPPUNIT_ASSERT( QgsProject::instance()->removeEntry( mScope, mStringListValueKey ) );
260
// since we've removed everything, re-run this test to verify that
266
// presume that testWriteEntries() already invoked so that properties are set
268
CPPUNIT_ASSERT( QgsProject::instance()->removeEntry( mScope, mBoolValueKey ) );
269
CPPUNIT_ASSERT( QgsProject::instance()->removeEntry( mScope, mNumValueKey ) );
270
CPPUNIT_ASSERT( QgsProject::instance()->removeEntry( mScope, mDoubleValueKey ) );
271
CPPUNIT_ASSERT( QgsProject::instance()->removeEntry( mScope, mStringValueKey ) );
272
CPPUNIT_ASSERT( QgsProject::instance()->removeEntry( mScope, mStringListValueKey ) );
274
// since we've removed everything, re-run this test to verify that
263
277
} // testRemoveEntry
266
280
void testClearProperties()
267
281
{ // rebuild the properties deleted in testRemoveEntry()
270
// remove all in one fell swoop
271
QgsProject::instance()->clearProperties();
273
// since we've removed everything, re-run this test to verify that
284
// remove all in one fell swoop
285
QgsProject::instance()->clearProperties();
287
// since we've removed everything, re-run this test to verify that
275
289
} // testClearProperties
280
294
void testEntryList()
282
// at first the entry list should be empty
283
QStringList entries = QgsProject::instance()->entryList( mScope, "/foo" );
285
CPPUNIT_ASSERT( entries.isEmpty() );
287
QgsProject::instance()->writeEntry( mScope, "/foo/bar", "one" );
288
QgsProject::instance()->writeEntry( mScope, "/foo/baz", "two" );
289
QgsProject::instance()->writeEntry( mScope, "/foo/quux", "three" );
291
QgsProject::instance()->writeEntry( mScope, "/foo/xmmy/blah", "four" );
292
QgsProject::instance()->writeEntry( mScope, "/foo/xmmy/bogus", "five" );
294
QgsProject::instance()->dumpProperties();
296
// So entrylist for /foo should return "bar", "baz", and "quux" but
297
// NOT "xmmy". Nor should it contain any key values.
299
entries = QgsProject::instance()->entryList( mScope, "/foo" );
302
for ( QStringList::iterator i = entries.begin();
310
CPPUNIT_ASSERT( entries.find( "bar" ) != entries.end() );
311
CPPUNIT_ASSERT( entries.find( "baz" ) != entries.end() );
312
CPPUNIT_ASSERT( entries.find( "quux" ) != entries.end() );
314
CPPUNIT_ASSERT( entries.find( "xmmy" ) == entries.end() );
315
CPPUNIT_ASSERT( entries.find( "blah" ) == entries.end() );
316
CPPUNIT_ASSERT( entries.find( "bogus" ) == entries.end() );
318
CPPUNIT_ASSERT( entries.find( "one" ) == entries.end() );
319
CPPUNIT_ASSERT( entries.find( "two" ) == entries.end() );
320
CPPUNIT_ASSERT( entries.find( "three" ) == entries.end() );
321
CPPUNIT_ASSERT( entries.find( "four" ) == entries.end() );
322
CPPUNIT_ASSERT( entries.find( "five" ) == entries.end() );
296
// at first the entry list should be empty
297
QStringList entries = QgsProject::instance()->entryList( mScope, "/foo" );
299
CPPUNIT_ASSERT( entries.isEmpty() );
301
QgsProject::instance()->writeEntry( mScope, "/foo/bar", "one" );
302
QgsProject::instance()->writeEntry( mScope, "/foo/baz", "two" );
303
QgsProject::instance()->writeEntry( mScope, "/foo/quux", "three" );
305
QgsProject::instance()->writeEntry( mScope, "/foo/xmmy/blah", "four" );
306
QgsProject::instance()->writeEntry( mScope, "/foo/xmmy/bogus", "five" );
308
QgsProject::instance()->dumpProperties();
310
// So entrylist for /foo should return "bar", "baz", and "quux" but
311
// NOT "xmmy". Nor should it contain any key values.
313
entries = QgsProject::instance()->entryList( mScope, "/foo" );
316
for ( QStringList::iterator i = entries.begin();
324
CPPUNIT_ASSERT( entries.find( "bar" ) != entries.end() );
325
CPPUNIT_ASSERT( entries.find( "baz" ) != entries.end() );
326
CPPUNIT_ASSERT( entries.find( "quux" ) != entries.end() );
328
CPPUNIT_ASSERT( entries.find( "xmmy" ) == entries.end() );
329
CPPUNIT_ASSERT( entries.find( "blah" ) == entries.end() );
330
CPPUNIT_ASSERT( entries.find( "bogus" ) == entries.end() );
332
CPPUNIT_ASSERT( entries.find( "one" ) == entries.end() );
333
CPPUNIT_ASSERT( entries.find( "two" ) == entries.end() );
334
CPPUNIT_ASSERT( entries.find( "three" ) == entries.end() );
335
CPPUNIT_ASSERT( entries.find( "four" ) == entries.end() );
336
CPPUNIT_ASSERT( entries.find( "five" ) == entries.end() );
326
340
void testSubkeyList()
328
// at first the entry list should be empty -- "bogus" known to be empty
329
QStringList entries = QgsProject::instance()->subkeyList( mScope, "/bogus" );
331
for ( QStringList::iterator i = entries.begin();
339
CPPUNIT_ASSERT( entries.isEmpty() );
341
// So subkeylist for /foo should return only "xmmy".
343
entries = QgsProject::instance()->subkeyList( mScope, "/foo" );
346
for ( QStringList::iterator i = entries.begin();
354
CPPUNIT_ASSERT( entries.find( "bar" ) == entries.end() );
355
CPPUNIT_ASSERT( entries.find( "baz" ) == entries.end() );
356
CPPUNIT_ASSERT( entries.find( "quux" ) == entries.end() );
358
CPPUNIT_ASSERT( entries.find( "xmmy" ) != entries.end() );
359
CPPUNIT_ASSERT( entries.find( "blah" ) == entries.end() );
360
CPPUNIT_ASSERT( entries.find( "bogus" ) == entries.end() );
362
CPPUNIT_ASSERT( entries.find( "one" ) == entries.end() );
363
CPPUNIT_ASSERT( entries.find( "two" ) == entries.end() );
364
CPPUNIT_ASSERT( entries.find( "three" ) == entries.end() );
365
CPPUNIT_ASSERT( entries.find( "four" ) == entries.end() );
366
CPPUNIT_ASSERT( entries.find( "five" ) == entries.end() );
342
// at first the entry list should be empty -- "bogus" known to be empty
343
QStringList entries = QgsProject::instance()->subkeyList( mScope, "/bogus" );
345
for ( QStringList::iterator i = entries.begin();
353
CPPUNIT_ASSERT( entries.isEmpty() );
355
// So subkeylist for /foo should return only "xmmy".
357
entries = QgsProject::instance()->subkeyList( mScope, "/foo" );
360
for ( QStringList::iterator i = entries.begin();
368
CPPUNIT_ASSERT( entries.find( "bar" ) == entries.end() );
369
CPPUNIT_ASSERT( entries.find( "baz" ) == entries.end() );
370
CPPUNIT_ASSERT( entries.find( "quux" ) == entries.end() );
372
CPPUNIT_ASSERT( entries.find( "xmmy" ) != entries.end() );
373
CPPUNIT_ASSERT( entries.find( "blah" ) == entries.end() );
374
CPPUNIT_ASSERT( entries.find( "bogus" ) == entries.end() );
376
CPPUNIT_ASSERT( entries.find( "one" ) == entries.end() );
377
CPPUNIT_ASSERT( entries.find( "two" ) == entries.end() );
378
CPPUNIT_ASSERT( entries.find( "three" ) == entries.end() );
379
CPPUNIT_ASSERT( entries.find( "four" ) == entries.end() );
380
CPPUNIT_ASSERT( entries.find( "five" ) == entries.end() );
372
386
/// file name for project file