From: Vadim Zeitlin Date: Sat, 21 Apr 2007 15:04:52 +0000 (+0000) Subject: fix bug with not updating the last line correctly when a group was deleted and recrea... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/6ad0a7d52fc2a0ec7a434d1c7edb6e00d09853a4 fix bug with not updating the last line correctly when a group was deleted and recreated (bug 1685312); added a unit test for this git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45557 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/changes.txt b/docs/changes.txt index 3aec581896..5805088ffb 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -142,6 +142,7 @@ wxX11: All (Unix): - Handle socket shutdown by the peer correctly in wxSocket (Tim Kosse) +- Fix bug in wxFileConfig when recreating a group (Steven Van Ingelgem) wxMSW: diff --git a/src/common/fileconf.cpp b/src/common/fileconf.cpp index 04d1af7d6d..0c3912dbdb 100644 --- a/src/common/fileconf.cpp +++ b/src/common/fileconf.cpp @@ -1730,7 +1730,7 @@ bool wxFileConfigGroup::DeleteSubgroup(wxFileConfigGroup *pGroup) m_pLastGroup = NULL; for ( wxFileConfigLineList *pl = pLine->Prev(); - pl && pl != m_pLine && !m_pLastGroup; + pl && !m_pLastGroup; pl = pl->Prev() ) { // does this line belong to our subgroup? @@ -1744,6 +1744,9 @@ bool wxFileConfigGroup::DeleteSubgroup(wxFileConfigGroup *pGroup) break; } } + + if ( pl == m_pLine ) + break; } } diff --git a/tests/fileconf/fileconftest.cpp b/tests/fileconf/fileconftest.cpp index fa10884e15..6f4aa5ff53 100644 --- a/tests/fileconf/fileconftest.cpp +++ b/tests/fileconf/fileconftest.cpp @@ -76,6 +76,7 @@ private: CPPUNIT_TEST( CreateEntriesAndSubgroup ); CPPUNIT_TEST( CreateSubgroupAndEntries ); CPPUNIT_TEST( DeleteLastGroup ); + CPPUNIT_TEST( DeleteAndRecreateGroup ); CPPUNIT_TEST_SUITE_END(); void Path(); @@ -93,6 +94,7 @@ private: void CreateEntriesAndSubgroup(); void CreateSubgroupAndEntries(); void DeleteLastGroup(); + void DeleteAndRecreateGroup(); static wxString ChangePath(wxFileConfig& fc, const wxChar *path) { @@ -512,5 +514,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