]> git.saurik.com Git - wxWidgets.git/blame - tests/config/fileconf.cpp
added wxICON_NONE and implement support for it in wxGTK (closes #2897)
[wxWidgets.git] / tests / config / fileconf.cpp
CommitLineData
17c24d37
VZ
1///////////////////////////////////////////////////////////////////////////////
2// Name: tests/fileconf/fileconf.cpp
3// Purpose: wxFileConf unit test
4// Author: Vadim Zeitlin
5// Created: 2004-09-19
6// RCS-ID: $Id$
7// Copyright: (c) 2004 Vadim Zeitlin
8///////////////////////////////////////////////////////////////////////////////
9
10// ----------------------------------------------------------------------------
11// headers
12// ----------------------------------------------------------------------------
13
8899b155 14#include "testprec.h"
17c24d37
VZ
15
16#ifdef __BORLANDC__
17 #pragma hdrstop
18#endif
19
20#if wxUSE_FILECONFIG
21
22#ifndef WX_PRECOMP
23#endif // WX_PRECOMP
24
25#include "wx/fileconf.h"
26#include "wx/sstream.h"
ca7766b4 27#include "wx/log.h"
17c24d37
VZ
28
29static const wxChar *testconfig =
30_T("[root]\n")
31_T("entry=value\n")
32_T("[root/group1]\n")
33_T("[root/group1/subgroup]\n")
34_T("subentry=subvalue\n")
9db6158a 35_T("subentry2=subvalue2\n")
17c24d37
VZ
36_T("[root/group2]\n")
37;
38
e1a2c7a5
VZ
39// ----------------------------------------------------------------------------
40// local functions
41// ----------------------------------------------------------------------------
42
43static wxString Dump(wxFileConfig& fc)
44{
45 wxStringOutputStream sos;
46 fc.Save(sos);
47 return wxTextFile::Translate(sos.GetString(), wxTextFileType_Unix);
48}
49
50// helper macro to test wxFileConfig contents
51#define wxVERIFY_FILECONFIG(t, fc) CPPUNIT_ASSERT_EQUAL(wxString(t), Dump(fc))
52
17c24d37
VZ
53// ----------------------------------------------------------------------------
54// test class
55// ----------------------------------------------------------------------------
56
57class FileConfigTestCase : public CppUnit::TestCase
58{
59public:
8899b155 60 FileConfigTestCase() { }
17c24d37
VZ
61
62private:
63 CPPUNIT_TEST_SUITE( FileConfigTestCase );
9db6158a 64 CPPUNIT_TEST( Path );
bd2fe27e 65 CPPUNIT_TEST( AddEntries );
9db6158a
VZ
66 CPPUNIT_TEST( GetEntries );
67 CPPUNIT_TEST( GetGroups );
68 CPPUNIT_TEST( HasEntry );
17c24d37 69 CPPUNIT_TEST( HasGroup );
5814e8ba 70 CPPUNIT_TEST( Binary );
94139118
VZ
71 CPPUNIT_TEST( Save );
72 CPPUNIT_TEST( DeleteEntry );
e86882e3 73 CPPUNIT_TEST( DeleteAndWriteEntry );
94139118
VZ
74 CPPUNIT_TEST( DeleteGroup );
75 CPPUNIT_TEST( DeleteAll );
76 CPPUNIT_TEST( RenameEntry );
77 CPPUNIT_TEST( RenameGroup );
c406cd3d
VZ
78 CPPUNIT_TEST( CreateEntriesAndSubgroup );
79 CPPUNIT_TEST( CreateSubgroupAndEntries );
cbc9c06f 80 CPPUNIT_TEST( DeleteLastGroup );
6ad0a7d5 81 CPPUNIT_TEST( DeleteAndRecreateGroup );
9a7b7798 82 CPPUNIT_TEST( AddToExistingRoot );
6221357b 83 CPPUNIT_TEST( ReadNonExistent );
17c24d37
VZ
84 CPPUNIT_TEST_SUITE_END();
85
9db6158a 86 void Path();
bd2fe27e 87 void AddEntries();
9db6158a
VZ
88 void GetEntries();
89 void GetGroups();
90 void HasEntry();
17c24d37 91 void HasGroup();
5814e8ba 92 void Binary();
94139118
VZ
93 void Save();
94 void DeleteEntry();
e86882e3 95 void DeleteAndWriteEntry();
94139118
VZ
96 void DeleteGroup();
97 void DeleteAll();
98 void RenameEntry();
99 void RenameGroup();
c406cd3d
VZ
100 void CreateEntriesAndSubgroup();
101 void CreateSubgroupAndEntries();
cbc9c06f 102 void DeleteLastGroup();
6ad0a7d5 103 void DeleteAndRecreateGroup();
9a7b7798 104 void AddToExistingRoot();
6221357b 105 void ReadNonExistent();
9a7b7798 106
17c24d37 107
9db6158a
VZ
108 static wxString ChangePath(wxFileConfig& fc, const wxChar *path)
109 {
110 fc.SetPath(path);
111
112 return fc.GetPath();
113 }
114
115 void CheckGroupEntries(const wxFileConfig& fc,
116 const wxChar *path,
117 size_t nEntries,
118 ...);
119 void CheckGroupSubgroups(const wxFileConfig& fc,
120 const wxChar *path,
121 size_t nGroups,
122 ...);
123
17c24d37
VZ
124 DECLARE_NO_COPY_CLASS(FileConfigTestCase)
125};
126
127// register in the unnamed registry so that these tests are run by default
128CPPUNIT_TEST_SUITE_REGISTRATION( FileConfigTestCase );
129
130// also include in it's own registry so that these tests can be run alone
131CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( FileConfigTestCase, "FileConfigTestCase" );
132
9db6158a
VZ
133void FileConfigTestCase::Path()
134{
135 wxStringInputStream sis(testconfig);
136 wxFileConfig fc(sis);
137
138 CPPUNIT_ASSERT( ChangePath(fc, _T("")) == _T("") );
139 CPPUNIT_ASSERT( ChangePath(fc, _T("/")) == _T("") );
140 CPPUNIT_ASSERT( ChangePath(fc, _T("root")) == _T("/root") );
141 CPPUNIT_ASSERT( ChangePath(fc, _T("/root")) == _T("/root") );
142 CPPUNIT_ASSERT( ChangePath(fc, _T("/root/group1/subgroup")) == _T("/root/group1/subgroup") );
143 CPPUNIT_ASSERT( ChangePath(fc, _T("/root/group2")) == _T("/root/group2") );
144}
145
bd2fe27e
VZ
146void FileConfigTestCase::AddEntries()
147{
148 wxFileConfig fc;
149
e1a2c7a5 150 wxVERIFY_FILECONFIG( _T(""), fc );
bd2fe27e
VZ
151
152 fc.Write(_T("/Foo"), _T("foo"));
e1a2c7a5 153 wxVERIFY_FILECONFIG( _T("Foo=foo\n"), fc );
bd2fe27e
VZ
154
155 fc.Write(_T("/Bar/Baz"), _T("baz"));
e1a2c7a5 156 wxVERIFY_FILECONFIG( _T("Foo=foo\n[Bar]\nBaz=baz\n"), fc );
bd2fe27e
VZ
157
158 fc.DeleteAll();
e1a2c7a5 159 wxVERIFY_FILECONFIG( _T(""), fc );
bd2fe27e
VZ
160
161 fc.Write(_T("/Bar/Baz"), _T("baz"));
e1a2c7a5 162 wxVERIFY_FILECONFIG( _T("[Bar]\nBaz=baz\n"), fc );
bd2fe27e
VZ
163
164 fc.Write(_T("/Foo"), _T("foo"));
e1a2c7a5 165 wxVERIFY_FILECONFIG( _T("Foo=foo\n[Bar]\nBaz=baz\n"), fc );
bd2fe27e
VZ
166}
167
9db6158a
VZ
168void
169FileConfigTestCase::CheckGroupEntries(const wxFileConfig& fc,
170 const wxChar *path,
171 size_t nEntries,
172 ...)
173{
174 wxConfigPathChanger change(&fc, wxString(path) + _T("/"));
175
176 CPPUNIT_ASSERT( fc.GetNumberOfEntries() == nEntries );
177
178 va_list ap;
179 va_start(ap, nEntries);
180
181 long cookie;
182 wxString name;
183 for ( bool cont = fc.GetFirstEntry(name, cookie);
184 cont;
185 cont = fc.GetNextEntry(name, cookie), nEntries-- )
186 {
187 CPPUNIT_ASSERT( name == va_arg(ap, wxChar *) );
188 }
189
190 CPPUNIT_ASSERT( nEntries == 0 );
191
192 va_end(ap);
193}
194
195void
196FileConfigTestCase::CheckGroupSubgroups(const wxFileConfig& fc,
197 const wxChar *path,
198 size_t nGroups,
199 ...)
200{
201 wxConfigPathChanger change(&fc, wxString(path) + _T("/"));
202
203 CPPUNIT_ASSERT( fc.GetNumberOfGroups() == nGroups );
204
205 va_list ap;
206 va_start(ap, nGroups);
207
208 long cookie;
209 wxString name;
210 for ( bool cont = fc.GetFirstGroup(name, cookie);
211 cont;
212 cont = fc.GetNextGroup(name, cookie), nGroups-- )
213 {
214 CPPUNIT_ASSERT( name == va_arg(ap, wxChar *) );
215 }
216
217 CPPUNIT_ASSERT( nGroups == 0 );
218
219 va_end(ap);
220}
221
222void FileConfigTestCase::GetEntries()
223{
224 wxStringInputStream sis(testconfig);
225 wxFileConfig fc(sis);
226
227 CheckGroupEntries(fc, _T(""), 0);
228 CheckGroupEntries(fc, _T("/root"), 1, _T("entry"));
229 CheckGroupEntries(fc, _T("/root/group1"), 0);
230 CheckGroupEntries(fc, _T("/root/group1/subgroup"),
231 2, _T("subentry"), _T("subentry2"));
232}
233
234void FileConfigTestCase::GetGroups()
235{
236 wxStringInputStream sis(testconfig);
237 wxFileConfig fc(sis);
238
239 CheckGroupSubgroups(fc, _T(""), 1, _T("root"));
240 CheckGroupSubgroups(fc, _T("/root"), 2, _T("group1"), _T("group2"));
241 CheckGroupSubgroups(fc, _T("/root/group1"), 1, _T("subgroup"));
242 CheckGroupSubgroups(fc, _T("/root/group2"), 0);
243}
244
245void FileConfigTestCase::HasEntry()
246{
247 wxStringInputStream sis(testconfig);
248 wxFileConfig fc(sis);
249
250 CPPUNIT_ASSERT( !fc.HasEntry(_T("root")) );
251 CPPUNIT_ASSERT( fc.HasEntry(_T("root/entry")) );
252 CPPUNIT_ASSERT( fc.HasEntry(_T("/root/entry")) );
253 CPPUNIT_ASSERT( fc.HasEntry(_T("root/group1/subgroup/subentry")) );
254 CPPUNIT_ASSERT( !fc.HasEntry(_T("")) );
255 CPPUNIT_ASSERT( !fc.HasEntry(_T("root/group1")) );
256 CPPUNIT_ASSERT( !fc.HasEntry(_T("subgroup/subentry")) );
b0db68b2
VZ
257 CPPUNIT_ASSERT( !fc.HasEntry(_T("/root/no_such_group/entry")) );
258 CPPUNIT_ASSERT( !fc.HasGroup(_T("/root/no_such_group")) );
9db6158a
VZ
259}
260
17c24d37
VZ
261void FileConfigTestCase::HasGroup()
262{
263 wxStringInputStream sis(testconfig);
264 wxFileConfig fc(sis);
265
266 CPPUNIT_ASSERT( fc.HasGroup(_T("root")) );
267 CPPUNIT_ASSERT( fc.HasGroup(_T("root/group1")) );
268 CPPUNIT_ASSERT( fc.HasGroup(_T("root/group1/subgroup")) );
269 CPPUNIT_ASSERT( fc.HasGroup(_T("root/group2")) );
17c24d37
VZ
270 CPPUNIT_ASSERT( !fc.HasGroup(_T("")) );
271 CPPUNIT_ASSERT( !fc.HasGroup(_T("root/group")) );
272 CPPUNIT_ASSERT( !fc.HasGroup(_T("root//subgroup")) );
993896f1
VZ
273 CPPUNIT_ASSERT( !fc.HasGroup(_T("foot/subgroup")) );
274 CPPUNIT_ASSERT( !fc.HasGroup(_T("foot")) );
17c24d37
VZ
275}
276
5814e8ba
VZ
277void FileConfigTestCase::Binary()
278{
279 wxStringInputStream sis(
280 "[root]\n"
281 "binary=Zm9vCg==\n"
282 );
283 wxFileConfig fc(sis);
284
285 wxMemoryBuffer buf;
286 fc.Read("/root/binary", &buf);
287
288 CPPUNIT_ASSERT( memcmp("foo\n", buf.GetData(), buf.GetDataLen()) == 0 );
289
290 buf.SetDataLen(0);
291 buf.AppendData("\0\1\2", 3);
292 fc.Write("/root/012", buf);
293 wxVERIFY_FILECONFIG(
294 "[root]\n"
295 "binary=Zm9vCg==\n"
296 "012=AAEC\n",
297 fc
298 );
299}
300
94139118
VZ
301void FileConfigTestCase::Save()
302{
303 wxStringInputStream sis(testconfig);
304 wxFileConfig fc(sis);
e1a2c7a5 305 wxVERIFY_FILECONFIG( testconfig, fc );
94139118
VZ
306}
307
308void FileConfigTestCase::DeleteEntry()
309{
310 wxStringInputStream sis(testconfig);
311 wxFileConfig fc(sis);
312
313 CPPUNIT_ASSERT( !fc.DeleteEntry(_T("foo")) );
314
315 CPPUNIT_ASSERT( fc.DeleteEntry(_T("root/group1/subgroup/subentry")) );
e1a2c7a5
VZ
316 wxVERIFY_FILECONFIG( _T("[root]\n")
317 _T("entry=value\n")
318 _T("[root/group1]\n")
319 _T("[root/group1/subgroup]\n")
320 _T("subentry2=subvalue2\n")
321 _T("[root/group2]\n"),
322 fc );
94139118
VZ
323
324 // group should be deleted now as well as it became empty
325 wxConfigPathChanger change(&fc, _T("root/group1/subgroup/subentry2"));
326 CPPUNIT_ASSERT( fc.DeleteEntry(_T("subentry2")) );
e1a2c7a5
VZ
327 wxVERIFY_FILECONFIG( _T("[root]\n")
328 _T("entry=value\n")
329 _T("[root/group1]\n")
330 _T("[root/group2]\n"),
331 fc );
94139118
VZ
332}
333
e86882e3
VZ
334void FileConfigTestCase::DeleteAndWriteEntry()
335{
336 wxStringInputStream sis(
337 "[root/group1]\n"
338 "subentry=subvalue\n"
339 "subentry2=subvalue2\n"
340 "subentry3=subvalue3\n"
341 );
342
343 wxFileConfig fc(sis);
344
345 fc.DeleteEntry("/root/group1/subentry2");
346 fc.Write("/root/group1/subentry2", "testvalue");
347 fc.DeleteEntry("/root/group2/subentry2");
348 fc.Write("/root/group2/subentry2", "testvalue2");
349 fc.DeleteEntry("/root/group1/subentry2");
350 fc.Write("/root/group1/subentry2", "testvalue");
351 fc.DeleteEntry("/root/group2/subentry2");
352 fc.Write("/root/group2/subentry2", "testvalue2");
353
354 wxVERIFY_FILECONFIG( "[root/group1]\n"
355 "subentry=subvalue\n"
356 "subentry3=subvalue3\n"
357 "subentry2=testvalue\n"
358 "[root/group2]\n"
359 "subentry2=testvalue2\n",
360 fc );
361
362 fc.DeleteEntry("/root/group2/subentry2");
363 wxVERIFY_FILECONFIG( "[root/group1]\n"
364 "subentry=subvalue\n"
365 "subentry3=subvalue3\n"
366 "subentry2=testvalue\n",
367 fc );
368
369 fc.DeleteEntry("/root/group1/subentry2");
370 fc.DeleteEntry("/root/group1/subentry");
371 fc.DeleteEntry("/root/group1/subentry3");
372 wxVERIFY_FILECONFIG( "", fc );
373}
374
94139118
VZ
375void FileConfigTestCase::DeleteGroup()
376{
377 wxStringInputStream sis(testconfig);
378 wxFileConfig fc(sis);
379
380 CPPUNIT_ASSERT( !fc.DeleteGroup(_T("foo")) );
381
382 CPPUNIT_ASSERT( fc.DeleteGroup(_T("root/group1")) );
e1a2c7a5
VZ
383 wxVERIFY_FILECONFIG( _T("[root]\n")
384 _T("entry=value\n")
385 _T("[root/group2]\n"),
386 fc );
94139118 387
35c4b4da
VZ
388 // notice trailing slash: it should be ignored
389 CPPUNIT_ASSERT( fc.DeleteGroup(_T("root/group2/")) );
e1a2c7a5
VZ
390 wxVERIFY_FILECONFIG( _T("[root]\n")
391 _T("entry=value\n"),
392 fc );
94139118
VZ
393
394 CPPUNIT_ASSERT( fc.DeleteGroup(_T("root")) );
395 CPPUNIT_ASSERT( Dump(fc).empty() );
396}
397
398void FileConfigTestCase::DeleteAll()
399{
400 wxStringInputStream sis(testconfig);
401 wxFileConfig fc(sis);
402
403 CPPUNIT_ASSERT( fc.DeleteAll() );
404 CPPUNIT_ASSERT( Dump(fc).empty() );
405}
406
407void FileConfigTestCase::RenameEntry()
408{
409 wxStringInputStream sis(testconfig);
410 wxFileConfig fc(sis);
411
412 fc.SetPath(_T("root"));
413 CPPUNIT_ASSERT( fc.RenameEntry(_T("entry"), _T("newname")) );
e1a2c7a5
VZ
414 wxVERIFY_FILECONFIG( _T("[root]\n")
415 _T("newname=value\n")
416 _T("[root/group1]\n")
417 _T("[root/group1/subgroup]\n")
418 _T("subentry=subvalue\n")
419 _T("subentry2=subvalue2\n")
420 _T("[root/group2]\n"),
421 fc );
94139118
VZ
422
423 fc.SetPath(_T("group1/subgroup"));
424 CPPUNIT_ASSERT( !fc.RenameEntry(_T("entry"), _T("newname")) );
425 CPPUNIT_ASSERT( !fc.RenameEntry(_T("subentry"), _T("subentry2")) );
426
427 CPPUNIT_ASSERT( fc.RenameEntry(_T("subentry"), _T("subentry1")) );
e1a2c7a5
VZ
428 wxVERIFY_FILECONFIG( _T("[root]\n")
429 _T("newname=value\n")
430 _T("[root/group1]\n")
431 _T("[root/group1/subgroup]\n")
432 _T("subentry2=subvalue2\n")
433 _T("subentry1=subvalue\n")
434 _T("[root/group2]\n"),
435 fc );
94139118
VZ
436}
437
438void FileConfigTestCase::RenameGroup()
439{
440 wxStringInputStream sis(testconfig);
441 wxFileConfig fc(sis);
442
443 CPPUNIT_ASSERT( fc.RenameGroup(_T("root"), _T("foot")) );
e1a2c7a5
VZ
444 wxVERIFY_FILECONFIG( _T("[foot]\n")
445 _T("entry=value\n")
446 _T("[foot/group1]\n")
447 _T("[foot/group1/subgroup]\n")
448 _T("subentry=subvalue\n")
449 _T("subentry2=subvalue2\n")
450 _T("[foot/group2]\n"),
451 fc );
3ca10461 452
126bd656
VZ
453 // renaming a path doesn't work, it must be the immediate group
454 CPPUNIT_ASSERT( !fc.RenameGroup(_T("foot/group1"), _T("group2")) );
455
456
3ca10461
VZ
457 fc.SetPath(_T("foot"));
458
126bd656
VZ
459 // renaming to a name of existing group doesn't work
460 CPPUNIT_ASSERT( !fc.RenameGroup(_T("group1"), _T("group2")) );
461
462 // try exchanging the groups names and then restore them back
3ca10461
VZ
463 CPPUNIT_ASSERT( fc.RenameGroup(_T("group1"), _T("groupTmp")) );
464 wxVERIFY_FILECONFIG( _T("[foot]\n")
465 _T("entry=value\n")
466 _T("[foot/groupTmp]\n")
467 _T("[foot/groupTmp/subgroup]\n")
468 _T("subentry=subvalue\n")
469 _T("subentry2=subvalue2\n")
470 _T("[foot/group2]\n"),
471 fc );
472
473 CPPUNIT_ASSERT( fc.RenameGroup(_T("group2"), _T("group1")) );
474 wxVERIFY_FILECONFIG( _T("[foot]\n")
475 _T("entry=value\n")
476 _T("[foot/groupTmp]\n")
477 _T("[foot/groupTmp/subgroup]\n")
478 _T("subentry=subvalue\n")
479 _T("subentry2=subvalue2\n")
480 _T("[foot/group1]\n"),
481 fc );
482
483 CPPUNIT_ASSERT( fc.RenameGroup(_T("groupTmp"), _T("group2")) );
484 wxVERIFY_FILECONFIG( _T("[foot]\n")
485 _T("entry=value\n")
486 _T("[foot/group2]\n")
487 _T("[foot/group2/subgroup]\n")
488 _T("subentry=subvalue\n")
489 _T("subentry2=subvalue2\n")
490 _T("[foot/group1]\n"),
491 fc );
126bd656
VZ
492
493 CPPUNIT_ASSERT( fc.RenameGroup(_T("group1"), _T("groupTmp")) );
494 wxVERIFY_FILECONFIG( _T("[foot]\n")
495 _T("entry=value\n")
496 _T("[foot/group2]\n")
497 _T("[foot/group2/subgroup]\n")
498 _T("subentry=subvalue\n")
499 _T("subentry2=subvalue2\n")
500 _T("[foot/groupTmp]\n"),
501 fc );
502
503 CPPUNIT_ASSERT( fc.RenameGroup(_T("group2"), _T("group1")) );
504 wxVERIFY_FILECONFIG( _T("[foot]\n")
505 _T("entry=value\n")
506 _T("[foot/group1]\n")
507 _T("[foot/group1/subgroup]\n")
508 _T("subentry=subvalue\n")
509 _T("subentry2=subvalue2\n")
510 _T("[foot/groupTmp]\n"),
511 fc );
512
513 CPPUNIT_ASSERT( fc.RenameGroup(_T("groupTmp"), _T("group2")) );
514 wxVERIFY_FILECONFIG( _T("[foot]\n")
515 _T("entry=value\n")
516 _T("[foot/group1]\n")
517 _T("[foot/group1/subgroup]\n")
518 _T("subentry=subvalue\n")
519 _T("subentry2=subvalue2\n")
520 _T("[foot/group2]\n"),
521 fc );
94139118
VZ
522}
523
c406cd3d
VZ
524void FileConfigTestCase::CreateSubgroupAndEntries()
525{
526 wxFileConfig fc;
527 fc.Write(_T("sub/sub_first"), _T("sub_one"));
528 fc.Write(_T("first"), _T("one"));
529
e1a2c7a5
VZ
530 wxVERIFY_FILECONFIG( _T("first=one\n")
531 _T("[sub]\n")
532 _T("sub_first=sub_one\n"),
533 fc );
c406cd3d
VZ
534}
535
536void FileConfigTestCase::CreateEntriesAndSubgroup()
537{
538 wxFileConfig fc;
539 fc.Write(_T("first"), _T("one"));
540 fc.Write(_T("second"), _T("two"));
541 fc.Write(_T("sub/sub_first"), _T("sub_one"));
542
e1a2c7a5
VZ
543 wxVERIFY_FILECONFIG( _T("first=one\n")
544 _T("second=two\n")
545 _T("[sub]\n")
546 _T("sub_first=sub_one\n"),
547 fc );
c406cd3d 548}
cbc9c06f
DS
549
550static void EmptyConfigAndWriteKey()
551{
552 wxFileConfig fc(_T("deleteconftest"));
553
554 const wxString groupPath = _T("/root");
555
c406cd3d 556 if ( fc.Exists(groupPath) )
cbc9c06f
DS
557 {
558 // using DeleteGroup exposes the problem, using DeleteAll doesn't
559 CPPUNIT_ASSERT( fc.DeleteGroup(groupPath) );
560 }
561
562 // the config must be empty for the problem to arise
563 CPPUNIT_ASSERT( !fc.GetNumberOfEntries(true) );
564 CPPUNIT_ASSERT( !fc.GetNumberOfGroups(true) );
565
566
567 // this crashes on second call of this function
568 CPPUNIT_ASSERT( fc.Write(groupPath + _T("/entry"), _T("value")) );
569}
570
571void FileConfigTestCase::DeleteLastGroup()
572{
573 /*
574 We make 2 of the same calls, first to create a file config with a single
575 group and key...
576 */
577 ::EmptyConfigAndWriteKey();
578
579 /*
580 ... then the same but this time the key's group is deleted before the
581 key is written again. This causes a crash.
582 */
583 ::EmptyConfigAndWriteKey();
584
585
586 // clean up
587 wxLogNull noLogging;
c406cd3d 588 (void) ::wxRemoveFile(wxFileConfig::GetLocalFileName(_T("deleteconftest")));
cbc9c06f
DS
589}
590
6ad0a7d5
VZ
591void FileConfigTestCase::DeleteAndRecreateGroup()
592{
593 static const wxChar *confInitial =
594 _T("[First]\n")
595 _T("Value1=Foo\n")
596 _T("[Second]\n")
597 _T("Value2=Bar\n");
598
599 wxStringInputStream sis(confInitial);
600 wxFileConfig fc(sis);
601
602 fc.DeleteGroup(_T("Second"));
603 wxVERIFY_FILECONFIG( _T("[First]\n")
604 _T("Value1=Foo\n"),
605 fc );
606
607 fc.Write(_T("Second/Value2"), _T("New"));
608 wxVERIFY_FILECONFIG( _T("[First]\n")
609 _T("Value1=Foo\n")
610 _T("[Second]\n")
611 _T("Value2=New\n"),
612 fc );
613}
614
9a7b7798
VZ
615void FileConfigTestCase::AddToExistingRoot()
616{
617 static const wxChar *confInitial =
618 _T("[Group]\n")
619 _T("value1=foo\n");
620
621 wxStringInputStream sis(confInitial);
622 wxFileConfig fc(sis);
623
624 fc.Write(_T("/value1"), _T("bar"));
625 wxVERIFY_FILECONFIG(
626 _T("value1=bar\n")
627 _T("[Group]\n")
628 _T("value1=foo\n"),
629 fc
630 );
631}
632
6221357b
VZ
633void FileConfigTestCase::ReadNonExistent()
634{
635 static const char *confTest =
636 "community=censored\n"
637 "[City1]\n"
638 "URL=www.fake1.na\n"
639 "[City1/A1]\n"
640 "[City1/A1/1]\n"
641 "IP=192.168.1.66\n"
642 "URL=www.fake2.na\n"
643 ;
644
645 wxStringInputStream sis(confTest);
646 wxFileConfig fc(sis);
647
648 wxString url;
649 CPPUNIT_ASSERT( !fc.Read("URL", &url) );
650}
651
17c24d37
VZ
652#endif // wxUSE_FILECONFIG
653