?? dommemtest.cpp
字號:
TASSERT(dt->getNamespaceURI() == 0); TASSERT(dt->getPrefix() == 0); TASSERT(dt->getLocalName() == 0); TASSERT(!XMLString::compareString(dt->getPublicId(), X("pubId"))); TASSERT(!XMLString::compareString(dt->getSystemId(), X("http://sysId"))); TASSERT(dt->getInternalSubset() == 0); TASSERT(dt->getOwnerDocument() == 0); DOMNamedNodeMap* nnm = dt->getEntities(); TASSERT(nnm->getLength() == 0); nnm = dt->getNotations(); TASSERT(nnm->getLength() == 0); // release the documentType (dt) which is an orphaned node (does not have the owner) dt->release(); // // Qualified name without prefix should also work. // dt = impl->createDocumentType(X("docName"), X("pubId"), X("http://sysId")); TASSERT(dt != 0); TASSERT(dt->getNodeType() == DOMNode::DOCUMENT_TYPE_NODE); TASSERT(!XMLString::compareString(dt->getNodeName(), X("docName"))); TASSERT(dt->getNamespaceURI() == 0); TASSERT(dt->getPrefix() == 0); TASSERT(dt->getLocalName() == 0); TASSERT(!XMLString::compareString(dt->getPublicId(), X("pubId"))); TASSERT(!XMLString::compareString(dt->getSystemId(), X("http://sysId"))); TASSERT(dt->getInternalSubset() == 0); TASSERT(dt->getOwnerDocument() == 0); // Creating a DocumentType with invalid or malformed qName should fail. EXCEPTION_TEST(impl->createDocumentType(X("<docName"), X("pubId"), X("http://sysId")), DOMException::INVALID_CHARACTER_ERR); EXCEPTION_TEST(impl->createDocumentType(X(":docName"), X("pubId"), X("http://sysId")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(impl->createDocumentType(X("docName:"), X("pubId"), X("http://sysId")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(impl->createDocumentType(X("doc::Name"), X("pubId"), X("http://sysId")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(impl->createDocumentType(X("doc:N:ame"), X("pubId"), X("http://sysId")), DOMException::NAMESPACE_ERR); // release the documentType (dt) which is an orphaned node (does not have the owner) dt->release(); } // // DOMImplementation::CreateDocument { DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(X("Core")); DOMDocumentType* dt = 0; DOMDocument* doc = impl->createDocument(XMLUni::fgZeroLenString, X("a"), dt); doc->getNodeName(); doc->release(); } // { DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(X("Core")); DOMDocumentType* dt = impl->createDocumentType(X("foo:docName"), X("pubId"), X("http://sysId")); DOMDocument* doc = impl->createDocument(X("http://document.namespace"), X("foo:docName"), dt); TASSERT(dt->getOwnerDocument() == doc); TASSERT(doc->getOwnerDocument() == 0); TASSERT(doc->getNodeType() == DOMNode::DOCUMENT_NODE); TASSERT(doc->getDoctype() == dt); TASSERT(!XMLString::compareString(doc->getNodeName(), X("#document"))); TASSERT(doc->getNodeValue() == 0); TASSERT(doc->getNamespaceURI() == 0); TASSERT(doc->getPrefix() == 0); TASSERT(doc->getLocalName() == 0); DOMElement* el = doc->getDocumentElement(); TASSERT(!XMLString::compareString(el->getLocalName(), X("docName"))); TASSERT(!XMLString::compareString(el->getNamespaceURI(), X("http://document.namespace"))); TASSERT(!XMLString::compareString(el->getNodeName(), X("foo:docName"))); TASSERT(el->getOwnerDocument() == doc); TASSERT(el->getParentNode() == doc); TASSERT(!XMLString::compareString(el->getPrefix(), X("foo"))); TASSERT(!XMLString::compareString(el->getTagName(), X("foo:docName"))); TASSERT(el->hasChildNodes() == false); // // Creating a second document with the same docType object should fail. // try { DOMDocument* doc2 = impl->createDocument(X("pubId"), X("foo:docName"), dt); TASSERT(false); // should not reach here. } catch ( DOMException &e) { TASSERT(e.code == DOMException::WRONG_DOCUMENT_ERR); } catch (...) { TASSERT(false); // Wrong exception thrown. } // release the document, the documentType (dt) still has the owner, and thus no need to release doc->release(); // Creating a document with null NamespaceURI and DocumentType doc = impl->createDocument(X("pubId"), X("foo:docName"), 0); doc->release(); // Namespace tests of createDocument are covered by createElementNS below } // // CreateElementNS methods // { // Set up an initial (root element only) document. // DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(X("Core")); DOMDocumentType* dt = impl->createDocumentType(X("foo:docName"), X("pubId"), X("http://sysId")); DOMDocument* doc = impl->createDocument(X("http://document.namespace"), X("foo:docName"), dt); DOMElement* rootEl = doc->getDocumentElement(); // // CreateElementNS // DOMElement* ela = doc->createElementNS(X("http://nsa"), X("a:ela")); // prefix and URI TASSERT(!XMLString::compareString(ela->getNodeName(), X("a:ela"))); TASSERT(!XMLString::compareString(ela->getNamespaceURI(), X("http://nsa"))); TASSERT(!XMLString::compareString(ela->getPrefix(), X("a"))); TASSERT(!XMLString::compareString(ela->getLocalName(), X("ela"))); TASSERT(!XMLString::compareString(ela->getTagName(), X("a:ela"))); DOMElement* elb = doc->createElementNS(X("http://nsb"), X("elb")); // URI, no prefix. TASSERT(!XMLString::compareString(elb->getNodeName(), X("elb"))); TASSERT(!XMLString::compareString(elb->getNamespaceURI(), X("http://nsb"))); TASSERT(!XMLString::compareString(elb->getPrefix(), XMLUni::fgZeroLenString)); TASSERT(!XMLString::compareString(elb->getLocalName(), X("elb"))); TASSERT(!XMLString::compareString(elb->getTagName(), X("elb"))); DOMElement* elc = doc->createElementNS(XMLUni::fgZeroLenString, X("elc")); // No URI, no prefix. TASSERT(!XMLString::compareString(elc->getNodeName(), X("elc"))); TASSERT(!XMLString::compareString(elc->getNamespaceURI(), XMLUni::fgZeroLenString)); TASSERT(!XMLString::compareString(elc->getPrefix(), XMLUni::fgZeroLenString)); TASSERT(!XMLString::compareString(elc->getLocalName(), X("elc"))); TASSERT(!XMLString::compareString(elc->getTagName(), X("elc"))); rootEl->appendChild(ela); rootEl->appendChild(elb); rootEl->appendChild(elc); // Badly formed qualified name EXCEPTION_TEST(doc->createElementNS(X("http://nsa"), X("<a")), DOMException::INVALID_CHARACTER_ERR); EXCEPTION_TEST(doc->createElementNS(X("http://nsa"), X(":a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createElementNS(X("http://nsa"), X("a:")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createElementNS(X("http://nsa"), X("a::a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createElementNS(X("http://nsa"), X("a:a:a")), DOMException::NAMESPACE_ERR); // xml:a must have namespaceURI == "http://www.w3.org/XML/1998/namespace" TASSERT(!XMLString::compareString(doc->createElementNS(X("http://www.w3.org/XML/1998/namespace"), X("xml:a"))->getNamespaceURI(), X("http://www.w3.org/XML/1998/namespace"))); EXCEPTION_TEST(doc->createElementNS(X("http://nsa"), X("xml:a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createElementNS(XMLUni::fgZeroLenString, X("xml:a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createElementNS(0, X("xml:a")), DOMException::NAMESPACE_ERR); //unlike Attribute, xmlns (no different from foo) can have any namespaceURI for Element TASSERT(!XMLString::compareString(doc->createElementNS(X("http://nsa"), X("xmlns"))->getNamespaceURI(), X("http://nsa"))); TASSERT(!XMLString::compareString(doc->createElementNS(X("http://www.w3.org/XML/1998/namespace"), X("xmlns"))->getNamespaceURI(), X("http://www.w3.org/XML/1998/namespace"))); TASSERT(!XMLString::compareString(doc->createElementNS(XMLUni::fgZeroLenString, X("xmlns"))->getNamespaceURI(), XMLUni::fgZeroLenString)); TASSERT(!XMLString::compareString(doc->createElementNS(0, X("xmlns"))->getNamespaceURI(), XMLUni::fgZeroLenString)); //unlike Attribute, xmlns:a (no different from foo:a) can have any namespaceURI for Element //except "" and null TASSERT(!XMLString::compareString(doc->createElementNS(X("http://nsa"), X("xmlns:a"))->getNamespaceURI(), X("http://nsa"))); TASSERT(!XMLString::compareString(doc->createElementNS(X("http://www.w3.org/XML/1998/namespace"), X("xmlns:a"))->getNamespaceURI(), X("http://www.w3.org/XML/1998/namespace"))); EXCEPTION_TEST(doc->createElementNS(XMLUni::fgZeroLenString, X("xmlns:a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createElementNS(0, X("xmlns:a")), DOMException::NAMESPACE_ERR); //In fact, any prefix != null should have a namespaceURI != 0 or != "" TASSERT(!XMLString::compareString(doc->createElementNS(X("http://nsa"), X("foo:a"))->getNamespaceURI(), X("http://nsa"))); EXCEPTION_TEST(doc->createElementNS(XMLUni::fgZeroLenString, X("foo:a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createElementNS(0, X("foo:a")), DOMException::NAMESPACE_ERR); //Change prefix DOMElement* elem = doc->createElementNS(X("http://nsa"), X("foo:a")); elem->setPrefix(X("bar")); TASSERT(!XMLString::compareString(elem->getNodeName(), X("bar:a"))); TASSERT(!XMLString::compareString(elem->getNamespaceURI(), X("http://nsa"))); TASSERT(!XMLString::compareString(elem->getPrefix(), X("bar"))); TASSERT(!XMLString::compareString(elem->getLocalName(), X("a"))); TASSERT(!XMLString::compareString(elem->getTagName(), X("bar:a"))); //The spec does not prevent us from setting prefix to a node without prefix elem = doc->createElementNS(X("http://nsa"), X("a")); TASSERT(!XMLString::compareString(elem->getPrefix(), XMLUni::fgZeroLenString)); elem->setPrefix(X("bar")); TASSERT(!XMLString::compareString(elem->getNodeName(), X("bar:a"))); TASSERT(!XMLString::compareString(elem->getNamespaceURI(), X("http://nsa"))); TASSERT(!XMLString::compareString(elem->getPrefix(), X("bar"))); TASSERT(!XMLString::compareString(elem->getLocalName(), X("a"))); TASSERT(!XMLString::compareString(elem->getTagName(), X("bar:a"))); //Special case for xml:a where namespaceURI must be xmlURI elem = doc->createElementNS(X("http://www.w3.org/XML/1998/namespace"), X("foo:a")); elem->setPrefix(X("xml")); elem = doc->createElementNS(X("http://nsa"), X("foo:a")); EXCEPTION_TEST(elem->setPrefix(X("xml")), DOMException::NAMESPACE_ERR); //However, there is no restriction on prefix xmlns elem->setPrefix(X("xmlns")); //Also an element can not have a prefix with namespaceURI == null or "" elem = doc->createElementNS(0, X("a")); EXCEPTION_TEST(elem->setPrefix(X("foo")), DOMException::NAMESPACE_ERR); elem = doc->createElementNS(XMLUni::fgZeroLenString, X("a")); EXCEPTION_TEST(elem->setPrefix(X("foo")), DOMException::NAMESPACE_ERR); //Only prefix of Element and Attribute can be changed EXCEPTION_TEST(doc->setPrefix(X("foo")), DOMException::NAMESPACE_ERR); //Prefix of readonly Element can not be changed. //However, there is no way to create such DOMElement* for testing yet. // release the document, the documentType (dt) still has the owner, and thus no need to release doc->release(); } // // CreateAttributeNS methods // { // Set up an initial (root element only) document. // DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(X("Core")); DOMDocumentType* dt = impl->createDocumentType(X("foo:docName"), X("pubId"), X("http://sysId")); DOMDocument* doc = impl->createDocument(X("http://document.namespace"), X("foo:docName"), dt); DOMElement* rootEl = doc->getDocumentElement(); // // CreateAttributeNS // DOMAttr* attra = doc->createAttributeNS(X("http://nsa"), X("a:attra")); // prefix and URI TASSERT(!XMLString::compareString(attra->getNodeName(), X("a:attra"))); TASSERT(!XMLString::compareString(attra->getNamespaceURI(), X("http://nsa"))); TASSERT(!XMLString::compareString(attra->getPrefix(), X("a"))); TASSERT(!XMLString::compareString(attra->getLocalName(), X("attra"))); TASSERT(!XMLString::compareString(attra->getName(), X("a:attra"))); TASSERT(attra->getOwnerElement() == 0); DOMAttr* attrb = doc->createAttributeNS(X("http://nsb"), X("attrb")); // URI, no prefix. TASSERT(!XMLString::compareString(attrb->getNodeName(), X("attrb"))); TASSERT(!XMLString::compareString(attrb->getNamespaceURI(), X("http://nsb"))); TASSERT(!XMLString::compareString(attrb->getPrefix(), XMLUni::fgZeroLenString)); TASSERT(!XMLString::compareString(attrb->getLocalName(), X("attrb"))); TASSERT(!XMLString::compareString(attrb->getName(), X("attrb"))); TASSERT(attrb->getOwnerElement() == 0); DOMAttr* attrc = doc->createAttributeNS(XMLUni::fgZeroLenString, X("attrc")); TASSERT(!XMLString::compareString(attrc->getNodeName(), X("attrc"))); TASSERT(!XMLString::compareString(attrc->getNamespaceURI(), XMLUni::fgZeroLenString)); TASSERT(!XMLString::compareString(attrc->getPrefix(), XMLUni::fgZeroLenString)); TASSERT(!XMLString::compareString(attrc->getLocalName(), X("attrc"))); TASSERT(!XMLString::compareString(attrc->getName(), X("attrc"))); TASSERT(attrc->getOwnerElement() == 0); // Badly formed qualified name EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("<a")), DOMException::INVALID_CHARACTER_ERR); EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X(":a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("a:")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("a::a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("a:a:a")), DOMException::NAMESPACE_ERR); // xml:a must have namespaceURI == "http://www.w3.org/XML/1998/namespace" TASSERT(!XMLString::compareString(doc->createAttributeNS(X("http://www.w3.org/XML/1998/namespace"), X("xml:a"))->getNamespaceURI(), X("http://www.w3.org/XML/1998/namespace"))); EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("xml:a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createAttributeNS(XMLUni::fgZeroLenString, X("xml:a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createAttributeNS(0, X("xml:a")), DOMException::NAMESPACE_ERR); //unlike Element, xmlns must have namespaceURI == "http://www.w3.org/2000/xmlns/" TASSERT(!XMLString::compareString(doc->createAttributeNS(X("http://www.w3.org/2000/xmlns/"), X("xmlns"))->getNamespaceURI(), X("http://www.w3.org/2000/xmlns/"))); EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("xmlns")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createAttributeNS(X("http://www.w3.org/XML/1998/namespace"), X("xmlns")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createAttributeNS(XMLUni::fgZeroLenString, X("xmlns")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createAttributeNS(0, X("xmlns")), DOMException::NAMESPACE_ERR); //unlike Element, xmlns:a must have namespaceURI == "http://www.w3.org/2000/xmlns/" TASSERT(!XMLString::compareString(doc->createAttributeNS(X("http://www.w3.org/2000/xmlns/"), X("xmlns:a"))->getNamespaceURI(), X("http://www.w3.org/2000/xmlns/"))); EXCEPTION_TEST(doc->createAttributeNS(X("http://nsa"), X("xmlns:a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createAttributeNS(X("http://www.w3.org/XML/1998/namespace"), X("xmlns:a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createAttributeNS(XMLUni::fgZeroLenString, X("xmlns:a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createAttributeNS(0, X("xmlns:a")), DOMException::NAMESPACE_ERR); //In fact, any prefix != null should have a namespaceURI != 0 or != "" TASSERT(!XMLString::compareString(doc->createAttributeNS(X("http://nsa"), X("foo:a"))->getNamespaceURI(), X("http://nsa"))); EXCEPTION_TEST(doc->createAttributeNS(XMLUni::fgZeroLenString, X("foo:a")), DOMException::NAMESPACE_ERR); EXCEPTION_TEST(doc->createAttributeNS(0, X("foo:a")), DOMException::NAMESPACE_ERR); //Change prefix DOMAttr* attr = doc->createAttributeNS(X("http://nsa"), X("foo:a")); attr->setPrefix(X("bar")); TASSERT(!XMLString::compareString(attr->getNodeName(), X("bar:a"))); TASSERT(!XMLString::compareString(attr->getNamespaceURI(), X("http://nsa"))); TASSERT(!XMLString::compareString(attr->getPrefix(), X("bar"))); TASSERT(!XMLString::compareString(attr->getName(), X("bar:a"))); //The spec does not prevent us from setting prefix to a node without prefix TASSERT(!XMLString::compareString(attr->getLocalName(), X("a"))); attr = doc->createAttributeNS(X("http://nsa"), X("a")); TASSERT(!XMLString::compareString(attr->getPrefix(), XMLUni::fgZeroLenString)); attr->setPrefix(X("bar")); TASSERT(!XMLString::compareString(attr->getNodeName(), X("bar:a"))); TASSERT(!XMLString::compareString(attr->getNamespaceURI(), X("http://nsa"))); TASSERT(!XMLString::compareString(attr->getPrefix(), X("bar"))); TASSERT(!XMLString::compareString(attr->getLocalName(), X("a"))); TASSERT(!XMLString::compareString(attr->getName(), X("bar:a"))); //Special case for xml:a where namespaceURI must be xmlURI attr = doc->createAttributeNS(X("http://www.w3.org/XML/1998/namespace"), X("foo:a")); attr->setPrefix(X("xml")); attr = doc->createAttributeNS(X("http://nsa"), X("foo:a"));
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -