fix bug with adding entries to a root group containing only subgroups (as shown by new AddToExistingRoot() unit test)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49476 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -245,6 +245,7 @@ public:
|
|||||||
|
|
||||||
// get the last line belonging to an entry/subgroup of this group
|
// get the last line belonging to an entry/subgroup of this group
|
||||||
wxFileConfigLineList *GetGroupLine(); // line which contains [group]
|
wxFileConfigLineList *GetGroupLine(); // line which contains [group]
|
||||||
|
// may be NULL for "/" only
|
||||||
wxFileConfigLineList *GetLastEntryLine(); // after which our subgroups start
|
wxFileConfigLineList *GetLastEntryLine(); // after which our subgroups start
|
||||||
wxFileConfigLineList *GetLastGroupLine(); // after which the next group starts
|
wxFileConfigLineList *GetLastGroupLine(); // after which the next group starts
|
||||||
|
|
||||||
@@ -550,16 +551,8 @@ void wxFileConfig::Parse(const wxTextBuffer& buffer, bool bLocal)
|
|||||||
|
|
||||||
// add the line to linked list
|
// add the line to linked list
|
||||||
if ( bLocal )
|
if ( bLocal )
|
||||||
{
|
|
||||||
LineListAppend(strLine);
|
LineListAppend(strLine);
|
||||||
|
|
||||||
// let the root group have its start line as well
|
|
||||||
if ( !n )
|
|
||||||
{
|
|
||||||
m_pCurrentGroup->SetLine(m_linesTail);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// skip leading spaces
|
// skip leading spaces
|
||||||
for ( pStart = buf; wxIsspace(*pStart); pStart++ )
|
for ( pStart = buf; wxIsspace(*pStart); pStart++ )
|
||||||
@@ -958,8 +951,8 @@ bool wxFileConfig::DoWriteString(const wxString& key, const wxString& szValue)
|
|||||||
|
|
||||||
SetDirty();
|
SetDirty();
|
||||||
|
|
||||||
// this will add a line for this group if it didn't have it before
|
// this will add a line for this group if it didn't have it before (or
|
||||||
|
// do nothing for the root but it's ok as it always exists anyhow)
|
||||||
(void)m_pCurrentGroup->GetGroupLine();
|
(void)m_pCurrentGroup->GetGroupLine();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -79,6 +79,7 @@ private:
|
|||||||
CPPUNIT_TEST( CreateSubgroupAndEntries );
|
CPPUNIT_TEST( CreateSubgroupAndEntries );
|
||||||
CPPUNIT_TEST( DeleteLastGroup );
|
CPPUNIT_TEST( DeleteLastGroup );
|
||||||
CPPUNIT_TEST( DeleteAndRecreateGroup );
|
CPPUNIT_TEST( DeleteAndRecreateGroup );
|
||||||
|
CPPUNIT_TEST( AddToExistingRoot );
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
|
||||||
void Path();
|
void Path();
|
||||||
@@ -99,6 +100,8 @@ private:
|
|||||||
void CreateSubgroupAndEntries();
|
void CreateSubgroupAndEntries();
|
||||||
void DeleteLastGroup();
|
void DeleteLastGroup();
|
||||||
void DeleteAndRecreateGroup();
|
void DeleteAndRecreateGroup();
|
||||||
|
void AddToExistingRoot();
|
||||||
|
|
||||||
|
|
||||||
static wxString ChangePath(wxFileConfig& fc, const wxChar *path)
|
static wxString ChangePath(wxFileConfig& fc, const wxChar *path)
|
||||||
{
|
{
|
||||||
@@ -607,5 +610,23 @@ void FileConfigTestCase::DeleteAndRecreateGroup()
|
|||||||
fc );
|
fc );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FileConfigTestCase::AddToExistingRoot()
|
||||||
|
{
|
||||||
|
static const wxChar *confInitial =
|
||||||
|
_T("[Group]\n")
|
||||||
|
_T("value1=foo\n");
|
||||||
|
|
||||||
|
wxStringInputStream sis(confInitial);
|
||||||
|
wxFileConfig fc(sis);
|
||||||
|
|
||||||
|
fc.Write(_T("/value1"), _T("bar"));
|
||||||
|
wxVERIFY_FILECONFIG(
|
||||||
|
_T("value1=bar\n")
|
||||||
|
_T("[Group]\n")
|
||||||
|
_T("value1=foo\n"),
|
||||||
|
fc
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#endif // wxUSE_FILECONFIG
|
#endif // wxUSE_FILECONFIG
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user