/*---------------------------------------------------------------------- | 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; }
/*---------------------------------------------------------------------- | TestFinders +---------------------------------------------------------------------*/ static void TestFinders() { const char* xml = "<a b='foo' c='bar' ns:b='bla' ns:d='123' xmlns:ns='ns-uri' xmlns:ns1='ns1-uri' xmlns:ns2='ns2-uri' xmlns:ns3='ns3-uri'><b xmlns='ns4-uri' ba='123' ns2:bo='345'></b><b ba='123' ns2:bo='345'></b><ns2:b></ns2:b><ns1:b></ns1:b></a>"; NPT_XmlParser parser; NPT_XmlNode* root; CHECK(NPT_SUCCEEDED(parser.Parse(xml, root))); NPT_XmlElementNode* elem = root->AsElementNode(); const NPT_String* attr = elem->GetAttribute("d"); CHECK(attr == NULL); attr = elem->GetAttribute("b"); CHECK(attr != NULL && *attr == "foo"); attr = elem->GetAttribute("b", "ns-uri"); CHECK(attr != NULL && *attr == "bla"); attr = elem->GetAttribute("c", NPT_XML_ANY_NAMESPACE); CHECK(attr != NULL && *attr == "bar"); attr = elem->GetAttribute("b", NPT_XML_ANY_NAMESPACE); CHECK(attr != NULL && *attr == "foo"); attr = elem->GetAttribute("b", "boubou"); CHECK(attr == NULL); attr = elem->GetAttribute("d", NPT_XML_NO_NAMESPACE); CHECK(attr == NULL); NPT_XmlElementNode* child; child = elem->GetChild("b"); CHECK(child != NULL && *child->GetAttribute("ba") == "123"); child = elem->GetChild("b", "ns4-uri"); CHECK(child != NULL && child->GetAttribute("ba", "ns4-uri") == NULL); CHECK(child != NULL && *child->GetAttribute("bo", NPT_XML_ANY_NAMESPACE) == "345"); CHECK(child != NULL && child->GetAttribute("bo", NPT_XML_NO_NAMESPACE) == NULL); CHECK(child != NULL && child->GetAttribute("bo", "foo") == NULL); CHECK(child != NULL && *child->GetAttribute("bo", "ns2-uri") == "345"); child = elem->GetChild("b", NPT_XML_ANY_NAMESPACE); CHECK(child != NULL && *child->GetNamespace() == "ns4-uri"); child = elem->GetChild("b", "ns2-uri"); CHECK(child != NULL && *child->GetNamespace() == "ns2-uri"); child = elem->GetChild("b", "boubou"); CHECK(child == NULL); delete root; }