]> git.saurik.com Git - wxWidgets.git/commitdiff
fix bug with adding entries to a root group containing only subgroups (as shown by...
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 26 Oct 2007 22:50:26 +0000 (22:50 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 26 Oct 2007 22:50:26 +0000 (22:50 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49476 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/fileconf.cpp
tests/config/fileconf.cpp

index 00ab5bf924d9df1597853b792302d0a2e6f64d8a..a09919e726f228c4830678081e055880f290accd 100644 (file)
@@ -245,6 +245,7 @@ public:
 
   // get the last line belonging to an entry/subgroup of this group
   wxFileConfigLineList *GetGroupLine();     // line which contains [group]
+                                            // may be NULL for "/" only
   wxFileConfigLineList *GetLastEntryLine(); // after which our subgroups start
   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
     if ( bLocal )
-    {
       LineListAppend(strLine);
 
-      // let the root group have its start line as well
-      if ( !n )
-      {
-        m_pCurrentGroup->SetLine(m_linesTail);
-      }
-    }
-
 
     // skip leading spaces
     for ( pStart = buf; wxIsspace(*pStart); pStart++ )
@@ -958,8 +951,8 @@ bool wxFileConfig::DoWriteString(const wxString& key, const wxString& szValue)
 
         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();
     }
     else
index fe41fa8d26e1d6932f9b7923c28e971123407510..a7f67216a3f83d192719fc8d49e4ede314f42ab2 100644 (file)
@@ -79,6 +79,7 @@ private:
         CPPUNIT_TEST( CreateSubgroupAndEntries );
         CPPUNIT_TEST( DeleteLastGroup );
         CPPUNIT_TEST( DeleteAndRecreateGroup );
+        CPPUNIT_TEST( AddToExistingRoot );
     CPPUNIT_TEST_SUITE_END();
 
     void Path();
@@ -99,6 +100,8 @@ private:
     void CreateSubgroupAndEntries();
     void DeleteLastGroup();
     void DeleteAndRecreateGroup();
+    void AddToExistingRoot();
+
 
     static wxString ChangePath(wxFileConfig& fc, const wxChar *path)
     {
@@ -607,5 +610,23 @@ void FileConfigTestCase::DeleteAndRecreateGroup()
                          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