| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: tests/fileconf/fileconf.cpp
- // Purpose: wxFileConf unit test
- // Author: Vadim Zeitlin
- // Created: 2004-09-19
- // Copyright: (c) 2004 Vadim Zeitlin
- ///////////////////////////////////////////////////////////////////////////////
- // ----------------------------------------------------------------------------
- // headers
- // ----------------------------------------------------------------------------
- #include "testprec.h"
- #ifdef __BORLANDC__
- #pragma hdrstop
- #endif
- #if wxUSE_FILECONFIG
- #ifndef WX_PRECOMP
- #endif // WX_PRECOMP
- #include "wx/fileconf.h"
- #include "wx/sstream.h"
- #include "wx/log.h"
- static const wxChar *testconfig =
- wxT("[root]\n")
- wxT("entry=value\n")
- wxT("[root/group1]\n")
- wxT("[root/group1/subgroup]\n")
- wxT("subentry=subvalue\n")
- wxT("subentry2=subvalue2\n")
- wxT("[root/group2]\n")
- ;
- // ----------------------------------------------------------------------------
- // local functions
- // ----------------------------------------------------------------------------
- static wxString Dump(wxFileConfig& fc)
- {
- wxStringOutputStream sos;
- fc.Save(sos);
- return wxTextFile::Translate(sos.GetString(), wxTextFileType_Unix);
- }
- // helper macro to test wxFileConfig contents
- #define wxVERIFY_FILECONFIG(t, fc) CPPUNIT_ASSERT_EQUAL(wxString(t), Dump(fc))
- // ----------------------------------------------------------------------------
- // test class
- // ----------------------------------------------------------------------------
- class FileConfigTestCase : public CppUnit::TestCase
- {
- public:
- FileConfigTestCase() { }
- private:
- CPPUNIT_TEST_SUITE( FileConfigTestCase );
- CPPUNIT_TEST( Path );
- CPPUNIT_TEST( AddEntries );
- CPPUNIT_TEST( GetEntries );
- CPPUNIT_TEST( GetGroups );
- CPPUNIT_TEST( HasEntry );
- CPPUNIT_TEST( HasGroup );
- CPPUNIT_TEST( Binary );
- CPPUNIT_TEST( Save );
- CPPUNIT_TEST( DeleteEntry );
- CPPUNIT_TEST( DeleteAndWriteEntry );
- CPPUNIT_TEST( DeleteLastRootEntry );
- CPPUNIT_TEST( DeleteGroup );
- CPPUNIT_TEST( DeleteAll );
- CPPUNIT_TEST( RenameEntry );
- CPPUNIT_TEST( RenameGroup );
- CPPUNIT_TEST( CreateEntriesAndSubgroup );
- CPPUNIT_TEST( CreateSubgroupAndEntries );
- CPPUNIT_TEST( DeleteLastGroup );
- CPPUNIT_TEST( DeleteAndRecreateGroup );
- CPPUNIT_TEST( AddToExistingRoot );
- CPPUNIT_TEST( ReadNonExistent );
- CPPUNIT_TEST( ReadEmpty );
- CPPUNIT_TEST( ReadFloat );
- CPPUNIT_TEST_SUITE_END();
- void Path();
- void AddEntries();
- void GetEntries();
- void GetGroups();
- void HasEntry();
- void HasGroup();
- void Binary();
- void Save();
- void DeleteEntry();
- void DeleteAndWriteEntry();
- void DeleteLastRootEntry();
- void DeleteGroup();
- void DeleteAll();
- void RenameEntry();
- void RenameGroup();
- void CreateEntriesAndSubgroup();
- void CreateSubgroupAndEntries();
- void DeleteLastGroup();
- void DeleteAndRecreateGroup();
- void AddToExistingRoot();
- void ReadNonExistent();
- void ReadEmpty();
- void ReadFloat();
- static wxString ChangePath(wxFileConfig& fc, const wxChar *path)
- {
- fc.SetPath(path);
- return fc.GetPath();
- }
- void CheckGroupEntries(const wxFileConfig& fc,
- const wxChar *path,
- size_t nEntries,
- ...);
- void CheckGroupSubgroups(const wxFileConfig& fc,
- const wxChar *path,
- size_t nGroups,
- ...);
- DECLARE_NO_COPY_CLASS(FileConfigTestCase)
- };
- // register in the unnamed registry so that these tests are run by default
- CPPUNIT_TEST_SUITE_REGISTRATION( FileConfigTestCase );
- // also include in its own registry so that these tests can be run alone
- CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( FileConfigTestCase, "FileConfigTestCase" );
- void FileConfigTestCase::Path()
- {
- wxStringInputStream sis(testconfig);
- wxFileConfig fc(sis);
- CPPUNIT_ASSERT( ChangePath(fc, wxT("")) == wxT("") );
- CPPUNIT_ASSERT( ChangePath(fc, wxT("/")) == wxT("") );
- CPPUNIT_ASSERT( ChangePath(fc, wxT("root")) == wxT("/root") );
- CPPUNIT_ASSERT( ChangePath(fc, wxT("/root")) == wxT("/root") );
- CPPUNIT_ASSERT( ChangePath(fc, wxT("/root/group1/subgroup")) == wxT("/root/group1/subgroup") );
- CPPUNIT_ASSERT( ChangePath(fc, wxT("/root/group2")) == wxT("/root/group2") );
- }
- void FileConfigTestCase::AddEntries()
- {
- wxFileConfig fc;
- wxVERIFY_FILECONFIG( wxT(""), fc );
- fc.Write(wxT("/Foo"), wxT("foo"));
- wxVERIFY_FILECONFIG( wxT("Foo=foo\n"), fc );
- fc.Write(wxT("/Bar/Baz"), wxT("baz"));
- wxVERIFY_FILECONFIG( wxT("Foo=foo\n[Bar]\nBaz=baz\n"), fc );
- fc.DeleteAll();
- wxVERIFY_FILECONFIG( wxT(""), fc );
- fc.Write(wxT("/Bar/Baz"), wxT("baz"));
- wxVERIFY_FILECONFIG( wxT("[Bar]\nBaz=baz\n"), fc );
- fc.Write(wxT("/Foo"), wxT("foo"));
- wxVERIFY_FILECONFIG( wxT("Foo=foo\n[Bar]\nBaz=baz\n"), fc );
- }
- void
- FileConfigTestCase::CheckGroupEntries(const wxFileConfig& fc,
- const wxChar *path,
- size_t nEntries,
- ...)
- {
- wxConfigPathChanger change(&fc, wxString(path) + wxT("/"));
- CPPUNIT_ASSERT( fc.GetNumberOfEntries() == nEntries );
- va_list ap;
- va_start(ap, nEntries);
- long cookie;
- wxString name;
- for ( bool cont = fc.GetFirstEntry(name, cookie);
- cont;
- cont = fc.GetNextEntry(name, cookie), nEntries-- )
- {
- CPPUNIT_ASSERT( name == va_arg(ap, wxChar *) );
- }
- CPPUNIT_ASSERT( nEntries == 0 );
- va_end(ap);
- }
- void
- FileConfigTestCase::CheckGroupSubgroups(const wxFileConfig& fc,
- const wxChar *path,
- size_t nGroups,
- ...)
- {
- wxConfigPathChanger change(&fc, wxString(path) + wxT("/"));
- CPPUNIT_ASSERT( fc.GetNumberOfGroups() == nGroups );
- va_list ap;
- va_start(ap, nGroups);
- long cookie;
- wxString name;
- for ( bool cont = fc.GetFirstGroup(name, cookie);
- cont;
- cont = fc.GetNextGroup(name, cookie), nGroups-- )
- {
- CPPUNIT_ASSERT( name == va_arg(ap, wxChar *) );
- }
- CPPUNIT_ASSERT( nGroups == 0 );
- va_end(ap);
- }
- void FileConfigTestCase::GetEntries()
- {
- wxStringInputStream sis(testconfig);
- wxFileConfig fc(sis);
- CheckGroupEntries(fc, wxT(""), 0);
- CheckGroupEntries(fc, wxT("/root"), 1, wxT("entry"));
- CheckGroupEntries(fc, wxT("/root/group1"), 0);
- CheckGroupEntries(fc, wxT("/root/group1/subgroup"),
- 2, wxT("subentry"), wxT("subentry2"));
- }
- void FileConfigTestCase::GetGroups()
- {
- wxStringInputStream sis(testconfig);
- wxFileConfig fc(sis);
- CheckGroupSubgroups(fc, wxT(""), 1, wxT("root"));
- CheckGroupSubgroups(fc, wxT("/root"), 2, wxT("group1"), wxT("group2"));
- CheckGroupSubgroups(fc, wxT("/root/group1"), 1, wxT("subgroup"));
- CheckGroupSubgroups(fc, wxT("/root/group2"), 0);
- }
- void FileConfigTestCase::HasEntry()
- {
- wxStringInputStream sis(testconfig);
- wxFileConfig fc(sis);
- CPPUNIT_ASSERT( !fc.HasEntry(wxT("root")) );
- CPPUNIT_ASSERT( fc.HasEntry(wxT("root/entry")) );
- CPPUNIT_ASSERT( fc.HasEntry(wxT("/root/entry")) );
- CPPUNIT_ASSERT( fc.HasEntry(wxT("root/group1/subgroup/subentry")) );
- CPPUNIT_ASSERT( !fc.HasEntry(wxT("")) );
- CPPUNIT_ASSERT( !fc.HasEntry(wxT("root/group1")) );
- CPPUNIT_ASSERT( !fc.HasEntry(wxT("subgroup/subentry")) );
- CPPUNIT_ASSERT( !fc.HasEntry(wxT("/root/no_such_group/entry")) );
- CPPUNIT_ASSERT( !fc.HasGroup(wxT("/root/no_such_group")) );
- }
- void FileConfigTestCase::HasGroup()
- {
- wxStringInputStream sis(testconfig);
- wxFileConfig fc(sis);
- CPPUNIT_ASSERT( fc.HasGroup(wxT("root")) );
- CPPUNIT_ASSERT( fc.HasGroup(wxT("root/group1")) );
- CPPUNIT_ASSERT( fc.HasGroup(wxT("root/group1/subgroup")) );
- CPPUNIT_ASSERT( fc.HasGroup(wxT("root/group2")) );
- CPPUNIT_ASSERT( !fc.HasGroup(wxT("")) );
- CPPUNIT_ASSERT( !fc.HasGroup(wxT("root/group")) );
- CPPUNIT_ASSERT( !fc.HasGroup(wxT("root//subgroup")) );
- CPPUNIT_ASSERT( !fc.HasGroup(wxT("foot/subgroup")) );
- CPPUNIT_ASSERT( !fc.HasGroup(wxT("foot")) );
- }
- void FileConfigTestCase::Binary()
- {
- wxStringInputStream sis(
- "[root]\n"
- "binary=Zm9vCg==\n"
- );
- wxFileConfig fc(sis);
- wxMemoryBuffer buf;
- fc.Read("/root/binary", &buf);
- CPPUNIT_ASSERT( memcmp("foo\n", buf.GetData(), buf.GetDataLen()) == 0 );
- buf.SetDataLen(0);
- buf.AppendData("\0\1\2", 3);
- fc.Write("/root/012", buf);
- wxVERIFY_FILECONFIG(
- "[root]\n"
- "binary=Zm9vCg==\n"
- "012=AAEC\n",
- fc
- );
- }
- void FileConfigTestCase::Save()
- {
- wxStringInputStream sis(testconfig);
- wxFileConfig fc(sis);
- wxVERIFY_FILECONFIG( testconfig, fc );
- }
- void FileConfigTestCase::DeleteEntry()
- {
- wxStringInputStream sis(testconfig);
- wxFileConfig fc(sis);
- CPPUNIT_ASSERT( !fc.DeleteEntry(wxT("foo")) );
- CPPUNIT_ASSERT( fc.DeleteEntry(wxT("root/group1/subgroup/subentry")) );
- wxVERIFY_FILECONFIG( wxT("[root]\n")
- wxT("entry=value\n")
- wxT("[root/group1]\n")
- wxT("[root/group1/subgroup]\n")
- wxT("subentry2=subvalue2\n")
- wxT("[root/group2]\n"),
- fc );
- // group should be deleted now as well as it became empty
- wxConfigPathChanger change(&fc, wxT("root/group1/subgroup/subentry2"));
- CPPUNIT_ASSERT( fc.DeleteEntry(wxT("subentry2")) );
- wxVERIFY_FILECONFIG( wxT("[root]\n")
- wxT("entry=value\n")
- wxT("[root/group1]\n")
- wxT("[root/group2]\n"),
- fc );
- }
- void FileConfigTestCase::DeleteAndWriteEntry()
- {
- wxStringInputStream sis(
- "[root/group1]\n"
- "subentry=subvalue\n"
- "subentry2=subvalue2\n"
- "subentry3=subvalue3\n"
- );
- wxFileConfig fc(sis);
- fc.DeleteEntry("/root/group1/subentry2");
- fc.Write("/root/group1/subentry2", "testvalue");
- fc.DeleteEntry("/root/group2/subentry2");
- fc.Write("/root/group2/subentry2", "testvalue2");
- fc.DeleteEntry("/root/group1/subentry2");
- fc.Write("/root/group1/subentry2", "testvalue");
- fc.DeleteEntry("/root/group2/subentry2");
- fc.Write("/root/group2/subentry2", "testvalue2");
- wxVERIFY_FILECONFIG( "[root/group1]\n"
- "subentry=subvalue\n"
- "subentry3=subvalue3\n"
- "subentry2=testvalue\n"
- "[root/group2]\n"
- "subentry2=testvalue2\n",
- fc );
- fc.DeleteEntry("/root/group2/subentry2");
- wxVERIFY_FILECONFIG( "[root/group1]\n"
- "subentry=subvalue\n"
- "subentry3=subvalue3\n"
- "subentry2=testvalue\n",
- fc );
- fc.DeleteEntry("/root/group1/subentry2");
- fc.DeleteEntry("/root/group1/subentry");
- fc.DeleteEntry("/root/group1/subentry3");
- wxVERIFY_FILECONFIG( "", fc );
- }
- void FileConfigTestCase::DeleteLastRootEntry()
- {
- // This tests for the bug which occurred when the last entry of the root
- // group was deleted: this corrupted internal state and resulted in a crash
- // after trying to write the just deleted entry again.
- wxStringInputStream sis("");
- wxFileConfig fc(sis);
- fc.Write("key", "value");
- wxVERIFY_FILECONFIG( "key=value\n", fc );
- fc.DeleteEntry("key");
- wxVERIFY_FILECONFIG( "", fc );
- fc.Write("key", "value");
- wxVERIFY_FILECONFIG( "key=value\n", fc );
- }
- void FileConfigTestCase::DeleteGroup()
- {
- wxStringInputStream sis(testconfig);
- wxFileConfig fc(sis);
- CPPUNIT_ASSERT( !fc.DeleteGroup(wxT("foo")) );
- CPPUNIT_ASSERT( fc.DeleteGroup(wxT("root/group1")) );
- wxVERIFY_FILECONFIG( wxT("[root]\n")
- wxT("entry=value\n")
- wxT("[root/group2]\n"),
- fc );
- // notice trailing slash: it should be ignored
- CPPUNIT_ASSERT( fc.DeleteGroup(wxT("root/group2/")) );
- wxVERIFY_FILECONFIG( wxT("[root]\n")
- wxT("entry=value\n"),
- fc );
- CPPUNIT_ASSERT( fc.DeleteGroup(wxT("root")) );
- CPPUNIT_ASSERT( Dump(fc).empty() );
- }
- void FileConfigTestCase::DeleteAll()
- {
- wxStringInputStream sis(testconfig);
- wxFileConfig fc(sis);
- CPPUNIT_ASSERT( fc.DeleteAll() );
- CPPUNIT_ASSERT( Dump(fc).empty() );
- }
- void FileConfigTestCase::RenameEntry()
- {
- wxStringInputStream sis(testconfig);
- wxFileConfig fc(sis);
- fc.SetPath(wxT("root"));
- CPPUNIT_ASSERT( fc.RenameEntry(wxT("entry"), wxT("newname")) );
- wxVERIFY_FILECONFIG( wxT("[root]\n")
- wxT("newname=value\n")
- wxT("[root/group1]\n")
- wxT("[root/group1/subgroup]\n")
- wxT("subentry=subvalue\n")
- wxT("subentry2=subvalue2\n")
- wxT("[root/group2]\n"),
- fc );
- fc.SetPath(wxT("group1/subgroup"));
- CPPUNIT_ASSERT( !fc.RenameEntry(wxT("entry"), wxT("newname")) );
- CPPUNIT_ASSERT( !fc.RenameEntry(wxT("subentry"), wxT("subentry2")) );
- CPPUNIT_ASSERT( fc.RenameEntry(wxT("subentry"), wxT("subentry1")) );
- wxVERIFY_FILECONFIG( wxT("[root]\n")
- wxT("newname=value\n")
- wxT("[root/group1]\n")
- wxT("[root/group1/subgroup]\n")
- wxT("subentry2=subvalue2\n")
- wxT("subentry1=subvalue\n")
- wxT("[root/group2]\n"),
- fc );
- }
- void FileConfigTestCase::RenameGroup()
- {
- wxStringInputStream sis(testconfig);
- wxFileConfig fc(sis);
- CPPUNIT_ASSERT( fc.RenameGroup(wxT("root"), wxT("foot")) );
- wxVERIFY_FILECONFIG( wxT("[foot]\n")
- wxT("entry=value\n")
- wxT("[foot/group1]\n")
- wxT("[foot/group1/subgroup]\n")
- wxT("subentry=subvalue\n")
- wxT("subentry2=subvalue2\n")
- wxT("[foot/group2]\n"),
- fc );
- // renaming a path doesn't work, it must be the immediate group
- CPPUNIT_ASSERT( !fc.RenameGroup(wxT("foot/group1"), wxT("group2")) );
- fc.SetPath(wxT("foot"));
- // renaming to a name of existing group doesn't work
- CPPUNIT_ASSERT( !fc.RenameGroup(wxT("group1"), wxT("group2")) );
- // try exchanging the groups names and then restore them back
- CPPUNIT_ASSERT( fc.RenameGroup(wxT("group1"), wxT("groupTmp")) );
- wxVERIFY_FILECONFIG( wxT("[foot]\n")
- wxT("entry=value\n")
- wxT("[foot/groupTmp]\n")
- wxT("[foot/groupTmp/subgroup]\n")
- wxT("subentry=subvalue\n")
- wxT("subentry2=subvalue2\n")
- wxT("[foot/group2]\n"),
- fc );
- CPPUNIT_ASSERT( fc.RenameGroup(wxT("group2"), wxT("group1")) );
- wxVERIFY_FILECONFIG( wxT("[foot]\n")
- wxT("entry=value\n")
- wxT("[foot/groupTmp]\n")
- wxT("[foot/groupTmp/subgroup]\n")
- wxT("subentry=subvalue\n")
- wxT("subentry2=subvalue2\n")
- wxT("[foot/group1]\n"),
- fc );
- CPPUNIT_ASSERT( fc.RenameGroup(wxT("groupTmp"), wxT("group2")) );
- wxVERIFY_FILECONFIG( wxT("[foot]\n")
- wxT("entry=value\n")
- wxT("[foot/group2]\n")
- wxT("[foot/group2/subgroup]\n")
- wxT("subentry=subvalue\n")
- wxT("subentry2=subvalue2\n")
- wxT("[foot/group1]\n"),
- fc );
- CPPUNIT_ASSERT( fc.RenameGroup(wxT("group1"), wxT("groupTmp")) );
- wxVERIFY_FILECONFIG( wxT("[foot]\n")
- wxT("entry=value\n")
- wxT("[foot/group2]\n")
- wxT("[foot/group2/subgroup]\n")
- wxT("subentry=subvalue\n")
- wxT("subentry2=subvalue2\n")
- wxT("[foot/groupTmp]\n"),
- fc );
- CPPUNIT_ASSERT( fc.RenameGroup(wxT("group2"), wxT("group1")) );
- wxVERIFY_FILECONFIG( wxT("[foot]\n")
- wxT("entry=value\n")
- wxT("[foot/group1]\n")
- wxT("[foot/group1/subgroup]\n")
- wxT("subentry=subvalue\n")
- wxT("subentry2=subvalue2\n")
- wxT("[foot/groupTmp]\n"),
- fc );
- CPPUNIT_ASSERT( fc.RenameGroup(wxT("groupTmp"), wxT("group2")) );
- wxVERIFY_FILECONFIG( wxT("[foot]\n")
- wxT("entry=value\n")
- wxT("[foot/group1]\n")
- wxT("[foot/group1/subgroup]\n")
- wxT("subentry=subvalue\n")
- wxT("subentry2=subvalue2\n")
- wxT("[foot/group2]\n"),
- fc );
- }
- void FileConfigTestCase::CreateSubgroupAndEntries()
- {
- wxFileConfig fc;
- fc.Write(wxT("sub/sub_first"), wxT("sub_one"));
- fc.Write(wxT("first"), wxT("one"));
- wxVERIFY_FILECONFIG( wxT("first=one\n")
- wxT("[sub]\n")
- wxT("sub_first=sub_one\n"),
- fc );
- }
- void FileConfigTestCase::CreateEntriesAndSubgroup()
- {
- wxFileConfig fc;
- fc.Write(wxT("first"), wxT("one"));
- fc.Write(wxT("second"), wxT("two"));
- fc.Write(wxT("sub/sub_first"), wxT("sub_one"));
- wxVERIFY_FILECONFIG( wxT("first=one\n")
- wxT("second=two\n")
- wxT("[sub]\n")
- wxT("sub_first=sub_one\n"),
- fc );
- }
- static void EmptyConfigAndWriteKey()
- {
- wxFileConfig fc(wxT("deleteconftest"));
- const wxString groupPath = wxT("/root");
- if ( fc.Exists(groupPath) )
- {
- // using DeleteGroup exposes the problem, using DeleteAll doesn't
- CPPUNIT_ASSERT( fc.DeleteGroup(groupPath) );
- }
- // the config must be empty for the problem to arise
- CPPUNIT_ASSERT( !fc.GetNumberOfEntries(true) );
- CPPUNIT_ASSERT( !fc.GetNumberOfGroups(true) );
- // this crashes on second call of this function
- CPPUNIT_ASSERT( fc.Write(groupPath + wxT("/entry"), wxT("value")) );
- }
- void FileConfigTestCase::DeleteLastGroup()
- {
- /*
- We make 2 of the same calls, first to create a file config with a single
- group and key...
- */
- ::EmptyConfigAndWriteKey();
- /*
- ... then the same but this time the key's group is deleted before the
- key is written again. This causes a crash.
- */
- ::EmptyConfigAndWriteKey();
- // clean up
- wxLogNull noLogging;
- (void) ::wxRemoveFile(wxFileConfig::GetLocalFileName(wxT("deleteconftest")));
- }
- void FileConfigTestCase::DeleteAndRecreateGroup()
- {
- static const wxChar *confInitial =
- wxT("[First]\n")
- wxT("Value1=Foo\n")
- wxT("[Second]\n")
- wxT("Value2=Bar\n");
- wxStringInputStream sis(confInitial);
- wxFileConfig fc(sis);
- fc.DeleteGroup(wxT("Second"));
- wxVERIFY_FILECONFIG( wxT("[First]\n")
- wxT("Value1=Foo\n"),
- fc );
- fc.Write(wxT("Second/Value2"), wxT("New"));
- wxVERIFY_FILECONFIG( wxT("[First]\n")
- wxT("Value1=Foo\n")
- wxT("[Second]\n")
- wxT("Value2=New\n"),
- fc );
- }
- void FileConfigTestCase::AddToExistingRoot()
- {
- static const wxChar *confInitial =
- wxT("[Group]\n")
- wxT("value1=foo\n");
- wxStringInputStream sis(confInitial);
- wxFileConfig fc(sis);
- fc.Write(wxT("/value1"), wxT("bar"));
- wxVERIFY_FILECONFIG(
- wxT("value1=bar\n")
- wxT("[Group]\n")
- wxT("value1=foo\n"),
- fc
- );
- }
- void FileConfigTestCase::ReadNonExistent()
- {
- static const char *confTest =
- "community=censored\n"
- "[City1]\n"
- "URL=www.fake1.na\n"
- "[City1/A1]\n"
- "[City1/A1/1]\n"
- "IP=192.168.1.66\n"
- "URL=www.fake2.na\n"
- ;
- wxStringInputStream sis(confTest);
- wxFileConfig fc(sis);
- wxString url;
- CPPUNIT_ASSERT( !fc.Read("URL", &url) );
- }
- void FileConfigTestCase::ReadEmpty()
- {
- static const char *confTest = "";
- wxStringInputStream sis(confTest);
- wxFileConfig fc(sis);
- }
- void FileConfigTestCase::ReadFloat()
- {
- static const char *confTest =
- "x=1.234\n"
- "y=-9876.5432\n"
- "z=2e+308\n"
- ;
- wxStringInputStream sis(confTest);
- wxFileConfig fc(sis);
- float f;
- CPPUNIT_ASSERT( fc.Read("x", &f) );
- CPPUNIT_ASSERT_EQUAL( 1.234f, f );
- CPPUNIT_ASSERT( fc.Read("y", &f) );
- CPPUNIT_ASSERT_EQUAL( -9876.5432f, f );
- }
- #endif // wxUSE_FILECONFIG
|