You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by tn...@apache.org on 2002/02/05 14:32:42 UTC
cvs commit: xml-xerces/c/tests/IDom/IDOMMemTest IDOMMemTest.cpp Makefile.in
tng 02/02/05 05:32:42
Modified: c/tests Makefile.in configure configure.in
Added: c/tests/IDom/IDOMMemTest IDOMMemTest.cpp Makefile.in
Log:
Add IDOMMemTest.
Revision Changes Path
1.18 +10 -3 xml-xerces/c/tests/Makefile.in
Index: Makefile.in
===================================================================
RCS file: /home/cvs/xml-xerces/c/tests/Makefile.in,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- Makefile.in 18 Jan 2002 19:48:55 -0000 1.17
+++ Makefile.in 5 Feb 2002 13:32:42 -0000 1.18
@@ -54,11 +54,12 @@
# <http://www.apache.org/>.
#
#
-# $Id: Makefile.in,v 1.17 2002/01/18 19:48:55 tng Exp $
+# $Id: Makefile.in,v 1.18 2002/02/05 13:32:42 tng Exp $
#
DOMIDTest_DIR=DOM/DOMIDTest
DOMMemTest_DIR=DOM/DOMMemTest
+IDOMMemTest_DIR=IDom/IDOMMemTest
DOMTest_DIR=DOM/DOMTest
IDOMTest_DIR=IDom/IDOMTest
Traversal_DIR=DOM/Traversal
@@ -84,10 +85,10 @@
ifeq (${OSVER}, HPUX10)
all:: bindir threadtest ithreadtest encodingtest traversal itraversal
else
- all:: bindir domidtest dommemtest domtest idomtest threadtest ithreadtest encodingtest traversal itraversal rangetest irangetest inittermtest
+ all:: bindir domidtest dommemtest idommemtest domtest idomtest threadtest ithreadtest encodingtest traversal itraversal rangetest irangetest inittermtest
endif
else
- all:: bindir domidtest dommemtest domtest idomtest threadtest ithreadtest encodingtest traversal itraversal rangetest irangetest inittermtest
+ all:: bindir domidtest dommemtest idommemtest domtest idomtest threadtest ithreadtest encodingtest traversal itraversal rangetest irangetest inittermtest
endif
bindir::
@@ -101,6 +102,10 @@
@echo Building "DOMMemTest"
cd $(DOMMemTest_DIR) ; $(MAKE) $(MAKE_FLAGS) ; cd ..
+idommemtest::
+ @echo Building "IDOMMemTest"
+ cd $(IDOMMemTest_DIR) ; $(MAKE) $(MAKE_FLAGS) ; cd ..
+
domtest::
@echo Building "DOMTest"
cd $(DOMTest_DIR) ; $(MAKE) $(MAKE_FLAGS) ; cd ..
@@ -144,6 +149,7 @@
clean::
cd $(DOMIDTest_DIR) && $(MAKE) $@ && cd ..
cd $(DOMMemTest_DIR) && $(MAKE) $@ && cd ..
+ cd $(IDOMMemTest_DIR) && $(MAKE) $@ && cd ..
cd $(DOMTest_DIR) && $(MAKE) $@ && cd ..
cd $(IDOMTest_DIR) && $(MAKE) $@ && cd ..
cd $(ThreadTest_DIR) && $(MAKE) $@ && cd ..
@@ -158,6 +164,7 @@
distclean::
cd $(DOMIDTest_DIR) && $(MAKE) $@ && cd ..
cd $(DOMMemTest_DIR) && $(MAKE) $@ && cd ..
+ cd $(IDOMMemTest_DIR) && $(MAKE) $@ && cd ..
cd $(DOMTest_DIR) && $(MAKE) $@ && cd ..
cd $(IDOMTest_DIR) && $(MAKE) $@ && cd ..
cd $(ThreadTest_DIR) && $(MAKE) $@ && cd ..
1.15 +4 -2 xml-xerces/c/tests/configure
Index: configure
===================================================================
RCS file: /home/cvs/xml-xerces/c/tests/configure,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- configure 18 Jan 2002 19:48:55 -0000 1.14
+++ configure 5 Feb 2002 13:32:42 -0000 1.15
@@ -1,7 +1,7 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13
+# Generated automatically using autoconf version 2.13
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
@@ -1260,7 +1260,7 @@
cat >> confdefs.h <<EOF
#define $ac_tr_hdr 1
EOF
-
+
else
echo "$ac_t""no" 1>&6
fi
@@ -1465,6 +1465,7 @@
IDom/IDOMTest/Makefile \
DOM/DOMIDTest/Makefile \
DOM/DOMMemTest/Makefile \
+IDom/IDOMMemTest/Makefile \
DOM/Traversal/Makefile \
IDom/ITraversal/Makefile \
EncodingTest/Makefile \
@@ -1570,6 +1571,7 @@
IDom/IDOMTest/Makefile \
DOM/DOMIDTest/Makefile \
DOM/DOMMemTest/Makefile \
+IDom/IDOMMemTest/Makefile \
DOM/Traversal/Makefile \
IDom/ITraversal/Makefile \
EncodingTest/Makefile \
1.19 +1 -0 xml-xerces/c/tests/configure.in
Index: configure.in
===================================================================
RCS file: /home/cvs/xml-xerces/c/tests/configure.in,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- configure.in 18 Jan 2002 19:48:55 -0000 1.18
+++ configure.in 5 Feb 2002 13:32:42 -0000 1.19
@@ -81,6 +81,7 @@
IDom/IDOMTest/Makefile \
DOM/DOMIDTest/Makefile \
DOM/DOMMemTest/Makefile \
+IDom/IDOMMemTest/Makefile \
DOM/Traversal/Makefile \
IDom/ITraversal/Makefile \
EncodingTest/Makefile \
1.1 xml-xerces/c/tests/IDom/IDOMMemTest/IDOMMemTest.cpp
Index: IDOMMemTest.cpp
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xerces" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache\@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation, and was
* originally based on software copyright (c) 2002, International
* Business Machines, Inc., http://www.ibm.com . For more information
* on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
//
// Various IDOM tests.
// This is NOT a complete test of IDOM functionality.
//
/*
* $Id
*/
#include <stdio.h>
#include <string.h>
#include <xercesc/idom/IDOM.hpp>
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/XMLException.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/util/XMLUniDefs.hpp>
#define TASSERT(c) tassert((c), __FILE__, __LINE__)
void tassert(bool c, const char *file, int line)
{
if (!c)
printf("Failure. Line %d, file %s\n", line, file);
};
#define EXCEPTION_TEST(operation, expected_exception) \
{ \
try { \
operation; \
printf(" Error: no exception thrown at line %d\n", __LINE__); \
} \
catch (IDOM_DOMException &e) { \
if (e.code != expected_exception) \
printf(" Wrong exception code: %d at line %d\n", e.code, __LINE__); \
} \
catch (...) { \
printf(" Wrong exception thrown at line %d\n", __LINE__); \
} \
}
//temp XMLCh String Buffer
XMLCh tempStr[4000];
XMLCh tempStr2[4000];
XMLCh tempStr3[4000];
XMLCh tempStr4[4000];
XMLCh tempStr5[4000];
//---------------------------------------------------------------------------------------
//
// IDOMBasicTests Basic IDOM Level 1 tests
//
//---------------------------------------------------------------------------------------
void IDOMBasicTests()
{
//
// Test Doc01 Create a new empty document
//
{
// First precondition, so that lazily created strings do not appear
// as memory leaks.
IDOM_Document* doc;
doc = IDOM_DOMImplementation::getImplementation()->createDocument();
delete doc;
}
//
// Test Doc02 Create one of each kind of node using the
// document createXXX methods.
// Watch for memory leaks.
//
{
// Do all operations in a preconditioning step, to force the
// creation of implementation objects that are set up on first use.
// Don't watch for leaks in this block (no / )
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("Doc02Element", tempStr, 3999);
IDOM_Element* el = doc->createElement(tempStr);
IDOM_DocumentFragment* frag = doc->createDocumentFragment ();
XMLString::transcode("Doc02TextNode", tempStr, 3999);
IDOM_Text* text = doc->createTextNode(tempStr);
XMLString::transcode("Doc02Comment", tempStr, 3999);
IDOM_Comment* comment = doc->createComment(tempStr);
XMLString::transcode("Doc02CDataSection", tempStr, 3999);
IDOM_CDATASection* cdataSec = doc->createCDATASection(tempStr);
XMLString::transcode("Doc02DocumentType", tempStr, 3999);
IDOM_DocumentType* docType = doc->createDocumentType(tempStr);
XMLString::transcode("Doc02Notation", tempStr, 3999);
IDOM_Notation* notation = doc->createNotation(tempStr);
XMLString::transcode("Doc02PITarget", tempStr, 3999);
XMLString::transcode("Doc02PIData", tempStr2, 3999);
IDOM_ProcessingInstruction* pi = doc->createProcessingInstruction(tempStr, tempStr2);
XMLString::transcode("*", tempStr, 3999);
IDOM_NodeList* nodeList = doc->getElementsByTagName(tempStr);
delete doc;
}
//
// Doc03 - Create a small document tree
//
{
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("Doc03RootElement", tempStr, 3999);
IDOM_Element* rootEl = doc->createElement(tempStr);
doc->appendChild(rootEl);
XMLString::transcode("Doc03 text stuff", tempStr, 3999);
IDOM_Text* textNode = doc->createTextNode(tempStr);
rootEl->appendChild(textNode);
XMLString::transcode("*", tempStr, 3999);
IDOM_NodeList* nodeList = doc->getElementsByTagName(tempStr);
delete doc;
};
//
// Attr01
//
{
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("RootElement", tempStr, 3999);
IDOM_Element* rootEl = doc->createElement(tempStr);
doc->appendChild(rootEl);
{
XMLString::transcode("Attr01", tempStr, 3999);
IDOM_Attr* attr01 = doc->createAttribute(tempStr);
rootEl->setAttributeNode(attr01);
}
{
XMLString::transcode("Attr01", tempStr, 3999);
IDOM_Attr* attr02 = doc->createAttribute(tempStr);
rootEl->setAttributeNode(attr02);
}
delete doc;
};
//
// Attr02
//
{
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("RootElement", tempStr, 3999);
IDOM_Element* rootEl = doc->createElement(tempStr);
doc->appendChild(rootEl);
XMLString::transcode("Attr02", tempStr, 3999);
IDOM_Attr* attr01 = doc->createAttribute(tempStr);
rootEl->setAttributeNode(attr01);
IDOM_Attr* attr02 = doc->createAttribute(tempStr);
rootEl->setAttributeNode(attr02);
delete doc;
}
//
// Attr03
//
{
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("RootElement", tempStr, 3999);
IDOM_Element* rootEl = doc->createElement(tempStr);
doc->appendChild(rootEl);
XMLString::transcode("Attr03", tempStr, 3999);
IDOM_Attr* attr01 = doc->createAttribute(tempStr);
rootEl->setAttributeNode(attr01);
XMLString::transcode("Attr03Value1", tempStr, 3999);
attr01->setValue(tempStr);
XMLString::transcode("Attr03Value2", tempStr, 3999);
attr01->setValue(tempStr);
delete doc;
}
//
// Attr04
//
{
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("RootElement", tempStr, 3999);
IDOM_Element* rootEl = doc->createElement(tempStr);
doc->appendChild(rootEl);
XMLString::transcode("Attr04", tempStr, 3999);
IDOM_Attr* attr01 = doc->createAttribute(tempStr);
rootEl->setAttributeNode(attr01);
XMLString::transcode("Attr04Value1", tempStr, 3999);
attr01->setValue(tempStr);
IDOM_Node* value = attr01->getFirstChild();
delete doc;
}
//
// Text01
//
{
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("RootElement", tempStr, 3999);
IDOM_Element* rootEl = doc->createElement(tempStr);
doc->appendChild(rootEl);
XMLString::transcode("Hello Goodbye", tempStr, 3999);
IDOM_Text* txt1 = doc->createTextNode(tempStr);
rootEl->appendChild(txt1);
txt1->splitText(6);
rootEl->normalize();
delete doc;
}
//
// Notation01
//
{
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("DocType_for_Notation01", tempStr, 3999);
IDOM_DocumentType* dt = doc->createDocumentType(tempStr);
doc->appendChild(dt);
IDOM_NamedNodeMap* notationMap = dt->getNotations();
XMLString::transcode("Notation01", tempStr, 3999);
IDOM_Notation* nt1 = doc->createNotation(tempStr);
notationMap->setNamedItem (nt1);
IDOM_Node* abc1 = notationMap->getNamedItem(tempStr);
IDOM_Notation* nt2 = (IDOM_Notation*) abc1;
TASSERT(nt1==nt2);
nt2 = 0;
nt1 = 0;
IDOM_Node* abc6 = notationMap->getNamedItem(tempStr);
nt2 = (IDOM_Notation*) abc6;
delete doc;
}
//
// NamedNodeMap01 - comparison operators.
//
{
IDOM_NamedNodeMap* nnm = 0;
TASSERT(nnm == 0);
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
nnm = doc->getAttributes(); // Should be null, because node type
// is not Element.
TASSERT(nnm == 0);
TASSERT(!(nnm != 0));
XMLString::transcode("NamedNodeMap01", tempStr, 3999);
IDOM_Element* el = doc->createElement(tempStr);
IDOM_NamedNodeMap* nnm2 = el->getAttributes(); // Should be an empty, but non-null map.
TASSERT(nnm2 != 0);
TASSERT(nnm != nnm2);
nnm = nnm2;
TASSERT(nnm == nnm2);
delete doc;
}
//
// importNode quick test
//
{
IDOM_Document* doc1 = IDOM_DOMImplementation::getImplementation()->createDocument();
IDOM_Document* doc2 = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("abc", tempStr, 3999);
IDOM_Element* el1 = doc1->createElement(tempStr);
doc1->appendChild(el1);
TASSERT(el1->getParentNode() != 0);
IDOM_Node* el2 = doc2->importNode(el1, true);
TASSERT(el2->getParentNode() == 0);
const XMLCh* tagName = el2->getNodeName();
TASSERT(!XMLString::compareString(tagName, tempStr));
TASSERT(el2->getOwnerDocument() == doc2);
TASSERT(doc1 != doc2);
delete doc1;
delete doc2;
}
//
// getLength() tests. Both Node CharacterData and NodeList implement
// getLength(). Early versions of the IDOM had a clash
// between the two, originating in the implementation class
// hirearchy, which has NodeList as a (distant) base class
// of CharacterData. This is a regression test to verify
// that the problem stays fixed.
//
{
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("Hello", tempStr, 3999);
IDOM_Text* tx = doc->createTextNode(tempStr);
XMLString::transcode("abc", tempStr, 3999);
IDOM_Element* el = doc->createElement(tempStr);
el->appendChild(tx);
int textLength = tx->getLength();
TASSERT(textLength == 5);
IDOM_NodeList* nl = tx->getChildNodes();
int nodeListLen = nl->getLength();
TASSERT(nodeListLen == 0);
nl = el->getChildNodes();
nodeListLen = nl->getLength();
TASSERT(nodeListLen == 1);
delete doc;
}
//
// NodeList - comparison operators, basic operation.
//
{
IDOM_NodeList* nl = 0;
IDOM_NodeList* nl2 = 0;
TASSERT(nl == 0);
TASSERT(!(nl != 0));
TASSERT(nl == nl2);
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
nl = doc->getChildNodes(); // Should be non-null, but empty
TASSERT(nl != 0);
int len = nl->getLength();
TASSERT(len == 0);
XMLString::transcode("NodeList01", tempStr, 3999);
IDOM_Element* el = doc->createElement(tempStr);
doc->appendChild(el);
len = nl->getLength();
TASSERT(len == 1);
TASSERT(nl != nl2);
nl2 = nl;
TASSERT(nl == nl2);
delete doc;
}
//
// Name validity checking.
//
{
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
try
{
XMLString::transcode("!@@ bad element name", tempStr, 3999);
IDOM_Element* el = doc->createElement(tempStr);
TASSERT(false); // Exception above should prevent us reaching here.
}
catch ( IDOM_DOMException e)
{
TASSERT(e.code == IDOM_DOMException::INVALID_CHARACTER_ERR);
}
catch (...)
{
TASSERT(false); // Wrong exception thrown.
}
delete doc;
}
//
// Assignment ops return value
//
{
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("NodeList01", tempStr, 3999);
IDOM_Element* el = doc->createElement(tempStr);
doc->appendChild(el);
IDOM_Element* n1, *n2, *n3;
n1 = n2 = n3 = el;
TASSERT(n1 == n2);
TASSERT(n1 == n3);
TASSERT(n1 == el);
TASSERT(n1 != 0);
n1 = n2 = n3 = 0;
TASSERT(n1 == 0);
delete doc;
}
//
// Cloning of a node with attributes. Regression test for a ref counting
// bug in attributes of cloned nodes that occured when the "owned" flag
// was not set in the clone.
//
{
IDOM_Document* doc = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("CTestRoot", tempStr, 3999);
IDOM_Element* root = doc->createElement(tempStr);
XMLString::transcode("CTestAttr", tempStr, 3999);
XMLString::transcode("CTestAttrValue", tempStr2, 3999);
root->setAttribute(tempStr, tempStr2);
const XMLCh* s = root->getAttribute(tempStr);
TASSERT(!XMLString::compareString(s, tempStr2));
IDOM_Node* abc2 = root->cloneNode(true);
IDOM_Element* cloned = (IDOM_Element*) abc2;
IDOM_Attr* a = cloned->getAttributeNode(tempStr);
TASSERT(a != 0);
s = a->getValue();
TASSERT(!XMLString::compareString(s, tempStr2));
a = 0;
a = cloned->getAttributeNode(tempStr);
TASSERT(a != 0);
s = a->getValue();
TASSERT(!XMLString::compareString(s, tempStr2));
delete doc;
}
//
// splitText()
// Regression test for a bug from Tinny Ng
//
{
IDOM_Document* doc;
doc = IDOM_DOMImplementation::getImplementation()->createDocument();
IDOM_Text* tn, *tn1, *tn2;
XMLString::transcode("0123456789", tempStr, 3999);
tn = doc->createTextNode (tempStr);
tn1 = tn->splitText(5);
XMLString::transcode("01234", tempStr, 3999);
TASSERT(!XMLString::compareString(tn->getNodeValue(), tempStr));
XMLString::transcode("56789", tempStr2, 3999);
TASSERT(!XMLString::compareString(tn1->getNodeValue(), tempStr2));
tn2 = tn->splitText(5);
TASSERT(!XMLString::compareString(tn->getNodeValue(), tempStr));
XMLString::transcode("", tempStr2, 3999);
TASSERT(!XMLString::compareString(tn2->getNodeValue(), tempStr2));
EXCEPTION_TEST(tn->splitText(6), IDOM_DOMException::INDEX_SIZE_ERR);
delete doc;
}
}
//---------------------------------------------------------------------------------------
//
// IDOMNSTests IDOM Name Space tests
//
//---------------------------------------------------------------------------------------
void IDOMNSTests()
{
//
// IDOM Level 2 tests. These should be split out as a separate test.
//
//
// hasFeature. The set of supported options tested here is for Xerces 1.1
// Note: because the implementation lazily creates some of the comprison
// strings within the implementation, this test must be pre-flighted
// outside of the TESPROLOG/ macros to avoid spurious
// reports of memory leaks.
//
// Also test the case-insensitive
//
{
IDOM_DOMImplementation* impl = IDOM_DOMImplementation::getImplementation();
XMLString::transcode("1.0", tempStr, 3999);
XMLString::transcode("2.0", tempStr2, 3999);
XMLString::transcode("3.0", tempStr3, 3999);
XMLString::transcode("", tempStr4, 3999);
XMLString::transcode("XmL", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr2) == true);
XMLString::transcode("xML", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == true);
XMLString::transcode("XMl", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr) == true);
XMLString::transcode("xMl", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr3) == false);
XMLString::transcode("TrAveRsal", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == true);
}
{
IDOM_DOMImplementation* impl = IDOM_DOMImplementation::getImplementation();
XMLString::transcode("1.0", tempStr, 3999);
XMLString::transcode("2.0", tempStr2, 3999);
XMLString::transcode("3.0", tempStr3, 3999);
XMLString::transcode("", tempStr4, 3999);
XMLString::transcode("XmL", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == true);
TASSERT(impl->hasFeature(tempStr5, tempStr) == true);
TASSERT(impl->hasFeature(tempStr5, tempStr2) == true);
TASSERT(impl->hasFeature(tempStr5, tempStr3) == false);
XMLString::transcode("Core", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == true);
XMLString::transcode("coRe", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr) == true);
XMLString::transcode("core", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr2) == true);
XMLString::transcode("cORe", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr3) == false);
XMLString::transcode("Traversal", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == true);
XMLString::transcode("traversal", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr) == false);
XMLString::transcode("TraVersal", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr2) == true);
XMLString::transcode("Range", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == true);
XMLString::transcode("raNge", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr) == false);
XMLString::transcode("RaNge", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr2) == true);
XMLString::transcode("HTML", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == false);
XMLString::transcode("Views", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == false);
XMLString::transcode("StyleSheets", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == false);
XMLString::transcode("CSS", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == false);
XMLString::transcode("CSS2", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == false);
XMLString::transcode("Events", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == false);
XMLString::transcode("UIEvents", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == false);
XMLString::transcode("MouseEvents", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == false);
XMLString::transcode("MutationEvents", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == false);
XMLString::transcode("HTMLEvents", tempStr5, 3999);
TASSERT(impl->hasFeature(tempStr5, tempStr4) == false);
}
//
// isSupported test (similar to hasFeature)
//
{
IDOM_Document* doc;
doc = IDOM_DOMImplementation::getImplementation()->createDocument();
XMLString::transcode("1.0", tempStr, 3999);
XMLString::transcode("2.0", tempStr2, 3999);
XMLString::transcode("3.0", tempStr3, 3999);
XMLString::transcode("", tempStr4, 3999);
XMLString::transcode("XmL", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == true);
TASSERT(doc->isSupported(tempStr5, tempStr) == true);
TASSERT(doc->isSupported(tempStr5, tempStr2) == true);
TASSERT(doc->isSupported(tempStr5, tempStr3) == false);
XMLString::transcode("Core", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == true);
XMLString::transcode("coRe", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr) == true);
XMLString::transcode("core", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr2) == true);
XMLString::transcode("cORe", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr3) == false);
XMLString::transcode("Traversal", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == true);
XMLString::transcode("traversal", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr) == false);
XMLString::transcode("TraVersal", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr2) == true);
XMLString::transcode("Range", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == true);
XMLString::transcode("raNge", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr) == false);
XMLString::transcode("RaNge", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr2) == true);
XMLString::transcode("HTML", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == false);
XMLString::transcode("Views", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == false);
XMLString::transcode("StyleSheets", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == false);
XMLString::transcode("CSS", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == false);
XMLString::transcode("CSS2", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == false);
XMLString::transcode("Events", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == false);
XMLString::transcode("UIEvents", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == false);
XMLString::transcode("MouseEvents", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == false);
XMLString::transcode("MutationEvents", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == false);
XMLString::transcode("HTMLEvents", tempStr5, 3999);
TASSERT(doc->isSupported(tempStr5, tempStr4) == false);
delete doc;
}
//
// CreateDocumentType
//
{
IDOM_DOMImplementation* impl = IDOM_DOMImplementation::getImplementation();
XMLString::transcode("foo:docName", tempStr, 3999);
XMLString::transcode("pubId", tempStr2, 3999);
XMLString::transcode( "http://sysId", tempStr3, 3999);
IDOM_DocumentType* dt = impl->createDocumentType(tempStr, tempStr2, tempStr3);
TASSERT(dt != 0);
TASSERT(dt->getNodeType() == IDOM_Node::DOCUMENT_TYPE_NODE);
TASSERT(!XMLString::compareString(dt->getNodeName(), tempStr));
TASSERT(dt->getNamespaceURI() == 0);
TASSERT(dt->getPrefix() == 0);
TASSERT(dt->getLocalName() == 0);
TASSERT(!XMLString::compareString(dt->getPublicId(), tempStr2));
TASSERT(!XMLString::compareString(dt->getSystemId(), tempStr3));
TASSERT(dt->getInternalSubset() == 0);
TASSERT(dt->getOwnerDocument() == 0);
IDOM_NamedNodeMap* nnm = dt->getEntities();
TASSERT(nnm->getLength() == 0);
nnm = dt->getNotations();
TASSERT(nnm->getLength() == 0);
delete dt;
//
// Qualified name without prefix should also work.
//
XMLString::transcode("docName", tempStr, 3999);
dt = impl->createDocumentType(tempStr, tempStr2, tempStr3);
TASSERT(dt != 0);
TASSERT(dt->getNodeType() == IDOM_Node::DOCUMENT_TYPE_NODE);
TASSERT(!XMLString::compareString(dt->getNodeName(), tempStr));
TASSERT(dt->getNamespaceURI() == 0);
TASSERT(dt->getPrefix() == 0);
TASSERT(dt->getLocalName() == 0);
TASSERT(!XMLString::compareString(dt->getPublicId(), tempStr2));
TASSERT(!XMLString::compareString(dt->getSystemId(), tempStr3));
TASSERT(dt->getInternalSubset() == 0);
TASSERT(dt->getOwnerDocument() == 0);
// Creating a DocumentType with invalid or malformed qName should fail.
XMLString::transcode("<docName", tempStr, 3999);
EXCEPTION_TEST(impl->createDocumentType(tempStr, tempStr2, tempStr3), IDOM_DOMException::INVALID_CHARACTER_ERR);
XMLString::transcode(":docName", tempStr, 3999);
EXCEPTION_TEST(impl->createDocumentType(tempStr, tempStr2, tempStr3), IDOM_DOMException::NAMESPACE_ERR);
XMLString::transcode("docName:", tempStr, 3999);
EXCEPTION_TEST(impl->createDocumentType(tempStr, tempStr2, tempStr3), IDOM_DOMException::NAMESPACE_ERR);
XMLString::transcode("doc::Name", tempStr, 3999);
EXCEPTION_TEST(impl->createDocumentType(tempStr, tempStr2, tempStr3), IDOM_DOMException::NAMESPACE_ERR);
XMLString::transcode("doc:N:ame", tempStr, 3999);
EXCEPTION_TEST(impl->createDocumentType(tempStr, tempStr2, tempStr3), IDOM_DOMException::NAMESPACE_ERR);
delete dt;
}
//
// IDOMImplementation::CreateDocument
{
// Preflight the operations that will lazily create IDOMStrings
// in the implementation. This prevents incorrect reports of
// memory leaks in the real test.
IDOM_DOMImplementation* impl = IDOM_DOMImplementation::getImplementation();
IDOM_DocumentType* dt = 0;
XMLString::transcode("", tempStr2, 3999);
XMLString::transcode("a", tempStr, 3999);
IDOM_Document* doc = impl->createDocument(tempStr2, tempStr, dt);
doc->getNodeName();
delete doc;
}
//
{
IDOM_DOMImplementation* impl = IDOM_DOMImplementation::getImplementation();
XMLString::transcode("foo:docName", tempStr3, 3999);
XMLString::transcode("pubId", tempStr2, 3999);
XMLString::transcode( "http://sysId", tempStr, 3999);
IDOM_DocumentType* dt = impl->createDocumentType(tempStr3, tempStr2, tempStr);
XMLString::transcode("http://document.namespace", tempStr2, 3999);
IDOM_Document* doc = impl->createDocument(tempStr2, tempStr3, dt);
TASSERT(dt->getOwnerDocument() == doc);
TASSERT(doc->getOwnerDocument() == 0);
TASSERT(doc->getNodeType() == IDOM_Node::DOCUMENT_NODE);
TASSERT(doc->getDoctype() == dt);
XMLString::transcode("#document", tempStr, 3999);
TASSERT(!XMLString::compareString(doc->getNodeName(), tempStr));
TASSERT(doc->getNodeValue() == 0);
TASSERT(doc->getNamespaceURI() == 0);
TASSERT(doc->getPrefix() == 0);
TASSERT(doc->getLocalName() == 0);
IDOM_Element* el = doc->getDocumentElement();
XMLString::transcode("docName", tempStr, 3999);
TASSERT(!XMLString::compareString(el->getLocalName(), tempStr));
TASSERT(!XMLString::compareString(el->getNamespaceURI(), tempStr2));
TASSERT(!XMLString::compareString(el->getNodeName(), tempStr3));
TASSERT(el->getOwnerDocument() == doc);
TASSERT(el->getParentNode() == doc);
XMLString::transcode("foo", tempStr, 3999);
TASSERT(!XMLString::compareString(el->getPrefix(), tempStr));
TASSERT(!XMLString::compareString(el->getTagName(), tempStr3));
TASSERT(el->hasChildNodes() == false);
delete doc;
//
// Creating a second document with the same docType object should fail.
//
try
{
IDOM_Document* doc2 = impl->createDocument(tempStr2, tempStr3, dt);
TASSERT(false); // should not reach here.
}
catch ( IDOM_DOMException &e)
{
TASSERT(e.code == IDOM_DOMException::WRONG_DOCUMENT_ERR);
}
catch (...)
{
TASSERT(false); // Wrong exception thrown.
}
// Creating a document with null NamespaceURI and DocumentType
doc = impl->createDocument(tempStr2, tempStr3, 0);
// Namespace tests of createDocument are covered by createElementNS below
delete doc;
delete dt;
}
//
// CreateElementNS methods
//
{
// Set up an initial (root element only) document.
//
IDOM_DOMImplementation* impl = IDOM_DOMImplementation::getImplementation();
XMLString::transcode("foo:docName", tempStr3, 3999);
XMLString::transcode("pubId", tempStr2, 3999);
XMLString::transcode( "http://sysId", tempStr, 3999);
IDOM_DocumentType* dt = impl->createDocumentType(tempStr3, tempStr2, tempStr);
XMLString::transcode("http://document.namespace", tempStr2, 3999);
IDOM_Document* doc = impl->createDocument(tempStr2, tempStr3, dt);
IDOM_Element* rootEl = doc->getDocumentElement();
//
// CreateElementNS
//
XMLString::transcode("http://nsa", tempStr5, 3999);
XMLString::transcode("a:ela", tempStr, 3999);
IDOM_Element* ela = doc->createElementNS(tempStr5, tempStr); // prefix and URI
TASSERT(!XMLString::compareString(ela->getNodeName(), tempStr));
TASSERT(!XMLString::compareString(ela->getNamespaceURI(), tempStr5));
XMLString::transcode("a", tempStr3, 3999);
TASSERT(!XMLString::compareString(ela->getPrefix(), tempStr3));
XMLString::transcode("ela", tempStr3, 3999);
TASSERT(!XMLString::compareString(ela->getLocalName(), tempStr3));
TASSERT(!XMLString::compareString(ela->getTagName(), tempStr));
XMLString::transcode("", tempStr3, 3999);
XMLString::transcode("http://nsb", tempStr2, 3999);
XMLString::transcode("elb", tempStr, 3999);
IDOM_Element* elb = doc->createElementNS(tempStr2, tempStr); // URI, no prefix.
TASSERT(!XMLString::compareString(elb->getNodeName(), tempStr));
TASSERT(!XMLString::compareString(elb->getNamespaceURI(), tempStr2));
TASSERT(!XMLString::compareString(elb->getPrefix(), tempStr3));
TASSERT(!XMLString::compareString(elb->getLocalName(), tempStr));
TASSERT(!XMLString::compareString(elb->getTagName(), tempStr));
XMLString::transcode("elc", tempStr, 3999);
IDOM_Element* elc = doc->createElementNS(tempStr3, tempStr); // No URI, no prefix.
TASSERT(!XMLString::compareString(elc->getNodeName(), tempStr));
TASSERT(!XMLString::compareString(elc->getNamespaceURI(), tempStr3));
TASSERT(!XMLString::compareString(elc->getPrefix(), tempStr3));
TASSERT(!XMLString::compareString(elc->getLocalName(), tempStr));
TASSERT(!XMLString::compareString(elc->getTagName(), tempStr));
rootEl->appendChild(ela);
rootEl->appendChild(elb);
rootEl->appendChild(elc);
// Badly formed qualified name
XMLString::transcode("<a", tempStr4, 3999);
EXCEPTION_TEST(doc->createElementNS(tempStr5, tempStr4), IDOM_DOMException::INVALID_CHARACTER_ERR);
XMLString::transcode(":a", tempStr4, 3999);
EXCEPTION_TEST(doc->createElementNS(tempStr5, tempStr4), IDOM_DOMException::NAMESPACE_ERR);
XMLString::transcode("a:", tempStr4, 3999);
EXCEPTION_TEST(doc->createElementNS(tempStr5, tempStr4), IDOM_DOMException::NAMESPACE_ERR);
XMLString::transcode("a::a", tempStr4, 3999);
EXCEPTION_TEST(doc->createElementNS(tempStr5, tempStr4), IDOM_DOMException::NAMESPACE_ERR);
XMLString::transcode("a:a:a", tempStr4, 3999);
EXCEPTION_TEST(doc->createElementNS(tempStr5, tempStr4), IDOM_DOMException::NAMESPACE_ERR);
// xml:a must have namespaceURI == "http://www.w3.org/XML/1998/namespace"
XMLString::transcode("http://www.w3.org/XML/1998/namespace", tempStr4, 3999);
XMLString::transcode("xml:a",tempStr2, 3999);
TASSERT(!XMLString::compareString(doc->createElementNS(tempStr4, tempStr2)->getNamespaceURI(), tempStr4));
EXCEPTION_TEST(doc->createElementNS(tempStr5, tempStr2), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createElementNS(tempStr3, tempStr2), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createElementNS(0, tempStr2), IDOM_DOMException::NAMESPACE_ERR);
//unlike Attribute, xmlns (no different from foo) can have any namespaceURI for Element
XMLString::transcode("xmlns", tempStr2, 3999);
TASSERT(!XMLString::compareString(doc->createElementNS(tempStr5, tempStr2)->getNamespaceURI(), tempStr5));
TASSERT(!XMLString::compareString(doc->createElementNS(tempStr4, tempStr2)->getNamespaceURI(), tempStr4));
TASSERT(!XMLString::compareString(doc->createElementNS(tempStr3, tempStr2)->getNamespaceURI(), tempStr3));
TASSERT(!XMLString::compareString(doc->createElementNS(0, tempStr2)->getNamespaceURI(), tempStr3));
//unlike Attribute, xmlns:a (no different from foo:a) can have any namespaceURI for Element
//except "" and null
XMLString::transcode("xmlns:a", tempStr2, 3999);
TASSERT(!XMLString::compareString(doc->createElementNS(tempStr5, tempStr2)->getNamespaceURI(), tempStr5));
TASSERT(!XMLString::compareString(doc->createElementNS(tempStr4, tempStr2)->getNamespaceURI(), tempStr4));
EXCEPTION_TEST(doc->createElementNS(tempStr3, tempStr2), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createElementNS(0, tempStr2), IDOM_DOMException::NAMESPACE_ERR);
//In fact, any prefix != null should have a namespaceURI != 0 or != ""
XMLString::transcode("foo:a", tempStr2, 3999);
TASSERT(!XMLString::compareString(doc->createElementNS(tempStr5, tempStr2)->getNamespaceURI(), tempStr5));
EXCEPTION_TEST(doc->createElementNS(tempStr3, tempStr2), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createElementNS(0, tempStr2), IDOM_DOMException::NAMESPACE_ERR);
//Change prefix
IDOM_Element* elem = doc->createElementNS(tempStr5, tempStr2);
XMLString::transcode("bar", tempStr2, 3999);
elem->setPrefix(tempStr2);
XMLString::transcode("bar:a", tempStr4, 3999);
TASSERT(!XMLString::compareString(elem->getNodeName(), tempStr4));
TASSERT(!XMLString::compareString(elem->getNamespaceURI(), tempStr5));
TASSERT(!XMLString::compareString(elem->getPrefix(), tempStr2));
XMLString::transcode("a", tempStr, 3999);
TASSERT(!XMLString::compareString(elem->getLocalName(), tempStr));
TASSERT(!XMLString::compareString(elem->getTagName(), tempStr4));
//The spec does not prevent us from setting prefix to a node without prefix
elem = doc->createElementNS(tempStr5, tempStr);
TASSERT(!XMLString::compareString(elem->getPrefix(), tempStr3));
elem->setPrefix(tempStr2);
TASSERT(!XMLString::compareString(elem->getNodeName(), tempStr4));
TASSERT(!XMLString::compareString(elem->getNamespaceURI(), tempStr5));
TASSERT(!XMLString::compareString(elem->getPrefix(), tempStr2));
TASSERT(!XMLString::compareString(elem->getLocalName(), tempStr));
TASSERT(!XMLString::compareString(elem->getTagName(), tempStr4));
//Special case for xml:a where namespaceURI must be xmlURI
XMLString::transcode("foo:a", tempStr, 3999);
XMLString::transcode("http://www.w3.org/XML/1998/namespace", tempStr4, 3999);
elem = doc->createElementNS(tempStr4, tempStr);
XMLString::transcode("xml", tempStr2, 3999);
elem->setPrefix(tempStr2);
elem = doc->createElementNS(tempStr5, tempStr);
EXCEPTION_TEST(elem->setPrefix(tempStr2), IDOM_DOMException::NAMESPACE_ERR);
//However, there is no restriction on prefix xmlns
XMLString::transcode("xmlns", tempStr4, 3999);
elem->setPrefix(tempStr4);
//Also an element can not have a prefix with namespaceURI == null or ""
XMLString::transcode("a", tempStr, 3999);
XMLString::transcode("foo", tempStr2, 3999);
elem = doc->createElementNS(0, tempStr);
EXCEPTION_TEST(elem->setPrefix(tempStr2), IDOM_DOMException::NAMESPACE_ERR);
elem = doc->createElementNS(tempStr3, tempStr);
EXCEPTION_TEST(elem->setPrefix(tempStr2), IDOM_DOMException::NAMESPACE_ERR);
//Only prefix of Element and Attribute can be changed
EXCEPTION_TEST(doc->setPrefix(tempStr2), IDOM_DOMException::NAMESPACE_ERR);
//Prefix of readonly Element can not be changed.
//However, there is no way to create such IDOM_Element* for testing yet.
delete doc;
delete dt;
}
//
// CreateAttributeNS methods
//
{
// Set up an initial (root element only) document.
//
IDOM_DOMImplementation* impl = IDOM_DOMImplementation::getImplementation();
XMLString::transcode("foo:docName", tempStr3, 3999);
XMLString::transcode("pubId", tempStr2, 3999);
XMLString::transcode( "http://sysId", tempStr, 3999);
IDOM_DocumentType* dt = impl->createDocumentType(tempStr3, tempStr2, tempStr);
XMLString::transcode("http://document.namespace", tempStr2, 3999);
IDOM_Document* doc = impl->createDocument(tempStr2, tempStr3, dt);
IDOM_Element* rootEl = doc->getDocumentElement();
//
// CreateAttributeNS
//
XMLString::transcode("http://nsa", tempStr5, 3999);
XMLString::transcode("http://nsb", tempStr4, 3999);
XMLString::transcode("", tempStr3, 3999);
XMLString::transcode("a:attra", tempStr, 3999);
IDOM_Attr* attra = doc->createAttributeNS(tempStr5, tempStr); // prefix and URI
TASSERT(!XMLString::compareString(attra->getNodeName(), tempStr));
TASSERT(!XMLString::compareString(attra->getNamespaceURI(), tempStr5));
XMLString::transcode("a", tempStr2, 3999);
TASSERT(!XMLString::compareString(attra->getPrefix(), tempStr2));
XMLString::transcode("attra", tempStr2, 3999);
TASSERT(!XMLString::compareString(attra->getLocalName(), tempStr2));
TASSERT(!XMLString::compareString(attra->getName(), tempStr));
TASSERT(attra->getOwnerElement() == 0);
XMLString::transcode("attrb", tempStr2, 3999);
IDOM_Attr* attrb = doc->createAttributeNS(tempStr4, tempStr2); // URI, no prefix.
TASSERT(!XMLString::compareString(attrb->getNodeName(), tempStr2));
TASSERT(!XMLString::compareString(attrb->getNamespaceURI(), tempStr4));
TASSERT(!XMLString::compareString(attrb->getPrefix(), tempStr3));
TASSERT(!XMLString::compareString(attrb->getLocalName(), tempStr2));
TASSERT(!XMLString::compareString(attrb->getName(), tempStr2));
TASSERT(attrb->getOwnerElement() == 0);
XMLString::transcode("attrc", tempStr2, 3999);
IDOM_Attr* attrc = doc->createAttributeNS(tempStr3, tempStr2);
TASSERT(!XMLString::compareString(attrc->getNodeName(), tempStr2));
TASSERT(!XMLString::compareString(attrc->getNamespaceURI(), tempStr3));
TASSERT(!XMLString::compareString(attrc->getPrefix(), tempStr3));
TASSERT(!XMLString::compareString(attrc->getLocalName(), tempStr2));
TASSERT(!XMLString::compareString(attrc->getName(), tempStr2));
TASSERT(attrc->getOwnerElement() == 0);
// Badly formed qualified name
XMLString::transcode("<a", tempStr, 3999);
EXCEPTION_TEST(doc->createAttributeNS(tempStr5, tempStr), IDOM_DOMException::INVALID_CHARACTER_ERR);
XMLString::transcode(":a", tempStr, 3999);
EXCEPTION_TEST(doc->createAttributeNS(tempStr5, tempStr), IDOM_DOMException::NAMESPACE_ERR);
XMLString::transcode("a:", tempStr, 3999);
EXCEPTION_TEST(doc->createAttributeNS(tempStr5, tempStr), IDOM_DOMException::NAMESPACE_ERR);
XMLString::transcode("a::a", tempStr, 3999);
EXCEPTION_TEST(doc->createAttributeNS(tempStr5, tempStr), IDOM_DOMException::NAMESPACE_ERR);
XMLString::transcode("a:a:a", tempStr, 3999);
EXCEPTION_TEST(doc->createAttributeNS(tempStr5, tempStr), IDOM_DOMException::NAMESPACE_ERR);
// xml:a must have namespaceURI == "http://www.w3.org/XML/1998/namespace"
XMLString::transcode("http://www.w3.org/XML/1998/namespace", tempStr2, 3999);
XMLString::transcode("xml:a", tempStr, 3999);
TASSERT(!XMLString::compareString(doc->createAttributeNS(tempStr2, tempStr)->getNamespaceURI(), tempStr2));
EXCEPTION_TEST(doc->createAttributeNS(tempStr5, tempStr), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createAttributeNS(tempStr3, tempStr), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createAttributeNS(0, tempStr), IDOM_DOMException::NAMESPACE_ERR);
//unlike Element, xmlns must have namespaceURI == "http://www.w3.org/2000/xmlns/"
XMLString::transcode("http://www.w3.org/2000/xmlns/", tempStr4, 3999);
XMLString::transcode("xmlns", tempStr, 3999);
TASSERT(!XMLString::compareString(doc->createAttributeNS(tempStr4, tempStr)->getNamespaceURI(), tempStr4));
EXCEPTION_TEST(doc->createAttributeNS(tempStr5, tempStr), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createAttributeNS(tempStr2, tempStr), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createAttributeNS(tempStr3, tempStr), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createAttributeNS(0, tempStr), IDOM_DOMException::NAMESPACE_ERR);
//unlike Element, xmlns:a must have namespaceURI == "http://www.w3.org/2000/xmlns/"
XMLString::transcode("xmlns:a", tempStr, 3999);
TASSERT(!XMLString::compareString(doc->createAttributeNS(tempStr4, tempStr)->getNamespaceURI(), tempStr4));
EXCEPTION_TEST(doc->createAttributeNS(tempStr5, tempStr), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createAttributeNS(tempStr2, tempStr), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createAttributeNS(tempStr3, tempStr), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createAttributeNS(0, tempStr), IDOM_DOMException::NAMESPACE_ERR);
//In fact, any prefix != null should have a namespaceURI != 0 or != ""
XMLString::transcode("foo:a", tempStr, 3999);
TASSERT(!XMLString::compareString(doc->createAttributeNS(tempStr5, tempStr)->getNamespaceURI(), tempStr5));
EXCEPTION_TEST(doc->createAttributeNS(tempStr3, tempStr), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(doc->createAttributeNS(0, tempStr), IDOM_DOMException::NAMESPACE_ERR);
//Change prefix
IDOM_Attr* attr = doc->createAttributeNS(tempStr5, tempStr);
XMLString::transcode("bar", tempStr4, 3999);
XMLString::transcode("bar:a", tempStr, 3999);
XMLString::transcode("a", tempStr2, 3999);
attr->setPrefix(tempStr4);
TASSERT(!XMLString::compareString(attr->getNodeName(), tempStr));
TASSERT(!XMLString::compareString(attr->getNamespaceURI(), tempStr5));
TASSERT(!XMLString::compareString(attr->getPrefix(), tempStr4));
TASSERT(!XMLString::compareString(attr->getName(), tempStr));
//The spec does not prevent us from setting prefix to a node without prefix
TASSERT(!XMLString::compareString(attr->getLocalName(), tempStr2));
attr = doc->createAttributeNS(tempStr5, tempStr2);
TASSERT(!XMLString::compareString(attr->getPrefix(), tempStr3));
attr->setPrefix(tempStr4);
TASSERT(!XMLString::compareString(attr->getNodeName(), tempStr));
TASSERT(!XMLString::compareString(attr->getNamespaceURI(), tempStr5));
TASSERT(!XMLString::compareString(attr->getPrefix(), tempStr4));
TASSERT(!XMLString::compareString(attr->getLocalName(), tempStr2));
TASSERT(!XMLString::compareString(attr->getName(), tempStr));
//Special case for xml:a where namespaceURI must be xmlURI
XMLString::transcode("foo:a", tempStr, 3999);
XMLString::transcode("xml", tempStr4, 3999);
XMLString::transcode("http://www.w3.org/XML/1998/namespace", tempStr2, 3999);
attr = doc->createAttributeNS(tempStr2, tempStr);
attr->setPrefix(tempStr4);
attr = doc->createAttributeNS(tempStr5, tempStr);
EXCEPTION_TEST(attr->setPrefix(tempStr4), IDOM_DOMException::NAMESPACE_ERR);
//Special case for xmlns:a where namespaceURI must be xmlURI
XMLString::transcode("http://www.w3.org/2000/xmlns/", tempStr2, 3999);
attr = doc->createAttributeNS(tempStr2, tempStr);
XMLString::transcode("xmlns", tempStr4, 3999);
attr->setPrefix(tempStr4);
attr = doc->createAttributeNS(tempStr5, tempStr);
EXCEPTION_TEST(attr->setPrefix(tempStr4), IDOM_DOMException::NAMESPACE_ERR);
//Special case for xmlns where no prefix can be set
attr = doc->createAttributeNS(tempStr2, tempStr4);
XMLString::transcode("foo", tempStr, 3999);
EXCEPTION_TEST(attr->setPrefix(tempStr), IDOM_DOMException::NAMESPACE_ERR);
EXCEPTION_TEST(attr->setPrefix(tempStr4), IDOM_DOMException::NAMESPACE_ERR);
//Also an attribute can not have a prefix with namespaceURI == null or ""
XMLString::transcode("a", tempStr4, 3999);
attr = doc->createAttributeNS(0, tempStr4);
EXCEPTION_TEST(attr->setPrefix(tempStr), IDOM_DOMException::NAMESPACE_ERR);
attr = doc->createAttributeNS(tempStr3, tempStr4);
EXCEPTION_TEST(attr->setPrefix(tempStr), IDOM_DOMException::NAMESPACE_ERR);
//Only prefix of Element and Attribute can be changed
EXCEPTION_TEST(doc->setPrefix(tempStr), IDOM_DOMException::NAMESPACE_ERR);
//Prefix of readonly Attribute can not be changed.
//However, there is no way to create such IDOM_Attribute for testing yet.
delete doc;
delete dt;
}
//
// getElementsByTagName*
//
{
// Set up an initial (root element only) document.
//
IDOM_DOMImplementation* impl = IDOM_DOMImplementation::getImplementation();
XMLString::transcode("foo:docName", tempStr3, 3999);
XMLString::transcode("pubId", tempStr2, 3999);
XMLString::transcode( "http://sysId", tempStr, 3999);
IDOM_DocumentType* dt = impl->createDocumentType(tempStr3, tempStr2, tempStr);
XMLString::transcode("http://document.namespace", tempStr2, 3999);
IDOM_Document* doc = impl->createDocument(tempStr2, tempStr3, dt);
IDOM_Element* rootEl = doc->getDocumentElement();
//
// Populate the document
//
XMLString::transcode("http://nsa", tempStr5, 3999);
XMLString::transcode("http://nsb", tempStr4, 3999);
XMLString::transcode("", tempStr3, 3999);
XMLString::transcode("a:ela", tempStr, 3999);
IDOM_Element* ela = doc->createElementNS(tempStr5, tempStr);
rootEl->appendChild(ela);
XMLString::transcode("elb", tempStr2, 3999);
IDOM_Element* elb = doc->createElementNS(tempStr4, tempStr2);
rootEl->appendChild(elb);
XMLString::transcode("elc", tempStr, 3999);
IDOM_Element* elc = doc->createElementNS(tempStr3, tempStr);
rootEl->appendChild(elc);
XMLString::transcode("d:ela", tempStr, 3999);
IDOM_Element* eld = doc->createElementNS(tempStr5, tempStr);
rootEl->appendChild(eld);
XMLString::transcode("http://nse", tempStr, 3999);
IDOM_Element* ele = doc->createElementNS(tempStr, tempStr2);
rootEl->appendChild(ele);
//
// Access with IDOM Level 1 getElementsByTagName
//
IDOM_NodeList* nl;
XMLString::transcode("a:ela", tempStr, 3999);
nl = doc->getElementsByTagName(tempStr);
TASSERT(nl->getLength() == 1);
TASSERT(nl->item(0) == ela);
nl = doc->getElementsByTagName(tempStr2);
TASSERT(nl->getLength() == 2);
TASSERT(nl->item(0) == elb);
TASSERT(nl->item(1) == ele);
XMLString::transcode("d:ela", tempStr, 3999);
nl = doc->getElementsByTagName(tempStr);
TASSERT(nl->getLength() == 1);
TASSERT(nl->item(0) == eld);
//
// Access with IDOM Level 2 getElementsByTagNameNS
//
XMLString::transcode("elc", tempStr, 3999);
nl = doc->getElementsByTagNameNS(tempStr3, tempStr);
TASSERT(nl->getLength() == 1);
TASSERT(nl->item(0) == elc);
nl = doc->getElementsByTagNameNS(0, tempStr);
TASSERT(nl->getLength() == 1);
TASSERT(nl->item(0) == elc);
XMLString::transcode("ela", tempStr, 3999);
nl = doc->getElementsByTagNameNS(tempStr5, tempStr);
TASSERT(nl->getLength() == 2);
TASSERT(nl->item(0) == ela);
TASSERT(nl->item(1) == eld);
nl = doc->getElementsByTagNameNS(tempStr3, tempStr2);
TASSERT(nl->getLength() == 0);
nl = doc->getElementsByTagNameNS(tempStr4, tempStr2);
TASSERT(nl->getLength() == 1);
TASSERT(nl->item(0) == elb);
XMLString::transcode("*", tempStr, 3999);
nl = doc->getElementsByTagNameNS(tempStr, tempStr2);
TASSERT(nl->getLength() == 2);
TASSERT(nl->item(0) == elb);
TASSERT(nl->item(1) == ele);
nl = doc->getElementsByTagNameNS(tempStr5, tempStr);
TASSERT(nl->getLength() == 2);
TASSERT(nl->item(0) == ela);
TASSERT(nl->item(1) == eld);
nl = doc->getElementsByTagNameNS(tempStr, tempStr);
TASSERT(nl->getLength() == 6); // Gets the document root element, plus 5 more
TASSERT(nl->item(6) == 0);
// TASSERT(nl->item(-1) == 0);
nl = rootEl->getElementsByTagNameNS(tempStr, tempStr);
TASSERT(nl->getLength() == 5);
XMLString::transcode("d:ela", tempStr2, 3999);
nl = doc->getElementsByTagNameNS(tempStr5, tempStr2);
TASSERT(nl->getLength() == 0);
//
// Node lists are Live
//
nl = doc->getElementsByTagNameNS(tempStr, tempStr);
IDOM_NodeList* nla = ela->getElementsByTagNameNS(tempStr, tempStr);
TASSERT(nl->getLength() == 6);
TASSERT(nla->getLength() == 0);
rootEl->removeChild(elc);
TASSERT(nl->getLength() == 5);
TASSERT(nla->getLength() == 0);
ela->appendChild(elc);
TASSERT(nl->getLength() == 6);
TASSERT(nla->getLength() == 1);
delete doc;
delete dt;
}
//
// Attributes and NamedNodeMaps.
//
{
// Set up an initial (root element only) document.
//
IDOM_DOMImplementation* impl = IDOM_DOMImplementation::getImplementation();
XMLString::transcode("foo:docName", tempStr, 3999);
XMLString::transcode("pubId", tempStr2, 3999);
XMLString::transcode("http://sysId", tempStr3, 3999);
IDOM_DocumentType* dt = impl->createDocumentType(tempStr, tempStr2, tempStr3);
XMLString::transcode("http://document.namespace", tempStr2, 3999);
IDOM_Document* doc = impl->createDocument(tempStr2, tempStr, dt);
IDOM_Element* rootEl = doc->getDocumentElement();
//
// Create a set of attributes and hang them on the root element.
//
XMLString::transcode("http://nsa", tempStr5, 3999);
XMLString::transcode("http://nsb", tempStr4, 3999);
XMLString::transcode("", tempStr3, 3999);
XMLString::transcode("a:attra", tempStr2, 3999);
IDOM_Attr* attra = doc->createAttributeNS(tempStr5, tempStr2);
rootEl->setAttributeNodeNS(attra);
XMLString::transcode("attrb", tempStr, 3999);
IDOM_Attr* attrb = doc->createAttributeNS(tempStr4, tempStr);
rootEl->setAttributeNodeNS(attrb);
XMLString::transcode("attrc", tempStr, 3999);
IDOM_Attr* attrc = doc->createAttributeNS(tempStr3, tempStr);
rootEl->setAttributeNodeNS(attrc);
XMLString::transcode("d:attra", tempStr, 3999);
IDOM_Attr* attrd = doc->createAttributeNS(tempStr5, tempStr);
rootEl->setAttributeNodeNS(attrd);
XMLString::transcode("http://nse", tempStr2, 3999);
XMLString::transcode("attrb", tempStr, 3999);
IDOM_Attr* attre = doc->createAttributeNS(tempStr2, tempStr);
rootEl->setAttributeNodeNS(attre);
//
// Check that the attribute nodes were created with the correct properties.
//
XMLString::transcode("a:attra", tempStr2, 3999);
TASSERT(!XMLString::compareString(attra->getNodeName(), tempStr2));
TASSERT(!XMLString::compareString(attra->getNamespaceURI(), tempStr5));
XMLString::transcode("attra", tempStr, 3999);
TASSERT(!XMLString::compareString(attra->getLocalName(), tempStr));
TASSERT(!XMLString::compareString(attra->getName(), tempStr2));
TASSERT(attra->getNodeType() == IDOM_Node::ATTRIBUTE_NODE);
TASSERT(!XMLString::compareString(attra->getNodeValue(), tempStr3));
XMLString::transcode("a", tempStr, 3999);
TASSERT(!XMLString::compareString(attra->getPrefix(), tempStr));
TASSERT(attra->getSpecified() == true);
TASSERT(!XMLString::compareString(attra->getValue(), tempStr3));
TASSERT(attra->getOwnerElement() == 0);
// Test methods of NamedNodeMap
IDOM_NamedNodeMap* nnm = rootEl->getAttributes();
TASSERT(nnm->getLength() == 4);
XMLString::transcode("attra", tempStr2, 3999);
XMLString::transcode("attrb", tempStr, 3999);
TASSERT(nnm->getNamedItemNS(tempStr5, tempStr2) == attrd);
TASSERT(nnm->getNamedItemNS(tempStr4, tempStr) == attrb);
TASSERT(nnm->getNamedItemNS(tempStr3, tempStr2) == 0);
TASSERT(nnm->getNamedItemNS(tempStr5, tempStr) == 0);
XMLString::transcode("http://nse", tempStr2, 3999);
TASSERT(nnm->getNamedItemNS(tempStr2, tempStr) == attre);
XMLString::transcode("attrc", tempStr2, 3999);
TASSERT(nnm->getNamedItemNS(tempStr3, tempStr2) == attrc);
// Test hasAttributes, hasAttribute, hasAttributeNS
TASSERT(doc->hasAttributes() == false);
TASSERT(attrc->hasAttributes() == false);
TASSERT(rootEl->hasAttributes() == true);
TASSERT(rootEl->hasAttribute(tempStr2) == true);
XMLString::transcode("wrong", tempStr, 3999);
TASSERT(rootEl->hasAttribute(tempStr) == false);
XMLString::transcode("attra", tempStr2, 3999);
TASSERT(rootEl->hasAttributeNS(tempStr5, tempStr2) == true);
TASSERT(rootEl->hasAttributeNS(tempStr5, tempStr) == false);
delete doc;
delete dt;
}
//
//
//
}
//---------------------------------------------------------------------------------------
//
// main
//
//---------------------------------------------------------------------------------------
int mymain()
{
try {
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch) {
char *pMessage = XMLString::transcode(toCatch.getMessage());
fprintf(stderr, "Error during XMLPlatformUtils::Initialize(). \n"
" Message is: %s\n", pMessage);
delete [] pMessage;
return -1;
}
IDOMBasicTests();
IDOMNSTests();
//
// Print Final allocation stats for full set of tests
//
XMLPlatformUtils::Terminate();
return 0;
};
int main() {
for (int i = 0; i<50; i++)
mymain();
printf("Test Run Successfully\n");
}
1.1 xml-xerces/c/tests/IDom/IDOMMemTest/Makefile.in
Index: Makefile.in
===================================================================
#
# The Apache Software License, Version 1.1
#
# Copyright (c) 2002 The Apache Software Foundation. All rights
# reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# 3. The end-user documentation included with the redistribution,
# if any, must include the following acknowledgment:
# "This product includes software developed by the
# Apache Software Foundation (http://www.apache.org/)."
# Alternately, this acknowledgment may appear in the software itself,
# if and wherever such third-party acknowledgments normally appear.
#
# 4. The names "Xerces" and "Apache Software Foundation" must
# not be used to endorse or promote products derived from this
# software without prior written permission. For written
# permission, please contact apache\@apache.org.
#
# 5. Products derived from this software may not be called "Apache",
# nor may "Apache" appear in their name, without prior written
# permission of the Apache Software Foundation.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# ====================================================================
#
# This software consists of voluntary contributions made by many
# individuals on behalf of the Apache Software Foundation, and was
# originally based on software copyright (c) 2001, International
# Business Machines, Inc., http://www.ibm.com . For more information
# on the Apache Software Foundation, please see
# <http://www.apache.org/>.
#
#
# $Id: Makefile.in,v 1.1 2002/02/05 13:32:42 tng Exp $
#
#
###################################################################
# IMPORTANT NOTE #
###################################################################
# If you are going to do the OS390BATCH build, make sure you have #
# the OS390BATCH environment variable set. #
# #
# export OS390BATCH=1 #
# #
###################################################################
PLATFORM = @platform@
COMPILER = @compiler@
CXXFLAGS = @cxxflags@
CFLAGS = @cflags@
PREFIX = @prefix@
LDFLAGS = @ldflags@
THREADS = @threads@
EXTRA_LIBS = @extra_libs@
include ../../../version.incl
include ../../Makefile.incl
APP_NAME=IDOMMemTest
APP_DIR=IDom/IDOMMemTest
OUTDIR= ${XERCESCROOT}/tests/${APP_DIR}
EXEC= ${XERCESCROOT}/bin
OBJS= ${OUTDIR}/IDOMMemTest.o
SRC= ${XERCESCROOT}/tests/${APP_DIR}
HEADER_FILES=
INCLUDE = ${INCLUDES}
## OS390BATCH
ifeq (${OS390BATCH},1)
BATCH_TARGET= "//'${LOADMOD}(IRANGTST)'"
all:: makedir ${BATCH_TARGET}
else
all:: makedir ${EXEC}/${APP_NAME}
endif
makedir::
-mkdir -p $(OUTDIR)
${EXEC}/${APP_NAME}:: ${OBJS}
${LINK} ${PLATFORM_LIB_LINK_OPTIONS} ${OBJS} -o $@ ${LIBRARY_SEARCH_PATHS} ${LIBRARY_NAMES} ${EXTRA_LINK_OPTIONS}
${BATCH_TARGET}:: ${OBJS}
${LINK} ${PLATFORM_LIB_LINK_OPTIONS} ${OBJS} -o $@ ${LIBRARY_SEARCH_PATHS} ${LIBRARY_NAMES} ${EXTRA_LINK_OPTIONS}
$(OUTDIR)/IDOMMemTest.o:: ${SRC}/IDOMMemTest.cpp ${HEADER_FILES}
${CC} ${CMP} $(INCLUDE) -o $(OUTDIR)/IDOMMemTest.o ${SRC}/IDOMMemTest.cpp
clean::
rm -f ${OBJS} ${EXEC}/${APP_NAME}
distclean:: clean
rm -f Makefile
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org