X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/993896f180b48d8fa20a02e087288b695f169979..5e1eac149fc18f51d5a25ac00d957ccaad87b3fa:/tests/fileconf/fileconftest.cpp diff --git a/tests/fileconf/fileconftest.cpp b/tests/fileconf/fileconftest.cpp index 9b75d89bc9..d369419047 100644 --- a/tests/fileconf/fileconftest.cpp +++ b/tests/fileconf/fileconftest.cpp @@ -36,6 +36,20 @@ _T("subentry2=subvalue2\n") _T("[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 // ---------------------------------------------------------------------------- @@ -53,6 +67,7 @@ private: CPPUNIT_TEST( GetGroups ); CPPUNIT_TEST( HasEntry ); CPPUNIT_TEST( HasGroup ); + CPPUNIT_TEST( Binary ); CPPUNIT_TEST( Save ); CPPUNIT_TEST( DeleteEntry ); CPPUNIT_TEST( DeleteGroup ); @@ -62,6 +77,7 @@ private: CPPUNIT_TEST( CreateEntriesAndSubgroup ); CPPUNIT_TEST( CreateSubgroupAndEntries ); CPPUNIT_TEST( DeleteLastGroup ); + CPPUNIT_TEST( DeleteAndRecreateGroup ); CPPUNIT_TEST_SUITE_END(); void Path(); @@ -70,6 +86,7 @@ private: void GetGroups(); void HasEntry(); void HasGroup(); + void Binary(); void Save(); void DeleteEntry(); void DeleteGroup(); @@ -79,6 +96,7 @@ private: void CreateEntriesAndSubgroup(); void CreateSubgroupAndEntries(); void DeleteLastGroup(); + void DeleteAndRecreateGroup(); static wxString ChangePath(wxFileConfig& fc, const wxChar *path) { @@ -87,13 +105,6 @@ private: return fc.GetPath(); } - static wxString Dump(wxFileConfig& fc) - { - wxStringOutputStream sos; - fc.Save(sos); - return wxTextFile::Translate(sos.GetString(), wxTextFileType_Unix); - } - void CheckGroupEntries(const wxFileConfig& fc, const wxChar *path, size_t nEntries, @@ -129,22 +140,22 @@ void FileConfigTestCase::AddEntries() { wxFileConfig fc; - CPPUNIT_ASSERT( Dump(fc) == _T("") ); + wxVERIFY_FILECONFIG( _T(""), fc ); fc.Write(_T("/Foo"), _T("foo")); - CPPUNIT_ASSERT( Dump(fc) == _T("Foo=foo\n") ); + wxVERIFY_FILECONFIG( _T("Foo=foo\n"), fc ); fc.Write(_T("/Bar/Baz"), _T("baz")); - CPPUNIT_ASSERT( Dump(fc) == _T("Foo=foo\n[Bar]\nBaz=baz\n") ); + wxVERIFY_FILECONFIG( _T("Foo=foo\n[Bar]\nBaz=baz\n"), fc ); fc.DeleteAll(); - CPPUNIT_ASSERT( Dump(fc) == _T("") ); + wxVERIFY_FILECONFIG( _T(""), fc ); fc.Write(_T("/Bar/Baz"), _T("baz")); - CPPUNIT_ASSERT( Dump(fc) == _T("[Bar]\nBaz=baz\n") ); + wxVERIFY_FILECONFIG( _T("[Bar]\nBaz=baz\n"), fc ); fc.Write(_T("/Foo"), _T("foo")); - CPPUNIT_ASSERT( Dump(fc) == _T("Foo=foo\n[Bar]\nBaz=baz\n") ); + wxVERIFY_FILECONFIG( _T("Foo=foo\n[Bar]\nBaz=baz\n"), fc ); } void @@ -236,6 +247,8 @@ void FileConfigTestCase::HasEntry() CPPUNIT_ASSERT( !fc.HasEntry(_T("")) ); CPPUNIT_ASSERT( !fc.HasEntry(_T("root/group1")) ); CPPUNIT_ASSERT( !fc.HasEntry(_T("subgroup/subentry")) ); + CPPUNIT_ASSERT( !fc.HasEntry(_T("/root/no_such_group/entry")) ); + CPPUNIT_ASSERT( !fc.HasGroup(_T("/root/no_such_group")) ); } void FileConfigTestCase::HasGroup() @@ -254,11 +267,35 @@ void FileConfigTestCase::HasGroup() CPPUNIT_ASSERT( !fc.HasGroup(_T("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); - CPPUNIT_ASSERT( Dump(fc) == testconfig ); + wxVERIFY_FILECONFIG( testconfig, fc ); } void FileConfigTestCase::DeleteEntry() @@ -269,20 +306,22 @@ void FileConfigTestCase::DeleteEntry() CPPUNIT_ASSERT( !fc.DeleteEntry(_T("foo")) ); CPPUNIT_ASSERT( fc.DeleteEntry(_T("root/group1/subgroup/subentry")) ); - CPPUNIT_ASSERT( Dump(fc) == _T("[root]\n") - _T("entry=value\n") - _T("[root/group1]\n") - _T("[root/group1/subgroup]\n") - _T("subentry2=subvalue2\n") - _T("[root/group2]\n") ); + wxVERIFY_FILECONFIG( _T("[root]\n") + _T("entry=value\n") + _T("[root/group1]\n") + _T("[root/group1/subgroup]\n") + _T("subentry2=subvalue2\n") + _T("[root/group2]\n"), + fc ); // group should be deleted now as well as it became empty wxConfigPathChanger change(&fc, _T("root/group1/subgroup/subentry2")); CPPUNIT_ASSERT( fc.DeleteEntry(_T("subentry2")) ); - CPPUNIT_ASSERT( Dump(fc) == _T("[root]\n") - _T("entry=value\n") - _T("[root/group1]\n") - _T("[root/group2]\n") ); + wxVERIFY_FILECONFIG( _T("[root]\n") + _T("entry=value\n") + _T("[root/group1]\n") + _T("[root/group2]\n"), + fc ); } void FileConfigTestCase::DeleteGroup() @@ -293,13 +332,16 @@ void FileConfigTestCase::DeleteGroup() CPPUNIT_ASSERT( !fc.DeleteGroup(_T("foo")) ); CPPUNIT_ASSERT( fc.DeleteGroup(_T("root/group1")) ); - CPPUNIT_ASSERT( Dump(fc) == _T("[root]\n") - _T("entry=value\n") - _T("[root/group2]\n") ); + wxVERIFY_FILECONFIG( _T("[root]\n") + _T("entry=value\n") + _T("[root/group2]\n"), + fc ); - CPPUNIT_ASSERT( fc.DeleteGroup(_T("root/group2")) ); - CPPUNIT_ASSERT( Dump(fc) == _T("[root]\n") - _T("entry=value\n") ); + // notice trailing slash: it should be ignored + CPPUNIT_ASSERT( fc.DeleteGroup(_T("root/group2/")) ); + wxVERIFY_FILECONFIG( _T("[root]\n") + _T("entry=value\n"), + fc ); CPPUNIT_ASSERT( fc.DeleteGroup(_T("root")) ); CPPUNIT_ASSERT( Dump(fc).empty() ); @@ -321,26 +363,28 @@ void FileConfigTestCase::RenameEntry() fc.SetPath(_T("root")); CPPUNIT_ASSERT( fc.RenameEntry(_T("entry"), _T("newname")) ); - CPPUNIT_ASSERT( Dump(fc) == _T("[root]\n") - _T("newname=value\n") - _T("[root/group1]\n") - _T("[root/group1/subgroup]\n") - _T("subentry=subvalue\n") - _T("subentry2=subvalue2\n") - _T("[root/group2]\n") ); + wxVERIFY_FILECONFIG( _T("[root]\n") + _T("newname=value\n") + _T("[root/group1]\n") + _T("[root/group1/subgroup]\n") + _T("subentry=subvalue\n") + _T("subentry2=subvalue2\n") + _T("[root/group2]\n"), + fc ); fc.SetPath(_T("group1/subgroup")); CPPUNIT_ASSERT( !fc.RenameEntry(_T("entry"), _T("newname")) ); CPPUNIT_ASSERT( !fc.RenameEntry(_T("subentry"), _T("subentry2")) ); CPPUNIT_ASSERT( fc.RenameEntry(_T("subentry"), _T("subentry1")) ); - CPPUNIT_ASSERT( Dump(fc) == _T("[root]\n") - _T("newname=value\n") - _T("[root/group1]\n") - _T("[root/group1/subgroup]\n") - _T("subentry2=subvalue2\n") - _T("subentry1=subvalue\n") - _T("[root/group2]\n") ); + wxVERIFY_FILECONFIG( _T("[root]\n") + _T("newname=value\n") + _T("[root/group1]\n") + _T("[root/group1/subgroup]\n") + _T("subentry2=subvalue2\n") + _T("subentry1=subvalue\n") + _T("[root/group2]\n"), + fc ); } void FileConfigTestCase::RenameGroup() @@ -349,13 +393,84 @@ void FileConfigTestCase::RenameGroup() wxFileConfig fc(sis); CPPUNIT_ASSERT( fc.RenameGroup(_T("root"), _T("foot")) ); - CPPUNIT_ASSERT( Dump(fc) == _T("[foot]\n") - _T("entry=value\n") - _T("[foot/group1]\n") - _T("[foot/group1/subgroup]\n") - _T("subentry=subvalue\n") - _T("subentry2=subvalue2\n") - _T("[foot/group2]\n") ); + wxVERIFY_FILECONFIG( _T("[foot]\n") + _T("entry=value\n") + _T("[foot/group1]\n") + _T("[foot/group1/subgroup]\n") + _T("subentry=subvalue\n") + _T("subentry2=subvalue2\n") + _T("[foot/group2]\n"), + fc ); + + // renaming a path doesn't work, it must be the immediate group + CPPUNIT_ASSERT( !fc.RenameGroup(_T("foot/group1"), _T("group2")) ); + + + fc.SetPath(_T("foot")); + + // renaming to a name of existing group doesn't work + CPPUNIT_ASSERT( !fc.RenameGroup(_T("group1"), _T("group2")) ); + + // try exchanging the groups names and then restore them back + CPPUNIT_ASSERT( fc.RenameGroup(_T("group1"), _T("groupTmp")) ); + wxVERIFY_FILECONFIG( _T("[foot]\n") + _T("entry=value\n") + _T("[foot/groupTmp]\n") + _T("[foot/groupTmp/subgroup]\n") + _T("subentry=subvalue\n") + _T("subentry2=subvalue2\n") + _T("[foot/group2]\n"), + fc ); + + CPPUNIT_ASSERT( fc.RenameGroup(_T("group2"), _T("group1")) ); + wxVERIFY_FILECONFIG( _T("[foot]\n") + _T("entry=value\n") + _T("[foot/groupTmp]\n") + _T("[foot/groupTmp/subgroup]\n") + _T("subentry=subvalue\n") + _T("subentry2=subvalue2\n") + _T("[foot/group1]\n"), + fc ); + + CPPUNIT_ASSERT( fc.RenameGroup(_T("groupTmp"), _T("group2")) ); + wxVERIFY_FILECONFIG( _T("[foot]\n") + _T("entry=value\n") + _T("[foot/group2]\n") + _T("[foot/group2/subgroup]\n") + _T("subentry=subvalue\n") + _T("subentry2=subvalue2\n") + _T("[foot/group1]\n"), + fc ); + + CPPUNIT_ASSERT( fc.RenameGroup(_T("group1"), _T("groupTmp")) ); + wxVERIFY_FILECONFIG( _T("[foot]\n") + _T("entry=value\n") + _T("[foot/group2]\n") + _T("[foot/group2/subgroup]\n") + _T("subentry=subvalue\n") + _T("subentry2=subvalue2\n") + _T("[foot/groupTmp]\n"), + fc ); + + CPPUNIT_ASSERT( fc.RenameGroup(_T("group2"), _T("group1")) ); + wxVERIFY_FILECONFIG( _T("[foot]\n") + _T("entry=value\n") + _T("[foot/group1]\n") + _T("[foot/group1/subgroup]\n") + _T("subentry=subvalue\n") + _T("subentry2=subvalue2\n") + _T("[foot/groupTmp]\n"), + fc ); + + CPPUNIT_ASSERT( fc.RenameGroup(_T("groupTmp"), _T("group2")) ); + wxVERIFY_FILECONFIG( _T("[foot]\n") + _T("entry=value\n") + _T("[foot/group1]\n") + _T("[foot/group1/subgroup]\n") + _T("subentry=subvalue\n") + _T("subentry2=subvalue2\n") + _T("[foot/group2]\n"), + fc ); } void FileConfigTestCase::CreateSubgroupAndEntries() @@ -364,9 +479,10 @@ void FileConfigTestCase::CreateSubgroupAndEntries() fc.Write(_T("sub/sub_first"), _T("sub_one")); fc.Write(_T("first"), _T("one")); - CPPUNIT_ASSERT( Dump(fc) == _T("first=one\n") - _T("[sub]\n") - _T("sub_first=sub_one\n")); + wxVERIFY_FILECONFIG( _T("first=one\n") + _T("[sub]\n") + _T("sub_first=sub_one\n"), + fc ); } void FileConfigTestCase::CreateEntriesAndSubgroup() @@ -376,10 +492,11 @@ void FileConfigTestCase::CreateEntriesAndSubgroup() fc.Write(_T("second"), _T("two")); fc.Write(_T("sub/sub_first"), _T("sub_one")); - CPPUNIT_ASSERT( Dump(fc) == _T("first=one\n") - _T("second=two\n") - _T("[sub]\n") - _T("sub_first=sub_one\n")); + wxVERIFY_FILECONFIG( _T("first=one\n") + _T("second=two\n") + _T("[sub]\n") + _T("sub_first=sub_one\n"), + fc ); } static void EmptyConfigAndWriteKey() @@ -423,5 +540,29 @@ void FileConfigTestCase::DeleteLastGroup() (void) ::wxRemoveFile(wxFileConfig::GetLocalFileName(_T("deleteconftest"))); } +void FileConfigTestCase::DeleteAndRecreateGroup() +{ + static const wxChar *confInitial = + _T("[First]\n") + _T("Value1=Foo\n") + _T("[Second]\n") + _T("Value2=Bar\n"); + + wxStringInputStream sis(confInitial); + wxFileConfig fc(sis); + + fc.DeleteGroup(_T("Second")); + wxVERIFY_FILECONFIG( _T("[First]\n") + _T("Value1=Foo\n"), + fc ); + + fc.Write(_T("Second/Value2"), _T("New")); + wxVERIFY_FILECONFIG( _T("[First]\n") + _T("Value1=Foo\n") + _T("[Second]\n") + _T("Value2=New\n"), + fc ); +} + #endif // wxUSE_FILECONFIG