unoxml: port testXProcessingInstruction from java to c++

Change-Id: I2112ac35f046ea0a9c3892c53e4c14a2c1b9e258
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/174972
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Jenkins
This commit is contained in:
Xisco Fauli
2024-10-15 17:37:33 +02:00
parent 7a749b0c34
commit a5f45b816e
2 changed files with 119 additions and 161 deletions
-161
View File
@@ -2059,167 +2059,6 @@ public class DOMTest
xERChild, xER.getLastChild());
}
@Test public void testXProcessingInstruction() throws Exception
{
XDocumentBuilder xBuilder =
UnoRuntime.queryInterface(XDocumentBuilder.class,
m_xMSF.createInstance("com.sun.star.xml.dom.DocumentBuilder"));
XDocument xDoc = xBuilder.newDocument();
XProcessingInstruction xPI =
xDoc.createProcessingInstruction("foo", "bar");
assertNotNull(xPI);
assertEquals("XProcessingInstruction.getTarget",
"foo", xPI.getTarget());
assertEquals("XProcessingInstruction.getData", "bar", xPI.getData());
xPI.setData("baz");
assertEquals("XProcessingInstruction.setData", "baz", xPI.getData());
// XNode
{
XNode xPICloneN = xPI.cloneNode(false);
assertNotNull("XProcessingInstruction.cloneNode(false)", xPICloneN);
XProcessingInstruction xPIClone = UnoRuntime.queryInterface(
XProcessingInstruction.class, xPICloneN);
assertNotNull("XProcessingInstruction.cloneNode(false)", xPIClone);
assertFalse("XProcessingInstruction.cloneNode(false)",
xPIClone.hasChildNodes());
}
{
XNode xPICloneN = xPI.cloneNode(true);
assertNotNull("XProcessingInstruction.cloneNode(true)", xPICloneN);
XProcessingInstruction xPIClone = UnoRuntime.queryInterface(
XProcessingInstruction.class, xPICloneN);
assertNotNull("XProcessingInstruction.cloneNode(true)", xPIClone);
assertFalse("XProcessingInstruction.cloneNode(true)",
xPIClone.hasChildNodes());
}
assertNull("XProcessingInstruction.getAttributes()",
xPI.getAttributes());
{
XNodeList xChildren = xPI.getChildNodes();
assertTrue("XProcessingInstruction.getChildNodes()",
0 == xChildren.getLength());
}
assertEquals("XProcessingInstruction.getLocalName()",
"", xPI.getLocalName());
assertEquals("XProcessingInstruction.getNamespaceURI()",
"", xPI.getNamespaceURI());
assertNull("XProcessingInstruction.getNextSibling()",
xPI.getNextSibling());
assertEquals("XProcessingInstruction.getNodeName()",
"foo", xPI.getNodeName());
assertTrue("XProcessingInstruction.getNodeType()",
PROCESSING_INSTRUCTION_NODE == xPI.getNodeType());
assertEquals("XProcessingInstruction.getNodeValue()",
"baz", xPI.getNodeValue());
assertEquals("XProcessingInstruction.getOwnerDocument()",
xDoc, xPI.getOwnerDocument());
assertNull("XProcessingInstruction.getParentNode()",
xPI.getParentNode());
assertEquals("XProcessingInstruction.getPrefix()", "", xPI.getPrefix());
assertNull("XProcessingInstruction.getPreviousSibling()",
xPI.getPreviousSibling());
assertFalse("XProcessingInstruction.hasAttributes()",
xPI.hasAttributes());
assertFalse("XProcessingInstruction.hasChildNodes()",
xPI.hasChildNodes());
assertFalse("XProcessingInstruction.isSupported()",
xPI.isSupported("frobnication", "v99.33.0.0.0.1"));
xPI.normalize();
xPI.setNodeValue("42");
assertEquals("XProcessingInstruction.setNodeValue()",
"42", xPI.getNodeValue());
try {
xPI.setPrefix("foo");
fail("XProcessingInstruction.setPrefix()");
} catch (DOMException e) {
assertTrue("XProcessingInstruction.setPrefix()",
NO_MODIFICATION_ALLOWED_ERR == e.Code);
}
XText xText2 = xDoc.createTextNode("foobar");
XText xText3 = xDoc.createTextNode("foobar");
try {
xPI.appendChild(null);
fail("XProcessingInstruction.appendChild(null)");
} catch (Exception e) { /* expected */ }
try {
xPI.appendChild(xText2);
fail("XProcessingInstruction.appendChild(xText2)");
} catch (DOMException e) {
assertTrue("XProcessingInstruction.appendChild(xText2)",
HIERARCHY_REQUEST_ERR == e.Code);
}
try {
xPI.insertBefore(xText2, xText3);
fail("XProcessingInstruction.insertBefore");
} catch (Exception e) { /* expected */ }
try {
xPI.replaceChild(xText2, xText3);
fail("XProcessingInstruction.insertBefore");
} catch (Exception e) { /* expected */ }
try {
xPI.removeChild(null);
fail("XProcessingInstruction.removeChild(null)");
} catch (Exception e) { /* expected */ }
try {
xPI.removeChild(xText2);
fail("XProcessingInstruction.removeChild");
} catch (DOMException e) {
assertTrue("XProcessingInstruction.removeChild",
HIERARCHY_REQUEST_ERR == e.Code);
}
}
/*
@Test public void testXEntity() throws Exception
{
XEntity xEntity = FIXME how to get at this shy creature?
}
*/
/*
@Test public void testXNotation() throws Exception
{
XNotation xNotation = FIXME how to create?
}
*/
/*
@Test public void testXDocumentType() throws Exception
{
XDocumentType xDT = FIXME how to create?
}
*/
@Test public void testXNodeList_ElementList() throws Exception
{
XDocumentBuilder xBuilder =
+119
View File
@@ -29,6 +29,7 @@
#include <com/sun/star/ucb/ContentCreationException.hpp>
#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
#include <com/sun/star/xml/dom/DOMException.hpp>
#include <com/sun/star/xml/dom/XDocumentBuilder.hpp>
#include <com/sun/star/xml/sax/FastToken.hpp>
#include <com/sun/star/xml/sax/XSAXSerializable.hpp>
@@ -560,6 +561,123 @@ public:
}
}
void testXProcessingInstruction()
{
Reference< xml::dom::XDocument > xDocument = mxDomBuilder->newDocument();
CPPUNIT_ASSERT(xDocument);
Reference< xml::dom::XProcessingInstruction > xPI = xDocument->createProcessingInstruction(u"foo"_ustr, u"bar"_ustr);
CPPUNIT_ASSERT(xPI);
CPPUNIT_ASSERT_EQUAL(u"foo"_ustr, xPI->getTarget());
CPPUNIT_ASSERT_EQUAL(u"bar"_ustr, xPI->getData());
xPI->setData(u"baz"_ustr);
CPPUNIT_ASSERT_EQUAL(u"baz"_ustr, xPI->getData());
{
uno::Reference< xml::dom::XProcessingInstruction> xPIClone( xPI->cloneNode(false), uno::UNO_QUERY_THROW );
CPPUNIT_ASSERT(xPIClone);
CPPUNIT_ASSERT(!xPIClone->hasChildNodes());
}
{
uno::Reference< xml::dom::XProcessingInstruction> xPIClone( xPI->cloneNode(true), uno::UNO_QUERY_THROW );
CPPUNIT_ASSERT(xPIClone);
CPPUNIT_ASSERT(!xPIClone->hasChildNodes());
}
CPPUNIT_ASSERT(!xPI->getAttributes());
uno::Reference<xml::dom::XNodeList> xChildList = xPI->getChildNodes();
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xChildList->getLength());
CPPUNIT_ASSERT_EQUAL(u""_ustr, xPI->getLocalName());
CPPUNIT_ASSERT_EQUAL(u""_ustr, xPI->getNamespaceURI());
CPPUNIT_ASSERT(!xPI->getNextSibling());
CPPUNIT_ASSERT_EQUAL(u"foo"_ustr, xPI->getNodeName());
CPPUNIT_ASSERT_EQUAL(xml::dom::NodeType::NodeType_PROCESSING_INSTRUCTION_NODE, xPI->getNodeType());
CPPUNIT_ASSERT_EQUAL(u"baz"_ustr, xPI->getNodeValue());
CPPUNIT_ASSERT_EQUAL(xDocument, xPI->getOwnerDocument());
CPPUNIT_ASSERT(!xPI->getParentNode());
CPPUNIT_ASSERT_EQUAL(u""_ustr, xPI->getPrefix());
CPPUNIT_ASSERT(!xPI->getPreviousSibling());
CPPUNIT_ASSERT(!xPI->hasAttributes());
CPPUNIT_ASSERT(!xPI->hasChildNodes());
CPPUNIT_ASSERT(!xPI->isSupported(u"frobnication"_ustr, u"v99.33.0.0.0.1"_ustr));
xPI->normalize();
xPI->setNodeValue(u"42"_ustr);
CPPUNIT_ASSERT_EQUAL(u"42"_ustr, xPI->getNodeValue());
try
{
xPI->setPrefix(u"foo"_ustr);
CPPUNIT_FAIL("XProcessingInstruction.setPrefix()");
}
catch (xml::dom::DOMException& e)
{
CPPUNIT_ASSERT_EQUAL(xml::dom::DOMExceptionType::DOMExceptionType_NO_MODIFICATION_ALLOWED_ERR, e.Code);
}
uno::Reference<xml::dom::XText> xText2 = xDocument->createTextNode(u"foobar"_ustr);
uno::Reference<xml::dom::XText> xText3 = xDocument->createTextNode(u"foobar"_ustr);
try
{
xPI->appendChild(nullptr);
CPPUNIT_FAIL("XProcessingInstruction.appendChild(null)");
}
catch (css::uno::RuntimeException&)
{
}
try
{
xPI->appendChild(xText2);
CPPUNIT_FAIL("XProcessingInstruction.appendChild(xText2)");
}
catch (xml::dom::DOMException& e)
{
CPPUNIT_ASSERT_EQUAL(xml::dom::DOMExceptionType::DOMExceptionType_HIERARCHY_REQUEST_ERR, e.Code);
}
try
{
xPI->insertBefore(xText2, xText3);
CPPUNIT_FAIL("XProcessingInstruction.insertBefore");
}
catch (xml::dom::DOMException&)
{
}
try
{
xPI->replaceChild(xText2, xText3);
CPPUNIT_FAIL("XProcessingInstruction.replaceChild");
}
catch (xml::dom::DOMException&)
{
}
try
{
xPI->removeChild(nullptr);
CPPUNIT_FAIL("XProcessingInstruction.removeChild(null)");
}
catch (css::uno::RuntimeException&)
{
}
try
{
xPI->removeChild(xText2);
CPPUNIT_FAIL("XProcessingInstruction.removeChild");
}
catch (xml::dom::DOMException& e)
{
CPPUNIT_ASSERT_EQUAL(xml::dom::DOMExceptionType::DOMExceptionType_HIERARCHY_REQUEST_ERR, e.Code);
}
}
void testXNamedNodeMap_AttributesMap()
{
Reference< xml::dom::XDocument > xDocument = mxDomBuilder->newDocument();
@@ -748,6 +866,7 @@ public:
CPPUNIT_TEST(testXDocumentBuilder);
CPPUNIT_TEST(testXXPathAPI);
CPPUNIT_TEST(testXXPathObject);
CPPUNIT_TEST(testXProcessingInstruction);
CPPUNIT_TEST(testXNamedNodeMap_AttributesMap);
CPPUNIT_TEST(testXNodeList_ChildList);
CPPUNIT_TEST(testXNodeList_NodeList);