/*---------------------------------------------------------------------- | TestWhitespace +---------------------------------------------------------------------*/ static void TestWhitespace() { const char* xml = "<doc>\r\n" " <clean> </clean>\r\n" " <dirty> A B </dirty>\r\n" " <mixed>\r\n" " A\r\n" " <clean> </clean>\r\n" " B\r\n" " <dirty> A B </dirty>\r\n" " C\r\n" " </mixed>\r\n" "</doc>\r\n"; const char* expect1 = "<doc><clean/><dirty> A B </dirty><mixed>\n" " A\n" " <clean/>\n" " B\n" " <dirty> A B </dirty>\n" " C\n" " </mixed></doc>"; const char* expect2 = "<doc>\n" " <clean> </clean>\n" " <dirty> A B </dirty>\n" " <mixed>\n" " A\n" " <clean> </clean>\n" " B\n" " <dirty> A B </dirty>\n" " C\n" " </mixed>\n" "</doc>"; NPT_XmlParser parser1(false); // ignore whitespace NPT_XmlNode* root; CHECK(NPT_SUCCEEDED(parser1.Parse(xml, root))); CHECK(root); NPT_XmlWriter writer; NPT_MemoryStream buffer; writer.Serialize(*root, buffer); CHECK(buffer.GetBuffer() == NPT_DataBuffer(expect1, NPT_StringLength(expect1))); delete root; NPT_XmlParser parser2(true); // keep whitespace CHECK(NPT_SUCCEEDED(parser2.Parse(xml, root))); CHECK(root); buffer.SetSize(0); writer.Serialize(*root, buffer); CHECK(buffer.GetBuffer() == NPT_DataBuffer(expect2, NPT_StringLength(expect2))); delete root; }
/*---------------------------------------------------------------------- | TestMakeStandalone +---------------------------------------------------------------------*/ static void TestMakeStandalone() { const char* xml = "<parent xmlns:foo='foo-ns' xmlns:bar='bar-ns' xmlns='default-ns'><inter xmlns:bli='bli-ns' xmlns:bou='bou-ns'><child><foo:a>a-text</foo:a><bar:b xml:fifi='0'>b-text</bar:b><c>c-text</c><d bou:att='b-att'/></child></inter></parent>"; const char* expected = "<child xmlns=\"default-ns\" xmlns:foo=\"foo-ns\" xmlns:bar=\"bar-ns\" xmlns:bou=\"bou-ns\"><foo:a>a-text</foo:a><bar:b xml:fifi=\"0\">b-text</bar:b><c>c-text</c><d bou:att=\"b-att\"/></child>"; NPT_XmlParser parser; NPT_XmlNode* root = NULL; NPT_Result result = parser.Parse(xml, root); CHECK(NPT_SUCCEEDED(result)); CHECK(root != NULL); CHECK(root->AsElementNode() != NULL); NPT_XmlElementNode* inter = root->AsElementNode()->GetChild("inter", NPT_XML_ANY_NAMESPACE); CHECK(inter != NULL); NPT_XmlElementNode* child = inter->GetChild("child", NPT_XML_ANY_NAMESPACE); CHECK(child != NULL); child->MakeStandalone(); NPT_XmlWriter writer; NPT_MemoryStream buffer; writer.Serialize(*child, buffer); CHECK(buffer.GetBuffer() == NPT_DataBuffer(expected, NPT_StringLength(expected))); delete root; }
/*---------------------------------------------------------------------- | TestCdata +---------------------------------------------------------------------*/ static void TestCdata() { const char* xml = "<doc> blabla <![CDATA[ < [[ Smith ]] > ]]> blibli</doc>"; const char* expect = "<doc> blabla < [[ Smith ]] > blibli</doc>"; NPT_XmlParser parser; NPT_XmlNode* root; CHECK(NPT_SUCCEEDED(parser.Parse(xml, root))); CHECK(root); NPT_XmlWriter writer; NPT_MemoryStream buffer; writer.Serialize(*root, buffer); CHECK(buffer.GetBuffer() == NPT_DataBuffer(expect, NPT_StringLength(expect))); delete root; }
/*---------------------------------------------------------------------- | TestComments +---------------------------------------------------------------------*/ static void TestComments() { const char* xml = "<!-- comment outside the element -->\n" "<doc> blabla <!-- --> foo <!-- you <g> &foo -> &bar --> blibli</doc>"; const char* expect = "<doc> blabla foo blibli</doc>"; NPT_XmlParser parser; NPT_XmlNode* root; CHECK(NPT_SUCCEEDED(parser.Parse(xml, root))); CHECK(root); NPT_XmlWriter writer; NPT_MemoryStream buffer; writer.Serialize(*root, buffer); CHECK(buffer.GetBuffer() == NPT_DataBuffer(expect, NPT_StringLength(expect))); delete root; }