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();