]> git.saurik.com Git - wxWidgets.git/blame_incremental - tests/fileconf/fileconf.cpp
Applied patch [ 1039456 ] [wxOS2]Popup menu problems
[wxWidgets.git] / tests / fileconf / fileconf.cpp
... / ...
CommitLineData
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
14#include "wx/wxprec.h"
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"
27
28#include "wx/cppunit.h"
29
30static const wxChar *testconfig =
31_T("[root]\n")
32_T("entry=value\n")
33_T("[root/group1]\n")
34_T("[root/group1/subgroup]\n")
35_T("subentry=subvalue\n")
36_T("subentry2=subvalue2\n")
37_T("[root/group2]\n")
38;
39
40// ----------------------------------------------------------------------------
41// test class
42// ----------------------------------------------------------------------------
43
44class FileConfigTestCase : public CppUnit::TestCase
45{
46public:
47 FileConfigTestCase() { }
48
49private:
50 CPPUNIT_TEST_SUITE( FileConfigTestCase );
51 CPPUNIT_TEST( Path );
52 CPPUNIT_TEST( GetEntries );
53 CPPUNIT_TEST( GetGroups );
54 CPPUNIT_TEST( HasEntry );
55 CPPUNIT_TEST( HasGroup );
56 CPPUNIT_TEST( Save );
57 CPPUNIT_TEST( DeleteEntry );
58 CPPUNIT_TEST( DeleteGroup );
59 CPPUNIT_TEST( DeleteAll );
60 CPPUNIT_TEST( RenameEntry );
61 CPPUNIT_TEST( RenameGroup );
62 CPPUNIT_TEST_SUITE_END();
63
64 void Path();
65 void GetEntries();
66 void GetGroups();
67 void HasEntry();
68 void HasGroup();
69 void Save();
70 void DeleteEntry();
71 void DeleteGroup();
72 void DeleteAll();
73 void RenameEntry();
74 void RenameGroup();
75
76 static wxString ChangePath(wxFileConfig& fc, const wxChar *path)
77 {
78 fc.SetPath(path);
79
80 return fc.GetPath();
81 }
82
83 static wxString Dump(wxFileConfig& fc)
84 {
85 wxStringOutputStream sos;
86 fc.Save(sos);
87 return wxTextFile::Translate(sos.GetString(), wxTextFileType_Unix);
88 }
89
90 void CheckGroupEntries(const wxFileConfig& fc,
91 const wxChar *path,
92 size_t nEntries,
93 ...);
94 void CheckGroupSubgroups(const wxFileConfig& fc,
95 const wxChar *path,
96 size_t nGroups,
97 ...);
98
99 DECLARE_NO_COPY_CLASS(FileConfigTestCase)
100};
101
102// register in the unnamed registry so that these tests are run by default
103CPPUNIT_TEST_SUITE_REGISTRATION( FileConfigTestCase );
104
105// also include in it's own registry so that these tests can be run alone
106CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( FileConfigTestCase, "FileConfigTestCase" );
107
108void FileConfigTestCase::Path()
109{
110 wxStringInputStream sis(testconfig);
111 wxFileConfig fc(sis);
112
113 CPPUNIT_ASSERT( ChangePath(fc, _T("")) == _T("") );
114 CPPUNIT_ASSERT( ChangePath(fc, _T("/")) == _T("") );
115 CPPUNIT_ASSERT( ChangePath(fc, _T("root")) == _T("/root") );
116 CPPUNIT_ASSERT( ChangePath(fc, _T("/root")) == _T("/root") );
117 CPPUNIT_ASSERT( ChangePath(fc, _T("/root/group1/subgroup")) == _T("/root/group1/subgroup") );
118 CPPUNIT_ASSERT( ChangePath(fc, _T("/root/group2")) == _T("/root/group2") );
119}
120
121void
122FileConfigTestCase::CheckGroupEntries(const wxFileConfig& fc,
123 const wxChar *path,
124 size_t nEntries,
125 ...)
126{
127 wxConfigPathChanger change(&fc, wxString(path) + _T("/"));
128
129 CPPUNIT_ASSERT( fc.GetNumberOfEntries() == nEntries );
130
131 va_list ap;
132 va_start(ap, nEntries);
133
134 long cookie;
135 wxString name;
136 for ( bool cont = fc.GetFirstEntry(name, cookie);
137 cont;
138 cont = fc.GetNextEntry(name, cookie), nEntries-- )
139 {
140 CPPUNIT_ASSERT( name == va_arg(ap, wxChar *) );
141 }
142
143 CPPUNIT_ASSERT( nEntries == 0 );
144
145 va_end(ap);
146}
147
148void
149FileConfigTestCase::CheckGroupSubgroups(const wxFileConfig& fc,
150 const wxChar *path,
151 size_t nGroups,
152 ...)
153{
154 wxConfigPathChanger change(&fc, wxString(path) + _T("/"));
155
156 CPPUNIT_ASSERT( fc.GetNumberOfGroups() == nGroups );
157
158 va_list ap;
159 va_start(ap, nGroups);
160
161 long cookie;
162 wxString name;
163 for ( bool cont = fc.GetFirstGroup(name, cookie);
164 cont;
165 cont = fc.GetNextGroup(name, cookie), nGroups-- )
166 {
167 CPPUNIT_ASSERT( name == va_arg(ap, wxChar *) );
168 }
169
170 CPPUNIT_ASSERT( nGroups == 0 );
171
172 va_end(ap);
173}
174
175void FileConfigTestCase::GetEntries()
176{
177 wxStringInputStream sis(testconfig);
178 wxFileConfig fc(sis);
179
180 CheckGroupEntries(fc, _T(""), 0);
181 CheckGroupEntries(fc, _T("/root"), 1, _T("entry"));
182 CheckGroupEntries(fc, _T("/root/group1"), 0);
183 CheckGroupEntries(fc, _T("/root/group1/subgroup"),
184 2, _T("subentry"), _T("subentry2"));
185}
186
187void FileConfigTestCase::GetGroups()
188{
189 wxStringInputStream sis(testconfig);
190 wxFileConfig fc(sis);
191
192 CheckGroupSubgroups(fc, _T(""), 1, _T("root"));
193 CheckGroupSubgroups(fc, _T("/root"), 2, _T("group1"), _T("group2"));
194 CheckGroupSubgroups(fc, _T("/root/group1"), 1, _T("subgroup"));
195 CheckGroupSubgroups(fc, _T("/root/group2"), 0);
196}
197
198void FileConfigTestCase::HasEntry()
199{
200 wxStringInputStream sis(testconfig);
201 wxFileConfig fc(sis);
202
203 CPPUNIT_ASSERT( !fc.HasEntry(_T("root")) );
204 CPPUNIT_ASSERT( fc.HasEntry(_T("root/entry")) );
205 CPPUNIT_ASSERT( fc.HasEntry(_T("/root/entry")) );
206 CPPUNIT_ASSERT( fc.HasEntry(_T("root/group1/subgroup/subentry")) );
207 CPPUNIT_ASSERT( !fc.HasEntry(_T("")) );
208 CPPUNIT_ASSERT( !fc.HasEntry(_T("root/group1")) );
209 CPPUNIT_ASSERT( !fc.HasEntry(_T("subgroup/subentry")) );
210}
211
212void FileConfigTestCase::HasGroup()
213{
214 wxStringInputStream sis(testconfig);
215 wxFileConfig fc(sis);
216
217 CPPUNIT_ASSERT( fc.HasGroup(_T("root")) );
218 CPPUNIT_ASSERT( fc.HasGroup(_T("root/group1")) );
219 CPPUNIT_ASSERT( fc.HasGroup(_T("root/group1/subgroup")) );
220 CPPUNIT_ASSERT( fc.HasGroup(_T("root/group2")) );
221 CPPUNIT_ASSERT( !fc.HasGroup(_T("foot")) );
222 CPPUNIT_ASSERT( !fc.HasGroup(_T("")) );
223 CPPUNIT_ASSERT( !fc.HasGroup(_T("root/group")) );
224 CPPUNIT_ASSERT( !fc.HasGroup(_T("root//subgroup")) );
225}
226
227void FileConfigTestCase::Save()
228{
229 wxStringInputStream sis(testconfig);
230 wxFileConfig fc(sis);
231 CPPUNIT_ASSERT( Dump(fc) == testconfig );
232}
233
234void FileConfigTestCase::DeleteEntry()
235{
236 wxStringInputStream sis(testconfig);
237 wxFileConfig fc(sis);
238
239 CPPUNIT_ASSERT( !fc.DeleteEntry(_T("foo")) );
240
241 CPPUNIT_ASSERT( fc.DeleteEntry(_T("root/group1/subgroup/subentry")) );
242 CPPUNIT_ASSERT( Dump(fc) == _T("[root]\n")
243 _T("entry=value\n")
244 _T("[root/group1]\n")
245 _T("[root/group1/subgroup]\n")
246 _T("subentry2=subvalue2\n")
247 _T("[root/group2]\n") );
248
249 // group should be deleted now as well as it became empty
250 wxConfigPathChanger change(&fc, _T("root/group1/subgroup/subentry2"));
251 CPPUNIT_ASSERT( fc.DeleteEntry(_T("subentry2")) );
252 CPPUNIT_ASSERT( Dump(fc) == _T("[root]\n")
253 _T("entry=value\n")
254 _T("[root/group1]\n")
255 _T("[root/group2]\n") );
256}
257
258void FileConfigTestCase::DeleteGroup()
259{
260 wxStringInputStream sis(testconfig);
261 wxFileConfig fc(sis);
262
263 CPPUNIT_ASSERT( !fc.DeleteGroup(_T("foo")) );
264
265 CPPUNIT_ASSERT( fc.DeleteGroup(_T("root/group1")) );
266 CPPUNIT_ASSERT( Dump(fc) == _T("[root]\n")
267 _T("entry=value\n")
268 _T("[root/group2]\n") );
269
270 CPPUNIT_ASSERT( fc.DeleteGroup(_T("root/group2")) );
271 CPPUNIT_ASSERT( Dump(fc) == _T("[root]\n")
272 _T("entry=value\n") );
273
274 CPPUNIT_ASSERT( fc.DeleteGroup(_T("root")) );
275 CPPUNIT_ASSERT( Dump(fc).empty() );
276}
277
278void FileConfigTestCase::DeleteAll()
279{
280 wxStringInputStream sis(testconfig);
281 wxFileConfig fc(sis);
282
283 CPPUNIT_ASSERT( fc.DeleteAll() );
284 CPPUNIT_ASSERT( Dump(fc).empty() );
285}
286
287void FileConfigTestCase::RenameEntry()
288{
289 wxStringInputStream sis(testconfig);
290 wxFileConfig fc(sis);
291
292 fc.SetPath(_T("root"));
293 CPPUNIT_ASSERT( fc.RenameEntry(_T("entry"), _T("newname")) );
294 CPPUNIT_ASSERT( Dump(fc) == _T("[root]\n")
295 _T("newname=value\n")
296 _T("[root/group1]\n")
297 _T("[root/group1/subgroup]\n")
298 _T("subentry=subvalue\n")
299 _T("subentry2=subvalue2\n")
300 _T("[root/group2]\n") );
301
302 fc.SetPath(_T("group1/subgroup"));
303 CPPUNIT_ASSERT( !fc.RenameEntry(_T("entry"), _T("newname")) );
304 CPPUNIT_ASSERT( !fc.RenameEntry(_T("subentry"), _T("subentry2")) );
305
306 CPPUNIT_ASSERT( fc.RenameEntry(_T("subentry"), _T("subentry1")) );
307 CPPUNIT_ASSERT( Dump(fc) == _T("[root]\n")
308 _T("newname=value\n")
309 _T("[root/group1]\n")
310 _T("[root/group1/subgroup]\n")
311 _T("subentry2=subvalue2\n")
312 _T("subentry1=subvalue\n")
313 _T("[root/group2]\n") );
314}
315
316void FileConfigTestCase::RenameGroup()
317{
318 wxStringInputStream sis(testconfig);
319 wxFileConfig fc(sis);
320
321 CPPUNIT_ASSERT( fc.RenameGroup(_T("root"), _T("foot")) );
322 CPPUNIT_ASSERT( Dump(fc) == _T("[foot]\n")
323 _T("entry=value\n")
324 _T("[foot/group1]\n")
325 _T("[foot/group1/subgroup]\n")
326 _T("subentry=subvalue\n")
327 _T("subentry2=subvalue2\n")
328 _T("[foot/group2]\n") );
329}
330
331#endif // wxUSE_FILECONFIG
332