DTest.cpp
上传用户:zhuqijet
上传日期:2013-06-25
资源大小:10074k
文件大小:187k
源码类别:

词法分析

开发平台:

Visual C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 2001 The Apache Software Foundation->  All rights
  5.  * reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  *
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  *
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution->
  18.  *
  19.  * 3. The end-user documentation included with the redistribution,
  20.  *    if any, must include the following acknowledgment:
  21.  *       "This product includes software developed by the
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowledgment may appear in the software itself,
  24.  *    if and wherever such third-party acknowledgments normally appear.
  25.  *
  26.  * 4. The names "Xerces" and "Apache Software Foundation" must
  27.  *    not be used to endorse or promote products derived from this
  28.  *    software without prior written permission-> For written
  29.  *    permission, please contact apache@apache.org.
  30.  *
  31.  * 5. Products derived from this software may not be called "Apache",
  32.  *    nor may "Apache" appear in their name, without prior written
  33.  *    permission of the Apache Software Foundation->
  34.  *
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  *
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation, and was
  51.  * originally based on software copyright (c) 2001, International
  52.  * Business Machines, Inc., http://www.ibm.com .  For more information
  53.  * on the Apache Software Foundation, please see
  54.  * <http://www.apache.org/>.
  55.  */
  56. /*
  57.  * $Log: DTest.cpp,v $
  58.  * Revision 1.39  2003/02/05 18:55:19  tng
  59.  * [Bug 11915] Utility for freeing memory.
  60.  *
  61.  * Revision 1.38  2003/01/29 20:04:09  gareth
  62.  * testing for DOMTypeInfo
  63.  *
  64.  * Revision 1.37  2003/01/03 17:09:02  tng
  65.  * delete the parser when done, avoid memory leak report with the test case
  66.  *
  67.  * Revision 1.36  2002/11/21 22:12:08  tng
  68.  * fix typo where isID should be isId
  69.  *
  70.  * Revision 1.35  2002/11/21 14:24:39  gareth
  71.  * Tests added for isId, setIdAttribute, setIdAttributeNS, setIdAttributeNode
  72.  *
  73.  * Revision 1.34  2002/11/12 17:52:01  tng
  74.  * Test update: do not issue "Test Run Successfully" if there was an error.
  75.  *
  76.  * Revision 1.33  2002/09/23 21:00:14  tng
  77.  * DOM L3: fix to isDefaultNamespace.  Patch from Gareth Reakes.
  78.  *
  79.  * Revision 1.32  2002/09/23 20:09:23  tng
  80.  * DOM L3: Test baseURI with different parser's setting.
  81.  *
  82.  * Revision 1.31  2002/09/23 18:27:48  tng
  83.  * DOM L3: Test baseURI.   Added by Gareth Reakes and Thomas Ford.
  84.  *
  85.  * Revision 1.30  2002/08/21 20:59:11  tng
  86.  * release the cloned document.
  87.  *
  88.  * Revision 1.29  2002/08/19 19:56:08  tng
  89.  * DOM L3: test DOMNode::isDefaultNamespace.   Added by Gareth Reakes.
  90.  *
  91.  * Revision 1.28  2002/08/16 19:22:29  tng
  92.  * Test DOM L3 lookupNamespacePrefix, lookupNamespaceURI support.   Added by Gareth Reakes.
  93.  *
  94.  * Revision 1.27  2002/08/16 16:03:02  tng
  95.  * [Bug 11360] Release user data using handler.
  96.  *
  97.  * Revision 1.26  2002/08/16 13:49:56  tng
  98.  * [Bug 11360] Release user data using handler.
  99.  *
  100.  * Revision 1.25  2002/08/09 20:21:21  tng
  101.  * Test DOM L3 compareTreePosition.
  102.  *
  103.  * Revision 1.24  2002/07/04 15:35:15  tng
  104.  * DOM L3: Test DOMDocument::renameNode
  105.  *
  106.  * Revision 1.23  2002/06/27 18:42:16  tng
  107.  * DOM L3: Test DOMNode::isSameNode and DOMNode::isEqualNode
  108.  *
  109.  * Revision 1.22  2002/06/25 16:22:52  tng
  110.  * DOM L3: use release()
  111.  *
  112.  * Revision 1.21  2002/06/12 18:31:17  tng
  113.  * DOM L3: test the DOMUserDataHandler and set/getUserData
  114.  *
  115.  * Revision 1.20  2002/06/03 20:51:21  tng
  116.  * DOM L3: Add DOMImplementationRegistry and DOMImplementationSource
  117.  *
  118.  * Revision 1.19  2002/05/21 18:50:16  tng
  119.  * Test case update: modify to use the latest DOM interface
  120.  *
  121.  * Revision 1.6  2002/04/01 21:04:00  tng
  122.  * According to DOM spec, setNodeValue by default is no-op.
  123.  *
  124.  * Revision 1.5  2002/03/14 21:59:29  tng
  125.  * Run methods test[NodeType] in the IDOMTest and other fixes.
  126.  *
  127.  * Revision 1.4  2002/02/01 22:44:24  peiyongz
  128.  * sane_include
  129.  *
  130.  * Revision 1.3  2001/12/07 01:48:27  tng
  131.  * [Bug 1959] setNodeValue throws exception when spec specifies NOP.
  132.  *
  133.  * Revision 1.2  2001/11/23 16:16:52  tng
  134.  * Elimiate compiler warning Warning: String literal converted to char* in initialization.
  135.  *
  136.  * Revision 1.1  2001/08/09 19:28:47  tng
  137.  * Port test case DOMTest to  IDOMTest
  138.  *
  139.  */
  140. /**
  141.  * This class tests methods for XML DOM implementation
  142.  * DOMException errors are tested by calls to DOMExceptionsTest from: Main, docBuilder...
  143.  *
  144.  */
  145. #include <stdio.h>
  146. #include "DTest.h"
  147. #include <xercesc/util/PlatformUtils.hpp>
  148. #include <xercesc/util/XMLException.hpp>
  149. #include <xercesc/util/XMLString.hpp>
  150. #include <xercesc/parsers/XercesDOMParser.hpp>
  151. #include <xercesc/dom/DOMException.hpp>
  152. #define EXCEPTIONSTEST(operation, expectedException, resultFlag, testNum) 
  153.     {                                                               
  154.         try                                                         
  155.         {                                                           
  156.             operation;                                              
  157.             fprintf(stderr, "Exceptions Test # %d: no Exception thrown->n", testNum); 
  158.         }                                                           
  159.         catch (DOMException &e)                                 
  160.         {                                                           
  161.             if (e.code != expectedException) {                      
  162.                 fprintf(stderr, "Exceptions Test # %d: wrong DOMException thrown->n", 
  163.                     testNum);                                       
  164.                 resultFlag = false;                                 
  165.             }                                                       
  166.         }                                                           
  167.         catch (...)                                                 
  168.         {                                                           
  169.             fprintf(stderr, "Exceptions Test # %d: unknown exception thrown->n",    
  170.                 testNum);                                           
  171.             resultFlag = false;                                     
  172.         }                                                           
  173.     }
  174. #define USERDATAHANDLERTEST(userhandler, uoperation, ukey, udata, usrc, udst, uline) 
  175.     if (userhandler.getCurrentType() != uoperation) {
  176.         fprintf(stderr, "DOMUserDataHandler::handler's operationType does not work in line %in", uline); 
  177.         OK = false; 
  178.     } 
  179.     if (XMLString::compareString(userhandler.getCurrentKey(), ukey)) {
  180.         fprintf(stderr, "DOMUserDataHandler::handler's key does not work in line %in", uline); 
  181.         OK = false; 
  182.     } 
  183.     if (userhandler.getCurrentData() != udata) {
  184.         fprintf(stderr, "DOMUserDataHandler::handler's data does not work in line %in", uline); 
  185.         OK = false; 
  186.     } 
  187.     if (userhandler.getCurrentSrc() != usrc) {
  188.         fprintf(stderr, "DOMUserDataHandler::handler's src does not work in line %in", uline); 
  189.         OK = false; 
  190.     } 
  191.     if (userhandler.getCurrentDst() != udst) {
  192.         fprintf(stderr, "DOMUserDataHandler::handler's dst does not work in line %in", uline); 
  193.         OK = false; 
  194.     }
  195. #define LOOKUPDEFAULTNSTEST(thisNode, uri, pass, line) 
  196.     if(thisNode->isDefaultNamespace(uri)) { 
  197.         if(!pass) { 
  198.             fprintf(stderr, "DOMNode::isDefaultNamespace returned true in line %in", line); 
  199.             OK = false; 
  200.         } 
  201.     } 
  202.     else { 
  203.         if(pass) { 
  204.             fprintf(stderr, "DOMNode::isDefaultNamespace returned false in line %in", line); 
  205.             OK = false; 
  206.         } 
  207.     }
  208. #define LOOKUPNSTEST(thisNode, prefix, uri, pass, line) 
  209.     prefixResult = XMLString::compareString(thisNode->lookupNamespacePrefix(uri, false), prefix); 
  210.     prefixResult2 = XMLString::compareString(thisNode->lookupNamespacePrefix(uri, true), prefix); 
  211.     uriResult = XMLString::compareString(thisNode->lookupNamespaceURI(prefix), uri); 
  212.     if(pass) { 
  213.         if(prefixResult != 0) { 
  214.         fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %in", line); 
  215.         OK = false; 
  216.         } 
  217.         if(prefixResult2 != 0) { 
  218.         fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %in", line); 
  219.         OK = false; 
  220.         } 
  221.             if(uriResult != 0) { 
  222.         fprintf(stderr, "DOMNode::lookupNamespaceURI does not work in line %in", line); 
  223.         OK = false;
  224.             } 
  225.         } 
  226.     else { 
  227.         if(prefixResult == 0) { 
  228.         fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %in", line); 
  229.         OK = false; 
  230.         } 
  231.         if(prefixResult2 == 0) { 
  232.         fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %in", line); 
  233.         OK = false; 
  234.         } 
  235.             if(uriResult == 0) { 
  236.         fprintf(stderr, "DOMNode::lookupNamespaceURI does not work in line %in", line); 
  237.         OK = false; 
  238.             } 
  239.         } 
  240. int prefixResult;
  241. int prefixResult2;
  242. int uriResult;
  243. #define COMPARETREEPOSITIONTEST(thisNode, otherNode, position, line) 
  244.     myposition = thisNode->compareTreePosition(otherNode); 
  245.     if (position == DOMNode::TREE_POSITION_DISCONNECTED) {  
  246.         if ((myposition & DOMNode::TREE_POSITION_DISCONNECTED) != 0) {
  247.             fprintf(stderr, "DOMNode::compareTreePosition does not work in line %in", line); 
  248.             OK = false; 
  249.         } 
  250.     } 
  251.     else if ((myposition & position) == 0) {
  252.         fprintf(stderr, "DOMNode::compareTreePosition does not work in line %in", line); 
  253.         OK = false; 
  254.     }
  255. // temp position for compareTreePosition
  256. short myposition;
  257. //temp XMLCh String Buffer
  258. XMLCh tempStr[4000];
  259. XMLCh tempStr2[4000];
  260. XMLCh tempStr3[4000];
  261. XMLCh tempStr4[4000];
  262. XMLCh tempStr5[4000];
  263. //DOMUserDataHandler
  264. myUserDataHandler userhandler;
  265. DOMElement*                 DOMTest::testElementNode;
  266. DOMAttr*                    DOMTest::testAttributeNode;
  267. DOMText*                    DOMTest::testTextNode;
  268. DOMCDATASection*            DOMTest::testCDATASectionNode;
  269. DOMEntityReference*         DOMTest::testEntityReferenceNode;
  270. DOMEntity*                  DOMTest::testEntityNode;
  271. DOMProcessingInstruction*   DOMTest::testProcessingInstructionNode;
  272. DOMComment*                 DOMTest::testCommentNode;
  273. DOMDocument*                DOMTest::testDocumentNode;
  274. DOMDocumentType*            DOMTest::testDocumentTypeNode;
  275. DOMDocumentFragment*        DOMTest::testDocumentFragmentNode;
  276. DOMNotation*                DOMTest::testNotationNode;
  277. /**
  278.  *
  279.  *
  280.  */
  281. DOMTest::DOMTest()
  282. {
  283. };
  284. /**
  285.  *
  286.  * @return DOMDocument
  287.  *
  288.  */
  289. DOMDocument* DOMTest::createDocument() {
  290.     XMLCh coreStr[100];
  291.     XMLString::transcode("Core",coreStr,99);
  292.     DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(coreStr);
  293.     return impl->createDocument();
  294. };
  295. /**
  296.  *
  297.  * @return DOMDocumentType
  298.  * @param name XMLCh*
  299.  *
  300.  */
  301. DOMDocumentType* DOMTest::createDocumentType(DOMDocument* doc, XMLCh* name) {
  302.     return doc->createDocumentType(name);    //Replace with a DOMDocumentType* creator
  303. };
  304. /**
  305.  *
  306.  * @return org.w3c.dom.DOMEntity
  307.  * @param doc org.w3c.dom.DOMDocument
  308.  * @param name XMLCh*
  309.  *
  310.  */
  311. DOMEntity* DOMTest::createEntity(DOMDocument* doc, XMLCh* name) {
  312.     return doc->createEntity(name);
  313. };
  314. /**
  315.  *
  316.  * @return org.w3c.dom.DOMNotation
  317.  * @param doc org.w3c.dom.DOMDocument
  318.  * @param name XMLCh*
  319.  *
  320.  */
  321. DOMNotation* DOMTest::createNotation(DOMDocument* doc, XMLCh* name) {
  322.     return doc->createNotation(name);
  323. };
  324. /**
  325.  * This method builds test documents for the XML DOM implementation
  326.  * @param document org.w3c.dom.DOMDocument
  327.  * @param name document's name
  328.  * @param type document's type
  329.  *
  330.  */
  331. bool DOMTest::docBuilder(DOMDocument* document, XMLCh* nameIn)
  332. {
  333.     XMLCh* name = XMLString::replicate(nameIn);
  334.     DOMDocument* doc = document;
  335.     bool OK = true;
  336.     //name + "FirstElement"
  337.     XMLString::transcode("FirstElement", tempStr2, 3999);
  338.     XMLString::copyString(tempStr, name);
  339.     XMLString::catString(tempStr, tempStr2);
  340.     DOMElement* docFirstElement = doc->createElement(tempStr);
  341.     doc->appendChild(docFirstElement);
  342.     //name + "FirstElement", name + "firstElement"
  343.     XMLString::catString(tempStr, name);
  344.     XMLString::transcode("FirstElement", tempStr2, 3999);
  345.     XMLString::catString(tempStr, tempStr2);
  346.     XMLString::catString(tempStr2, name);
  347.     XMLString::transcode("firstElement", tempStr3, 3999);
  348.     XMLString::catString(tempStr2, tempStr3);
  349.     docFirstElement->setAttribute(tempStr, tempStr2);
  350.     DOMAttr* docFirstElementAttr = docFirstElement->getAttributeNode(tempStr);
  351.     //name + "TargetProcessorChannel" + "This is " + doc->getNodeName() + "'s processing instruction");
  352.     XMLString::copyString(tempStr, name);
  353.     XMLString::transcode("TargetProcessorChannel", tempStr2, 3999);
  354.     XMLString::catString(tempStr, tempStr2);
  355.     XMLString::transcode("This is ", tempStr2, 3999);
  356.     XMLString::catString(tempStr2, doc->getNodeName());
  357.     XMLString::transcode("'s processing instruction", tempStr3, 3999);
  358.     XMLString::catString(tempStr2, tempStr3);
  359.     DOMProcessingInstruction* docProcessingInstruction = doc->createProcessingInstruction(tempStr, tempStr2);
  360.     docFirstElement->appendChild(docProcessingInstruction);
  361.     //name + "TestBody"
  362.     XMLString::copyString(tempStr, name);
  363.     XMLString::transcode("TestBody", tempStr2, 3999);
  364.     XMLString::catString(tempStr, tempStr2);
  365.     DOMElement* docBody = doc->createElement(tempStr);
  366.     docFirstElement->appendChild(docBody);
  367.     //name + "BodyLevel21"
  368.     XMLString::copyString(tempStr, name);
  369.     XMLString::transcode("BodyLevel21", tempStr2, 3999);
  370.     XMLString::catString(tempStr, tempStr2);
  371.     DOMElement* docBodyLevel21 = doc->createElement(tempStr);
  372.     //name + "BodyLevel22"
  373.     XMLString::copyString(tempStr, name);
  374.     XMLString::transcode("BodyLevel22", tempStr2, 3999);
  375.     XMLString::catString(tempStr, tempStr2);
  376.     DOMElement* docBodyLevel22 = doc->createElement(tempStr);
  377.     //name + "BodyLevel23"
  378.     XMLString::copyString(tempStr, name);
  379.     XMLString::transcode("BodyLevel23", tempStr2, 3999);
  380.     XMLString::catString(tempStr, tempStr2);
  381.     DOMElement* docBodyLevel23 = doc->createElement(tempStr);
  382.     //name + "BodyLevel24"
  383.     XMLString::copyString(tempStr, name);
  384.     XMLString::transcode("BodyLevel24", tempStr2, 3999);
  385.     XMLString::catString(tempStr, tempStr2);
  386.     DOMElement* docBodyLevel24 = doc->createElement(tempStr);
  387.     docBody->appendChild(docBodyLevel21);
  388.     docBody->appendChild(docBodyLevel22);
  389.     docBody->appendChild(docBodyLevel23);
  390.     docBody->appendChild(docBodyLevel24);
  391.     //name + "BodyLevel31"
  392.     XMLString::copyString(tempStr, name);
  393.     XMLString::transcode("BodyLevel31", tempStr2, 3999);
  394.     XMLString::catString(tempStr, tempStr2);
  395.     DOMElement* docBodyLevel31 = doc->createElement(tempStr);
  396.     //name + "BodyLevel32"
  397.     XMLString::copyString(tempStr, name);
  398.     XMLString::transcode("BodyLevel32", tempStr2, 3999);
  399.     XMLString::catString(tempStr, tempStr2);
  400.     DOMElement* docBodyLevel32 = doc->createElement(tempStr);
  401.     //name + "BodyLevel33"
  402.     XMLString::copyString(tempStr, name);
  403.     XMLString::transcode("BodyLevel33", tempStr2, 3999);
  404.     XMLString::catString(tempStr, tempStr2);
  405.     DOMElement* docBodyLevel33 = doc->createElement(tempStr);
  406.     //name + "BodyLevel34"
  407.     XMLString::copyString(tempStr, name);
  408.     XMLString::transcode("BodyLevel34", tempStr2, 3999);
  409.     XMLString::catString(tempStr, tempStr2);
  410.     DOMElement* docBodyLevel34 = doc->createElement(tempStr);
  411.     docBodyLevel21->appendChild(docBodyLevel31);
  412.     docBodyLevel21->appendChild(docBodyLevel32);
  413.     docBodyLevel22->appendChild(docBodyLevel33);
  414.     docBodyLevel22->appendChild(docBodyLevel34);
  415.     //name + "BodyLevel31'sChildTextNode11"
  416.     XMLString::copyString(tempStr, name);
  417.     XMLString::transcode("BodyLevel31'sChildTextNode11", tempStr2, 3999);
  418.     XMLString::catString(tempStr, tempStr2);
  419.     DOMText* docTextNode11 = doc->createTextNode(tempStr);
  420.     //name + "BodyLevel31'sChildTextNode12"
  421.     XMLString::copyString(tempStr, name);
  422.     XMLString::transcode("BodyLevel31'sChildTextNode12", tempStr2, 3999);
  423.     XMLString::catString(tempStr, tempStr2);
  424.     DOMText* docTextNode12 = doc->createTextNode(tempStr);
  425.     //name + "BodyLevel31'sChildTextNode13"
  426.     XMLString::copyString(tempStr, name);
  427.     XMLString::transcode("BodyLevel31'sChildTextNode13", tempStr2, 3999);
  428.     XMLString::catString(tempStr, tempStr2);
  429.     DOMText* docTextNode13 = doc->createTextNode(tempStr);
  430.     //name + "TextNode2"
  431.     XMLString::copyString(tempStr, name);
  432.     XMLString::transcode("TextNode2", tempStr2, 3999);
  433.     XMLString::catString(tempStr, tempStr2);
  434.     DOMText* docTextNode2 = doc->createTextNode(tempStr);
  435.     //name + "TextNode3"
  436.     XMLString::copyString(tempStr, name);
  437.     XMLString::transcode("TextNode3", tempStr2, 3999);
  438.     XMLString::catString(tempStr, tempStr2);
  439.     DOMText* docTextNode3 = doc->createTextNode(tempStr);
  440.     //name + "TextNode4"
  441.     XMLString::copyString(tempStr, name);
  442.     XMLString::transcode("TextNode4", tempStr2, 3999);
  443.     XMLString::catString(tempStr, tempStr2);
  444.     DOMText* docTextNode4 = doc->createTextNode(tempStr);
  445.     docBodyLevel31->appendChild(docTextNode11);
  446.     docBodyLevel31->appendChild(docTextNode12);
  447.     docBodyLevel31->appendChild(docTextNode13);
  448.     docBodyLevel32->appendChild(docTextNode2);
  449.     docBodyLevel33->appendChild(docTextNode3);
  450.     docBodyLevel34->appendChild(docTextNode4);
  451.     //"<![CDATA[<greeting>Hello, world!</greeting>]]>"
  452.     XMLString::transcode("<![CDATA[<greeting>Hello, world!</greeting>]]>", tempStr, 3999);
  453.     DOMCDATASection* docCDATASection = doc->createCDATASection(tempStr);
  454.     docBodyLevel23->appendChild(docCDATASection);
  455.     //"This should be a comment of some kind "
  456.     XMLString::transcode("This should be a comment of some kind ", tempStr, 3999);
  457.     DOMComment* docComment = doc->createComment(tempStr);
  458.     //Test compareTreePosition before append
  459.     COMPARETREEPOSITIONTEST(docFirstElementAttr, docComment, DOMNode::TREE_POSITION_DISCONNECTED, __LINE__);
  460.     docBodyLevel23->appendChild(docComment);
  461.     //"ourEntityNode"
  462.     XMLString::transcode("ourEntityNode", tempStr, 3999);
  463.     DOMEntityReference* docReferenceEntity = doc->createEntityReference(tempStr);
  464.     docBodyLevel24->appendChild(docReferenceEntity);
  465.     DOMTest make;
  466.     //"ourNotationNode"
  467.     XMLString::transcode("ourNotationNode", tempStr, 3999);
  468.     DOMNotation* docNotation = make.createNotation(doc, tempStr);
  469.     DOMNode*  abc1 = doc->getFirstChild();
  470.     DOMDocumentType* docType = (DOMDocumentType*) abc1;
  471.     DOMNode* rem = docType->getNotations()->setNamedItem(docNotation);
  472.     if (rem)
  473.         rem->release();
  474. //***********Do some quick compareTreePosition tests
  475. //The tree now looks like
  476. //
  477. // docFirstElement (has docFirstElementAttr)
  478. //      |
  479. //      |_ docProcessInstruction
  480. //      |
  481. //      |_ docBody
  482. //            |
  483. //            |_ docBodyLevel21
  484. //            |         |
  485. //            |         |_ docBodyLevel31
  486. //            |         |        |
  487. //            |         |        |_ docTextNode11
  488. //            |         |        |
  489. //            |         |        |_ docTextNode12
  490. //            |         |        |
  491. //            |         |        |_ docTextNode13
  492. //            |         |
  493. //            |         |_ docBodyLevel32
  494. //            |                  |
  495. //            |                  |_ docTextNode2
  496. //            |
  497. //            |_ docBodyLevel22
  498. //            |         |
  499. //            |         |_ docBodyLevel33
  500. //            |         |        |
  501. //            |         |        |_ docTextNode3
  502. //            |         |
  503. //            |         |
  504. //            |         |_ docBodyLevel34
  505. //            |                  |
  506. //            |                  |_ docTextNode4
  507. //            |
  508. //            |_ docBodyLevel23
  509. //            |         |
  510. //            |         |_ docCDATASection
  511. //            |         |
  512. //            |         |_ docComment
  513. //            |
  514. //            |_ docBodyLevel24
  515. //                      |
  516. //                      |_ docReferenceEntity
  517. //
  518.     COMPARETREEPOSITIONTEST(docProcessingInstruction, docBody, DOMNode::TREE_POSITION_FOLLOWING, __LINE__);
  519.     COMPARETREEPOSITIONTEST(docBodyLevel24, docProcessingInstruction, DOMNode::TREE_POSITION_PRECEDING, __LINE__);
  520.     COMPARETREEPOSITIONTEST(docBodyLevel23, docBodyLevel21, DOMNode::TREE_POSITION_PRECEDING, __LINE__);
  521.     COMPARETREEPOSITIONTEST(docBodyLevel21, docTextNode11, DOMNode::TREE_POSITION_DESCENDANT, __LINE__);
  522.     COMPARETREEPOSITIONTEST(docCDATASection, docFirstElement, DOMNode::TREE_POSITION_ANCESTOR, __LINE__);
  523.     COMPARETREEPOSITIONTEST(docFirstElement, docFirstElement, DOMNode::TREE_POSITION_SAME_NODE, __LINE__);
  524.     COMPARETREEPOSITIONTEST(docFirstElement, docFirstElement, DOMNode::TREE_POSITION_EQUIVALENT, __LINE__);
  525.     COMPARETREEPOSITIONTEST(docReferenceEntity, docFirstElement, DOMNode::TREE_POSITION_ANCESTOR, __LINE__);
  526.     COMPARETREEPOSITIONTEST(docFirstElementAttr, docFirstElement, DOMNode::TREE_POSITION_PRECEDING, __LINE__);
  527.     COMPARETREEPOSITIONTEST(docFirstElementAttr, docProcessingInstruction, DOMNode::TREE_POSITION_FOLLOWING, __LINE__);
  528.     COMPARETREEPOSITIONTEST(docProcessingInstruction, docFirstElementAttr, DOMNode::TREE_POSITION_PRECEDING, __LINE__);
  529.     COMPARETREEPOSITIONTEST(docFirstElementAttr, doc, DOMNode::TREE_POSITION_PRECEDING, __LINE__);
  530.     COMPARETREEPOSITIONTEST(doc, docFirstElementAttr, DOMNode::TREE_POSITION_FOLLOWING, __LINE__);
  531.     COMPARETREEPOSITIONTEST(docBodyLevel21, docBodyLevel22, DOMNode::TREE_POSITION_FOLLOWING, __LINE__);
  532.     COMPARETREEPOSITIONTEST(docNotation, docFirstElement, DOMNode::TREE_POSITION_DISCONNECTED, __LINE__);
  533.     //now do some lookupNamespaceURI and lookupNamespacePrefix
  534.     //first lets add some attributes
  535.     XMLString::transcode("http://www.w3.org/2000/xmlns/", tempStr, 3999);
  536.     XMLString::transcode("xmlns:pre1", tempStr2, 3999);
  537.     XMLString::transcode("pre1URI", tempStr3, 3999);
  538.     XMLString::transcode("pre1", tempStr4, 3999);
  539.     DOMAttr *attr1 = doc->createAttributeNS(tempStr, tempStr2);
  540.     attr1->setValue(tempStr3);
  541.     docFirstElement->setAttributeNodeNS(attr1);
  542.     LOOKUPNSTEST(docProcessingInstruction, tempStr4, tempStr3, true, __LINE__);
  543.     LOOKUPNSTEST(docBodyLevel24, tempStr4, tempStr3, true, __LINE__);
  544.     LOOKUPNSTEST(docBodyLevel23, tempStr4, tempStr3, true, __LINE__);
  545.     LOOKUPNSTEST(docBodyLevel21, tempStr4, tempStr3, true, __LINE__);
  546.     LOOKUPNSTEST(docBodyLevel31, tempStr4, tempStr3, true, __LINE__);
  547.     LOOKUPNSTEST(docBodyLevel32, tempStr4, tempStr3, true, __LINE__);
  548.     LOOKUPNSTEST(docCDATASection, tempStr4, tempStr3, true, __LINE__);
  549.     LOOKUPNSTEST(docFirstElement, tempStr4, tempStr3, true, __LINE__);
  550.     LOOKUPNSTEST(docReferenceEntity, tempStr4, tempStr3, true, __LINE__);
  551.     LOOKUPNSTEST(docFirstElementAttr, tempStr4, tempStr3, true, __LINE__);
  552.     LOOKUPNSTEST(doc, tempStr4, tempStr3, true, __LINE__);
  553.     LOOKUPNSTEST(docNotation, tempStr4, tempStr3, false, __LINE__);
  554.     LOOKUPNSTEST(docTextNode2, tempStr4, tempStr3, true, __LINE__);
  555.     LOOKUPNSTEST(docTextNode4, tempStr4, tempStr3, true, __LINE__);
  556.     LOOKUPNSTEST(docComment, tempStr4, tempStr3, true, __LINE__);
  557.     XMLString::transcode("xmlns:pre2", tempStr2, 3999);
  558.     XMLString::transcode("pre2URI", tempStr3, 3999);
  559.     XMLString::transcode("pre2", tempStr4, 3999);
  560.     DOMAttr *attr2 = doc->createAttributeNS(tempStr, tempStr2);
  561.     attr2->setValue(tempStr3);
  562.     docBodyLevel21->setAttributeNodeNS(attr2);
  563.     LOOKUPNSTEST(docProcessingInstruction, tempStr4, tempStr3, false, __LINE__);
  564.     LOOKUPNSTEST(docBodyLevel24, tempStr4, tempStr3, false, __LINE__);
  565.     LOOKUPNSTEST(docBodyLevel23, tempStr4, tempStr3, false, __LINE__);
  566.     LOOKUPNSTEST(docBodyLevel21, tempStr4, tempStr3, true, __LINE__);
  567.     LOOKUPNSTEST(docBodyLevel31, tempStr4, tempStr3, true, __LINE__);
  568.     LOOKUPNSTEST(docBodyLevel32, tempStr4, tempStr3, true, __LINE__);
  569.     LOOKUPNSTEST(docCDATASection, tempStr4, tempStr3, false, __LINE__);
  570.     LOOKUPNSTEST(docFirstElement, tempStr4, tempStr3, false, __LINE__);
  571.     LOOKUPNSTEST(docReferenceEntity, tempStr4, tempStr3, false, __LINE__);
  572.     LOOKUPNSTEST(docFirstElementAttr, tempStr4, tempStr3, false, __LINE__);
  573.     LOOKUPNSTEST(doc, tempStr4, tempStr3, false, __LINE__);
  574.     LOOKUPNSTEST(docNotation, tempStr4, tempStr3, false, __LINE__);
  575.     LOOKUPNSTEST(docComment, tempStr4, tempStr3, false, __LINE__);
  576.     LOOKUPNSTEST(docTextNode2, tempStr4, tempStr3, true, __LINE__);
  577.     LOOKUPNSTEST(docTextNode4, tempStr4, tempStr3, false, __LINE__);
  578.     XMLString::transcode("xmlns", tempStr2, 3999);
  579.     XMLString::transcode("default", tempStr3, 3999);
  580.     XMLString::transcode("", tempStr4, 3999);
  581.     DOMAttr *attr3 = doc->createAttributeNS(tempStr, tempStr2);
  582.     attr3->setValue(tempStr3);
  583.     docFirstElement->setAttributeNodeNS(attr3);
  584.     LOOKUPNSTEST(docProcessingInstruction, 0, tempStr3, true, __LINE__);
  585.     LOOKUPNSTEST(docBodyLevel24, 0, tempStr3, true, __LINE__);
  586.     LOOKUPNSTEST(docBodyLevel23, 0, tempStr3, true, __LINE__);
  587.     LOOKUPNSTEST(docBodyLevel21, 0, tempStr3, true, __LINE__);
  588.     LOOKUPNSTEST(docBodyLevel31, 0, tempStr3, true, __LINE__);
  589.     LOOKUPNSTEST(docBodyLevel32, 0, tempStr3, true, __LINE__);
  590.     LOOKUPNSTEST(docCDATASection, 0, tempStr3, true, __LINE__);
  591.     LOOKUPNSTEST(docFirstElement, 0, tempStr3, true, __LINE__);
  592.     LOOKUPNSTEST(docReferenceEntity, 0, tempStr3, true, __LINE__);
  593.     LOOKUPNSTEST(docFirstElementAttr, 0, tempStr3, true, __LINE__);
  594.     LOOKUPNSTEST(doc, 0, tempStr3, true, __LINE__);
  595.     LOOKUPNSTEST(docComment, 0, tempStr3, true, __LINE__);
  596.     LOOKUPNSTEST(docTextNode2, 0, tempStr3, true, __LINE__);
  597.     LOOKUPNSTEST(docTextNode4, 0, tempStr3, true, __LINE__);
  598.     //this has to be done separately because negative lookup is the same as default ns lookup!!!
  599.     prefixResult = XMLString::compareString(docNotation->lookupNamespacePrefix(tempStr3, false), 0);
  600.     prefixResult2 = XMLString::compareString(docNotation->lookupNamespacePrefix(tempStr3, true), 0);
  601.     uriResult = XMLString::compareString(docNotation->lookupNamespaceURI(0), 0);
  602.     if(prefixResult != 0) {
  603.         fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %in", __LINE__);
  604.         OK = false;
  605.     }
  606.     if(prefixResult2 != 0) {
  607.         fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %in", __LINE__);
  608.         OK = false;
  609.     }
  610.     if(uriResult != 0) {
  611.         fprintf(stderr, "DOMNode::lookupNamespacePrefix does not work in line %in", __LINE__);
  612.         OK = false;
  613.     }
  614.     XMLString::transcode("notset", tempStr3, 3999);
  615.     LOOKUPDEFAULTNSTEST(docProcessingInstruction, tempStr3, false, __LINE__);
  616.     LOOKUPDEFAULTNSTEST(docBodyLevel24, tempStr3, false, __LINE__);
  617.     LOOKUPDEFAULTNSTEST(docBodyLevel23, tempStr3, false, __LINE__);
  618.     LOOKUPDEFAULTNSTEST(docBodyLevel21, tempStr3, false, __LINE__);
  619.     LOOKUPDEFAULTNSTEST(docBodyLevel31, tempStr3, false, __LINE__);
  620.     LOOKUPDEFAULTNSTEST(docBodyLevel32, tempStr3, false, __LINE__);
  621.     LOOKUPDEFAULTNSTEST(docCDATASection, tempStr3, false, __LINE__);
  622.     LOOKUPDEFAULTNSTEST(docFirstElement, tempStr3, false, __LINE__);
  623.     LOOKUPDEFAULTNSTEST(docReferenceEntity, tempStr3, false, __LINE__);
  624.     LOOKUPDEFAULTNSTEST(docFirstElementAttr, tempStr3, false, __LINE__);
  625.     LOOKUPDEFAULTNSTEST(doc, tempStr3, false, __LINE__);
  626.     LOOKUPDEFAULTNSTEST(docNotation, tempStr3, false, __LINE__);
  627.     LOOKUPDEFAULTNSTEST(docComment, tempStr3, false, __LINE__);
  628.     LOOKUPDEFAULTNSTEST(docTextNode2, tempStr3, false, __LINE__);
  629.     LOOKUPDEFAULTNSTEST(docTextNode4, tempStr3, false, __LINE__);
  630.     XMLString::transcode("default", tempStr3, 3999);
  631.     LOOKUPDEFAULTNSTEST(docProcessingInstruction, tempStr3, false, __LINE__);
  632.     LOOKUPDEFAULTNSTEST(docBodyLevel24, tempStr3, false, __LINE__);
  633.     LOOKUPDEFAULTNSTEST(docBodyLevel23, tempStr3, false, __LINE__);
  634.     LOOKUPDEFAULTNSTEST(docBodyLevel21, tempStr3, false, __LINE__);
  635.     LOOKUPDEFAULTNSTEST(docBodyLevel31, tempStr3, false, __LINE__);
  636.     LOOKUPDEFAULTNSTEST(docBodyLevel32, tempStr3, false, __LINE__);
  637.     LOOKUPDEFAULTNSTEST(docCDATASection, tempStr3, false, __LINE__);
  638.     LOOKUPDEFAULTNSTEST(docFirstElement, tempStr3, false, __LINE__);
  639.     LOOKUPDEFAULTNSTEST(docReferenceEntity, tempStr3, false, __LINE__);
  640.     LOOKUPDEFAULTNSTEST(docFirstElementAttr, tempStr3, false, __LINE__);
  641.     LOOKUPDEFAULTNSTEST(doc, tempStr3, false, __LINE__);
  642.     LOOKUPDEFAULTNSTEST(docNotation, tempStr3, false, __LINE__);
  643.     LOOKUPDEFAULTNSTEST(docComment, tempStr3, false, __LINE__);
  644.     LOOKUPDEFAULTNSTEST(docTextNode2, tempStr3, false, __LINE__);
  645.     LOOKUPDEFAULTNSTEST(docTextNode4, tempStr3, false, __LINE__);
  646.     //remove the xmlns attr
  647.     docFirstElement->removeAttributeNode(attr3);
  648.     LOOKUPDEFAULTNSTEST(docProcessingInstruction, 0, true, __LINE__);
  649.     LOOKUPDEFAULTNSTEST(docBodyLevel24, 0, true, __LINE__);
  650.     LOOKUPDEFAULTNSTEST(docBodyLevel23, 0, true, __LINE__);
  651.     LOOKUPDEFAULTNSTEST(docBodyLevel21, 0, true, __LINE__);
  652.     LOOKUPDEFAULTNSTEST(docBodyLevel31, 0, true, __LINE__);
  653.     LOOKUPDEFAULTNSTEST(docBodyLevel32, 0, true, __LINE__);
  654.     LOOKUPDEFAULTNSTEST(docCDATASection, 0, true, __LINE__);
  655.     LOOKUPDEFAULTNSTEST(docFirstElement, 0, true, __LINE__);
  656.     LOOKUPDEFAULTNSTEST(docReferenceEntity, 0, true, __LINE__);
  657.     LOOKUPDEFAULTNSTEST(docFirstElementAttr, 0, true, __LINE__);
  658.     LOOKUPDEFAULTNSTEST(doc, 0, true, __LINE__);
  659.     LOOKUPDEFAULTNSTEST(docNotation, 0, false, __LINE__);
  660.     LOOKUPDEFAULTNSTEST(docComment, 0, true, __LINE__);
  661.     LOOKUPDEFAULTNSTEST(docTextNode2, 0, true, __LINE__);
  662.     LOOKUPDEFAULTNSTEST(docTextNode4, 0, true, __LINE__);
  663.     XMLString::transcode("someSpecialURI", tempStr3, 3999);
  664.     XMLString::transcode("newNameForEle", tempStr4, 3999);
  665.     DOMElement *ele = doc->createElementNS(tempStr3, tempStr4);
  666.     docFirstElement->insertBefore(ele, docFirstElement->getFirstChild());
  667.     //a test for lookup when xmlns is not set so we take the fact that there is no prefix to be confimation
  668.     LOOKUPDEFAULTNSTEST(ele, tempStr3, true, __LINE__);
  669.     docFirstElement->removeAttributeNode(attr1);
  670.     docBodyLevel21->removeAttributeNode(attr2);
  671.     docFirstElement->removeChild(ele);
  672. //***********Following are for errorTests
  673.     DOMDocumentFragment* docDocFragment = doc->createDocumentFragment();
  674.     //name + "docTextNode3"
  675.     XMLString::copyString(tempStr, name);
  676.     XMLString::transcode("docTextNode3", tempStr2, 3999);
  677.     XMLString::catString(tempStr, tempStr2);
  678.     DOMText* docNode3 = doc->createTextNode(tempStr);
  679.     //name + "docTextNode4"
  680.     XMLString::copyString(tempStr, name);
  681.     XMLString::transcode("docTextNode4", tempStr2, 3999);
  682.     XMLString::catString(tempStr, tempStr2);
  683.     DOMText* docNode4 = doc->createTextNode(tempStr);
  684.     //"ourEntityNode"
  685.     XMLString::transcode("ourEntityNode", tempStr, 3999);
  686.     DOMNode*   abc2 =  doc->getDoctype()->getEntities()->getNamedItem(tempStr);  // Get the DOMEntity* node
  687.     DOMEntity* docEntity = (DOMEntity*) abc2;
  688.     DOMNode*   abc3 = doc->getFirstChild(); // Get the DOMDocumentType* node
  689.     DOMDocumentType* docDocType = (DOMDocumentType*) abc3;
  690.     DOMNode*   abc4 = doc->getLastChild()->getLastChild()->getLastChild()->getFirstChild();
  691.     DOMEntityReference* entityReferenceText = (DOMEntityReference*) abc4;
  692.     //"entityReferenceText information"
  693.     XMLString::transcode("entityReferenceText information", tempStr, 3999);
  694.     DOMText* entityReferenceText2 = doc->createTextNode(tempStr);
  695. //************************************************ ERROR TESTS
  696.     DOMTest tests;
  697.     EXCEPTIONSTEST(document->appendChild(docBody), DOMException::HIERARCHY_REQUEST_ERR, OK,  1);
  698.     EXCEPTIONSTEST(document->appendChild(docBody), DOMException::HIERARCHY_REQUEST_ERR, OK, 2);
  699.     EXCEPTIONSTEST(docNode3->appendChild(docNode4), DOMException::HIERARCHY_REQUEST_ERR, OK, 3);
  700.     // EXCEPTIONSTEST(doc->insertBefore(docEntity, docFirstElement), DOMException::HIERARCHY_REQUEST_ERR, OK, 4);
  701.     EXCEPTIONSTEST(doc->replaceChild(docCDATASection, docFirstElement), DOMException::HIERARCHY_REQUEST_ERR, OK, 5);
  702.     //"This shouldn't work!"
  703.     XMLString::transcode("entityReferenceText information", tempStr, 3999);
  704.     // The following setNodeValue tests are not invalid
  705.     // According to DOM spec, if the node value is defined to be null in the DOM spec, setting it has no effect.
  706.     // Only those node type that are supposed to have node value, exception will be raised if the node is readonly.
  707.     // EXCEPTIONSTEST(docFirstElement->setNodeValue(tempStr), DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 6);
  708.     // EXCEPTIONSTEST(docReferenceEntity->setNodeValue(tempStr), DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 7);
  709.     // EXCEPTIONSTEST(docEntity->setNodeValue(tempStr), DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 8);
  710.     // EXCEPTIONSTEST(doc->setNodeValue(tempStr), DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 9);
  711.     // EXCEPTIONSTEST(docDocType->setNodeValue(tempStr), DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 10);
  712.     // EXCEPTIONSTEST(docDocFragment->setNodeValue(tempStr), DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 11);
  713.     // EXCEPTIONSTEST(docNotation->setNodeValue(tempStr), DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 12);
  714.     EXCEPTIONSTEST(docReferenceEntity->appendChild(entityReferenceText2 ), DOMException::NO_MODIFICATION_ALLOWED_ERR , OK, 13);
  715.     EXCEPTIONSTEST(docBodyLevel32->insertBefore(docTextNode11,docBody ), DOMException::NOT_FOUND_ERR, OK, 14);
  716.     EXCEPTIONSTEST(docBodyLevel32->removeChild(docFirstElement), DOMException::NOT_FOUND_ERR, OK, 15);
  717.     EXCEPTIONSTEST(docBodyLevel32->replaceChild(docTextNode11,docFirstElement ), DOMException::NOT_FOUND_ERR, OK, 16);
  718.     XMLString::release(&name);
  719.     return OK;
  720. //!! Throws a NOT_FOUND_ERR ********
  721.      // docBodyLevel32->getAttributes()->removeNamedItem(testAttribute->getName());    16  // To test removeNamedItem
  722. };  //END OF DOCBUILDER
  723. /**
  724.  * @param document org.w3c.dom.DOMDocument
  725.  */
  726. void DOMTest::findTestNodes(DOMDocument* document) {
  727.     DOMNode* node = document;
  728.     int nodeCount = 0;
  729.     // Walk the tree until you find and assign all node types needed that exist.
  730.     while (node != 0 && nodeCount < 12)
  731.     {
  732.         switch (node->getNodeType())
  733.     {
  734.         case DOMNode::ELEMENT_NODE :
  735.             if (testElementNode == 0) {testElementNode = (DOMElement*)node; nodeCount++;}
  736.             break;
  737.         case DOMNode::ATTRIBUTE_NODE :
  738.             if (testAttributeNode == 0) {testAttributeNode = (DOMAttr*)node; nodeCount++;}
  739.             break;
  740.         case DOMNode::TEXT_NODE :
  741.             if (testTextNode == 0) {testTextNode = (DOMText*)node; nodeCount++;}
  742.             break;
  743.         case DOMNode::CDATA_SECTION_NODE :
  744.             if (testCDATASectionNode == 0) {testCDATASectionNode = (DOMCDATASection*)node; nodeCount++;}
  745.             break;
  746.         case DOMNode::ENTITY_REFERENCE_NODE :
  747.             if (testEntityReferenceNode == 0) {testEntityReferenceNode = (DOMEntityReference*)node; nodeCount++;}
  748.             break;
  749.         case DOMNode::ENTITY_NODE :
  750.             if (testEntityNode == 0) {testEntityNode = (DOMEntity*)node; nodeCount++;}
  751.             break;
  752.         case DOMNode::PROCESSING_INSTRUCTION_NODE :
  753.             if (testProcessingInstructionNode == 0) {testProcessingInstructionNode = (DOMProcessingInstruction*)node; nodeCount++;}
  754.             break;
  755.         case DOMNode::COMMENT_NODE :
  756.             if (testCommentNode == 0) {testCommentNode = (DOMComment*)node; nodeCount++;}
  757.             break;
  758.         case DOMNode::DOCUMENT_TYPE_NODE :
  759.             if (testDocumentTypeNode == 0) {testDocumentTypeNode = (DOMDocumentType*)node; nodeCount++;}
  760.             break;
  761.         case DOMNode::DOCUMENT_FRAGMENT_NODE :
  762.             if (testDocumentFragmentNode == 0) {testDocumentFragmentNode = (DOMDocumentFragment*)node; nodeCount++;}
  763.             break;
  764.         case DOMNode::NOTATION_NODE :
  765.             if (testNotationNode == 0) {testNotationNode = (DOMNotation*)node; nodeCount++;}
  766.             break;
  767.         case DOMNode::DOCUMENT_NODE :
  768.             if (testDocumentNode == 0) {testDocumentNode = (DOMDocument*)node; nodeCount++;}
  769.             break;
  770.         default:
  771.             ;
  772.     }// End of switch
  773.     }   // End of while
  774. };
  775. /**
  776.  * @param document org.w3c.dom.DOMDocument
  777.  */
  778. void DOMTest::findTestNodes(DOMNode* node) {
  779.     DOMTest test;
  780.     DOMNode*  kid;
  781.     // Walk the tree until you find and assign all node types needed that exist.
  782.     if (node->getFirstChild() != 0)
  783.     {
  784.         kid = node->getFirstChild();
  785.         test.findTestNodes(kid);
  786.     }
  787.     if (node->getNextSibling() != 0)
  788.     {
  789.         kid = node->getNextSibling();
  790.         test.findTestNodes(kid);
  791.     }
  792.     switch (node->getNodeType())
  793.     {
  794.         case DOMNode::ELEMENT_NODE :
  795.             if (testElementNode == 0) {testElementNode = (DOMElement*)node; }
  796.             break;
  797.         case DOMNode::ATTRIBUTE_NODE :
  798.             if (testAttributeNode == 0) {testAttributeNode = (DOMAttr*)node; }
  799.             break;
  800.         case DOMNode::TEXT_NODE :
  801.             if (testTextNode == 0) {testTextNode = (DOMText*)node; }
  802.             break;
  803.         case DOMNode::CDATA_SECTION_NODE :
  804.             if (testCDATASectionNode == 0) {testCDATASectionNode = (DOMCDATASection*)node; }
  805.             break;
  806.         case DOMNode::ENTITY_REFERENCE_NODE :
  807.             if (testEntityReferenceNode == 0) {testEntityReferenceNode = (DOMEntityReference*)node;}
  808.             break;
  809.         case DOMNode::ENTITY_NODE :
  810.             if (testEntityNode == 0) {testEntityNode = (DOMEntity*)node;}
  811.             break;
  812.         case DOMNode::PROCESSING_INSTRUCTION_NODE :
  813.             if (testProcessingInstructionNode == 0) {testProcessingInstructionNode = (DOMProcessingInstruction*)node;}
  814.             break;
  815.         case DOMNode::COMMENT_NODE :
  816.             if (testCommentNode == 0) {testCommentNode = (DOMComment*)node;}
  817.             break;
  818.         case DOMNode::DOCUMENT_TYPE_NODE :
  819.             if (testDocumentTypeNode == 0) {testDocumentTypeNode = (DOMDocumentType*)node; }
  820.             break;
  821.         case DOMNode::DOCUMENT_FRAGMENT_NODE :
  822.             if (testDocumentFragmentNode == 0) {testDocumentFragmentNode = (DOMDocumentFragment*)node;}
  823.             break;
  824.         case DOMNode::NOTATION_NODE :
  825.             if (testNotationNode == 0) {testNotationNode = (DOMNotation*)node;}
  826.             break;
  827.         case DOMNode::DOCUMENT_NODE :
  828.             if (testDocumentNode == 0) {testDocumentNode = (DOMDocument*)node;}
  829.             break;
  830.         default:
  831.             ;
  832.     }// End of switch
  833. };//End of class
  834. /**
  835.  *
  836.  *
  837.  */
  838. int main(int argc, char **argv)
  839.  {
  840.      bool OK = true;
  841.      {
  842.          //  Nest entire test in an inner block.
  843.          //     Reference counting should recover all document
  844.          //     storage when this block exits.
  845.          DOMTest test;
  846.          try {
  847.              XMLPlatformUtils::Initialize();
  848.          }
  849.          catch (const XMLException& toCatch) {
  850.              char *pMessage = XMLString::transcode(toCatch.getMessage());
  851.              fprintf(stderr, "Error during initialization! n  %s n", pMessage);
  852.              XMLString::release(&pMessage);
  853.              return -1;
  854.          }
  855.          long avgTime = 0;
  856.          long startTime = 0;//****************Time the whole thing for efficiency of DOM implementation
  857.          // for (int i=0; i< 1000; i++)
  858.          // {
  859.          // AH Revisit  //  startTime = System.currentTimeMillis();
  860.          //     if(!OK)
  861.          //     break;
  862.          DOMDocument* d = test.createDocument();
  863.          XMLString::transcode("testDocument1", tempStr, 3999);
  864.          DOMDocumentType* docDocType = test.createDocumentType(d,tempStr);
  865.          d->appendChild(docDocType);
  866.          XMLString::transcode("ourEntityNode", tempStr, 3999);
  867.          DOMEntity* docEntity = test.createEntity( d, tempStr);
  868.          //Build a branch for entityReference tests
  869.          // DOMText* entityChildText = d.createTextNode("entityChildText information"); //
  870.          // docEntity->appendChild(entityChildText);
  871.          // docDocType->getEntities()->setNamedItem(docEntity);
  872.          XMLString::transcode("d", tempStr3, 3999);
  873.          OK = test.docBuilder(d, tempStr3);
  874.          test.findTestNodes((DOMNode*)d);
  875.          OK = test.testAttr(d);
  876.          OK = test.testCDATASection(d);
  877.          OK = test.testCharacterData(d);
  878.          OK = test.testChildNodeList(d);
  879.          OK = test.testComment(d);
  880.          OK = test.testDeepNodeList(d);
  881.          OK = test.testDocument(d);
  882.          OK = test.testDocumentFragment(d);
  883.          OK = test.testDocumentType(d);
  884.          OK = test.testDOMImplementation(d);
  885.          OK = test.testElement(d);
  886. //         OK = test.testEntity(d);  // Can not test entities;  only parser can create them.
  887.          OK = test.testEntityReference(d);
  888.          OK = test.testNode(d);
  889.          OK = test.testNotation(d);
  890.          OK = test.testPI(d);
  891.          OK = test.testText(d);
  892.          OK = test.testDOMerrors(d);
  893.          // Null out the static object references in class DOMTest,
  894.          // which will recover their storage.
  895.          DOMTest::testElementNode = 0;
  896.          DOMTest::testAttributeNode = 0;
  897.          DOMTest::testTextNode = 0;
  898.          DOMTest::testCDATASectionNode = 0;
  899.          DOMTest::testEntityReferenceNode = 0;
  900.          DOMTest::testEntityNode = 0;
  901.          DOMTest::testProcessingInstructionNode = 0;
  902.          DOMTest::testCommentNode = 0;
  903.          DOMTest::testDocumentNode = 0;
  904.          DOMTest::testDocumentTypeNode = 0;
  905.          DOMTest::testDocumentFragmentNode = 0;
  906.          DOMTest::testNotationNode = 0;
  907.         // we couldn't really test the user data handler call as the userhandler is already
  908.         // deleted when the release() is done, but still set it to test the code internally
  909.         d->setUserData(tempStr, (void*) tempStr, &userhandler);
  910.         d->release();
  911.         // Test baseURI. BaseURI is set on nodes at parse time so we
  912.         // cannot use the docBuilder document above
  913.         //Setup parser
  914.         XercesDOMParser *parser = new XercesDOMParser;
  915.         parser->setValidationScheme(XercesDOMParser::Val_Never);
  916.         parser->setDoNamespaces(true);
  917.         parser->setDoSchema(true);
  918.         parser->setCreateEntityReferenceNodes(true);
  919.         OK = test.testBaseURI(parser);
  920.         parser->setCreateEntityReferenceNodes(false);
  921.         OK = test.testBaseURI(parser);
  922.         parser->setDoNamespaces(false);
  923.         parser->setDoSchema(false);
  924.         OK = test.testBaseURI(parser);
  925.         parser->setCreateEntityReferenceNodes(true);
  926.         OK = test.testBaseURI(parser);
  927.         delete parser;
  928.     };
  929.     XMLPlatformUtils::Terminate();
  930.     if (!OK) {
  931.         printf("Test Failedn");
  932.         return 4;
  933.     }
  934.     printf("Test Run Successfullyn");
  935.     return 0;
  936. };
  937. /**
  938.  * This method tests DOMAttr* methods for the XML DOM implementation
  939.  * @param document org.w3c.dom.DOMDocument
  940.  *
  941.  */
  942. bool DOMTest::testAttr(DOMDocument* document)
  943. {
  944.     DOMNode* node;
  945.     DOMAttr* attributeNode;
  946.     bool T = true;
  947.     bool F = false;
  948.     bool OK = true;
  949. // For debugging*****   printf("n          testAttr's outputs:nn");
  950.     XMLString::transcode("testAttribute", tempStr, 3999);
  951.     DOMAttr* testAttribute = document->createAttribute(tempStr);
  952.     XMLString::transcode("testAttribute's value", tempStr, 3999);
  953.     testAttribute->setValue(tempStr);
  954.     node = document->getDocumentElement(); // node gets first element
  955.     // ((DOMElement*)node)->setAttributeNode(testAttribute);
  956.     // attributeNode = ((DOMElement*)node)->getAttributeNode("testAttribute");
  957.     DOMElement* el = (DOMElement*)node;
  958.     DOMNode* rem = el->setAttributeNode(testAttribute);
  959.     if (rem)
  960.         rem->release();
  961.     XMLString::transcode("testAttribute", tempStr, 3999);
  962.     attributeNode = el->getAttributeNode(tempStr);
  963.     //Test compareTreePosition, the equivalent case here
  964.     XMLString::transcode("dFirstElementdFirstElement", tempStr2, 3999);
  965.     DOMAttr* docFirstElementAttr = el->getAttributeNode(tempStr2);
  966.     COMPARETREEPOSITIONTEST(docFirstElementAttr, attributeNode, DOMNode::TREE_POSITION_EQUIVALENT, __LINE__);
  967.     // Test the name and other data
  968.     if (XMLString::compareString(tempStr, attributeNode->getName()))
  969.     {
  970.         fprintf(stderr, "Warning!!! DOMAttr's 'getName' method failed to work properly!n");
  971.         OK = false;
  972.     }
  973.     XMLString::transcode("testAttribute's value", tempStr, 3999);
  974.     if (XMLString::compareString(tempStr, attributeNode->getNodeValue()))
  975.     {
  976.         fprintf(stderr, "Warning!!! DOMAttr's 'getNodeValue' method failed to work properly!n");
  977.         OK = false;
  978.     }
  979.     if (! T ==attributeNode->getSpecified())
  980.     {
  981.         fprintf(stderr, "Warning!!! DOMAttr's 'getSpecified' method failed to work properly!n");
  982.         OK = false;
  983.     }
  984.     if (XMLString::compareString(tempStr, attributeNode->getValue()))
  985.     {
  986.         fprintf(stderr, "Warning!!! DOMAttr's 'getValue' method failed to work properly!n");
  987.         OK = false;
  988.     }
  989.     XMLString::transcode("Reset Value", tempStr, 3999);
  990.     attributeNode->setNodeValue(tempStr);   /// LEAK!!!!!
  991.     if (XMLString::compareString(tempStr, attributeNode->getNodeValue()))
  992.     {
  993.         fprintf(stderr, "Warning!!! DOMAttr's 'setNodeValue' method failed to work properly!n");
  994.         OK = false;
  995.     }
  996.     attributeNode->setValue(XMLUni::fgZeroLenString);
  997.     if (XMLString::compareString(XMLUni::fgZeroLenString, attributeNode->getValue()))
  998.     {
  999.         fprintf(stderr, "Warning!!! DOMAttr's 'setValue' to '0' method failed to work properly!n");
  1000.         OK = false;
  1001.     }
  1002.     XMLString::transcode("Another value ", tempStr, 3999);
  1003.     attributeNode->setValue(tempStr);
  1004.     if (XMLString::compareString(tempStr, attributeNode->getValue()))
  1005.     {
  1006.         fprintf(stderr, "Warning!!! DOMAttr's 'setValue' method failed to work properly!");
  1007.         OK = false;
  1008.     }
  1009.     node = attributeNode->cloneNode(T);
  1010.     // Check nodes for equality, both their name and value or lack thereof
  1011.     bool cloneOK = true;
  1012.     if (XMLString::compareString(node->getNodeName(), attributeNode->getNodeName()))
  1013.         cloneOK = false;
  1014.     if (node->getNodeValue() == 0 &&
  1015.         attributeNode->getNodeValue() != 0)
  1016.     {
  1017.         cloneOK = false;
  1018.     }
  1019.     if (node->getNodeValue() != 0 && attributeNode->getNodeValue() == 0)
  1020.     {
  1021.         cloneOK = false;
  1022.     };
  1023.     if (node->getNodeValue() != 0 && attributeNode->getNodeValue() != 0)
  1024.     {
  1025.         if (XMLString::compareString(node->getNodeValue(),attributeNode->getNodeValue()))
  1026.             cloneOK = false;
  1027.     }
  1028. /*
  1029.     if (! (node->getNodeName(), attributeNode->getNodeName()) &&         // Compares node names for equality
  1030.           (node->getNodeValue() != 0 && attributeNode->getNodeValue() != 0)  // Checks to make sure each node has a value node
  1031.         ?  node->getNodeValue(), attributeNode->getNodeValue())          // If both have value nodes test those value nodes for equality
  1032.         : (node->getNodeValue() == 0 && attributeNode->getNodeValue() == 0)))// If one node doesn't have a value node make sure both don't
  1033. */
  1034.     if (cloneOK == false)
  1035.         {
  1036.             fprintf(stderr, "'cloneNode' did not clone the Attribute node correctlyn");
  1037.             OK = false;
  1038.         }
  1039.         // Deep clone test comparison is in testNode & testDocument
  1040. //************************************************* ERROR TESTS
  1041.     DOMTest tests;
  1042. //!! Throws HIERARCHY_REQUEST_ERR ****************
  1043.     //  doc->getDocumentElement()->appendChild(attributeNode);
  1044. //!! Throws a NOT_FOUND_ERR ********
  1045.     //  attribute2 = doc->createAttribute("testAttribute2");
  1046.     //  doc->getDocumentElement()->removeAttributeNode(attribute2);
  1047. //!! Throws an INUSE_ATTRIBUTE_ERR ******
  1048.     //  DOMElement* element = (DOMElement*)doc->getLastChild()->getLastChild();
  1049.     //  element->setAttributeNode(testAttribute );// Tests setNamedItem which generates error through justSetNamedItem.
  1050.     // Test the user data
  1051.     // Test simple set and get
  1052.     DOMAttr* userTest = testAttribute;
  1053.     DOMElement*  userFirst = el;
  1054.     XMLCh* userSecond = tempStr2;
  1055.     XMLString::transcode("first", tempStr, 3999);
  1056.     XMLString::transcode("document", tempStr2, 3999);
  1057.     userTest->setUserData(tempStr2, (void*) document, 0);
  1058.     void* mydocument = userTest->getUserData(tempStr2);
  1059.     if (document != mydocument) {
  1060.         fprintf(stderr, "'set/getUserData' in line %i does not workn", __LINE__);
  1061.         OK = false;
  1062.     }
  1063.     userTest->setUserData(tempStr, (void*) userFirst, 0);
  1064.     void* myFirst = userTest->getUserData(tempStr);
  1065.     if (userFirst != myFirst) {
  1066.         fprintf(stderr, "'set/getUserData' in line %i does not workn", __LINE__);
  1067.         OK = false;
  1068.     }
  1069.     // Test overwrite
  1070.     void* myFirst2 = userTest->setUserData(tempStr, (void*) userSecond, 0);
  1071.     void* mySecond = userTest->getUserData(tempStr);
  1072.     if (userSecond != mySecond) {
  1073.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1074.         OK = false;
  1075.     }
  1076.     if (userFirst != myFirst2) {
  1077.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1078.         OK = false;
  1079.     }
  1080.     if (userFirst == mySecond) {
  1081.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1082.         OK = false;
  1083.     }
  1084.     // Test null
  1085.     // test non-exist key
  1086.     XMLString::transcode("not-exist", tempStr3, 3999);
  1087.     if (userTest->getUserData(tempStr3)) {
  1088.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1089.         OK = false;
  1090.     }
  1091.     // use a node that does not have user data set before
  1092.     if (userFirst->getUserData(tempStr)) {
  1093.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1094.         OK = false;
  1095.     }
  1096.     // Test reset
  1097.     void* mySecond2 = userTest->setUserData(tempStr, (void*) 0, 0);
  1098.     void* myNull = userTest->getUserData(tempStr);
  1099.     if (userSecond != mySecond2) {
  1100.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1101.         OK = false;
  1102.     }
  1103.     if (myNull) {
  1104.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1105.         OK = false;
  1106.     }
  1107.     void* mydocument2 = userTest->setUserData(tempStr2, (void*) 0, 0);
  1108.     void* myNull2 = userTest->getUserData(tempStr2);
  1109.     if (mydocument != mydocument2) {
  1110.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1111.         OK = false;
  1112.     }
  1113.     if (myNull2) {
  1114.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1115.         OK = false;
  1116.     }
  1117.     //the userTest user data table should be null now
  1118.     if (userTest->getUserData(tempStr)) {
  1119.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1120.         OK = false;
  1121.     }
  1122.     if (userTest->getUserData(tempStr2)) {
  1123.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1124.         OK = false;
  1125.     }
  1126.     // Test DOMUserDataHandler
  1127.     // test clone
  1128.     userTest->setUserData(tempStr2, (void*) document, &userhandler);
  1129.     DOMNode* mycloned = userTest->cloneNode(true);
  1130.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_CLONED, tempStr2, document, userTest, mycloned, __LINE__);
  1131.     // test import
  1132.     document->setUserData(tempStr2, (void*) document, &userhandler);
  1133.     DOMNode* myimport = document->importNode(userTest,true);
  1134.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_IMPORTED, tempStr2, document, userTest, myimport, __LINE__);
  1135.     // test delete
  1136.     myimport->setUserData(tempStr2, (void*) userTest, &userhandler);
  1137.     myimport->release();
  1138.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_DELETED, tempStr2, userTest, 0, 0, __LINE__);
  1139.     // Test isSameNode
  1140.     if (!userTest->isSameNode(userTest)) {
  1141.         fprintf(stderr, "isSameNode failed in line %in", __LINE__);
  1142.         OK = false;
  1143.     }
  1144.     if (userTest->isSameNode(userFirst)) {
  1145.         fprintf(stderr, "isSameNode failed in line %in", __LINE__);
  1146.         OK = false;
  1147.     }
  1148.     // Test isEqualNode
  1149.     if (!userTest->isEqualNode(mycloned)) {
  1150.         fprintf(stderr, "isEqualNode failed in line %in", __LINE__);
  1151.         OK = false;
  1152.     }
  1153.     if (!userTest->isEqualNode(userTest)) {
  1154.         fprintf(stderr, "isEqualNode failed in line %in", __LINE__);
  1155.         OK = false;
  1156.     }
  1157.     if (userTest->isEqualNode(userFirst)) {
  1158.         fprintf(stderr, "isEqualNode failed in line %in", __LINE__);
  1159.         OK = false;
  1160.     }
  1161.     // Test renameNode
  1162.     XMLString::transcode("http://nsa", tempStr4, 3999);
  1163.     XMLString::transcode("aa", tempStr5, 3999);
  1164.     XMLString::transcode("pnsa:aa", tempStr3, 3999);
  1165.     // create the attribute
  1166.     DOMAttr* renameTestAttribute = document->createAttribute(tempStr5);
  1167.     DOMAttr* renameTestAttributeNS = document->createAttributeNS(tempStr4, tempStr3);
  1168.     // create the owner element and append the attribute node
  1169.     DOMElement* renameTestElement = document->createElement(tempStr5);
  1170.     renameTestElement->setAttributeNode(renameTestAttribute);
  1171.     renameTestElement->setAttributeNode(renameTestAttributeNS);
  1172.     // set up the userdata
  1173.     renameTestAttribute->setUserData(tempStr5, (void*) document, &userhandler);
  1174.     renameTestAttributeNS->setUserData(tempStr4, (void*) document, 0);
  1175.     // set up the node value
  1176.     renameTestAttribute->setNodeValue(tempStr5);
  1177.     renameTestAttributeNS->setNodeValue(tempStr4);
  1178.     XMLString::transcode("http://nsb", tempStr, 3999);
  1179.     XMLString::transcode("bb", tempStr2, 3999);
  1180.     XMLString::transcode("pnsb:bb", tempStr3, 3999);
  1181.     // start the rename tests
  1182.     // rename the NS Attribute
  1183.     DOMAttr* renameTest = (DOMAttr*) document->renameNode(renameTestAttributeNS, tempStr, tempStr3);
  1184.     // test the name
  1185.     if (XMLString::compareString(tempStr, renameTest->getNamespaceURI()))
  1186.     {
  1187.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1188.         OK = false;
  1189.     }
  1190.     if (XMLString::compareString(tempStr2, renameTest->getLocalName()))
  1191.     {
  1192.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1193.         OK = false;
  1194.     }
  1195.     if (XMLString::compareString(tempStr3, renameTest->getNodeName()))
  1196.     {
  1197.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1198.         OK = false;
  1199.     }
  1200.     // test the child / nodevalue
  1201.     if (XMLString::compareString(tempStr4, renameTest->getNodeValue()))
  1202.     {
  1203.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1204.         OK = false;
  1205.     }
  1206.     if (XMLString::compareString(tempStr4, renameTest->getFirstChild()->getNodeValue()))
  1207.     {
  1208.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1209.         OK = false;
  1210.     }
  1211.     // test the owner element
  1212.     if (!renameTestElement->getAttributeNodeNS(tempStr, tempStr2)) {
  1213.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1214.         OK = false;
  1215.     }
  1216.     if (renameTestElement->getAttributeNodeNS(tempStr4, tempStr5)) {
  1217.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1218.         OK = false;
  1219.     }
  1220.     // test user data
  1221.     void* renamedocument = renameTest->getUserData(tempStr4);
  1222.     if (document != renamedocument) {
  1223.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1224.         OK = false;
  1225.     }
  1226.     // test isSame and isEqual
  1227.     if (!renameTestAttributeNS->isEqualNode(renameTest)) {
  1228.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1229.         OK = false;
  1230.     }
  1231.     if (!renameTestAttributeNS->isSameNode(renameTest)) {
  1232.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1233.         OK = false;
  1234.     }
  1235.     // rename the Attribute (null namespace)
  1236.     renameTest = (DOMAttr*) document->renameNode(renameTestAttribute, 0, tempStr2);
  1237.     // test the name
  1238.     if (renameTest->getNamespaceURI())
  1239.     {
  1240.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1241.         OK = false;
  1242.     }
  1243.     if (renameTest->getLocalName())
  1244.     {
  1245.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1246.         OK = false;
  1247.     }
  1248.     if (XMLString::compareString(tempStr2, renameTest->getNodeName()))
  1249.     {
  1250.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1251.         OK = false;
  1252.     }
  1253.     // test the child / nodevalue
  1254.     if (XMLString::compareString(tempStr5, renameTest->getNodeValue()))
  1255.     {
  1256.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1257.         OK = false;
  1258.     }
  1259.     if (XMLString::compareString(tempStr5, renameTest->getFirstChild()->getNodeValue()))
  1260.     {
  1261.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1262.         OK = false;
  1263.     }
  1264.     // test the owner element
  1265.     if (!renameTestElement->getAttributeNode(tempStr2)) {
  1266.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1267.         OK = false;
  1268.     }
  1269.     if (renameTestElement->getAttributeNode(tempStr5)) {
  1270.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1271.         OK = false;
  1272.     }
  1273.     // test user data
  1274.     renamedocument = renameTest->getUserData(tempStr5);
  1275.     if (document != renamedocument) {
  1276.         fprintf(stderr, "'set/getUserData' in line %i does not workn", __LINE__);
  1277.         OK = false;
  1278.     }
  1279.     // test isSame and isEqual
  1280.     if (!renameTestAttribute->isEqualNode(renameTest)) {
  1281.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1282.         OK = false;
  1283.     }
  1284.     if (!renameTestAttribute->isSameNode(renameTest)) {
  1285.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1286.         OK = false;
  1287.     }
  1288.     // rename the Attribute (with namespace)
  1289.     renameTest = (DOMAttr*) document->renameNode(renameTestAttribute, tempStr, tempStr3);
  1290.     // test the name
  1291.     if (XMLString::compareString(tempStr, renameTest->getNamespaceURI()))
  1292.     {
  1293.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1294.         OK = false;
  1295.     }
  1296.     if (XMLString::compareString(tempStr2, renameTest->getLocalName()))
  1297.     {
  1298.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1299.         OK = false;
  1300.     }
  1301.     if (XMLString::compareString(tempStr3, renameTest->getNodeName()))
  1302.     {
  1303.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1304.         OK = false;
  1305.     }
  1306.     // test the child / nodevalue
  1307.     if (XMLString::compareString(tempStr5, renameTest->getNodeValue()))
  1308.     {
  1309.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1310.         OK = false;
  1311.     }
  1312.     if (XMLString::compareString(tempStr5, renameTest->getFirstChild()->getNodeValue()))
  1313.     {
  1314.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1315.         OK = false;
  1316.     }
  1317.     if (renameTestAttribute->getFirstChild())
  1318.     {
  1319.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1320.         OK = false;
  1321.     }
  1322.     // test the owner element
  1323.     if (!renameTestElement->getAttributeNodeNS(tempStr, tempStr2)) {
  1324.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1325.         OK = false;
  1326.     }
  1327.     if (renameTestElement->getAttributeNodeNS(0, tempStr2)) {
  1328.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1329.         OK = false;
  1330.     }
  1331.     if (renameTestElement->getAttributeNode(tempStr2)) {
  1332.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1333.         OK = false;
  1334.     }
  1335.     // test user data
  1336.     renamedocument = renameTest->getUserData(tempStr5);
  1337.     if (document != renamedocument) {
  1338.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1339.         OK = false;
  1340.     }
  1341.     // test userdatahandler
  1342.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_RENAMED, tempStr5, document, renameTestAttribute, renameTest, __LINE__);
  1343.     // test isSame and isEqual
  1344.     // a new node is created here, so both isSame and isEqual are not compared
  1345.     if (renameTestAttribute->isEqualNode(renameTest)) {
  1346.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1347.         OK = false;
  1348.     }
  1349.     if (renameTestAttribute->isSameNode(renameTest)) {
  1350.         fprintf(stderr, "renameNode failed in line %in", __LINE__);
  1351.         OK = false;
  1352.     }
  1353.     //isID tests
  1354.     XMLString::transcode("http://nsa", tempStr4, 3999);
  1355.     XMLString::transcode("aa", tempStr5, 3999);
  1356.     DOMAttr *idAtt = document->createAttributeNS(tempStr4, tempStr5);
  1357.     testElementNode->setAttributeNode(idAtt);
  1358.     if(idAtt->isId()) {
  1359.         fprintf(stderr, "isID failed in line %in", __LINE__);
  1360.         OK = false;
  1361.     }
  1362.     testElementNode->setIdAttributeNode(idAtt);
  1363.     if(!idAtt->isId()) {
  1364.         fprintf(stderr, "isID failed in line %in", __LINE__);
  1365.         OK = false;
  1366.     }
  1367.     //clean up
  1368.     testElementNode->removeAttributeNode(idAtt);
  1369.     if (! OK)
  1370.         printf("n*****The DOMAttr* method calls listed above failed, all others worked correctly.*****n");
  1371.     return OK;
  1372. };
  1373. /**
  1374.  * This method tests DOMCDATASection* methods for the XML DOM implementation
  1375.  * @param document org.w3c.dom.DOMDocument
  1376.  *
  1377.  */
  1378. bool DOMTest::testCDATASection(DOMDocument* document)
  1379. {
  1380.     DOMNode* node;
  1381.     DOMNode* node2;
  1382.     bool T = true;
  1383.     bool OK = true;
  1384. // For debugging*****   printf("n          testCDATASection's outputs:n");
  1385.     XMLString::transcode("dBodyLevel23", tempStr, 3999);
  1386.     node = document->getDocumentElement()->getElementsByTagName(tempStr)->item(0)->getFirstChild(); // node gets DOMCDATASection* node
  1387.     node2 = node->cloneNode(T);//*****?
  1388.     // Check nodes for equality, both their name and value or lack thereof
  1389.     if (!(!XMLString::compareString(node->getNodeName(), node2->getNodeName()) &&        // Compares node names for equality
  1390.           (node->getNodeValue() != 0 && node2->getNodeValue() != 0)     // Checks to make sure each node has a value node
  1391.         ? !XMLString::compareString(node->getNodeValue(), node2->getNodeValue())         // If both have value nodes test those value nodes for equality
  1392.         : (node->getNodeValue() == 0 && node2->getNodeValue() == 0)))   // If one node doesn't have a value node make sure both don't
  1393.     {
  1394.         fprintf(stderr, "'cloneNode' did not clone the DOMCDATASection* node correctlyn");
  1395.         OK = false;
  1396.     }
  1397.     // Deep clone test comparison is in testNode & testDocument
  1398.     // Test the user data
  1399.     // Test simple set and get
  1400.     DOMCDATASection* userTest = (DOMCDATASection*) node;
  1401.     DOMCDATASection*  userFirst = (DOMCDATASection*) node2;
  1402.     XMLCh* userSecond = tempStr2;
  1403.     XMLString::transcode("first", tempStr, 3999);
  1404.     XMLString::transcode("document", tempStr2, 3999);
  1405.     userTest->setUserData(tempStr2, (void*) document, 0);
  1406.     void* mydocument = userTest->getUserData(tempStr2);
  1407.     if (document != mydocument) {
  1408.         fprintf(stderr, "'set/getUserData' in line %i does not workn", __LINE__);
  1409.         OK = false;
  1410.     }
  1411.     userTest->setUserData(tempStr, (void*) userFirst, 0);
  1412.     void* myFirst = userTest->getUserData(tempStr);
  1413.     if (userFirst != myFirst) {
  1414.         fprintf(stderr, "'set/getUserData' in line %i does not workn", __LINE__);
  1415.         OK = false;
  1416.     }
  1417.     // Test overwrite
  1418.     void* myFirst2 = userTest->setUserData(tempStr, (void*) userSecond, 0);
  1419.     void* mySecond = userTest->getUserData(tempStr);
  1420.     if (userSecond != mySecond) {
  1421.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1422.         OK = false;
  1423.     }
  1424.     if (userFirst != myFirst2) {
  1425.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1426.         OK = false;
  1427.     }
  1428.     if (userFirst == mySecond) {
  1429.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1430.         OK = false;
  1431.     }
  1432.     // Test null
  1433.     // test non-exist key
  1434.     XMLString::transcode("not-exist", tempStr3, 3999);
  1435.     if (userTest->getUserData(tempStr3)) {
  1436.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1437.         OK = false;
  1438.     }
  1439.     // use a node that does not have user data set before
  1440.     if (userFirst->getUserData(tempStr)) {
  1441.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1442.         OK = false;
  1443.     }
  1444.     // Test reset
  1445.     void* mySecond2 = userTest->setUserData(tempStr, (void*) 0, 0);
  1446.     void* myNull = userTest->getUserData(tempStr);
  1447.     if (userSecond != mySecond2) {
  1448.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1449.         OK = false;
  1450.     }
  1451.     if (myNull) {
  1452.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1453.         OK = false;
  1454.     }
  1455.     void* mydocument2 = userTest->setUserData(tempStr2, (void*) 0, 0);
  1456.     void* myNull2 = userTest->getUserData(tempStr2);
  1457.     if (mydocument != mydocument2) {
  1458.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1459.         OK = false;
  1460.     }
  1461.     if (myNull2) {
  1462.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1463.         OK = false;
  1464.     }
  1465.     //the userTest user data table should be null now
  1466.     if (userTest->getUserData(tempStr)) {
  1467.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1468.         OK = false;
  1469.     }
  1470.     if (userTest->getUserData(tempStr2)) {
  1471.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1472.         OK = false;
  1473.     }
  1474.     // Test DOMUserDataHandler
  1475.     // test clone
  1476.     userTest->setUserData(tempStr2, (void*) document, &userhandler);
  1477.     DOMNode* mycloned = userTest->cloneNode(true);
  1478.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_CLONED, tempStr2, document, userTest, mycloned, __LINE__);
  1479.     // test import
  1480.     document->setUserData(tempStr2, (void*) document, &userhandler);
  1481.     DOMNode* myimport = document->importNode(userTest,true);
  1482.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_IMPORTED, tempStr2, document, userTest, myimport, __LINE__);
  1483.     // test delete
  1484.     myimport->setUserData(tempStr2, (void*) userTest, &userhandler);
  1485.     myimport->release();
  1486.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_DELETED, tempStr2, userTest, 0, 0, __LINE__);
  1487.     // Test isSameNode
  1488.     if (!userTest->isSameNode(userTest)) {
  1489.         fprintf(stderr, "isSameNode failed in line %in", __LINE__);
  1490.         OK = false;
  1491.     }
  1492.     if (userTest->isSameNode(userFirst)) {
  1493.         fprintf(stderr, "isSameNode failed in line %in", __LINE__);
  1494.         OK = false;
  1495.     }
  1496.     // Test isEqualNode
  1497.     if (!userTest->isEqualNode(mycloned)) {
  1498.         fprintf(stderr, "isEqualNode failed in line %in", __LINE__);
  1499.         OK = false;
  1500.     }
  1501.     if (!userTest->isEqualNode(userTest)) {
  1502.         fprintf(stderr, "isEqualNode failed in line %in", __LINE__);
  1503.         OK = false;
  1504.     }
  1505.     if (userTest->isEqualNode(document)) {
  1506.         fprintf(stderr, "isEqualNode failed in line %in", __LINE__);
  1507.         OK = false;
  1508.     }
  1509.     // Test rename, should throw exception
  1510.     EXCEPTIONSTEST(document->renameNode(userTest, 0, tempStr2), DOMException::NOT_SUPPORTED_ERR, OK, 204 );
  1511.     if (! OK)
  1512.         printf("n*****The DOMCDATASection* method calls listed above failed, all others worked correctly.*****n");
  1513.     return OK;
  1514. };
  1515. /**
  1516.  * This method tests DOMCharacterData methods for the XML DOM implementation
  1517.  * @param document org.w3c.dom.DOMDocument
  1518.  *
  1519.  */
  1520. bool DOMTest::testCharacterData(DOMDocument* document)
  1521. {
  1522.     DOMCharacterData* charData;
  1523.     XMLCh resetData[3999];
  1524.     bool OK = true;
  1525. // For debugging*****   printf("n          testCharacterData's outputs:n");
  1526.     XMLString::transcode("dBodyLevel31", tempStr, 3999);
  1527.     DOMNode*  abc1 = document->getDocumentElement()->getElementsByTagName(tempStr)->item(0)->getFirstChild(); // charData gets textNode11
  1528.     charData = (DOMCharacterData *) abc1;
  1529.     XMLString::transcode("dBodyLevel31'sChildTextNode11", tempStr, 3999);
  1530.     if (XMLString::compareString(tempStr, charData->getData()))
  1531.     {
  1532.         fprintf(stderr, "Warning!!! DOMCharacterData's 'getData' failed to work properly!n This may corrupt other DOMCharacterData tests!!!*****n");
  1533.         OK = false;
  1534.     }
  1535.     XMLString::copyString(resetData,charData->getData());
  1536.     //  printf("This node's original data is: " + charData->getData());
  1537.     XMLString::transcode(" This is new data for this node", tempStr2, 3999);
  1538.     XMLString::copyString(tempStr, charData->getData());
  1539.     XMLString::catString(tempStr, tempStr2);
  1540.     charData->appendData(tempStr2);
  1541.     if (XMLString::compareString(tempStr, charData->getData()))
  1542.     {
  1543.         fprintf(stderr, "Warning!!! DOMCharacterData's 'appendData' failed to work properly!n");
  1544.         OK = false;
  1545.     }
  1546.     //  printf("This node's appended data is: " + charData->getData());
  1547.     XMLString::transcode("dBodyLevel", tempStr, 3999);
  1548.     charData->deleteData(10, 100);
  1549.     if (XMLString::compareString(tempStr, charData->getData()))
  1550.     {
  1551.         fprintf(stderr, "Warning!!! DOMCharacterData's 'deleteData' failed to work properly!n");
  1552.         OK = false;
  1553.     }
  1554.     //  printf("This node's partially deleted data is: " + charData->getData());
  1555.     unsigned int length = 10;
  1556.     if (!(length == charData->getLength()))
  1557.     {
  1558.         fprintf(stderr, "Warning!!! DOMCharacterData's 'getLength' failed to work properly!n");
  1559.         OK = false;
  1560.     }
  1561.     //  printf("This node's data length is: " + charData->getLength());
  1562.     XMLString::transcode("dBody' This is data inserted into this node'Level", tempStr, 3999);
  1563.     XMLString::transcode("' This is data inserted into this node'", tempStr2, 3999);
  1564.     charData->insertData(5, tempStr2);
  1565.     if (XMLString::compareString(tempStr, charData->getData()))
  1566.     {
  1567.         fprintf(stderr, "Warning!!! DOMCharacterData's 'insertData' failed to work properly!n");
  1568.         OK = false;
  1569.     }
  1570.     //  printf("This node's updated with insert data is: " + charData->getData());
  1571.     XMLString::transcode("dBody' This is ' replacement data'ted into this node'Level", tempStr, 3999);
  1572.     XMLString::transcode("' replacement data'", tempStr2, 3999);
  1573.     charData->replaceData(15, 10, tempStr2);
  1574.     if (XMLString::compareString(tempStr, charData->getData()))
  1575.     {
  1576.         fprintf(stderr, "Warning!!! DOMCharacterData's 'replaceData' failed to work properly!n");
  1577.         OK = false;
  1578.     }
  1579.     //  printf("This node's updated with replacement data is: " +charData->getData());
  1580.     XMLString::transcode("New data A123456789B123456789C123456789D123456789E123456789", tempStr, 3999);
  1581.     charData->setData(tempStr);
  1582.     if (XMLString::compareString(tempStr, charData->getData()))
  1583.     {
  1584.         fprintf(stderr, "Warning!!! DOMCharacterData's 'setData' failed to work properly!");
  1585.         OK = false;
  1586.     }
  1587.     //  printf("This node's new data via setData: " + charData->getData());
  1588.     XMLString::transcode("123456789D123456789E123456789", tempStr, 3999);
  1589.     if (XMLString::compareString(tempStr, charData->substringData(30, 30)))
  1590.     {
  1591.         fprintf(stderr, "Warning!!! DOMCharacterData's 'substringData' failed to work properly!n");
  1592.         OK = false;
  1593.     }
  1594.     //  printf("Using subString 30,30 you get:");  charData->substringData(30,30)).print();
  1595.     XMLString::transcode("New data A123456789B12345", tempStr, 3999);
  1596.     if (XMLString::compareString(tempStr, charData->substringData(0, 25)))
  1597.     {
  1598.         fprintf(stderr, "Warning!!! DOMCharacterData's 'substringData' failed to work properly!n");
  1599.         OK = false;
  1600.     }
  1601.     //  printf("Using subString 0,25 you get: ");   charData->substringData(0,25)).print();
  1602. //************************************************* ERROR TESTS
  1603.     DOMTest tests;   // What is this for?  'tests' is never used.
  1604. //!! Throws INDEX_SIZE_ERR ********************
  1605.     EXCEPTIONSTEST(charData->deleteData(-1, 5), DOMException::INDEX_SIZE_ERR, OK, 101 );
  1606.     // Test 102 is not an error because the -1 parameter is an unsigned value, and counts
  1607.     //   that exceed the length of the string are allowed.
  1608. //    EXCEPTIONSTEST(charData->deleteData(2, -1), DOMException::INDEX_SIZE_ERR, OK, 102 );
  1609.     EXCEPTIONSTEST(charData->deleteData(100, 5), DOMException::INDEX_SIZE_ERR, OK,103 );
  1610. //can't set negative unsigned int in c++ compiler
  1611.   //  EXCEPTIONSTEST(charData->insertData(-1, "Stuff inserted"), DOMException::INDEX_SIZE_ERR, OK, 104 );
  1612.     XMLString::transcode("Stuff inserted", tempStr, 3999);
  1613.     EXCEPTIONSTEST(charData->insertData(100, tempStr), DOMException::INDEX_SIZE_ERR, OK, 105 );
  1614.   //  EXCEPTIONSTEST(charData->replaceData(-1, 5, "Replacement stuff") , DOMException::INDEX_SIZE_ERR, OK, 106 );
  1615.     XMLString::transcode("Replacement stuff", tempStr, 3999);
  1616.     EXCEPTIONSTEST(charData->replaceData(100, 5 ,tempStr), DOMException::INDEX_SIZE_ERR, OK, 107 );
  1617.   //  EXCEPTIONSTEST(charData->replaceData(2, -1, "Replacement stuff"), DOMException::INDEX_SIZE_ERR,  OK, 108 );
  1618.     EXCEPTIONSTEST(charData->substringData(-1, 5), DOMException::INDEX_SIZE_ERR, OK, 109 );
  1619.     EXCEPTIONSTEST(charData->substringData(100, 5), DOMException::INDEX_SIZE_ERR, OK, 110 );
  1620.  //   EXCEPTIONSTEST(charData->substringData(2, -1), DOMException::INDEX_SIZE_ERR, OK, 111 );
  1621.     // Test the user data
  1622.     // Test simple set and get
  1623.     DOMCharacterData* userTest = charData;
  1624.     DOMDocument*  userFirst = document;
  1625.     XMLCh* userSecond = tempStr2;
  1626.     XMLString::transcode("first", tempStr, 3999);
  1627.     XMLString::transcode("document", tempStr2, 3999);
  1628.     userTest->setUserData(tempStr2, (void*) document, 0);
  1629.     void* mydocument = userTest->getUserData(tempStr2);
  1630.     if (document != mydocument) {
  1631.         fprintf(stderr, "'set/getUserData' in line %i does not workn", __LINE__);
  1632.         OK = false;
  1633.     }
  1634.     userTest->setUserData(tempStr, (void*) userFirst, 0);
  1635.     void* myFirst = userTest->getUserData(tempStr);
  1636.     if (userFirst != myFirst) {
  1637.         fprintf(stderr, "'set/getUserData' in line %i does not workn", __LINE__);
  1638.         OK = false;
  1639.     }
  1640.     // Test overwrite
  1641.     void* myFirst2 = userTest->setUserData(tempStr, (void*) userSecond, 0);
  1642.     void* mySecond = userTest->getUserData(tempStr);
  1643.     if (userSecond != mySecond) {
  1644.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1645.         OK = false;
  1646.     }
  1647.     if (userFirst != myFirst2) {
  1648.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1649.         OK = false;
  1650.     }
  1651.     if (userFirst == mySecond) {
  1652.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1653.         OK = false;
  1654.     }
  1655.     // Test null
  1656.     // test non-exist key
  1657.     XMLString::transcode("not-exist", tempStr3, 3999);
  1658.     if (userTest->getUserData(tempStr3)) {
  1659.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1660.         OK = false;
  1661.     }
  1662.     // use a node that does not have user data set before
  1663.     if (userFirst->getUserData(tempStr)) {
  1664.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1665.         OK = false;
  1666.     }
  1667.     // Test reset
  1668.     void* mySecond2 = userTest->setUserData(tempStr, (void*) 0, 0);
  1669.     void* myNull = userTest->getUserData(tempStr);
  1670.     if (userSecond != mySecond2) {
  1671.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1672.         OK = false;
  1673.     }
  1674.     if (myNull) {
  1675.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1676.         OK = false;
  1677.     }
  1678.     void* mydocument2 = userTest->setUserData(tempStr2, (void*) 0, 0);
  1679.     void* myNull2 = userTest->getUserData(tempStr2);
  1680.     if (mydocument != mydocument2) {
  1681.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1682.         OK = false;
  1683.     }
  1684.     if (myNull2) {
  1685.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1686.         OK = false;
  1687.     }
  1688.     //the userTest user data table should be null now
  1689.     if (userTest->getUserData(tempStr)) {
  1690.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1691.         OK = false;
  1692.     }
  1693.     if (userTest->getUserData(tempStr2)) {
  1694.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1695.         OK = false;
  1696.     }
  1697.     // Test DOMUserDataHandler
  1698.     // test clone
  1699.     userTest->setUserData(tempStr2, (void*) document, &userhandler);
  1700.     DOMNode* mycloned = userTest->cloneNode(true);
  1701.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_CLONED, tempStr2, document, userTest, mycloned, __LINE__);
  1702.     // test import
  1703.     document->setUserData(tempStr2, (void*) document, &userhandler);
  1704.     DOMNode* myimport = document->importNode(userTest,true);
  1705.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_IMPORTED, tempStr2, document, userTest, myimport, __LINE__);
  1706.     // test delete
  1707.     myimport->setUserData(tempStr2, (void*) userTest, &userhandler);
  1708.     myimport->release();
  1709.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_DELETED, tempStr2, userTest, 0, 0, __LINE__);
  1710.     // Test isSameNode
  1711.     if (!userTest->isSameNode(userTest)) {
  1712.         fprintf(stderr, "isSameNode failed in line %in", __LINE__);
  1713.         OK = false;
  1714.     }
  1715.     if (userTest->isSameNode(userFirst)) {
  1716.         fprintf(stderr, "isSameNode failed in line %in", __LINE__);
  1717.         OK = false;
  1718.     }
  1719.     // Test isEqualNode
  1720.     if (!userTest->isEqualNode(mycloned)) {
  1721.         fprintf(stderr, "isEqualNode failed in line %in", __LINE__);
  1722.         OK = false;
  1723.     }
  1724.     if (!userTest->isEqualNode(userTest)) {
  1725.         fprintf(stderr, "isEqualNode failed in line %in", __LINE__);
  1726.         OK = false;
  1727.     }
  1728.     if (userTest->isEqualNode(userFirst)) {
  1729.         fprintf(stderr, "isEqualNode failed in line %in", __LINE__);
  1730.         OK = false;
  1731.     }
  1732.     // Test rename, should throw exception
  1733.     EXCEPTIONSTEST(document->renameNode(userTest, 0, tempStr2), DOMException::NOT_SUPPORTED_ERR, OK, 205 );
  1734.     if (!OK)
  1735.         printf("n*****The DOMCharacterData method calls listed above failed, all others worked correctly.*****n");
  1736.     charData->setData(resetData); // reset node to original data
  1737.     return OK;
  1738. };
  1739. /**
  1740.  * This method tests ChildNodeList methods for the XML DOM implementation
  1741.  * @param document org.w3c.dom.DOMDocument
  1742.  *
  1743.  */
  1744. bool DOMTest::testChildNodeList(DOMDocument* document)
  1745. {
  1746.     DOMNode* node;
  1747.     DOMNode* node2;
  1748.     bool OK = true;
  1749. // For debugging*****   printf("n          testChildNodeList's outputs:n");
  1750.     node = document->getDocumentElement()->getLastChild(); // node gets doc's testBody element
  1751.     if (!(node->getChildNodes()->getLength()== 4))
  1752.         OK = false;
  1753.     node2 = node->getChildNodes()->item(2);
  1754.     XMLString::transcode("dBodyLevel23", tempStr, 3999);
  1755.     if (XMLString::compareString(tempStr, node2->getNodeName()))
  1756.         OK = false;
  1757.     if (!OK)
  1758.         printf("n*****The ChildNodeList method calls listed above failed, all others worked correctly.*****n");
  1759.     return OK;
  1760. };
  1761. /**
  1762.  * This method tests DOMComment* methods for the XML DOM implementation
  1763.  * @param document org.w3c.dom.DOMDocument
  1764.  *
  1765.  */
  1766. bool DOMTest::testComment(DOMDocument* document)
  1767. {
  1768.     DOMNode* node;
  1769.     DOMNode* node2;
  1770.     bool T = true;
  1771.     bool OK = true;
  1772. // For debugging*****   printf("n          testComment's outputs:n");
  1773.     XMLString::transcode("dBodyLevel31", tempStr, 3999);
  1774.     node = document->getDocumentElement()->getElementsByTagName(tempStr)->item(0)->getFirstChild(); // node gets textNode11
  1775.     node2 = node->cloneNode(T);
  1776.     // Check nodes for equality, both their name and value or lack thereof
  1777.     if (!(!XMLString::compareString(node->getNodeName(), node2->getNodeName()) &&        // Compares node names for equality
  1778.           (node->getNodeValue() != 0 && node2->getNodeValue() != 0)     // Checks to make sure each node has a value node
  1779.         ? !XMLString::compareString(node->getNodeValue(), node2->getNodeValue())         // If both have value nodes test those value nodes for equality
  1780.         : (node->getNodeValue() == 0 && node2->getNodeValue() == 0)))   // If one node doesn't have a value node make sure both don't
  1781.     {
  1782.         fprintf(stderr, "'cloneNode' did not clone the DOMComment* node correctlyn");
  1783.         OK = false;
  1784.     }
  1785.     // Deep clone test comparison is in testNode & testDocument
  1786.     // Test the user data
  1787.     // Test simple set and get
  1788.     DOMComment* userTest = (DOMComment*) node;
  1789.     DOMComment*  userFirst = (DOMComment*) node2;
  1790.     XMLCh* userSecond = tempStr2;
  1791.     XMLString::transcode("first", tempStr, 3999);
  1792.     XMLString::transcode("document", tempStr2, 3999);
  1793.     userTest->setUserData(tempStr2, (void*) document, 0);
  1794.     void* mydocument = userTest->getUserData(tempStr2);
  1795.     if (document != mydocument) {
  1796.         fprintf(stderr, "'set/getUserData' in line %i does not workn", __LINE__);
  1797.         OK = false;
  1798.     }
  1799.     userTest->setUserData(tempStr, (void*) userFirst, 0);
  1800.     void* myFirst = userTest->getUserData(tempStr);
  1801.     if (userFirst != myFirst) {
  1802.         fprintf(stderr, "'set/getUserData' in line %i does not workn", __LINE__);
  1803.         OK = false;
  1804.     }
  1805.     // Test overwrite
  1806.     void* myFirst2 = userTest->setUserData(tempStr, (void*) userSecond, 0);
  1807.     void* mySecond = userTest->getUserData(tempStr);
  1808.     if (userSecond != mySecond) {
  1809.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1810.         OK = false;
  1811.     }
  1812.     if (userFirst != myFirst2) {
  1813.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1814.         OK = false;
  1815.     }
  1816.     if (userFirst == mySecond) {
  1817.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1818.         OK = false;
  1819.     }
  1820.     // Test null
  1821.     // test non-exist key
  1822.     XMLString::transcode("not-exist", tempStr3, 3999);
  1823.     if (userTest->getUserData(tempStr3)) {
  1824.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1825.         OK = false;
  1826.     }
  1827.     // use a node that does not have user data set before
  1828.     if (userFirst->getUserData(tempStr)) {
  1829.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1830.         OK = false;
  1831.     }
  1832.     // Test reset
  1833.     void* mySecond2 = userTest->setUserData(tempStr, (void*) 0, 0);
  1834.     void* myNull = userTest->getUserData(tempStr);
  1835.     if (userSecond != mySecond2) {
  1836.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1837.         OK = false;
  1838.     }
  1839.     if (myNull) {
  1840.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1841.         OK = false;
  1842.     }
  1843.     void* mydocument2 = userTest->setUserData(tempStr2, (void*) 0, 0);
  1844.     void* myNull2 = userTest->getUserData(tempStr2);
  1845.     if (mydocument != mydocument2) {
  1846.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1847.         OK = false;
  1848.     }
  1849.     if (myNull2) {
  1850.         fprintf(stderr, "overwrite userdata with same key in line %i does not workn", __LINE__);
  1851.         OK = false;
  1852.     }
  1853.     //the userTest user data table should be null now
  1854.     if (userTest->getUserData(tempStr)) {
  1855.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1856.         OK = false;
  1857.     }
  1858.     if (userTest->getUserData(tempStr2)) {
  1859.         fprintf(stderr, "get non-exist user data in line %i does not workn", __LINE__);
  1860.         OK = false;
  1861.     }
  1862.     // Test DOMUserDataHandler
  1863.     // test clone
  1864.     userTest->setUserData(tempStr2, (void*) document, &userhandler);
  1865.     DOMNode* mycloned = userTest->cloneNode(true);
  1866.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_CLONED, tempStr2, document, userTest, mycloned, __LINE__);
  1867.     // test import
  1868.     document->setUserData(tempStr2, (void*) document, &userhandler);
  1869.     DOMNode* myimport = document->importNode(userTest,true);
  1870.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_IMPORTED, tempStr2, document, userTest, myimport, __LINE__);
  1871.     // test delete
  1872.     myimport->setUserData(tempStr2, (void*) userTest, &userhandler);
  1873.     myimport->release();
  1874.     USERDATAHANDLERTEST(userhandler, DOMUserDataHandler::NODE_DELETED, tempStr2, userTest, 0, 0, __LINE__);
  1875.     // Test isSameNode
  1876.     if (!userTest->isSameNode(userTest)) {
  1877.         fprintf(stderr, "isSameNode failed in line %in", __LINE__);
  1878.         OK = false;
  1879.     }
  1880.     if (userTest->isSameNode(userFirst)) {
  1881.         fprintf(stderr, "isSameNode failed in line %in", __LINE__);
  1882.         OK = false;
  1883.     }
  1884.     // Test isEqualNode
  1885.     if (!userTest->isEqualNode(mycloned)) {
  1886.         fprintf(stderr, "isEqualNode failed in line %in", __LINE__);
  1887.         OK = false;
  1888.     }
  1889.     if (!userTest->isEqualNode(userTest)) {
  1890.         fprintf(stderr, "isEqualNode failed in line %in", __LINE__);
  1891.         OK = false;
  1892.     }
  1893.     if (userTest->isEqualNode(document)) {
  1894.         fprintf(stderr, "isEqualNode failed in line %in", __LINE__);
  1895.         OK = false;
  1896.     }
  1897.     // Test rename, should throw exception
  1898.     EXCEPTIONSTEST(document->renameNode(userTest, 0, tempStr2), DOMException::NOT_SUPPORTED_ERR, OK, 206 );
  1899.     if (!OK)
  1900.         printf("n*****The DOMComment* method calls listed above failed, all others worked correctly.*****n");
  1901.     return OK;
  1902. };
  1903. /**
  1904.  * This method tests DeepNodeList methods for the XML DOM implementation
  1905.  * @param document org.w3c.dom.DOMDocument
  1906.  *
  1907.  */
  1908. bool DOMTest::testDeepNodeList(DOMDocument* document)
  1909. {
  1910.     DOMNode* node;
  1911.     DOMNode* node2;
  1912.     bool OK = true;
  1913. // For debugging*****   printf("n          testDeepNodeList's outputs:nn");
  1914.     node = document->getLastChild()->getLastChild(); // node gets docBody element
  1915. //  DOMElement* el = (DOMElement*)node;
  1916. //  DOMNodeList nl = el->getElementsByTagName("*");
  1917. //  int len = nl->getLength();
  1918. //  if (len != 8)
  1919.     XMLString::transcode("*",tempStr, 3999);
  1920.     if (!(8 == ((DOMElement*) node)->getElementsByTagName(tempStr)->getLength()))
  1921.         {
  1922.             printf ("Warning!!! DeepNodeList's 'getLength' failed to work properly!n");
  1923.             OK = false;
  1924.         }
  1925.     node2 = ((DOMElement*) node)->getElementsByTagName(tempStr)->item(2); //This also runs through 'nextMatchingElementAfter"
  1926.     XMLString::transcode("dBodyLevel32", tempStr, 3999);
  1927.     if (XMLString::compareString(tempStr, node2->getNodeName()))
  1928.         {
  1929.             printf ("Warning!!! DeepNodeList's 'item' (or DOMElement's 'getElementsBy TagName)failed to work properly!n");
  1930.             OK = false;
  1931.         }
  1932.     node2 = document->getLastChild();
  1933.     XMLString::transcode("dTestBody", tempStr, 3999);
  1934.     if (XMLString::compareString(tempStr, ((DOMElement*) node2)->getElementsByTagName(tempStr)->item(0)->getNodeName()))//This also runs through 'nextMatchingElementAfter"
  1935.         {
  1936.             printf ("Warning!!! DeepNodeList's 'item' (or DOMElement's 'getElementsBy TagName)failed to work properly!n");
  1937.             OK = false;
  1938.         }
  1939.     if (!OK)
  1940.         printf("n*****The DeepNodeList method calls listed above failed, all others worked correctly.*****n");
  1941.     return OK;
  1942. };
  1943. /**
  1944.  * This method tests DOMDocument* methods for the XML DOM implementation
  1945.  * @param document org.w3c.dom.DOMDocument
  1946.  *
  1947.  *
  1948.  **** ALL DOMDocument* create methods are run in docBuilder except createAttribute which is in testAttribute**
  1949.  */
  1950. bool DOMTest::testDocument(DOMDocument* document)
  1951. {
  1952.     DOMTest make;
  1953.     DOMDocumentFragment* docFragment, *docFragment2;
  1954.     DOMElement* newElement;
  1955.     DOMNode* node, *node2;
  1956.     const char* elementNames[] =  {"dFirstElement", "dTestBody", "dBodyLevel21","dBodyLevel31","dBodyLevel32",
  1957.                    "dBodyLevel22","dBodyLevel33","dBodyLevel34","dBodyLevel23","dBodyLevel24"};
  1958.     const char* newElementNames[] = {"dFirstElement", "dTestBody", "dBodyLevel22","dBodyLevel33","dBodyLevel34","dBodyLevel23"};
  1959.     bool result;
  1960.     bool OK = true;
  1961. // For debugging*****   printf("n          testDocument's outputs:n n");
  1962.     XMLString::transcode("testDocument1", tempStr, 3999);
  1963.     DOMDocumentType* checkDocType =  make.createDocumentType(document,tempStr);
  1964.     DOMDocumentType* docType = document->getDoctype();
  1965.     if (XMLString::compareString(checkDocType->getNodeName(),docType->getNodeName() ))
  1966.     {
  1967.         fprintf(stderr, "Warning!!! DOMDocument's 'getDocType method failed!n" );
  1968.         OK = false;
  1969.     }
  1970.     if (XMLString::compareString(checkDocType->getNodeValue(), docType->getNodeValue()))
  1971.     {
  1972.         fprintf(stderr, "Warning!!! DOMDocument's 'getDocType method failed!n" );
  1973.         OK = false;
  1974.     }
  1975.     /*
  1976.     if (! (checkDocType->getNodeName(), docType->getNodeName()) &&      // Compares node names for equality
  1977.           (checkDocType->getNodeValue() != 0 && docType->getNodeValue() != 0)   // Checks to make sure each node has a value node
  1978.         ?  checkDocType->getNodeValue(), docType->getNodeValue())       // If both have value nodes test those value nodes for equality
  1979.         : (checkDocType->getNodeValue() == 0 && docType->getNodeValue() == 0))) // If one node doesn't have a value node make sure both don't
  1980.     {
  1981.         fprintf(stderr, "Warning!!! DOMDocument's 'getDocType method failed!n" );
  1982.         OK = false;
  1983.     }
  1984.     */
  1985.     DOMNode*  rootElement = document->getLastChild();
  1986.     bool check = (rootElement->getNodeValue() && document->getDocumentElement()->getNodeValue())   // Checks to make sure each node has a value node
  1987.         ?  !XMLString::compareString(rootElement->getNodeValue(), document->getDocumentElement()->getNodeValue())      // If both have value nodes test those value nodes for equality
  1988.         : (rootElement->getNodeValue() == 0 && document->getDocumentElement()->getNodeValue() == 0);    // If one node doesn't have a value node make sure both don't
  1989.     if (!(!XMLString::compareString(rootElement->getNodeName(), document->getDocumentElement()->getNodeName()) &&        // Compares node names for equality
  1990.          check))
  1991.     {
  1992.         fprintf(stderr, "Warning!!! DOMDocument's 'getDocumentElement' method failed!n" );
  1993.         OK = false;
  1994.     }
  1995.     XMLString::transcode("*", tempStr, 3999);
  1996.     DOMNodeList* docElements = document->getElementsByTagName(tempStr);
  1997.     int docSize = docElements->getLength();
  1998.     int i;
  1999.     for (i = 0; i < docSize; i++)
  2000.     {
  2001.         DOMNode*  n = (DOMNode*) docElements->item(i);
  2002.         XMLString::transcode(elementNames[i], tempStr, 3999);
  2003.         if (XMLString::compareString(tempStr, n->getNodeName()))
  2004.         {
  2005.             fprintf(stderr, "Comparison of this document's elements failed at element number %d at line %i n", i, __LINE__);
  2006.             OK = false;
  2007.             break;
  2008.         }
  2009.     }
  2010.     // What is this supposed to be doing?
  2011.     //
  2012.     //if (document->equals(document->getImplementation()))
  2013.     //{
  2014.     //  fprintf(stderr, "Warning!!! DOMDocument's 'getImplementation' method failed!n" );
  2015.     //  OK = false;
  2016.     //}
  2017.     XMLString::transcode("NewElementTestsInsertBefore", tempStr, 3999);
  2018.     newElement = document->createElement(tempStr);
  2019.     //  doc->insertBefore(newElement,0);//!! Throws a HIERARCHY_REQUEST_ERR   *******
  2020.     //  doc->removeChild(docElements->item(9));//!! Throws a NOT_FOUND_ERR  ********
  2021.     docFragment = document->createDocumentFragment();
  2022.     //Tests removeChild and stores removed branch for tree reconstruction
  2023.     docFragment->appendChild(docElements->item(1)->removeChild(docElements->item(9)));
  2024.     docFragment2 = document->createDocumentFragment();
  2025.     //Tests removeChild and stores removed branch for tree reconstruction
  2026.     docFragment2->appendChild(docElements->item(1)->removeChild(docElements->item(2)));
  2027.     docSize = docElements->getLength();
  2028.     for (i = 0; i < docSize; i++)
  2029.     {
  2030.         DOMNode*  n = (DOMNode*) docElements->item(i);
  2031.         XMLString::transcode(newElementNames[i], tempStr, 3999);
  2032.         if (XMLString::compareString(tempStr, n->getNodeName()))
  2033.         {
  2034.             fprintf(stderr, "Comparison of new document's elements failed at element number %d at line %i n", i, __LINE__);
  2035.             OK = false;
  2036.             break;
  2037.         }
  2038.     }
  2039.     docElements->item(1)->insertBefore(docFragment, 0); //Reattaches removed branch to restore tree to the original
  2040.                                                 // AH Revist.  Note: insertBefore should be able to take
  2041.                                                 //   a 0 as its second parameter.
  2042.     docElements->item(1)->insertBefore(docFragment2, docElements->item(2)); //Reattaches removed branch to restore tree to the original
  2043.     //  printf(docElements->item(2)->getNodeName());
  2044.     docSize = docElements->getLength();
  2045.     for (i = 0; i < docSize; i++)
  2046.     {
  2047.         DOMNode*  n = (DOMNode*) docElements->item(i);
  2048.         XMLString::transcode(elementNames[i], tempStr, 3999);
  2049.         if (XMLString::compareString(tempStr, n->getNodeName()))
  2050.         {
  2051.             fprintf(stderr, "Comparison of restored document's elements failed at element number %d at line %i n", i, __LINE__);
  2052.             OK = false;
  2053.             break;
  2054.         }
  2055.     }
  2056.     DOMTest tests;
  2057. //  DOMDocument* z = tests.createDocument();
  2058. //  tests.docBuilder(z, "z");
  2059. //!! Throws WRONG_DOCUMENT_ERR **********
  2060. //  EXCEPTIONSTEST(z->appendChild(
  2061.     //  z->appendChild(d.createComment("Test doc d comment"));// Tries to append z document with document d comment
  2062.     //  d->getDocumentElement()->appendChild(z.createElement("newZdocElement"));// Tries to append d document with document z DOMElement
  2063.     //  d->getLastChild()->getLastChild()->insertBefore(z.createElement("newZdocElement"),d->getLastChild()->getLastChild()->getFirstChild());// Tries to insert into d document with document z DOMElement
  2064.     //  d->replaceChild(z.createElement("newZdocElement"),d->getLastChild()->getLastChild()->getFirstChild());  // Tries to replace in d document with document z DOMElement
  2065.     //  doc->setNodeValue("This shouldn't work");//!! Throws a NO_MODIFICATION_ALLOWED_ERR ********
  2066.     node = document;
  2067.     node2 = document->cloneNode(true);
  2068.     result = treeCompare(node, node2); // Deep clone test comparison of document cloneNode
  2069.     if (!result)
  2070.     {
  2071.         fprintf(stderr, "Warning!!! Deep clone of the document failed!n");