Fix memory leak in wxXmlNode::operator=().
We must delete all children and attributes in the node being overwritten and not just the first one of each. Add a unit test exercising this code to be able to check that valgrind doesn't report memory leak any more after the fix. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73990 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -82,6 +82,7 @@ private:
|
||||
CPPUNIT_TEST( DetachRoot );
|
||||
CPPUNIT_TEST( AppendToProlog );
|
||||
CPPUNIT_TEST( SetRoot );
|
||||
CPPUNIT_TEST( CopyNode );
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
void InsertChild();
|
||||
@@ -93,6 +94,7 @@ private:
|
||||
void DetachRoot();
|
||||
void AppendToProlog();
|
||||
void SetRoot();
|
||||
void CopyNode();
|
||||
|
||||
DECLARE_NO_COPY_CLASS(XmlTestCase)
|
||||
};
|
||||
@@ -469,3 +471,40 @@ void XmlTestCase::SetRoot()
|
||||
doc.SetRoot(root);
|
||||
CPPUNIT_ASSERT( doc.IsOk() );
|
||||
}
|
||||
|
||||
void XmlTestCase::CopyNode()
|
||||
{
|
||||
const char *xmlText =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||
"<root>\n"
|
||||
" <first><sub1/><sub2/><sub3/></first>\n"
|
||||
" <second/>\n"
|
||||
"</root>\n"
|
||||
;
|
||||
wxXmlDocument doc;
|
||||
wxStringInputStream sis(xmlText);
|
||||
CPPUNIT_ASSERT( doc.Load(sis) );
|
||||
|
||||
wxXmlNode* const root = doc.GetRoot();
|
||||
CPPUNIT_ASSERT( root );
|
||||
|
||||
wxXmlNode* const first = root->GetChildren();
|
||||
CPPUNIT_ASSERT( first );
|
||||
|
||||
wxXmlNode* const second = first->GetNext();
|
||||
CPPUNIT_ASSERT( second );
|
||||
|
||||
*first = *second;
|
||||
|
||||
wxStringOutputStream sos;
|
||||
CPPUNIT_ASSERT( doc.Save(sos) );
|
||||
|
||||
const char *xmlTextResult =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||
"<root>\n"
|
||||
" <second/>\n"
|
||||
" <second/>\n"
|
||||
"</root>\n"
|
||||
;
|
||||
CPPUNIT_ASSERT_EQUAL( xmlTextResult, sos.GetString() );
|
||||
}
|
||||
|
Reference in New Issue
Block a user