X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5e05df3c7ff33db7eab01f5012ab218ac2843cea..e7492fa205a0a8a548aa437629636a42269c7b88:/tests/xml/xmltest.cpp?ds=sidebyside diff --git a/tests/xml/xmltest.cpp b/tests/xml/xmltest.cpp index 1f354224f1..6d7faeb3c8 100644 --- a/tests/xml/xmltest.cpp +++ b/tests/xml/xmltest.cpp @@ -22,6 +22,7 @@ #endif // WX_PRECOMP #include "wx/xml/xml.h" +#include "wx/sstream.h" #include @@ -46,7 +47,7 @@ void CheckXml(wxXmlNode *n, ...) break; CPPUNIT_ASSERT( child ); - WX_ASSERT_STR_EQUAL( childName, child->GetName() ); + CPPUNIT_ASSERT_EQUAL( childName, child->GetName() ); CPPUNIT_ASSERT( child->GetChildren() == NULL ); CPPUNIT_ASSERT( child->GetParent() == n ); @@ -72,9 +73,13 @@ public: private: CPPUNIT_TEST_SUITE( XmlTestCase ); CPPUNIT_TEST( InsertChild ); + CPPUNIT_TEST( InsertChildAfter ); + CPPUNIT_TEST( LoadSave ); CPPUNIT_TEST_SUITE_END(); void InsertChild(); + void InsertChildAfter(); + void LoadSave(); DECLARE_NO_COPY_CLASS(XmlTestCase) }; @@ -104,3 +109,83 @@ void XmlTestCase::InsertChild() root->InsertChild(new wxXmlNode(wxXML_ELEMENT_NODE, "C"), two); CheckXml(root, "B", "A", "1", "C", "2", "3", NULL); } + +void XmlTestCase::InsertChildAfter() +{ + wxXmlNode *root = new wxXmlNode(wxXML_ELEMENT_NODE, "root"); + + root->InsertChildAfter(new wxXmlNode(wxXML_ELEMENT_NODE, "1"), NULL); + CheckXml(root, "1", NULL); + + wxXmlNode *two = new wxXmlNode(wxXML_ELEMENT_NODE, "2"); + root->AddChild(two); + wxXmlNode *three = new wxXmlNode(wxXML_ELEMENT_NODE, "3"); + root->AddChild(three); + CheckXml(root, "1", "2", "3", NULL); + + // check inserting in the middle: + root->InsertChildAfter(new wxXmlNode(wxXML_ELEMENT_NODE, "A"), root->GetChildren()); + CheckXml(root, "1", "A", "2", "3", NULL); + root->InsertChildAfter(new wxXmlNode(wxXML_ELEMENT_NODE, "B"), two); + CheckXml(root, "1", "A", "2", "B", "3", NULL); + + // and at the end: + root->InsertChildAfter(new wxXmlNode(wxXML_ELEMENT_NODE, "C"), three); + CheckXml(root, "1", "A", "2", "B", "3", "C", NULL); +} + +void XmlTestCase::LoadSave() +{ + // NB: this is not real XRC but rather some XRC-like XML fragment which + // exercises different XML constructs to check that they're saved back + // correctly + // + // Also note that there should be no blank lines here as they disappear + // after saving. + const char *xmlText = +"\n" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"\n" + ; + + wxStringInputStream sis(xmlText); + + wxXmlDocument doc; + CPPUNIT_ASSERT( doc.Load(sis) ); + + wxStringOutputStream sos; + CPPUNIT_ASSERT( doc.Save(sos) ); + + CPPUNIT_ASSERT_EQUAL( xmlText, sos.GetString() ); + + + const char *utf8xmlText = +"\n" +"\n" +" \xc3\xa9t\xc3\xa9\n" +" \xd0\xbb\xd0\xb5\xd1\x82\xd0\xbe\n" +"\n" + ; + + wxStringInputStream sis8(wxString::FromUTF8(utf8xmlText)); + CPPUNIT_ASSERT( doc.Load(sis8) ); + + // this contents can't be represented in Latin-1 as it contains Cyrillic + // letters + doc.SetFileEncoding("ISO-8859-1"); + CPPUNIT_ASSERT( !doc.Save(sos) ); + + // but it should work in UTF-8 + wxStringOutputStream sos8; + doc.SetFileEncoding("UTF-8"); + CPPUNIT_ASSERT( doc.Save(sos8) ); + CPPUNIT_ASSERT_EQUAL( wxString(utf8xmlText), + wxString(sos8.GetString().ToUTF8()) ); +} +