diff --git a/XML/testsuite/src/ElementTest.cpp b/XML/testsuite/src/ElementTest.cpp
index 14a84f168..c5f034f3c 100644
--- a/XML/testsuite/src/ElementTest.cpp
+++ b/XML/testsuite/src/ElementTest.cpp
@@ -630,6 +630,280 @@ void ElementTest::testChildElementNS()
}
+void ElementTest::testNodeByPath()
+{
+ /*
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ */
+
+ AutoPtr pDoc = new Document;
+
+ AutoPtr pRoot = pDoc->createElement("root");
+ AutoPtr pElem1 = pDoc->createElement("elem1");
+ AutoPtr pElem11 = pDoc->createElement("elemA");
+ AutoPtr pElem12 = pDoc->createElement("elemA");
+ AutoPtr pElem2 = pDoc->createElement("elem2");
+ AutoPtr pElem21 = pDoc->createElement("elemB");
+ AutoPtr pElem22 = pDoc->createElement("elemB");
+ AutoPtr pElem23 = pDoc->createElement("elemB");
+ AutoPtr pElem24 = pDoc->createElement("elemC");
+ AutoPtr pElem25 = pDoc->createElement("elemC");
+
+ pElem21->setAttribute("attr1", "value1");
+ pElem22->setAttribute("attr1", "value2");
+ pElem23->setAttribute("attr1", "value3");
+
+ pElem24->setAttribute("attr1", "value1");
+ pElem25->setAttribute("attr1", "value2");
+
+ AutoPtr pElem241 = pDoc->createElement("elemC1");
+ AutoPtr pElem242 = pDoc->createElement("elemC2");
+ pElem241->setAttribute("attr1", "value1");
+ pElem24->appendChild(pElem241);
+ pElem24->appendChild(pElem242);
+
+ pElem1->appendChild(pElem11);
+ pElem1->appendChild(pElem12);
+ pElem2->appendChild(pElem21);
+ pElem2->appendChild(pElem22);
+ pElem2->appendChild(pElem23);
+ pElem2->appendChild(pElem24);
+ pElem2->appendChild(pElem25);
+
+ pRoot->appendChild(pElem1);
+ pRoot->appendChild(pElem2);
+
+ pDoc->appendChild(pRoot);
+
+ Node* pNode = pRoot->getNodeByPath("/");
+ assert (pNode == pRoot);
+
+ pNode = pRoot->getNodeByPath("/elem1");
+ assert (pNode == pElem1);
+
+ pNode = pDoc->getNodeByPath("/root/elem1");
+ assert (pNode == pElem1);
+
+ pNode = pRoot->getNodeByPath("/elem2");
+ assert (pNode == pElem2);
+
+ pNode = pRoot->getNodeByPath("/elem1/elemA");
+ assert (pNode == pElem11);
+
+ pNode = pRoot->getNodeByPath("/elem1/elemA[0]");
+ assert (pNode == pElem11);
+
+ pNode = pRoot->getNodeByPath("/elem1/elemA[1]");
+ assert (pNode == pElem12);
+
+ pNode = pRoot->getNodeByPath("/elem1/elemA[2]");
+ assert (pNode == 0);
+
+ pNode = pRoot->getNodeByPath("/elem2/elemB");
+ assert (pNode == pElem21);
+
+ pNode = pRoot->getNodeByPath("/elem2/elemB[0]");
+ assert (pNode == pElem21);
+
+ pNode = pRoot->getNodeByPath("/elem2/elemB[1]");
+ assert (pNode == pElem22);
+
+ pNode = pRoot->getNodeByPath("/elem2/elemB[2]");
+ assert (pNode == pElem23);
+
+ pNode = pRoot->getNodeByPath("/elem2/elemB[3]");
+ assert (pNode == 0);
+
+ pNode = pRoot->getNodeByPath("/elem2/elemB[@attr1]");
+ assert (pNode && pNode->nodeValue() == "value1");
+
+ pNode = pRoot->getNodeByPath("/elem2/elemB[@attr2]");
+ assert (pNode == 0);
+
+ pNode = pRoot->getNodeByPath("/elem2/elemB[@attr1='value2']");
+ assert (pNode == pElem22);
+
+ pNode = pRoot->getNodeByPath("/elem2/elemC[@attr1='value1']/elemC1");
+ assert (pNode == pElem241);
+
+ pNode = pRoot->getNodeByPath("/elem2/elemC[@attr1='value1']/elemC1[@attr1]");
+ assert (pNode && pNode->nodeValue() == "value1");
+
+ pNode = pDoc->getNodeByPath("//elemB[@attr1='value1']");
+ assert (pNode == pElem21);
+
+ pNode = pDoc->getNodeByPath("//elemB[@attr1='value2']");
+ assert (pNode == pElem22);
+
+ pNode = pDoc->getNodeByPath("//elemB[@attr1='value3']");
+ assert (pNode == pElem23);
+
+ pNode = pDoc->getNodeByPath("//elemB[@attr1='value4']");
+ assert (pNode == 0);
+
+ pNode = pDoc->getNodeByPath("//[@attr1='value1']");
+ assert (pNode == pElem21);
+
+ pNode = pDoc->getNodeByPath("//[@attr1='value2']");
+ assert (pNode == pElem22);
+}
+
+
+void ElementTest::testNodeByPathNS()
+{
+ /*
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ */
+ AutoPtr pDoc = new Document;
+
+ AutoPtr pRoot = pDoc->createElementNS("urn:ns1", "ns1:root");
+ AutoPtr pElem1 = pDoc->createElementNS("urn:ns1", "ns1:elem1");
+ AutoPtr pElem11 = pDoc->createElementNS("urn:ns2", "ns2:elemA");
+ AutoPtr pElem12 = pDoc->createElementNS("urn:ns2", "ns2:elemA");
+ AutoPtr pElem2 = pDoc->createElementNS("urn:ns1", "ns1:elem2");
+ AutoPtr pElem21 = pDoc->createElementNS("urn:ns2", "ns2:elemB");
+ AutoPtr pElem22 = pDoc->createElementNS("urn:ns2", "ns2:elemB");
+ AutoPtr pElem23 = pDoc->createElementNS("urn:ns2", "ns2:elemB");
+ AutoPtr pElem24 = pDoc->createElementNS("urn:ns2", "ns2:elemC");
+ AutoPtr pElem25 = pDoc->createElementNS("urn:ns2", "ns2:elemC");
+
+ pElem21->setAttributeNS("urn:ns2", "ns2:attr1", "value1");
+ pElem22->setAttributeNS("urn:ns2", "ns2:attr1", "value2");
+ pElem23->setAttributeNS("urn:ns2", "ns2:attr1", "value3");
+
+ pElem24->setAttributeNS("urn:ns2", "ns2:attr1", "value1");
+ pElem25->setAttributeNS("urn:ns2", "ns2:attr1", "value2");
+
+ AutoPtr pElem241 = pDoc->createElementNS("urn:ns2", "elemC1");
+ AutoPtr pElem242 = pDoc->createElementNS("urn:ns2", "elemC2");
+ pElem241->setAttributeNS("urn:ns2", "ns2:attr1", "value1");
+ pElem24->appendChild(pElem241);
+ pElem24->appendChild(pElem242);
+
+ pElem1->appendChild(pElem11);
+ pElem1->appendChild(pElem12);
+ pElem2->appendChild(pElem21);
+ pElem2->appendChild(pElem22);
+ pElem2->appendChild(pElem23);
+ pElem2->appendChild(pElem24);
+ pElem2->appendChild(pElem25);
+
+ pRoot->appendChild(pElem1);
+ pRoot->appendChild(pElem2);
+
+ pDoc->appendChild(pRoot);
+
+ Element::NSMap nsMap;
+ nsMap.declarePrefix("ns1", "urn:ns1");
+ nsMap.declarePrefix("NS2", "urn:ns2");
+
+ Node* pNode = pRoot->getNodeByPathNS("/", nsMap);
+ assert (pNode == pRoot);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem1", nsMap);
+ assert (pNode == pElem1);
+
+ pNode = pDoc->getNodeByPathNS("/ns1:root/ns1:elem1", nsMap);
+ assert (pNode == pElem1);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem2", nsMap);
+ assert (pNode == pElem2);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem1/NS2:elemA", nsMap);
+ assert (pNode == pElem11);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem1/NS2:elemA[0]", nsMap);
+ assert (pNode == pElem11);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem1/NS2:elemA[1]", nsMap);
+ assert (pNode == pElem12);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem1/NS2:elemA[2]", nsMap);
+ assert (pNode == 0);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem2/NS2:elemB", nsMap);
+ assert (pNode == pElem21);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem2/NS2:elemB[0]", nsMap);
+ assert (pNode == pElem21);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem2/NS2:elemB[1]", nsMap);
+ assert (pNode == pElem22);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem2/NS2:elemB[2]", nsMap);
+ assert (pNode == pElem23);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem2/NS2:elemB[3]", nsMap);
+ assert (pNode == 0);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem2/NS2:elemB[@NS2:attr1]", nsMap);
+ assert (pNode && pNode->nodeValue() == "value1");
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem2/NS2:elemB[@NS2:attr2]", nsMap);
+ assert (pNode == 0);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem2/NS2:elemB[@NS2:attr1='value2']", nsMap);
+ assert (pNode == pElem22);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem2/NS2:elemC[@NS2:attr1='value1']/NS2:elemC1", nsMap);
+ assert (pNode == pElem241);
+
+ pNode = pRoot->getNodeByPathNS("/ns1:elem2/NS2:elemC[@NS2:attr1='value1']/NS2:elemC1[@NS2:attr1]", nsMap);
+ assert (pNode && pNode->nodeValue() == "value1");
+
+ pNode = pRoot->getNodeByPathNS("/NS2:elem1", nsMap);
+ assert (pNode == 0);
+
+ pNode = pDoc->getNodeByPathNS("//NS2:elemB[@NS2:attr1='value1']", nsMap);
+ assert (pNode == pElem21);
+
+ pNode = pDoc->getNodeByPathNS("//NS2:elemB[@NS2:attr1='value2']", nsMap);
+ assert (pNode == pElem22);
+
+ pNode = pDoc->getNodeByPathNS("//NS2:elemB[@NS2:attr1='value3']", nsMap);
+ assert (pNode == pElem23);
+
+ pNode = pDoc->getNodeByPathNS("//NS2:elemB[@NS2:attr1='value4']", nsMap);
+ assert (pNode == 0);
+
+ pNode = pDoc->getNodeByPathNS("//[@NS2:attr1='value1']", nsMap);
+ assert (pNode == pElem21);
+
+ pNode = pDoc->getNodeByPathNS("//[@NS2:attr1='value2']", nsMap);
+ assert (pNode == pElem22);
+}
+
+
void ElementTest::setUp()
{
}
@@ -650,9 +924,11 @@ CppUnit::Test* ElementTest::suite()
CppUnit_addTest(pSuite, ElementTest, testAttrMapNS);
CppUnit_addTest(pSuite, ElementTest, testElementsByTagName);
CppUnit_addTest(pSuite, ElementTest, testElementsByTagNameNS);
- CppUnit_addTest(pSuite, ElementTest, testInnerText);
- CppUnit_addTest(pSuite, ElementTest, testChildElement);
- CppUnit_addTest(pSuite, ElementTest, testChildElementNS);
+ CppUnit_addTest(pSuite, ElementTest, testInnerText);
+ CppUnit_addTest(pSuite, ElementTest, testChildElement);
+ CppUnit_addTest(pSuite, ElementTest, testChildElementNS);
+ CppUnit_addTest(pSuite, ElementTest, testNodeByPath);
+ CppUnit_addTest(pSuite, ElementTest, testNodeByPathNS);
- return pSuite;
+ return pSuite;
}
diff --git a/XML/testsuite/src/ElementTest.h b/XML/testsuite/src/ElementTest.h
index 4cd6ac5d0..bf2658a34 100644
--- a/XML/testsuite/src/ElementTest.h
+++ b/XML/testsuite/src/ElementTest.h
@@ -52,12 +52,14 @@ public:
void testAttrMapNS();
void testElementsByTagName();
void testElementsByTagNameNS();
- void testInnerText();
- void testChildElement();
- void testChildElementNS();
-
- void setUp();
- void tearDown();
+ void testInnerText();
+ void testChildElement();
+ void testChildElementNS();
+ void testNodeByPath();
+ void testNodeByPathNS();
+
+ void setUp();
+ void tearDown();
static CppUnit::Test* suite();
diff --git a/XML/testsuite/src/ParserWriterTest.cpp b/XML/testsuite/src/ParserWriterTest.cpp
index 30de95031..4b38837f9 100644
--- a/XML/testsuite/src/ParserWriterTest.cpp
+++ b/XML/testsuite/src/ParserWriterTest.cpp
@@ -36,6 +36,7 @@
#include "Poco/DOM/DOMParser.h"
#include "Poco/DOM/DOMWriter.h"
#include "Poco/DOM/Document.h"
+#include "Poco/DOM/Element.h"
#include "Poco/DOM/AutoPtr.h"
#include "Poco/SAX/InputSource.h"
#include "Poco/XML/XMLWriter.h"
@@ -90,7 +91,6 @@ void ParserWriterTest::testParseWriteXHTML2()
assert (xml == XHTML2);
}
-
void ParserWriterTest::testParseWriteWSDL()
{
std::istringstream istr(WSDL);
@@ -107,7 +107,40 @@ void ParserWriterTest::testParseWriteWSDL()
writer.writeNode(ostr, pDoc);
std::string xml = ostr.str();
- assert (xml == WSDL);
+ assert (xml == WSDL);
+}
+
+void ParserWriterTest::testParseWriteSimple()
+{
+ static const std::string simple =
+ "\n"
+ "\tvalue1\n"
+ "\tvalue2\n"
+ "\n";
+
+ std::istringstream istr(simple);
+ std::ostringstream ostr;
+
+ DOMParser parser;
+ parser.setFeature(DOMParser::FEATURE_FILTER_WHITESPACE, true);
+ parser.setFeature(XMLReader::FEATURE_NAMESPACE_PREFIXES, false);
+ DOMWriter writer;
+ writer.setNewLine("\n");
+ writer.setOptions(XMLWriter::PRETTY_PRINT);
+ InputSource source(istr);
+ AutoPtr pDoc = parser.parse(&source);
+ writer.writeNode(ostr, pDoc);
+
+ unsigned int numChildren = 0;
+ Poco::XML::Node* child = pDoc->documentElement()->firstChild();
+ while (child) {
+ numChildren++;
+ child = child->nextSibling();
+ }
+ assert (numChildren == 2);
+
+ std::string xml = ostr.str();
+ assert (xml == simple);
}
@@ -125,11 +158,12 @@ CppUnit::Test* ParserWriterTest::suite()
{
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ParserWriterTest");
- CppUnit_addTest(pSuite, ParserWriterTest, testParseWriteXHTML);
- CppUnit_addTest(pSuite, ParserWriterTest, testParseWriteXHTML2);
- CppUnit_addTest(pSuite, ParserWriterTest, testParseWriteWSDL);
+ CppUnit_addTest(pSuite, ParserWriterTest, testParseWriteXHTML);
+ CppUnit_addTest(pSuite, ParserWriterTest, testParseWriteXHTML2);
+ CppUnit_addTest(pSuite, ParserWriterTest, testParseWriteWSDL);
+ CppUnit_addTest(pSuite, ParserWriterTest, testParseWriteSimple);
- return pSuite;
+ return pSuite;
}
@@ -171,151 +205,151 @@ const std::string ParserWriterTest::XHTML2 =
"\t\tis inside a CDATA section.\n"
"\t\t]]>\n"
- "\t\n"
- "";
+ "\t\n"
+ "";
const std::string ParserWriterTest::WSDL =
- "\n"
- "\n"
- "\n"
- "\t\n"
- "\t\n"
- "\t\t\n"
- "\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\n"
- "\t\t\n"
- "\t\n"
- "\t\n"
- "\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\n"
- "\t\n"
- "\t\t\n"
- "\t\n"
- "\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\n"
- "\t\n"
- "\t\t\n"
- "\t\n"
- "\t\n"
- "\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\n"
- "\t\n"
- "\t\t\n"
- "\t\n"
- "\t\n"
- "\t\n"
- "\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\n"
- "\t\n"
- "\t\n"
- "\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\n"
- "\t\t\n"
- "\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\n"
- "\t\t\t\t\n"
- "\t\t\t\n"
- "\t\t\n"
- "\t\n"
- "\t\n"
- "\t\n"
- "\t\t\n"
- "\t\t\t\n"
- "\t\t\n"
- "\t\n"
- "\n";
+ "\n"
+ "\n"
+ "\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\n";
diff --git a/XML/testsuite/src/ParserWriterTest.h b/XML/testsuite/src/ParserWriterTest.h
index 7b48a8c0c..2c66092ee 100644
--- a/XML/testsuite/src/ParserWriterTest.h
+++ b/XML/testsuite/src/ParserWriterTest.h
@@ -46,19 +46,20 @@ public:
ParserWriterTest(const std::string& name);
~ParserWriterTest();
- void testParseWriteXHTML();
- void testParseWriteXHTML2();
- void testParseWriteWSDL();
+ void testParseWriteXHTML();
+ void testParseWriteXHTML2();
+ void testParseWriteWSDL();
+ void testParseWriteSimple();
- void setUp();
- void tearDown();
+ void setUp();
+ void tearDown();
static CppUnit::Test* suite();
private:
- static const std::string XHTML;
- static const std::string XHTML2;
- static const std::string WSDL;
+ static const std::string XHTML;
+ static const std::string XHTML2;
+ static const std::string WSDL;
};
diff --git a/XML/testsuite/src/SAXParserTest.cpp b/XML/testsuite/src/SAXParserTest.cpp
index b35703d6a..40de6769d 100644
--- a/XML/testsuite/src/SAXParserTest.cpp
+++ b/XML/testsuite/src/SAXParserTest.cpp
@@ -320,8 +320,18 @@ void SAXParserTest::testCharacters()
void SAXParserTest::testParseMemory()
{
SAXParser parser;
- std::string xml = parseMemory(parser, XMLWriter::CANONICAL, ATTRIBUTES);
- assert (xml == ATTRIBUTES);
+ std::string xml = parseMemory(parser, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT, WSDL);
+ assert (xml == WSDL);
+}
+
+
+void SAXParserTest::testParsePartialReads()
+{
+ SAXParser parser;
+ parser.setFeature("http://www.appinf.com/features/enable-partial-reads", true);
+
+ std::string xml = parse(parser, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT, WSDL);
+ assert (xml == WSDL);
}
@@ -340,6 +350,7 @@ std::string SAXParserTest::parse(XMLReader& reader, int options, const std::stri
std::istringstream istr(data);
std::ostringstream ostr;
XMLWriter writer(ostr, options);
+ writer.setNewLine(XMLWriter::NEWLINE_LF);
reader.setContentHandler(&writer);
reader.setDTDHandler(&writer);
reader.setProperty(XMLReader::PROPERTY_LEXICAL_HANDLER, static_cast(&writer));
@@ -351,9 +362,10 @@ std::string SAXParserTest::parse(XMLReader& reader, int options, const std::stri
std::string SAXParserTest::parseMemory(XMLReader& reader, int options, const std::string& data)
{
- std::istringstream istr(data);
- std::ostringstream ostr;
- XMLWriter writer(ostr, options);
+ std::istringstream istr(data);
+ std::ostringstream ostr;
+ XMLWriter writer(ostr, options);
+ writer.setNewLine(XMLWriter::NEWLINE_LF);
reader.setContentHandler(&writer);
reader.setDTDHandler(&writer);
reader.setProperty(XMLReader::PROPERTY_LEXICAL_HANDLER, static_cast(&writer));
@@ -383,13 +395,14 @@ CppUnit::Test* SAXParserTest::suite()
CppUnit_addTest(pSuite, SAXParserTest, testNoNamespaces);
CppUnit_addTest(pSuite, SAXParserTest, testUndeclaredNamespace);
CppUnit_addTest(pSuite, SAXParserTest, testUndeclaredNamespaceNoPrefixes);
- CppUnit_addTest(pSuite, SAXParserTest, testUndeclaredNoNamespace);
- CppUnit_addTest(pSuite, SAXParserTest, testRSS);
- CppUnit_addTest(pSuite, SAXParserTest, testEncoding);
- CppUnit_addTest(pSuite, SAXParserTest, testParseMemory);
- CppUnit_addTest(pSuite, SAXParserTest, testCharacters);
+ CppUnit_addTest(pSuite, SAXParserTest, testUndeclaredNoNamespace);
+ CppUnit_addTest(pSuite, SAXParserTest, testRSS);
+ CppUnit_addTest(pSuite, SAXParserTest, testEncoding);
+ CppUnit_addTest(pSuite, SAXParserTest, testCharacters);
+ CppUnit_addTest(pSuite, SAXParserTest, testParseMemory);
+ CppUnit_addTest(pSuite, SAXParserTest, testParsePartialReads);
- return pSuite;
+ return pSuite;
}
@@ -1034,3 +1047,148 @@ const std::string SAXParserTest::RSS =
const std::string SAXParserTest::ENCODING =
""
"\244";
+
+const std::string SAXParserTest::WSDL =
+ "\n"
+ "\n"
+ "\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\n"
+ "\t\t\n"
+ "\t\t\t\n"
+ "\t\t\n"
+ "\t\n"
+ "\n";
diff --git a/XML/testsuite/src/SAXParserTest.h b/XML/testsuite/src/SAXParserTest.h
index 3250e515f..f95fae18a 100644
--- a/XML/testsuite/src/SAXParserTest.h
+++ b/XML/testsuite/src/SAXParserTest.h
@@ -66,12 +66,13 @@ public:
void testUndeclaredNamespaceNoPrefixes();
void testUndeclaredNoNamespace();
void testRSS();
- void testEncoding();
- void testParseMemory();
- void testCharacters();
+ void testEncoding();
+ void testParseMemory();
+ void testCharacters();
+ void testParsePartialReads();
- void setUp();
- void tearDown();
+ void setUp();
+ void tearDown();
std::string parse(Poco::XML::XMLReader& reader, int options, const std::string& data);
std::string parseMemory(Poco::XML::XMLReader& reader, int options, const std::string& data);
@@ -93,9 +94,10 @@ public:
static const std::string DEFAULT_NAMESPACE;
static const std::string NAMESPACES;
static const std::string UNDECLARED_NAMESPACE;
- static const std::string XHTML_LATIN1_ENTITIES;
- static const std::string RSS;
- static const std::string ENCODING;
+ static const std::string XHTML_LATIN1_ENTITIES;
+ static const std::string RSS;
+ static const std::string ENCODING;
+ static const std::string WSDL;
};
diff --git a/XML/testsuite/src/XMLWriterTest.cpp b/XML/testsuite/src/XMLWriterTest.cpp
index b2e9c0527..fd2a40f7d 100644
--- a/XML/testsuite/src/XMLWriterTest.cpp
+++ b/XML/testsuite/src/XMLWriterTest.cpp
@@ -55,20 +55,33 @@ XMLWriterTest::~XMLWriterTest()
void XMLWriterTest::testTrivial()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("", "", "foo");
- writer.endElement("", "", "foo");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("", "", "foo");
+ writer.endElement("", "", "foo");
writer.endDocument();
std::string xml = str.str();
assert (xml == "");
}
+void XMLWriterTest::testTrivialCanonical()
+{
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL_XML);
+ writer.startDocument();
+ writer.startElement("", "", "foo");
+ writer.endElement("", "", "foo");
+ writer.endDocument();
+ std::string xml = str.str();
+ assert (xml == "");
+}
+
+
void XMLWriterTest::testTrivialDecl()
{
- std::ostringstream str;
+ std::ostringstream str;
XMLWriter writer(str, XMLWriter::WRITE_XML_DECLARATION);
writer.startDocument();
writer.startElement("", "", "foo");
@@ -95,11 +108,11 @@ void XMLWriterTest::testTrivialDeclPretty()
void XMLWriterTest::testTrivialFragment()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startFragment();
- writer.startElement("", "", "foo");
- writer.endElement("", "", "foo");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startFragment();
+ writer.startElement("", "", "foo");
+ writer.endElement("", "", "foo");
writer.endFragment();
std::string xml = str.str();
assert (xml == "");
@@ -208,11 +221,11 @@ void XMLWriterTest::testDTDEntity()
void XMLWriterTest::testAttributes()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- AttributesImpl attrs;
- attrs.addAttribute("", "", "a1", "CDATA", "v1");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ AttributesImpl attrs;
+ attrs.addAttribute("", "", "a1", "CDATA", "v1");
attrs.addAttribute("", "", "a2", "CDATA", "v2");
writer.startElement("", "", "el", attrs);
writer.endElement("", "", "el");
@@ -222,13 +235,30 @@ void XMLWriterTest::testAttributes()
}
+void XMLWriterTest::testAttributesPretty()
+{
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::PRETTY_PRINT | XMLWriter::PRETTY_PRINT_ATTRIBUTES);
+ writer.setNewLine(XMLWriter::NEWLINE_LF);
+ writer.startDocument();
+ AttributesImpl attrs;
+ attrs.addAttribute("", "", "a1", "CDATA", "v1");
+ attrs.addAttribute("", "", "a2", "CDATA", "v2");
+ writer.startElement("", "", "el", attrs);
+ writer.endElement("", "", "el");
+ writer.endDocument();
+ std::string xml = str.str();
+ assert (xml == "\n");
+}
+
+
void XMLWriterTest::testData()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.dataElement("", "", "d", "data", "a1", "v1", "a2", "v2", "a3", "v3");
- writer.endDocument();
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.dataElement("", "", "d", "data", "a1", "v1", "a2", "v2", "a3", "v3");
+ writer.endDocument();
std::string xml = str.str();
assert (xml == "data");
}
@@ -236,11 +266,11 @@ void XMLWriterTest::testData()
void XMLWriterTest::testEmptyData()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.dataElement("", "", "d", "", "a1", "v1", "a2", "v2", "a3", "v3");
- writer.endDocument();
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.dataElement("", "", "d", "", "a1", "v1", "a2", "v2", "a3", "v3");
+ writer.endDocument();
std::string xml = str.str();
assert (xml == "");
}
@@ -248,11 +278,11 @@ void XMLWriterTest::testEmptyData()
void XMLWriterTest::testDataPretty()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT);
- writer.setNewLine("\n");
- writer.startDocument();
- writer.startElement("", "", "r");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT);
+ writer.setNewLine("\n");
+ writer.startDocument();
+ writer.startElement("", "", "r");
writer.dataElement("", "", "d", "data", "a1", "v1", "a2", "v2", "a3", "v3");
writer.endElement("", "", "r");
writer.endDocument();
@@ -263,11 +293,11 @@ void XMLWriterTest::testDataPretty()
void XMLWriterTest::testEmptyDataPretty()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT);
- writer.setNewLine("\n");
- writer.startDocument();
- writer.startElement("", "", "r");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT);
+ writer.setNewLine("\n");
+ writer.startDocument();
+ writer.startElement("", "", "r");
writer.dataElement("", "", "d", "", "a1", "v1", "a2", "v2", "a3", "v3");
writer.endElement("", "", "r");
writer.endDocument();
@@ -278,11 +308,11 @@ void XMLWriterTest::testEmptyDataPretty()
void XMLWriterTest::testComment()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT);
- writer.setNewLine("\n");
- writer.startDocument();
- writer.comment("a comment", 0, 9);
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT);
+ writer.setNewLine("\n");
+ writer.startDocument();
+ writer.comment("a comment", 0, 9);
writer.startElement("", "", "r");
writer.comment("", 0, 17);
writer.dataElement("", "", "d", "data");
@@ -295,11 +325,11 @@ void XMLWriterTest::testComment()
void XMLWriterTest::testPI()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT);
- writer.setNewLine("\n");
- writer.startDocument();
- writer.processingInstruction("target", "a processing instruction");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT);
+ writer.setNewLine("\n");
+ writer.startDocument();
+ writer.processingInstruction("target", "a processing instruction");
writer.startElement("", "", "r");
writer.processingInstruction("target", "another processing instruction");
writer.dataElement("", "", "d", "data");
@@ -312,11 +342,11 @@ void XMLWriterTest::testPI()
void XMLWriterTest::testCharacters()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("", "", "r");
- writer.characters("some \"chars\" that be & escaped");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("", "", "r");
+ writer.characters("some \"chars\" that be & escaped");
writer.endElement("", "", "r");
writer.endDocument();
std::string xml = str.str();
@@ -326,11 +356,11 @@ void XMLWriterTest::testCharacters()
void XMLWriterTest::testEmptyCharacters()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("", "", "r");
- writer.characters("");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("", "", "r");
+ writer.characters("");
writer.endElement("", "", "r");
writer.endDocument();
std::string xml = str.str();
@@ -340,11 +370,11 @@ void XMLWriterTest::testEmptyCharacters()
void XMLWriterTest::testCDATA()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("", "", "r");
- writer.startCDATA();
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("", "", "r");
+ writer.startCDATA();
writer.characters("some \"chars\" that be & escaped");
writer.endCDATA();
writer.endElement("", "", "r");
@@ -356,11 +386,11 @@ void XMLWriterTest::testCDATA()
void XMLWriterTest::testRawCharacters()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("", "", "r");
- writer.startCDATA();
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("", "", "r");
+ writer.startCDATA();
writer.rawCharacters("some \"chars\" that be & escaped");
writer.endCDATA();
writer.endElement("", "", "r");
@@ -370,13 +400,29 @@ void XMLWriterTest::testRawCharacters()
}
+void XMLWriterTest::testAttributeCharacters()
+{
+ std::ostringstream str;
+ XMLWriter writer(str, 0);
+ writer.startDocument();
+ AttributesImpl attrs;
+ attrs.addAttribute("", "", "a1", "CDATA", "a b c\n\td");
+ attrs.addAttribute("", "", "a2", "CDATA", "a b c\r\nd");
+ writer.startElement("", "", "el", attrs);
+ writer.endElement("", "", "el");
+ writer.endDocument();
+ std::string xml = str.str();
+ assert (xml == "");
+}
+
+
void XMLWriterTest::testDefaultNamespace()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startPrefixMapping("", "urn:ns");
- writer.startElement("", "", "r");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startPrefixMapping("", "urn:ns");
+ writer.startElement("", "", "r");
writer.characters("data");
writer.endElement("", "", "r");
writer.endPrefixMapping("");
@@ -388,11 +434,11 @@ void XMLWriterTest::testDefaultNamespace()
void XMLWriterTest::testQNamespaces()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("urn:ns", "r", "p:r");
- writer.characters("data");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("urn:ns", "r", "p:r");
+ writer.characters("data");
writer.endElement("urn:ns", "r", "p:r");
writer.endDocument();
std::string xml = str.str();
@@ -402,11 +448,11 @@ void XMLWriterTest::testQNamespaces()
void XMLWriterTest::testQNamespacesNested()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("urn:ns", "r", "p:r");
- writer.startElement("urn:ns", "e", "p:e");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("urn:ns", "r", "p:r");
+ writer.startElement("urn:ns", "e", "p:e");
writer.endElement("urn:ns", "e", "p:e");
writer.endElement("urn:ns", "r", "p:r");
writer.endDocument();
@@ -417,11 +463,11 @@ void XMLWriterTest::testQNamespacesNested()
void XMLWriterTest::testNamespaces()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("urn:ns", "r", "");
- writer.characters("data");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("urn:ns", "r", "");
+ writer.characters("data");
writer.endElement("urn:ns", "r", "");
writer.endDocument();
std::string xml = str.str();
@@ -430,28 +476,28 @@ void XMLWriterTest::testNamespaces()
void XMLWriterTest::testAttributeNamespaces()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- Poco::XML::AttributesImpl attrs;
- attrs.addAttribute("urn:other", "myattr", "", "", "attrValue");
- attrs.addAttribute("urn:ns", "myattr2", "", "", "attrValue2");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ Poco::XML::AttributesImpl attrs;
+ attrs.addAttribute("urn:other", "myattr", "", "", "attrValue");
+ attrs.addAttribute("urn:ns", "myattr2", "", "", "attrValue2");
writer.startDocument();
writer.startElement("urn:ns", "r", "", attrs);
writer.characters("data");
- writer.endElement("urn:ns", "r", "");
- writer.endDocument();
- std::string xml = str.str();
- assert (xml == "data");
+ writer.endElement("urn:ns", "r", "");
+ writer.endDocument();
+ std::string xml = str.str();
+ assert (xml == "data");
}
void XMLWriterTest::testNamespacesNested()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("urn:ns1", "r", "");
- writer.startElement("urn:ns1", "e", "");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("urn:ns1", "r", "");
+ writer.startElement("urn:ns1", "e", "");
writer.endElement("urn:ns1", "e", "");
writer.startElement("urn:ns2", "f", "");
writer.endElement("urn:ns2", "f", "");
@@ -464,11 +510,11 @@ void XMLWriterTest::testNamespacesNested()
void XMLWriterTest::testExplicitNamespaces()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startPrefixMapping("p1", "urn:ns1");
- writer.startPrefixMapping("p2", "urn:ns2");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startPrefixMapping("p1", "urn:ns1");
+ writer.startPrefixMapping("p2", "urn:ns2");
writer.startElement("urn:ns1", "r", "");
writer.startElement("urn:ns2", "e", "");
writer.endElement("urn:ns2", "e", "");
@@ -486,11 +532,11 @@ void XMLWriterTest::testExplicitNamespaces()
void XMLWriterTest::testWellformed()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("", "", "foo");
- try
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("", "", "foo");
+ try
{
writer.endElement("", "", "bar");
fail("not wellformed - must throw exception");
@@ -503,11 +549,11 @@ void XMLWriterTest::testWellformed()
void XMLWriterTest::testWellformedNested()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("", "", "foo");
- writer.startElement("", "", "bar");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("", "", "foo");
+ writer.startElement("", "", "bar");
try
{
writer.endElement("", "", "foo");
@@ -521,11 +567,11 @@ void XMLWriterTest::testWellformedNested()
void XMLWriterTest::testWellformedNamespace()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("urn:ns1", "foo", "");
- writer.startElement("urn:ns2", "bar", "");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("urn:ns1", "foo", "");
+ writer.startElement("urn:ns2", "bar", "");
try
{
writer.endElement("urn:ns1", "bar", "");
@@ -539,11 +585,11 @@ void XMLWriterTest::testWellformedNamespace()
void XMLWriterTest::testEmpty()
{
- std::ostringstream str;
- XMLWriter writer(str, XMLWriter::CANONICAL);
- writer.startDocument();
- writer.startElement("", "", "foo");
- writer.startElement("", "", "bar");
+ std::ostringstream str;
+ XMLWriter writer(str, XMLWriter::CANONICAL);
+ writer.startDocument();
+ writer.startElement("", "", "foo");
+ writer.startElement("", "", "bar");
writer.emptyElement("", "", "empty");
writer.endElement("", "", "bar");
writer.endElement("", "", "foo");
@@ -565,31 +611,34 @@ void XMLWriterTest::tearDown()
CppUnit::Test* XMLWriterTest::suite()
{
- CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("XMLWriterTest");
+ CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("XMLWriterTest");
- CppUnit_addTest(pSuite, XMLWriterTest, testTrivial);
- CppUnit_addTest(pSuite, XMLWriterTest, testTrivialDecl);
- CppUnit_addTest(pSuite, XMLWriterTest, testTrivialDeclPretty);
- CppUnit_addTest(pSuite, XMLWriterTest, testTrivialFragment);
+ CppUnit_addTest(pSuite, XMLWriterTest, testTrivial);
+ CppUnit_addTest(pSuite, XMLWriterTest, testTrivialCanonical);
+ CppUnit_addTest(pSuite, XMLWriterTest, testTrivialDecl);
+ CppUnit_addTest(pSuite, XMLWriterTest, testTrivialDeclPretty);
+ CppUnit_addTest(pSuite, XMLWriterTest, testTrivialFragment);
CppUnit_addTest(pSuite, XMLWriterTest, testTrivialFragmentPretty);
CppUnit_addTest(pSuite, XMLWriterTest, testDTDPretty);
CppUnit_addTest(pSuite, XMLWriterTest, testDTD);
- CppUnit_addTest(pSuite, XMLWriterTest, testDTDNotation);
- CppUnit_addTest(pSuite, XMLWriterTest, testDTDEntity);
- CppUnit_addTest(pSuite, XMLWriterTest, testAttributes);
- CppUnit_addTest(pSuite, XMLWriterTest, testData);
- CppUnit_addTest(pSuite, XMLWriterTest, testEmptyData);
- CppUnit_addTest(pSuite, XMLWriterTest, testDataPretty);
+ CppUnit_addTest(pSuite, XMLWriterTest, testDTDNotation);
+ CppUnit_addTest(pSuite, XMLWriterTest, testDTDEntity);
+ CppUnit_addTest(pSuite, XMLWriterTest, testAttributes);
+ CppUnit_addTest(pSuite, XMLWriterTest, testAttributesPretty);
+ CppUnit_addTest(pSuite, XMLWriterTest, testData);
+ CppUnit_addTest(pSuite, XMLWriterTest, testEmptyData);
+ CppUnit_addTest(pSuite, XMLWriterTest, testDataPretty);
CppUnit_addTest(pSuite, XMLWriterTest, testEmptyDataPretty);
CppUnit_addTest(pSuite, XMLWriterTest, testComment);
CppUnit_addTest(pSuite, XMLWriterTest, testPI);
CppUnit_addTest(pSuite, XMLWriterTest, testCharacters);
- CppUnit_addTest(pSuite, XMLWriterTest, testEmptyCharacters);
- CppUnit_addTest(pSuite, XMLWriterTest, testCDATA);
- CppUnit_addTest(pSuite, XMLWriterTest, testRawCharacters);
- CppUnit_addTest(pSuite, XMLWriterTest, testDefaultNamespace);
- CppUnit_addTest(pSuite, XMLWriterTest, testQNamespaces);
- CppUnit_addTest(pSuite, XMLWriterTest, testQNamespacesNested);
+ CppUnit_addTest(pSuite, XMLWriterTest, testEmptyCharacters);
+ CppUnit_addTest(pSuite, XMLWriterTest, testCDATA);
+ CppUnit_addTest(pSuite, XMLWriterTest, testRawCharacters);
+ CppUnit_addTest(pSuite, XMLWriterTest, testAttributeCharacters);
+ CppUnit_addTest(pSuite, XMLWriterTest, testDefaultNamespace);
+ CppUnit_addTest(pSuite, XMLWriterTest, testQNamespaces);
+ CppUnit_addTest(pSuite, XMLWriterTest, testQNamespacesNested);
CppUnit_addTest(pSuite, XMLWriterTest, testNamespaces);
CppUnit_addTest(pSuite, XMLWriterTest, testAttributeNamespaces);
CppUnit_addTest(pSuite, XMLWriterTest, testNamespacesNested);
diff --git a/XML/testsuite/src/XMLWriterTest.h b/XML/testsuite/src/XMLWriterTest.h
index 316077d5e..53f118464 100644
--- a/XML/testsuite/src/XMLWriterTest.h
+++ b/XML/testsuite/src/XMLWriterTest.h
@@ -44,31 +44,34 @@ class XMLWriterTest: public CppUnit::TestCase
{
public:
XMLWriterTest(const std::string& name);
- ~XMLWriterTest();
+ ~XMLWriterTest();
- void testTrivial();
- void testTrivialDecl();
- void testTrivialDeclPretty();
- void testTrivialFragment();
+ void testTrivial();
+ void testTrivialCanonical();
+ void testTrivialDecl();
+ void testTrivialDeclPretty();
+ void testTrivialFragment();
void testTrivialFragmentPretty();
void testDTDPretty();
void testDTD();
- void testDTDNotation();
- void testDTDEntity();
- void testAttributes();
- void testData();
- void testEmptyData();
- void testDataPretty();
+ void testDTDNotation();
+ void testDTDEntity();
+ void testAttributes();
+ void testAttributesPretty();
+ void testData();
+ void testEmptyData();
+ void testDataPretty();
void testEmptyDataPretty();
void testComment();
void testPI();
void testCharacters();
- void testEmptyCharacters();
- void testCDATA();
- void testRawCharacters();
- void testDefaultNamespace();
- void testQNamespaces();
- void testQNamespacesNested();
+ void testEmptyCharacters();
+ void testCDATA();
+ void testRawCharacters();
+ void testAttributeCharacters();
+ void testDefaultNamespace();
+ void testQNamespaces();
+ void testQNamespacesNested();
void testNamespaces();
void testNamespacesNested();
void testExplicitNamespaces();