IDTest.cpp
上传用户:huihehuasu
上传日期:2007-01-10
资源大小:6948k
文件大小:75k
源码类别:

xml/soap/webservice

开发平台:

C/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: IDTest.cpp,v $
  58.  * Revision 1.3  2001/12/07 01:48:27  tng
  59.  * [Bug 1959] setNodeValue throws exception when spec specifies NOP.
  60.  *
  61.  * Revision 1.2  2001/11/23 16:16:52  tng
  62.  * Elimiate compiler warning Warning: String literal converted to char* in initialization.
  63.  *
  64.  * Revision 1.1  2001/08/09 19:28:47  tng
  65.  * Port test case DOMTest to  IDOMTest
  66.  *
  67.  */
  68. /**
  69.  * This class tests methods for XML IDOM implementation
  70.  * IDOM_DOMException errors are tested by calls to DOMExceptionsTest from: Main, docBuilder...
  71.  *
  72.  */
  73. #include <stdio.h>
  74. #include "IDTest.h"
  75. #include <util/PlatformUtils.hpp>
  76. #include <util/XMLException.hpp>
  77. #include <util/XMLString.hpp>
  78. #define EXCEPTIONSTEST(operation, expectedException, resultFlag, testNum) 
  79.     {                                                               
  80.         try                                                         
  81.         {                                                           
  82.             operation;                                              
  83.             fprintf(stderr, "Exceptions Test # %d: no Exception thrown->n", testNum); 
  84.         }                                                           
  85.         catch (IDOM_DOMException &e)                                 
  86.         {                                                           
  87.             if (e.code != expectedException) {                      
  88.                 fprintf(stderr, "Exceptions Test # %d: wrong IDOM_DOMException thrown->n", 
  89.                     testNum);                                       
  90.                 resultFlag = false;                                 
  91.             }                                                       
  92.         }                                                           
  93.         catch (...)                                                 
  94.         {                                                           
  95.             fprintf(stderr, "Exceptions Test # %d: unknown exception thrown->n",    
  96.                 testNum);                                           
  97.             resultFlag = false;                                     
  98.         }                                                           
  99.     }
  100. //temp XMLCh String Buffer
  101. XMLCh tempStr[4000];
  102. XMLCh tempStr2[4000];
  103. XMLCh tempStr3[4000];
  104. IDOM_Element*                 IDTest::testElementNode;
  105. IDOM_Attr*                    IDTest::testAttributeNode;
  106. IDOM_Text*                    IDTest::testTextNode;
  107. IDOM_CDATASection*            IDTest::testCDATASectionNode;
  108. IDOM_EntityReference*         IDTest::testEntityReferenceNode;
  109. IDOM_Entity*                  IDTest::testEntityNode;
  110. IDOM_ProcessingInstruction*   IDTest::testProcessingInstructionNode;
  111. IDOM_Comment*                 IDTest::testCommentNode;
  112. IDOM_Document*                IDTest::testDocumentNode;
  113. IDOM_DocumentType*            IDTest::testDocumentTypeNode;
  114. IDOM_DocumentFragment*        IDTest::testDocumentFragmentNode;
  115. IDOM_Notation*                IDTest::testNotationNode;
  116. /**
  117.  *
  118.  *
  119.  */
  120. IDTest::IDTest()
  121. {
  122. };
  123. /**
  124.  *
  125.  * @return IDOM_Document
  126.  *
  127.  */
  128. IDOM_Document* IDTest::createDocument() {
  129.     IDOM_DOMImplementation* impl = IDOM_DOMImplementation::getImplementation();
  130.     return impl->createDocument();
  131. };
  132. /**
  133.  *
  134.  * @return IDOM_DocumentType
  135.  * @param name XMLCh*
  136.  *
  137.  */
  138. IDOM_DocumentType* IDTest::createDocumentType(IDOM_Document* doc, XMLCh* name) {
  139.     return doc->createDocumentType(name);    //Replace with a IDOM_DocumentType* creator
  140. };
  141. /**
  142.  *
  143.  * @return org.w3c.dom.IDOM_Entity
  144.  * @param doc org.w3c.dom.IDOM_Document
  145.  * @param name XMLCh*
  146.  *
  147.  */
  148. IDOM_Entity* IDTest::createEntity(IDOM_Document* doc, XMLCh* name) {
  149.     return doc->createEntity(name);
  150. };
  151. /**
  152.  *
  153.  * @return org.w3c.dom.IDOM_Notation
  154.  * @param doc org.w3c.dom.IDOM_Document
  155.  * @param name XMLCh*
  156.  *
  157.  */
  158. IDOM_Notation* IDTest::createNotation(IDOM_Document* doc, XMLCh* name) {
  159.     return doc->createNotation(name);
  160. };
  161. /**
  162.  * This method builds test documents for the XML IDOM implementation
  163.  * @param document org.w3c.dom.IDOM_Document
  164.  * @param name document's name
  165.  * @param type document's type
  166.  *
  167.  */
  168. void IDTest::docBuilder(IDOM_Document* document, XMLCh* nameIn)
  169. {
  170.     XMLCh* name = XMLString::replicate(nameIn);
  171.     IDOM_Document* doc = document;
  172.     bool OK = true;
  173.     //name + "FirstElement"
  174.     XMLString::transcode("FirstElement", tempStr2, 3999);
  175.     XMLString::catString(tempStr, name);
  176.     XMLString::catString(tempStr, tempStr2);
  177.     IDOM_Element* docFirstElement = doc->createElement(tempStr);
  178.     doc->appendChild(docFirstElement);
  179.     //name + "FirstElement", name + "firstElement"
  180.     XMLString::catString(tempStr, name);
  181.     XMLString::transcode("FirstElement", tempStr2, 3999);
  182.     XMLString::catString(tempStr, tempStr2);
  183.     XMLString::catString(tempStr2, name);
  184.     XMLString::transcode("firstElement", tempStr3, 3999);
  185.     XMLString::catString(tempStr2, tempStr3);
  186.     docFirstElement->setAttribute(tempStr, tempStr2);
  187.     //name + "TargetProcessorChannel" + "This is " + doc->getNodeName() + "'s processing instruction");
  188.     XMLString::copyString(tempStr, name);
  189.     XMLString::transcode("TargetProcessorChannel", tempStr2, 3999);
  190.     XMLString::catString(tempStr, tempStr2);
  191.     XMLString::transcode("This is ", tempStr2, 3999);
  192.     XMLString::catString(tempStr2, doc->getNodeName());
  193.     XMLString::transcode("'s processing instruction", tempStr3, 3999);
  194.     XMLString::catString(tempStr2, tempStr3);
  195.     IDOM_ProcessingInstruction* docProcessingInstruction = doc->createProcessingInstruction(tempStr, tempStr2);
  196.     docFirstElement->appendChild(docProcessingInstruction);
  197.     //name + "TestBody"
  198.     XMLString::copyString(tempStr, name);
  199.     XMLString::transcode("TestBody", tempStr2, 3999);
  200.     XMLString::catString(tempStr, tempStr2);
  201.     IDOM_Element* docBody = doc->createElement(tempStr);
  202.     docFirstElement->appendChild(docBody);
  203.     //name + "BodyLevel21"
  204.     XMLString::copyString(tempStr, name);
  205.     XMLString::transcode("BodyLevel21", tempStr2, 3999);
  206.     XMLString::catString(tempStr, tempStr2);
  207.     IDOM_Element* docBodyLevel21 = doc->createElement(tempStr);
  208.     //name + "BodyLevel22"
  209.     XMLString::copyString(tempStr, name);
  210.     XMLString::transcode("BodyLevel22", tempStr2, 3999);
  211.     XMLString::catString(tempStr, tempStr2);
  212.     IDOM_Element* docBodyLevel22 = doc->createElement(tempStr);
  213.     //name + "BodyLevel23"
  214.     XMLString::copyString(tempStr, name);
  215.     XMLString::transcode("BodyLevel23", tempStr2, 3999);
  216.     XMLString::catString(tempStr, tempStr2);
  217.     IDOM_Element* docBodyLevel23 = doc->createElement(tempStr);
  218.     //name + "BodyLevel24"
  219.     XMLString::copyString(tempStr, name);
  220.     XMLString::transcode("BodyLevel24", tempStr2, 3999);
  221.     XMLString::catString(tempStr, tempStr2);
  222.     IDOM_Element* docBodyLevel24 = doc->createElement(tempStr);
  223.     docBody->appendChild(docBodyLevel21);
  224.     docBody->appendChild(docBodyLevel22);
  225.     docBody->appendChild(docBodyLevel23);
  226.     docBody->appendChild(docBodyLevel24);
  227.     //name + "BodyLevel31"
  228.     XMLString::copyString(tempStr, name);
  229.     XMLString::transcode("BodyLevel31", tempStr2, 3999);
  230.     XMLString::catString(tempStr, tempStr2);
  231.     IDOM_Element* docBodyLevel31 = doc->createElement(tempStr);
  232.     //name + "BodyLevel32"
  233.     XMLString::copyString(tempStr, name);
  234.     XMLString::transcode("BodyLevel32", tempStr2, 3999);
  235.     XMLString::catString(tempStr, tempStr2);
  236.     IDOM_Element* docBodyLevel32 = doc->createElement(tempStr);
  237.     //name + "BodyLevel33"
  238.     XMLString::copyString(tempStr, name);
  239.     XMLString::transcode("BodyLevel33", tempStr2, 3999);
  240.     XMLString::catString(tempStr, tempStr2);
  241.     IDOM_Element* docBodyLevel33 = doc->createElement(tempStr);
  242.     //name + "BodyLevel34"
  243.     XMLString::copyString(tempStr, name);
  244.     XMLString::transcode("BodyLevel34", tempStr2, 3999);
  245.     XMLString::catString(tempStr, tempStr2);
  246.     IDOM_Element* docBodyLevel34 = doc->createElement(tempStr);
  247.     docBodyLevel21->appendChild(docBodyLevel31);
  248.     docBodyLevel21->appendChild(docBodyLevel32);
  249.     docBodyLevel22->appendChild(docBodyLevel33);
  250.     docBodyLevel22->appendChild(docBodyLevel34);
  251.     //name + "BodyLevel31'sChildTextNode11"
  252.     XMLString::copyString(tempStr, name);
  253.     XMLString::transcode("BodyLevel31'sChildTextNode11", tempStr2, 3999);
  254.     XMLString::catString(tempStr, tempStr2);
  255.     IDOM_Text* docTextNode11 = doc->createTextNode(tempStr);
  256.     //name + "BodyLevel31'sChildTextNode12"
  257.     XMLString::copyString(tempStr, name);
  258.     XMLString::transcode("BodyLevel31'sChildTextNode12", tempStr2, 3999);
  259.     XMLString::catString(tempStr, tempStr2);
  260.     IDOM_Text* docTextNode12 = doc->createTextNode(tempStr);
  261.     //name + "BodyLevel31'sChildTextNode13"
  262.     XMLString::copyString(tempStr, name);
  263.     XMLString::transcode("BodyLevel31'sChildTextNode13", tempStr2, 3999);
  264.     XMLString::catString(tempStr, tempStr2);
  265.     IDOM_Text* docTextNode13 = doc->createTextNode(tempStr);
  266.     //name + "TextNode2"
  267.     XMLString::copyString(tempStr, name);
  268.     XMLString::transcode("TextNode2", tempStr2, 3999);
  269.     XMLString::catString(tempStr, tempStr2);
  270.     IDOM_Text* docTextNode2 = doc->createTextNode(tempStr);
  271.     //name + "TextNode3"
  272.     XMLString::copyString(tempStr, name);
  273.     XMLString::transcode("TextNode3", tempStr2, 3999);
  274.     XMLString::catString(tempStr, tempStr2);
  275.     IDOM_Text* docTextNode3 = doc->createTextNode(tempStr);
  276.     //name + "TextNode4"
  277.     XMLString::copyString(tempStr, name);
  278.     XMLString::transcode("TextNode4", tempStr2, 3999);
  279.     XMLString::catString(tempStr, tempStr2);
  280.     IDOM_Text* docTextNode4 = doc->createTextNode(tempStr);
  281.     docBodyLevel31->appendChild(docTextNode11);
  282.     docBodyLevel31->appendChild(docTextNode12);
  283.     docBodyLevel31->appendChild(docTextNode13);
  284.     docBodyLevel32->appendChild(docTextNode2);
  285.     docBodyLevel33->appendChild(docTextNode3);
  286.     docBodyLevel34->appendChild(docTextNode4);
  287.     //"<![CDATA[<greeting>Hello, world!</greeting>]]>"
  288.     XMLString::transcode("<![CDATA[<greeting>Hello, world!</greeting>]]>", tempStr, 3999);
  289.     IDOM_CDATASection* docCDATASection = doc->createCDATASection(tempStr);
  290.     docBodyLevel23->appendChild(docCDATASection);
  291.     //"This should be a comment of some kind "
  292.     XMLString::transcode("This should be a comment of some kind ", tempStr, 3999);
  293.     IDOM_Comment* docComment = doc->createComment(tempStr);
  294.     docBodyLevel23->appendChild(docComment);
  295.     //"ourEntityNode"
  296.     XMLString::transcode("ourEntityNode", tempStr, 3999);
  297.     IDOM_EntityReference* docReferenceEntity = doc->createEntityReference(tempStr);
  298.     docBodyLevel24->appendChild(docReferenceEntity);
  299.     IDTest make;
  300.     //"ourNotationNode"
  301.     XMLString::transcode("ourNotationNode", tempStr, 3999);
  302.     IDOM_Notation* docNotation = make.createNotation(doc, tempStr);
  303.     IDOM_Node*  abc1 = doc->getFirstChild();
  304.     IDOM_DocumentType* docType = (IDOM_DocumentType*) abc1;
  305.     docType->getNotations()->setNamedItem(docNotation);
  306.     IDOM_DocumentFragment* docDocFragment = doc->createDocumentFragment();
  307. //  printf("This document's first element name is " + docFirstElement->getTagName() + "n");
  308. //***********Following are for errorTests
  309.     //name + "docTextNode3"
  310.     XMLString::copyString(tempStr, name);
  311.     XMLString::transcode("docTextNode3", tempStr2, 3999);
  312.     XMLString::catString(tempStr, tempStr2);
  313.     IDOM_Text* docNode3 = doc->createTextNode(tempStr);
  314.     //name + "docTextNode4"
  315.     XMLString::copyString(tempStr, name);
  316.     XMLString::transcode("docTextNode4", tempStr2, 3999);
  317.     XMLString::catString(tempStr, tempStr2);
  318.     IDOM_Text* docNode4 = doc->createTextNode(tempStr);
  319.     //"ourEntityNode"
  320.     XMLString::transcode("ourEntityNode", tempStr, 3999);
  321.     IDOM_Node*   abc2 =  doc->getDoctype()->getEntities()->getNamedItem(tempStr);  // Get the IDOM_Entity* node
  322.     IDOM_Entity* docEntity = (IDOM_Entity*) abc2;
  323.     IDOM_Node*   abc3 = doc->getFirstChild(); // Get the IDOM_DocumentType* node
  324.     IDOM_DocumentType* docDocType = (IDOM_DocumentType*) abc3;
  325.     IDOM_Node*   abc4 = doc->getLastChild()->getLastChild()->getLastChild()->getFirstChild();
  326.     IDOM_EntityReference* entityReferenceText = (IDOM_EntityReference*) abc4;
  327.     //"entityReferenceText information"
  328.     XMLString::transcode("entityReferenceText information", tempStr, 3999);
  329.     IDOM_Text* entityReferenceText2 = doc->createTextNode(tempStr);
  330. //************************************************* ERROR TESTS
  331.     IDTest tests;
  332.     EXCEPTIONSTEST(document->appendChild(docBody), IDOM_DOMException::HIERARCHY_REQUEST_ERR, OK,  1);
  333.     EXCEPTIONSTEST(document->appendChild(docBody), IDOM_DOMException::HIERARCHY_REQUEST_ERR, OK, 2);
  334.     EXCEPTIONSTEST(docNode3->appendChild(docNode4), IDOM_DOMException::HIERARCHY_REQUEST_ERR, OK, 3);
  335.     // EXCEPTIONSTEST(doc->insertBefore(docEntity, docFirstElement), IDOM_DOMException::HIERARCHY_REQUEST_ERR, OK, 4);
  336.     EXCEPTIONSTEST(doc->replaceChild(docCDATASection, docFirstElement), IDOM_DOMException::HIERARCHY_REQUEST_ERR, OK, 5);
  337.     //"This shouldn't work!"
  338.     XMLString::transcode("entityReferenceText information", tempStr, 3999);
  339.     // The following setNodeValue tests are not invalid
  340.     // According to DOM spec, exception is raised only if the node is readonly, otherwise should be no-op.
  341.     // EXCEPTIONSTEST(docFirstElement->setNodeValue(tempStr), IDOM_DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 6);
  342.     EXCEPTIONSTEST(docReferenceEntity->setNodeValue(tempStr), IDOM_DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 7);
  343.     // The following setNodeValue tests are not invalid
  344.     // According to DOM spec, exception is raised only if the node is readonly, otherwise should be no-op.
  345.     // EXCEPTIONSTEST(docEntity->setNodeValue(tempStr), IDOM_DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 8);
  346.     // EXCEPTIONSTEST(doc->setNodeValue(tempStr), IDOM_DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 9);
  347.     // EXCEPTIONSTEST(docDocType->setNodeValue(tempStr), IDOM_DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 10);
  348.     // EXCEPTIONSTEST(docDocFragment->setNodeValue(tempStr), IDOM_DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 11);
  349.     // EXCEPTIONSTEST(docNotation->setNodeValue(tempStr), IDOM_DOMException::NO_MODIFICATION_ALLOWED_ERR, OK, 12);
  350.     EXCEPTIONSTEST(docReferenceEntity->appendChild(entityReferenceText2 ), IDOM_DOMException::NO_MODIFICATION_ALLOWED_ERR , OK, 13);
  351.     EXCEPTIONSTEST(docBodyLevel32->insertBefore(docTextNode11,docBody ), IDOM_DOMException::NOT_FOUND_ERR, OK, 14);
  352.     EXCEPTIONSTEST(docBodyLevel32->removeChild(docFirstElement), IDOM_DOMException::NOT_FOUND_ERR, OK, 15);
  353.     EXCEPTIONSTEST(docBodyLevel32->replaceChild(docTextNode11,docFirstElement ), IDOM_DOMException::NOT_FOUND_ERR, OK, 16);
  354.     delete [] name;
  355. //!! Throws a NOT_FOUND_ERR ********
  356.      // docBodyLevel32->getAttributes()->removeNamedItem(testAttribute->getName());    16  // To test removeNamedItem
  357. };  //END OF DOCBUILDER
  358. /**
  359.  * @param document org.w3c.dom.IDOM_Document
  360.  */
  361.  void IDTest::findTestNodes(IDOM_Document* document) {
  362.     IDOM_Node* node = document;
  363.     int nodeCount = 0;
  364.     // Walk the tree until you find and assign all node types needed that exist.
  365.     while (node != 0 && nodeCount < 12)
  366.     {
  367.         switch (node->getNodeType())
  368.     {
  369.         case IDOM_Node::ELEMENT_NODE :
  370.             if (testElementNode == 0) {testElementNode = (IDOM_Element*)node; nodeCount++;}
  371.             break;
  372.         case IDOM_Node::ATTRIBUTE_NODE :
  373.             if (testAttributeNode == 0) {testAttributeNode = (IDOM_Attr*)node; nodeCount++;}
  374.             break;
  375.         case IDOM_Node::TEXT_NODE :
  376.             if (testTextNode == 0) {testTextNode = (IDOM_Text*)node; nodeCount++;}
  377.             break;
  378.         case IDOM_Node::CDATA_SECTION_NODE :
  379.             if (testCDATASectionNode == 0) {testCDATASectionNode = (IDOM_CDATASection*)node; nodeCount++;}
  380.             break;
  381.         case IDOM_Node::ENTITY_REFERENCE_NODE :
  382.             if (testEntityReferenceNode == 0) {testEntityReferenceNode = (IDOM_EntityReference*)node; nodeCount++;}
  383.             break;
  384.         case IDOM_Node::ENTITY_NODE :
  385.             if (testEntityNode == 0) {testEntityNode = (IDOM_Entity*)node; nodeCount++;}
  386.             break;
  387.         case IDOM_Node::PROCESSING_INSTRUCTION_NODE :
  388.             if (testProcessingInstructionNode == 0) {testProcessingInstructionNode = (IDOM_ProcessingInstruction*)node; nodeCount++;}
  389.             break;
  390.         case IDOM_Node::COMMENT_NODE :
  391.             if (testCommentNode == 0) {testCommentNode = (IDOM_Comment*)node; nodeCount++;}
  392.             break;
  393.         case IDOM_Node::DOCUMENT_TYPE_NODE :
  394.             if (testDocumentTypeNode == 0) {testDocumentTypeNode = (IDOM_DocumentType*)node; nodeCount++;}
  395.             break;
  396.         case IDOM_Node::DOCUMENT_FRAGMENT_NODE :
  397.             if (testDocumentFragmentNode == 0) {testDocumentFragmentNode = (IDOM_DocumentFragment*)node; nodeCount++;}
  398.             break;
  399.         case IDOM_Node::NOTATION_NODE :
  400.             if (testNotationNode == 0) {testNotationNode = (IDOM_Notation*)node; nodeCount++;}
  401.             break;
  402.         case IDOM_Node::DOCUMENT_NODE :
  403.             if (testDocumentNode == 0) {testDocumentNode = (IDOM_Document*)node; nodeCount++;}
  404.             break;
  405.         default:
  406.             ;
  407.     }// End of switch
  408.     }   // End of while
  409. };
  410. /**
  411.  * @param document org.w3c.dom.IDOM_Document
  412.  */
  413.  void IDTest::findTestNodes(IDOM_Node* node) {
  414.     IDTest test;
  415.     IDOM_Node*  kid;
  416.     // Walk the tree until you find and assign all node types needed that exist.
  417.     if (node->getFirstChild() != 0)
  418.     {
  419.         kid = node->getFirstChild();
  420.         test.findTestNodes(kid);
  421.     }
  422.     if (node->getNextSibling() != 0)
  423.     {
  424.         kid = node->getNextSibling();
  425.         test.findTestNodes(kid);
  426.     }
  427.     switch (node->getNodeType())
  428.     {
  429.         case IDOM_Node::ELEMENT_NODE :
  430.             if (testElementNode == 0) {testElementNode = (IDOM_Element*)node; }
  431.             break;
  432.         case IDOM_Node::ATTRIBUTE_NODE :
  433.             if (testAttributeNode == 0) {testAttributeNode = (IDOM_Attr*)node; }
  434.             break;
  435.         case IDOM_Node::TEXT_NODE :
  436.             if (testTextNode == 0) {testTextNode = (IDOM_Text*)node; }
  437.             break;
  438.         case IDOM_Node::CDATA_SECTION_NODE :
  439.             if (testCDATASectionNode == 0) {testCDATASectionNode = (IDOM_CDATASection*)node; }
  440.             break;
  441.         case IDOM_Node::ENTITY_REFERENCE_NODE :
  442.             if (testEntityReferenceNode == 0) {testEntityReferenceNode = (IDOM_EntityReference*)node;}
  443.             break;
  444.         case IDOM_Node::ENTITY_NODE :
  445.             if (testEntityNode == 0) {testEntityNode = (IDOM_Entity*)node;}
  446.             break;
  447.         case IDOM_Node::PROCESSING_INSTRUCTION_NODE :
  448.             if (testProcessingInstructionNode == 0) {testProcessingInstructionNode = (IDOM_ProcessingInstruction*)node;}
  449.             break;
  450.         case IDOM_Node::COMMENT_NODE :
  451.             if (testCommentNode == 0) {testCommentNode = (IDOM_Comment*)node;}
  452.             break;
  453.         case IDOM_Node::DOCUMENT_TYPE_NODE :
  454.             if (testDocumentTypeNode == 0) {testDocumentTypeNode = (IDOM_DocumentType*)node; }
  455.             break;
  456.         case IDOM_Node::DOCUMENT_FRAGMENT_NODE :
  457.             if (testDocumentFragmentNode == 0) {testDocumentFragmentNode = (IDOM_DocumentFragment*)node;}
  458.             break;
  459.         case IDOM_Node::NOTATION_NODE :
  460.             if (testNotationNode == 0) {testNotationNode = (IDOM_Notation*)node;}
  461.             break;
  462.         case IDOM_Node::DOCUMENT_NODE :
  463.             if (testDocumentNode == 0) {testDocumentNode = (IDOM_Document*)node;}
  464.             break;
  465.         default:
  466.             ;
  467.     }// End of switch
  468. };//End of class
  469. /**
  470.  *
  471.  *
  472.  */
  473.  int main(int argc, char **argv)
  474.  {
  475.      {
  476.          //  Nest entire test in an inner block.
  477.          //     Reference counting should recover all document
  478.          //     storage when this block exits.
  479.          IDTest test;
  480.          try {
  481.              XMLPlatformUtils::Initialize();
  482.          }
  483.          catch (const XMLException& toCatch) {
  484.              char *pMessage = XMLString::transcode(toCatch.getMessage());
  485.              fprintf(stderr, "Error during initialization! n  %s n", pMessage);
  486.              delete [] pMessage;
  487.              return -1;
  488.          }
  489.          long avgTime = 0;
  490.          bool OK = true;
  491.          long startTime = 0;//****************Time the whole thing for efficiency of IDOM implementation
  492.          // for (int i=0; i< 1000; i++)
  493.          // {
  494.          // AH Revisit  //  startTime = System.currentTimeMillis();
  495.          //     if(!OK)
  496.          //     break;
  497.          IDOM_Document* d = test.createDocument();
  498.          XMLString::transcode("testDocument1", tempStr, 3999);
  499.          IDOM_DocumentType* docDocType = test.createDocumentType(d,tempStr);
  500.          d->appendChild(docDocType);
  501.          XMLString::transcode("ourEntityNode", tempStr, 3999);
  502.          IDOM_Entity* docEntity = test.createEntity( d, tempStr);
  503.          //Build a branch for entityReference tests
  504.          // IDOM_Text* entityChildText = d.createTextNode("entityChildText information"); //
  505.          // docEntity->appendChild(entityChildText);
  506.          // docDocType->getEntities()->setNamedItem(docEntity);
  507.          XMLString::transcode("d", tempStr3, 3999);
  508.          test.docBuilder(d, tempStr3);
  509.          test.findTestNodes((IDOM_Node*)d);
  510.          // Null out the static object references in class IDTest,
  511.          // which will recover their storage.
  512.          IDTest::testElementNode = 0;
  513.          IDTest::testAttributeNode = 0;
  514.          IDTest::testTextNode = 0;
  515.          IDTest::testCDATASectionNode = 0;
  516.          IDTest::testEntityReferenceNode = 0;
  517.          IDTest::testEntityNode = 0;
  518.          IDTest::testProcessingInstructionNode = 0;
  519.          IDTest::testCommentNode = 0;
  520.          IDTest::testDocumentNode = 0;
  521.          IDTest::testDocumentTypeNode = 0;
  522.          IDTest::testDocumentFragmentNode = 0;
  523.          IDTest::testNotationNode = 0;
  524.          delete d;
  525.     };
  526.     XMLPlatformUtils::Terminate();
  527.     printf("Test Run Successfullyn");
  528.     return 0;
  529. };
  530. /**
  531.  * This method tests IDOM_Attr* methods for the XML IDOM implementation
  532.  * @param document org.w3c.dom.IDOM_Document
  533.  *
  534.  */
  535. void IDTest::testAttr(IDOM_Document* document)
  536. {
  537.     IDOM_Node* node;
  538.     IDOM_Attr* attributeNode;
  539.     bool T = true;
  540.     bool F = false;
  541.     bool OK = true;
  542. // For debugging*****   printf("n          testAttr's outputs:nn");
  543.     XMLString::transcode("testAttribute", tempStr, 3999);
  544.     IDOM_Attr* testAttribute = document->createAttribute(tempStr);
  545.     XMLString::transcode("testAttribute's value", tempStr, 3999);
  546.     testAttribute->setValue(tempStr);
  547.     node = document->getDocumentElement(); // node gets first element
  548.     // ((IDOM_Element*)node)->setAttributeNode(testAttribute);
  549.     // attributeNode = ((IDOM_Element*)node)->getAttributeNode("testAttribute");
  550.     IDOM_Element* el = (IDOM_Element*)node;
  551.     el->setAttributeNode(testAttribute);
  552.     XMLString::transcode("testAttribute", tempStr, 3999);
  553.     attributeNode = el->getAttributeNode(tempStr);
  554.     if (XMLString::compareString(tempStr, attributeNode->getName()))
  555.     {
  556.         printf("Warning!!! IDOM_Attr's 'getName' method failed to work properly!n");
  557.         OK = false;
  558.     }
  559.     XMLString::transcode("testAttribute's value", tempStr, 3999);
  560.     if (XMLString::compareString(tempStr, attributeNode->getNodeValue()))
  561.     {
  562.         printf("Warning!!! IDOM_Attr's 'getNodeValue' method failed to work properly!n");
  563.         OK = false;
  564.     }
  565.     if (! T ==attributeNode->getSpecified())
  566.     {
  567.         printf("Warning!!! IDOM_Attr's 'getSpecified' method failed to work properly!n");
  568.         OK = false;
  569.     }
  570.     if (XMLString::compareString(tempStr, attributeNode->getValue()))
  571.     {
  572.         printf("Warning!!! IDOM_Attr's 'getValue' method failed to work properly!n");
  573.         OK = false;
  574.     }
  575.     XMLString::transcode("Reset Value", tempStr, 3999);
  576.     attributeNode->setNodeValue(tempStr);   /// LEAK!!!!!
  577.     if (XMLString::compareString(tempStr, attributeNode->getNodeValue()))
  578.     {
  579.         printf("Warning!!! IDOM_Attr's 'setNodeValue' method failed to work properly!n");
  580.         OK = false;
  581.     }
  582.     attributeNode->setValue(XMLUni::fgZeroLenString);
  583.     if (XMLString::compareString(XMLUni::fgZeroLenString, attributeNode->getValue()))
  584.     {
  585.         printf("Warning!!! IDOM_Attr's 'setValue' to '0' method failed to work properly!n");
  586.         OK = false;
  587.     }
  588.     XMLString::transcode("Another value ", tempStr, 3999);
  589.     attributeNode->setValue(tempStr);
  590.     if (XMLString::compareString(tempStr, attributeNode->getValue()))
  591.     {
  592.         printf("Warning!!! IDOM_Attr's 'setValue' method failed to work properly!");
  593.         OK = false;
  594.     }
  595.     node = attributeNode->cloneNode(T);
  596.     // Check nodes for equality, both their name and value or lack thereof
  597.     bool cloneOK = true;
  598.     if (XMLString::compareString(node->getNodeName(), attributeNode->getNodeName()))
  599.         cloneOK = false;
  600.     if (node->getNodeValue() == 0 &&
  601.         attributeNode->getNodeValue() != 0)
  602.     {
  603.         cloneOK = false;
  604.     }
  605.     if (node->getNodeValue() != 0 && attributeNode->getNodeValue() == 0)
  606.     {
  607.         cloneOK = false;
  608.     };
  609.     if (node->getNodeValue() != 0 && attributeNode->getNodeValue() != 0)
  610.     {
  611.         if (XMLString::compareString(node->getNodeValue(),attributeNode->getNodeValue()))
  612.             cloneOK = false;
  613.     }
  614. /*
  615.     if (! (node->getNodeName(), attributeNode->getNodeName()) &&         // Compares node names for equality
  616.           (node->getNodeValue() != 0 && attributeNode->getNodeValue() != 0)  // Checks to make sure each node has a value node
  617.         ?  node->getNodeValue(), attributeNode->getNodeValue())          // If both have value nodes test those value nodes for equality
  618.         : (node->getNodeValue() == 0 && attributeNode->getNodeValue() == 0)))// If one node doesn't have a value node make sure both don't
  619. */
  620.     if (cloneOK == false)
  621.         {
  622.             printf("'cloneNode' did not clone the Attribute node correctlyn");
  623.             OK = false;
  624.         }
  625.         // Deep clone test comparison is in testNode & testDocument
  626. //************************************************* ERROR TESTS
  627.     IDTest tests;
  628. //!! Throws HIERARCHY_REQUEST_ERR ****************
  629.     //  doc->getDocumentElement()->appendChild(attributeNode);
  630. //!! Throws a NOT_FOUND_ERR ********
  631.     //  attribute2 = doc->createAttribute("testAttribute2");
  632.     //  doc->getDocumentElement()->removeAttributeNode(attribute2);
  633. //!! Throws an INUSE_ATTRIBUTE_ERR ******
  634.     //  IDOM_Element* element = (IDOM_Element*)doc->getLastChild()->getLastChild();
  635.     //  element->setAttributeNode(testAttribute );// Tests setNamedItem which generates error through justSetNamedItem.
  636. // For debugging*****       printf("All IDOM_Attr* method calls worked correctly.n");
  637.     if (! OK)
  638.         printf("n*****The IDOM_Attr* method calls listed above failed, all others worked correctly.*****n");
  639. //  printf("");
  640. };
  641. /**
  642.  * This method tests IDOM_CDATASection* methods for the XML IDOM implementation
  643.  * @param document org.w3c.dom.IDOM_Document
  644.  *
  645.  */
  646. void IDTest::testCDATASection(IDOM_Document* document)
  647. {
  648.     IDOM_Node* node;
  649.     IDOM_Node* node2;
  650.     bool T = true;
  651.     bool OK = true;
  652. // For debugging*****   printf("n          testCDATASection's outputs:n");
  653.     XMLString::transcode("dBodyLevel23", tempStr, 3999);
  654.     node = document->getDocumentElement()->getElementsByTagName(tempStr)->item(0)->getFirstChild(); // node gets IDOM_CDATASection* node
  655.     node2 = node->cloneNode(T);//*****?
  656.     // Check nodes for equality, both their name and value or lack thereof
  657.     if (XMLString::compareString(node->getNodeName(), node2->getNodeName()) &&        // Compares node names for equality
  658.           (node->getNodeValue() != 0 && node2->getNodeValue() != 0)     // Checks to make sure each node has a value node
  659.         ?  !XMLString::compareString(node->getNodeValue(), node2->getNodeValue())         // If both have value nodes test those value nodes for equality
  660.         : (node->getNodeValue() == 0 && node2->getNodeValue() == 0))   // If one node doesn't have a value node make sure both don't
  661.     {
  662.         printf("'cloneNode' did not clone the IDOM_CDATASection* node correctlyn");
  663.         OK = false;
  664.     }
  665.     // Deep clone test comparison is in testNode & testDocument
  666. // For debugging*****   printf("All IDOM_CDATASection* method calls worked correctly.n");
  667.     if (! OK)
  668.         printf("n*****The IDOM_CDATASection* method calls listed above failed, all others worked correctly.*****n");
  669. //  printf("");
  670. };
  671. /**
  672.  * This method tests IDOM_CharacterData methods for the XML IDOM implementation
  673.  * @param document org.w3c.dom.IDOM_Document
  674.  *
  675.  */
  676. void IDTest::testCharacterData(IDOM_Document* document)
  677. {
  678.     IDOM_CharacterData* charData;
  679.     XMLCh resetData[3999];
  680.     bool OK = true;
  681. // For debugging*****   printf("n          testCharacterData's outputs:n");
  682.     XMLString::transcode("dBodyLevel31", tempStr, 3999);
  683.     IDOM_Node*  abc1 = document->getDocumentElement()->getElementsByTagName(tempStr)->item(0)->getFirstChild(); // charData gets textNode11
  684.     charData = (IDOM_CharacterData *) abc1;
  685.     XMLString::transcode("dBodyLevel31'sChildTextNode11", tempStr, 3999);
  686.     if (XMLString::compareString(tempStr, charData->getData()))
  687.     {
  688.         printf("Warning!!! IDOM_CharacterData's 'getData' failed to work properly!n This may corrupt other IDOM_CharacterData tests!!!*****n");
  689.         OK = false;
  690.     }
  691.     XMLString::copyString(resetData,charData->getData());
  692.     //  printf("This node's original data is: " + charData->getData());
  693.     XMLString::copyString(tempStr, charData->getData());
  694.     XMLString::transcode(" This is new data for this node", tempStr2, 3999);
  695.     XMLString::copyString(tempStr, tempStr2);
  696.     charData->appendData(tempStr);
  697.     if (XMLString::compareString(tempStr, charData->getData()))
  698.     {
  699.         printf("Warning!!! IDOM_CharacterData's 'appendData' failed to work properly!n");
  700.         OK = false;
  701.     }
  702.     //  printf("This node's appended data is: " + charData->getData());
  703.     XMLString::transcode("dBodyLevel", tempStr, 3999);
  704.     charData->deleteData(10, 100);
  705.     if (XMLString::compareString(tempStr, charData->getData()))
  706.     {
  707.         printf("Warning!!! IDOM_CharacterData's 'deleteData' failed to work properly!n");
  708.         OK = false;
  709.     }
  710.     //  printf("This node's partially deleted data is: " + charData->getData());
  711.     unsigned int length = 10;
  712.     if (!(length == charData->getLength()))
  713.     {
  714.         printf("Warning!!! IDOM_CharacterData's 'getLength' failed to work properly!n");
  715.         OK = false;
  716.     }
  717.     //  printf("This node's data length is: " + charData->getLength());
  718.     XMLString::transcode("dBody' This is data inserted into this node'Level", tempStr, 3999);
  719.     XMLString::transcode("' This is data inserted into this node'", tempStr2, 3999);
  720.     charData->insertData(5, tempStr2);
  721.     if (XMLString::compareString(tempStr, charData->getData()))
  722.     {
  723.         printf("Warning!!! IDOM_CharacterData's 'insertData' failed to work properly!n");
  724.         OK = false;
  725.     }
  726.     //  printf("This node's updated with insert data is: " + charData->getData());
  727.     XMLString::transcode("dBody' This is ' replacement data'ted into this node'Level", tempStr, 3999);
  728.     XMLString::transcode("' replacement data'", tempStr2, 3999);
  729.     charData->replaceData(15, 10, tempStr2);
  730.     if (XMLString::compareString(tempStr, charData->getData()))
  731.     {
  732.         printf("Warning!!! IDOM_CharacterData's 'replaceData' failed to work properly!n");
  733.         OK = false;
  734.     }
  735.     //  printf("This node's updated with replacement data is: " +charData->getData());
  736.     XMLString::transcode("New data A123456789B123456789C123456789D123456789E123456789", tempStr, 3999);
  737.     charData->setData(tempStr);
  738.     if (XMLString::compareString(tempStr, charData->getData()))
  739.     {
  740.         printf("Warning!!! IDOM_CharacterData's 'setData' failed to work properly!");
  741.         OK = false;
  742.     }
  743.     //  printf("This node's new data via setData: " + charData->getData());
  744.     XMLString::transcode("123456789D123456789E123456789", tempStr, 3999);
  745.     if (XMLString::compareString(tempStr, charData->substringData(30, 30)))
  746.     {
  747.         printf("Warning!!! IDOM_CharacterData's 'substringData' failed to work properly!n");
  748.         OK = false;
  749.     }
  750.     //  printf("Using subString 30,30 you get:");  charData->substringData(30,30)).print();
  751.     XMLString::transcode("New data A123456789B12345", tempStr, 3999);
  752.     if (XMLString::compareString(tempStr, charData->substringData(0, 25)))
  753.     {
  754.         printf("Warning!!! IDOM_CharacterData's 'substringData' failed to work properly!n");
  755.         OK = false;
  756.     }
  757.     //  printf("Using subString 0,25 you get: ");   charData->substringData(0,25)).print();
  758. //************************************************* ERROR TESTS
  759.     IDTest tests;   // What is this for?  'tests' is never used.
  760. //!! Throws INDEX_SIZE_ERR ********************
  761.     EXCEPTIONSTEST(charData->deleteData(-1, 5), IDOM_DOMException::INDEX_SIZE_ERR, OK, 101 );
  762.     // Test 102 is not an error because the -1 parameter is an unsigned value, and counts
  763.     //   that exceed the length of the string are allowed.
  764. //    EXCEPTIONSTEST(charData->deleteData(2, -1), IDOM_DOMException::INDEX_SIZE_ERR, OK, 102 );
  765.     EXCEPTIONSTEST(charData->deleteData(100, 5), IDOM_DOMException::INDEX_SIZE_ERR, OK,103 );
  766. //can't set negative unsigned int in c++ compiler
  767.   //  EXCEPTIONSTEST(charData->insertData(-1, "Stuff inserted"), IDOM_DOMException::INDEX_SIZE_ERR, OK, 104 );
  768.     XMLString::transcode("Stuff inserted", tempStr, 3999);
  769.     EXCEPTIONSTEST(charData->insertData(100, tempStr), IDOM_DOMException::INDEX_SIZE_ERR, OK, 105 );
  770.   //  EXCEPTIONSTEST(charData->replaceData(-1, 5, "Replacement stuff") , IDOM_DOMException::INDEX_SIZE_ERR, OK, 106 );
  771.     XMLString::transcode("Replacement stuff", tempStr, 3999);
  772.     EXCEPTIONSTEST(charData->replaceData(100, 5 ,tempStr), IDOM_DOMException::INDEX_SIZE_ERR, OK, 107 );
  773.   //  EXCEPTIONSTEST(charData->replaceData(2, -1, "Replacement stuff"), IDOM_DOMException::INDEX_SIZE_ERR,  OK, 108 );
  774.     EXCEPTIONSTEST(charData->substringData(-1, 5), IDOM_DOMException::INDEX_SIZE_ERR, OK, 109 );
  775.     EXCEPTIONSTEST(charData->substringData(100, 5), IDOM_DOMException::INDEX_SIZE_ERR, OK, 110 );
  776.  //   EXCEPTIONSTEST(charData->substringData(2, -1), IDOM_DOMException::INDEX_SIZE_ERR, OK, 111 );
  777. // For debugging*****       printf("All IDOM_CharacterData method calls worked correctly.n");
  778.     if (!OK)
  779.         printf("n*****The IDOM_CharacterData method calls listed above failed, all others worked correctly.*****n");
  780.     charData->setData(resetData); // reset node to original data
  781. //  printf(""n);
  782. };
  783. /**
  784.  * This method tests ChildNodeList methods for the XML IDOM implementation
  785.  * @param document org.w3c.dom.IDOM_Document
  786.  *
  787.  */
  788. void IDTest::testChildNodeList(IDOM_Document* document)
  789. {
  790.     IDOM_Node* node;
  791.     IDOM_Node* node2;
  792.     bool OK = true;
  793. // For debugging*****   printf("n          testChildNodeList's outputs:n");
  794.     node = document->getDocumentElement()->getLastChild(); // node gets doc's testBody element
  795.     if (!(node->getChildNodes()->getLength()== 4))
  796.         OK = false;
  797.     node2 = node->getChildNodes()->item(2);
  798.     XMLString::transcode("dBodyLevel23", tempStr, 3999);
  799.     if (XMLString::compareString(tempStr, node2->getNodeName()))
  800.         OK = false;
  801. // For debugging*****       printf("All ChildNodeList method calls worked correctly.n");
  802.     if (!OK)
  803.         printf("n*****The ChildNodeList method calls listed above failed, all others worked correctly.*****n");
  804. //  printf("");
  805. };
  806. /**
  807.  * This method tests IDOM_Comment* methods for the XML IDOM implementation
  808.  * @param document org.w3c.dom.IDOM_Document
  809.  *
  810.  */
  811. void IDTest::testComment(IDOM_Document* document)
  812. {
  813.     IDOM_Node* node;
  814.     IDOM_Node* node2;
  815.     bool T = true;
  816.     bool OK = true;
  817. // For debugging*****   printf("n          testComment's outputs:n");
  818.     XMLString::transcode("dBodyLevel31", tempStr, 3999);
  819.     node = document->getDocumentElement()->getElementsByTagName(tempStr)->item(0)->getFirstChild(); // node gets textNode11
  820.     node2 = node->cloneNode(T);
  821.     // Check nodes for equality, both their name and value or lack thereof
  822.     if (XMLString::compareString(node->getNodeName(),node2->getNodeName()) &&         // Compares node names for equality
  823.           (node->getNodeValue() != 0 && node2->getNodeValue() != 0)     // Checks to make sure each node has a value node
  824.         ?  !XMLString::compareString(node->getNodeValue(),node2->getNodeValue())         // If both have value nodes test those value nodes for equality
  825.         : (node->getNodeValue() == 0 && node2->getNodeValue() == 0))   // If one node doesn't have a value node make sure both don't
  826.         //printf("'cloneNode' did not clone the IDOM_Comment* node correctlyn");
  827.         OK = false;
  828.     // Deep clone test comparison is in testNode & testDocument
  829.     if (OK)
  830. // For debugging*****       printf("All IDOM_Comment* method calls worked correctly.n");
  831.     if (!OK)
  832.         printf("n*****The IDOM_Comment* method calls listed above failed, all others worked correctly.*****n");
  833. //  printf("n");
  834. };
  835. /**
  836.  * This method tests DeepNodeList methods for the XML IDOM implementation
  837.  * @param document org.w3c.dom.IDOM_Document
  838.  *
  839.  */
  840. void IDTest::testDeepNodeList(IDOM_Document* document)
  841. {
  842.     IDOM_Node* node;
  843.     IDOM_Node* node2;
  844.     bool OK = true;
  845. // For debugging*****   printf("n          testDeepNodeList's outputs:nn");
  846.     node = document->getLastChild()->getLastChild(); // node gets docBody element
  847. //  IDOM_Element* el = (IDOM_Element*)node;
  848. //  IDOM_NodeList nl = el->getElementsByTagName("*");
  849. //  int len = nl->getLength();
  850. //  if (len != 8)
  851.     XMLString::transcode("*",tempStr, 3999);
  852.     if (!(8 == ((IDOM_Element*) node)->getElementsByTagName(tempStr)->getLength()))
  853.         {
  854.             printf ("Warning!!! DeepNodeList's 'getLength' failed to work properly!n");
  855.             OK = false;
  856.         }
  857.     node2 = ((IDOM_Element*) node)->getElementsByTagName(tempStr)->item(2); //This also runs through 'nextMatchingElementAfter"
  858.     XMLString::transcode("dBodyLevel32", tempStr, 3999);
  859.     if (XMLString::compareString(tempStr, node2->getNodeName()))
  860.         {
  861.             printf ("Warning!!! DeepNodeList's 'item' (or IDOM_Element's 'getElementsBy TagName)failed to work properly!n");
  862.             OK = false;
  863.         }
  864.     node2 = document->getLastChild();
  865.     XMLString::transcode("dTestBody", tempStr, 3999);
  866.     if (XMLString::compareString(tempStr, ((IDOM_Element*) node2)->getElementsByTagName(tempStr)->item(0)->getNodeName()))//This also runs through 'nextMatchingElementAfter"
  867.         {
  868.             printf ("Warning!!! DeepNodeList's 'item' (or IDOM_Element's 'getElementsBy TagName)failed to work properly!n");
  869.             OK = false;
  870.         }
  871. // For debugging*****       printf("All DeepNodeList method calls worked correctly.n");
  872.     if (!OK)
  873.         printf("n*****The DeepNodeList method calls listed above failed, all others worked correctly.*****n");
  874. //  printf("");
  875. };
  876. /**
  877.  * This method tests IDOM_Document* methods for the XML IDOM implementation
  878.  * @param document org.w3c.dom.IDOM_Document
  879.  *
  880.  *
  881.  **** ALL IDOM_Document* create methods are run in docBuilder except createAttribute which is in testAttribute**
  882.  */
  883. void IDTest::testDocument(IDOM_Document* document)
  884. {
  885.     IDTest make;
  886.     IDOM_DocumentFragment* docFragment, *docFragment2;
  887.     IDOM_Element* newElement;
  888.     IDOM_Node* node, *node2;
  889.     const char* elementNames[] =  {"dFirstElement", "dTestBody", "dBodyLevel21","dBodyLevel31","dBodyLevel32",
  890.                    "dBodyLevel22","dBodyLevel33","dBodyLevel34","dBodyLevel23","dBodyLevel24"};
  891.     const char* newElementNames[] = {"dFirstElement", "dTestBody", "dBodyLevel22","dBodyLevel33","dBodyLevel34","dBodyLevel23"};
  892.     bool result;
  893.     bool OK = true;
  894. // For debugging*****   printf("n          testDocument's outputs:n n");
  895.     XMLString::transcode("testDocument1", tempStr, 3999);
  896.     IDOM_DocumentType* checkDocType =  make.createDocumentType(document,tempStr);
  897.     IDOM_DocumentType* docType = document->getDoctype();
  898.     if (XMLString::compareString(checkDocType->getNodeName(),docType->getNodeName() ))
  899.     {
  900.         printf("Warning!!! IDOM_Document's 'getDocType method failed!n" );
  901.         OK = false;
  902.     }
  903.     if (XMLString::compareString(checkDocType->getNodeValue(), docType->getNodeValue()))
  904.     {
  905.         printf("Warning!!! IDOM_Document's 'getDocType method failed!n" );
  906.         OK = false;
  907.     }
  908.     /*
  909.     if (! (checkDocType->getNodeName(), docType->getNodeName()) &&      // Compares node names for equality
  910.           (checkDocType->getNodeValue() != 0 && docType->getNodeValue() != 0)   // Checks to make sure each node has a value node
  911.         ?  checkDocType->getNodeValue(), docType->getNodeValue())       // If both have value nodes test those value nodes for equality
  912.         : (checkDocType->getNodeValue() == 0 && docType->getNodeValue() == 0))) // If one node doesn't have a value node make sure both don't
  913.     {
  914.         printf("Warning!!! IDOM_Document's 'getDocType method failed!n" );
  915.         OK = false;
  916.     }
  917.     */
  918.     IDOM_Node*  rootElement = document->getLastChild();
  919.     if (XMLString::compareString(rootElement->getNodeName(), document->getDocumentElement()->getNodeName()) &&         // Compares node names for equality
  920.           (rootElement->getNodeValue() != 0 && document->getDocumentElement()->getNodeValue() != 0)   // Checks to make sure each node has a value node
  921.         ?  !XMLString::compareString(rootElement->getNodeValue(), document->getDocumentElement()->getNodeValue())      // If both have value nodes test those value nodes for equality
  922.         : (rootElement->getNodeValue() == 0 && document->getDocumentElement()->getNodeValue() == 0))    // If one node doesn't have a value node make sure both don't
  923.     {
  924.         printf("Warning!!! IDOM_Document's 'getDocumentElement' method failed!n" );
  925.         OK = false;
  926.     }
  927.     XMLString::transcode("*", tempStr, 3999);
  928.     IDOM_NodeList* docElements = document->getElementsByTagName(tempStr);
  929.     int docSize = docElements->getLength();
  930.     int i;
  931.     for (i = 0; i < docSize; i++)
  932.     {
  933.         IDOM_Node*  n = (IDOM_Node*) docElements->item(i);
  934.         if (XMLString::compareString(XMLString::transcode(elementNames[i]), n->getNodeName()))
  935.         {
  936.             printf("Comparison of this document's elements failed at element number %d at line %i n", i, __LINE__);
  937.             OK = false;
  938.             break;
  939.         }
  940.     }
  941.     // What is this supposed to be doing?
  942.     //
  943.     //if (document->equals(document->getImplementation()))
  944.     //{
  945.     //  printf("Warning!!! IDOM_Document's 'getImplementation' method failed!n" );
  946.     //  OK = false;
  947.     //}
  948.     XMLString::transcode("NewElementTestsInsertBefore", tempStr, 3999);
  949.     newElement = document->createElement(tempStr);
  950.     //  doc->insertBefore(newElement,0);//!! Throws a HIERARCHY_REQUEST_ERR   *******
  951.     //  doc->removeChild(docElements->item(9));//!! Throws a NOT_FOUND_ERR  ********
  952.     docFragment = document->createDocumentFragment();
  953.     //Tests removeChild and stores removed branch for tree reconstruction
  954.     docFragment->appendChild(docElements->item(1)->removeChild(docElements->item(9)));
  955.     docFragment2 = document->createDocumentFragment();
  956.     //Tests removeChild and stores removed branch for tree reconstruction
  957.     docFragment2->appendChild(docElements->item(1)->removeChild(docElements->item(2)));
  958.     docSize = docElements->getLength();
  959.     for (i = 0; i < docSize; i++)
  960.     {
  961.         IDOM_Node*  n = (IDOM_Node*) docElements->item(i);
  962.         XMLString::transcode(newElementNames[i], tempStr, 3999);
  963.         if (XMLString::compareString(tempStr, n->getNodeName()))
  964.         {
  965.             printf("Comparison of new document's elements failed at element number %d at line %i n", i, __LINE__);
  966.             OK = false;
  967.             break;
  968.         }
  969.     }
  970.     docElements->item(1)->insertBefore(docFragment, 0); //Reattaches removed branch to restore tree to the original
  971.                                                 // AH Revist.  Note: insertBefore should be able to take
  972.                                                 //   a 0 as its second parameter.
  973.     docElements->item(1)->insertBefore(docFragment2, docElements->item(2)); //Reattaches removed branch to restore tree to the original
  974.     //  printf(docElements->item(2)->getNodeName());
  975.     docSize = docElements->getLength();
  976.     for (i = 0; i < docSize; i++)
  977.     {
  978.         IDOM_Node*  n = (IDOM_Node*) docElements->item(i);
  979.         XMLString::transcode(elementNames[i], tempStr, 3999);
  980.         if (XMLString::compareString(tempStr, n->getNodeName()))
  981.         {
  982.             printf("Comparison of restored document's elements failed at element number %d at line %i n", i, __LINE__);
  983.             OK = false;
  984.             break;
  985.         }
  986.     }
  987.     IDTest tests;
  988. //  IDOM_Document* z = tests.createDocument();
  989. //  tests.docBuilder(z, "z");
  990. //!! Throws WRONG_DOCUMENT_ERR **********
  991. //  EXCEPTIONSTEST(z->appendChild(
  992.     //  z->appendChild(d.createComment("Test doc d comment"));// Tries to append z document with document d comment
  993.     //  d->getDocumentElement()->appendChild(z.createElement("newZdocElement"));// Tries to append d document with document z IDOM_Element
  994.     //  d->getLastChild()->getLastChild()->insertBefore(z.createElement("newZdocElement"),d->getLastChild()->getLastChild()->getFirstChild());// Tries to insert into d document with document z IDOM_Element
  995.     //  d->replaceChild(z.createElement("newZdocElement"),d->getLastChild()->getLastChild()->getFirstChild());  // Tries to replace in d document with document z IDOM_Element
  996.     //  doc->setNodeValue("This shouldn't work");//!! Throws a NO_MODIFICATION_ALLOWED_ERR ********
  997.     node = document;
  998.     node2 = document->cloneNode(true);
  999.     result = treeCompare(node, node2); // Deep clone test comparison of document cloneNode
  1000.     if (!result)
  1001.     {
  1002.         printf("Warning!!! Deep clone of the document failed!n");
  1003.         OK = false;
  1004.     }
  1005.     // Deep clone test comparison is also in testNode
  1006. // For debugging*****       printf("All IDOM_Document* method calls worked correctly.n");
  1007.     if (!OK)
  1008.         printf("n*****The IDOM_Document* method calls listed above failed, all others worked correctly.*****n");
  1009. //  printf("n");
  1010. };
  1011. /**
  1012.  * This method tests IDOM_DocumentFragment* methods for the XML IDOM implementation
  1013.  * @param document org.w3c.dom.IDOM_Document
  1014.  *
  1015.  *
  1016.  *
  1017.  ********This really isn't needed, only exists to throw NO_MODIFICATION_ALLOWED_ERR ********
  1018.  */
  1019. void IDTest::testDocumentFragment(IDOM_Document* document)
  1020. {
  1021.     bool OK = true;
  1022. // For debugging*****   printf("n          testDocumentFragment's outputs:n");
  1023.     IDOM_DocumentFragment* testDocFragment = document->createDocumentFragment();
  1024.     //  testDocFragment->setNodeValue("This is a document fragment!");//!! Throws a NO_MODIFICATION_ALLOWED_ERR ********
  1025. // For debugging*****       printf("All IDOM_DocumentFragment* method calls worked correctly.n");
  1026.     if (!OK)
  1027.         printf("n*****The IDOM_DocumentFragment* method calls listed above failed, all others worked correctly.*****n");
  1028. //  printf("n");
  1029. };
  1030. /**
  1031.  * This method tests IDOM_DocumentType* methods for the XML IDOM implementation
  1032.  * @param document org.w3c.dom.IDOM_Document
  1033.  *
  1034.  */
  1035. void IDTest::testDocumentType(IDOM_Document* document)
  1036. {
  1037.     IDTest test;
  1038.     IDOM_DocumentType* docType, *holdDocType;
  1039.     IDOM_NamedNodeMap* docNotationMap;
  1040.     IDOM_Node* node, *node2;
  1041.     bool OK = true;
  1042. // For debugging*****   printf("n          testDocumentType's outputs:n");
  1043.     XMLString::transcode("TestDocument", tempStr, 3999);
  1044.     IDOM_DocumentType* newDocumentType =  test.createDocumentType(document, tempStr);
  1045.     node = document->getFirstChild(); // node gets doc's docType node
  1046.     node2 = node->cloneNode(true);
  1047.     // Check nodes for equality, both their name and value or lack thereof
  1048.     if (XMLString::compareString(node->getNodeName(), node2->getNodeName()) &&         // Compares node names for equality
  1049.           (node->getNodeValue() != 0 && node2->getNodeValue() != 0)  // Checks to make sure each node has a value node
  1050.         ?  !XMLString::compareString(node->getNodeValue(), node2->getNodeValue())          // If both have value nodes test those value nodes for equality
  1051.         : (node->getNodeValue() == 0 && node2->getNodeValue() == 0))// If one node doesn't have a value node make sure both don't
  1052.     {
  1053.         printf("'cloneNode' did not clone the IDOM_DocumentType* node correctlyn");
  1054.         OK = false;
  1055.     }
  1056.      // Deep clone test comparison is in testNode & testDocument
  1057.     IDOM_Node*   abc9 = document->getFirstChild();
  1058.     docType = (IDOM_DocumentType*) abc9;
  1059.     XMLString::transcode("ourNotationNode", tempStr, 3999);
  1060.     docNotationMap = docType->getNotations();
  1061.     if (XMLString::compareString(tempStr, docNotationMap->item(0)->getNodeName()))
  1062.     {
  1063.         printf("Warning!!! IDOM_DocumentType's 'getNotations' failed!n");
  1064.         OK = false;
  1065.     }
  1066.     //  doc->appendChild(newDocumentTypeImpl);//!! Throws a HIERARCHY_REQUEST_ERR    *******
  1067.     IDOM_Node*  abc10 = document->removeChild(document->getFirstChild()); //Tests removeChild and stores removed branch for tree reconstruction
  1068.     holdDocType = (IDOM_DocumentType*) abc10;
  1069.     document->insertBefore(newDocumentType, document->getDocumentElement());
  1070.     //** Other aspects of insertBefore are tested in docBuilder through appendChild*
  1071.     document->removeChild(document->getFirstChild()); //Removes newDocumentType for tree restoral
  1072.     document->insertBefore(holdDocType, document->getFirstChild()); //Reattaches removed branch to restore tree to the original
  1073. // For debugging*****       printf("All IDOM_DocumentType* method calls worked correctly.n");
  1074.     if (!OK)
  1075.         printf("n*****The IDOM_DocumentType* method calls listed above failed, all others worked correctly.*****n");
  1076. //  printf("");
  1077. };
  1078. /**
  1079.  * @param document org.w3c.dom.IDOM_Document
  1080.  */
  1081. void IDTest::testIDOMerrors(IDOM_Document* document) {
  1082.     bool OK = true;
  1083.     IDTest tests;
  1084.     EXCEPTIONSTEST(document->appendChild(testElementNode), IDOM_DOMException::HIERARCHY_REQUEST_ERR, OK, 201 );
  1085.     EXCEPTIONSTEST(testTextNode->appendChild(testTextNode), IDOM_DOMException::HIERARCHY_REQUEST_ERR, OK, 202 );
  1086. };
  1087. /**
  1088.  * This method tests IDOM_IDOMImplementation methods for the XML IDOM implementation
  1089.  * @param document org.w3c.dom.IDOM_Document
  1090.  *
  1091.  */
  1092. void IDTest::testIDOMImplementation(IDOM_Document* document)
  1093. {
  1094.     IDOM_DOMImplementation* implementation;
  1095.     bool result = false;
  1096.     bool OK = true;
  1097. // For debugging*****   printf("n          testIDOMImplementation's outputs:n");
  1098.     implementation = document->getImplementation(); //Uses getIDOMImplementation to obtain implementation
  1099.     XMLString::transcode("XML", tempStr, 3999);
  1100.     XMLString::transcode("1.0", tempStr2, 3999);
  1101.     result = implementation->hasFeature(tempStr, tempStr2);
  1102.     if(!result)
  1103.     {
  1104.         fprintf(stderr, "Warning!!! IDOM_IDOMImplementation's 'hasFeature' that should be 'true' failed!");
  1105.         OK = false;
  1106.     }
  1107.     XMLString::transcode("HTML", tempStr, 3999);
  1108.     XMLString::transcode("4.0", tempStr2, 3999);
  1109.     result = implementation->hasFeature(tempStr, tempStr2);
  1110.     if(result)
  1111.     {
  1112.         fprintf(stderr, "Warning!!! IDOM_IDOMImplementation's 'hasFeature' that should be 'false' failed!");
  1113.         OK = false;
  1114.     }
  1115. // For debugging*****       printf("All IDOM_IDOMImplementation method calls worked correctly.n");
  1116.     if (!OK)
  1117.         fprintf(stderr, "n*****The IDOM_IDOMImplementation method calls listed above failed, all others worked correctly.*****n");
  1118. //  printf("");
  1119. };
  1120. /**
  1121.  * This method tests IDOM_Element* methods for the XML IDOM implementation
  1122.  * @param document org.w3c.dom.IDOM_Document
  1123.  *
  1124.  */
  1125. void IDTest::testElement(IDOM_Document* document)
  1126. {
  1127.     IDOM_Attr* attributeNode, *newAttributeNode;
  1128.     IDOM_Element* element, *element2;
  1129.     IDOM_Node* node, *node2;
  1130.     const char* attributeCompare[] = {"AnotherFirstElementAttribute", "dFirstElement", "testAttribute"};
  1131.     const char* elementNames[] =  {"dFirstElement", "dTestBody", "dBodyLevel21","dBodyLevel31","dBodyLevel32",
  1132.                    "dBodyLevel22","dBodyLevel33","dBodyLevel34","dBodyLevel23","dBodyLevel24"};
  1133.     const char* textCompare[] = {"dBodyLevel31'sChildTextNode11",
  1134.                                 "dBodyLevel31'sChildTextNode12",
  1135.                                 "dBodyLevel31'sChildTextNode13"};
  1136.     IDOM_NamedNodeMap* nodeMap;
  1137.     bool OK = true;
  1138. // For debugging*****   printf("n          testElement's outputs:n");
  1139.     node = document->getDocumentElement(); // node gets doc's firstElement
  1140.     node2 = node->cloneNode(true);
  1141.     // Check nodes for equality, both their name and value or lack thereof
  1142.     if (XMLString::compareString(node->getNodeName(), node2->getNodeName()) &&         // Compares node names for equality
  1143.          (node->getNodeValue() != 0 && node2->getNodeValue() != 0)  // Checks to make sure each node has a value node
  1144.         ? !XMLString::compareString(node->getNodeValue(), node2->getNodeValue())          // If both have value nodes test those value nodes for equality
  1145.         :(node->getNodeValue() == 0 && node2->getNodeValue() == 0))// If one node doesn't have a value node make sure both don't
  1146.     {
  1147.         fprintf(stderr, "'cloneNode' did not clone the IDOM_Element* node correctly.n");
  1148.         OK = false;
  1149.     }
  1150.     // Deep clone test comparison is in testNode & testDocument
  1151.     element = document->getDocumentElement(); // element gets doc's firstElement
  1152.     XMLString::copyString(tempStr, document->getNodeValue());
  1153.     XMLString::transcode("'s test attribute", tempStr2, 3999);
  1154.     XMLString::catString(tempStr, tempStr2);
  1155.     if (XMLString::compareString(XMLUni::fgZeroLenString, element->getAttribute(tempStr)))
  1156.     {
  1157.         fprintf(stderr, "Warning!!! IDOM_Element's 'getAttribute' failed!n");
  1158.         OK = false;
  1159.     }
  1160.     XMLString::copyString(tempStr, document->getNodeValue());
  1161.     XMLString::transcode("FirstElement", tempStr2, 3999);
  1162.     XMLString::catString(tempStr, tempStr2);
  1163.     attributeNode = element->getAttributeNode(tempStr);
  1164.     if(! (attributeNode == 0))
  1165.     {
  1166.         fprintf(stderr, "Warning!!! IDOM_Element's 'getAttributeNode' failed! It should have returned '0' here!n");
  1167.         OK = false;
  1168.     }
  1169.     XMLString::transcode("AnotherFirstElementAttribute", tempStr, 3999);
  1170.     newAttributeNode = document->createAttribute(tempStr);
  1171.     XMLString::transcode("A new attribute which helps test calls in IDOM_Element", tempStr, 3999);
  1172.     newAttributeNode->setValue(tempStr);
  1173.     // This test is incorrect.  It assumes that there is a defined ordering of the entries
  1174.     //  in a nodeMap, but there is no ordering required.
  1175. #ifdef TheFollowingCheckIsInvalid
  1176.     element->setAttributeNode(newAttributeNode);
  1177.     nodeMap = element->getAttributes();
  1178.     int size = nodeMap->getLength();
  1179.     int k;
  1180.     for (k = 0; k < size; k++)
  1181.     {
  1182.         IDOM_Node*  n = (IDOM_Node) nodeMap->item(k);
  1183.         XMLString::transcode(attributeCompare[k], tempStr, 3999);
  1184.         if (XMLString::compareString(tempStr, n->getNodeName())))
  1185.         {
  1186.             printf("Warning!!! Comparison of firstElement's attributes failed at line %i.n", __LINE__);
  1187.             printf("   This failure can be a result of IDOM_Element's 'setValue' and/or 'setAttributeNode' and/or 'getAttributes' failing.n");
  1188.             OK = false;
  1189.             break;
  1190.         }
  1191.     //  printf("firstElement's attribute number " + k + " : " + n->getNodeName());
  1192.     }
  1193. #endif
  1194.     nodeMap = element->getAttributes();
  1195.     int size = nodeMap->getLength();
  1196.     if (size != 2)
  1197.     {
  1198.         printf("IDOM_Element* Tests Failure 001n");
  1199.         OK = false;
  1200.     };
  1201.     element->setAttributeNode(newAttributeNode);
  1202.     size = nodeMap->getLength();
  1203.     if (size != 3)
  1204.     {
  1205.         printf("IDOM_Element* Tests Failure 002n");
  1206.         OK = false;
  1207.     };
  1208.     // Fetch the newly added attribute node back out of from the named node map,
  1209.     //  and check that we are returned the same node that we put in->
  1210.     XMLString::transcode("AnotherFirstElementAttribute", tempStr, 3999);
  1211.     IDOM_Node*  abc12 = nodeMap->getNamedItem(tempStr);
  1212.     IDOM_Attr* fetchedAttr = (IDOM_Attr*) abc12;
  1213.     if (fetchedAttr != newAttributeNode)
  1214.     {
  1215.         printf("IDOM_Element* Tests Failure 003n");
  1216.         OK = false;
  1217.     };
  1218.     // Fetch the newly added attribute back out directly from the element itself.
  1219.     XMLString::transcode("AnotherFirstElementAttribute", tempStr, 3999);
  1220.     fetchedAttr = element->getAttributeNode(tempStr);
  1221.     if (fetchedAttr != newAttributeNode)
  1222.     {
  1223.         printf("IDOM_Element* Tests Failure 004n");
  1224.         OK = false;
  1225.     };
  1226.     XMLString::transcode("*",tempStr, 3999);
  1227.     IDOM_NodeList* docElements = document->getElementsByTagName(tempStr);
  1228.     int docSize = docElements->getLength();
  1229.     int i;
  1230.     for (i = 0; i < docSize; i++)
  1231.     {
  1232.         IDOM_Node*  n = docElements->item(i);
  1233.         XMLString::transcode(elementNames[i], tempStr, 3999);
  1234.         if (XMLString::compareString(tempStr, n->getNodeName()))
  1235.         {
  1236.             printf("Warning!!! Comparison of IDOM_Element's 'getElementsByTagName' "
  1237.                             "and/or 'item' failed at element number %d at line %i n", i, __LINE__ );
  1238.             printf("n");
  1239.             OK = false;
  1240.             break;
  1241.         }
  1242.     //  printf("docElement's number " + i + " is: " + n->getNodeName());
  1243.     }
  1244.     XMLString::transcode("dBodyLevel21", tempStr, 3999);
  1245.     IDOM_Node*  abc15 = document->getElementsByTagName(tempStr)->item(0); // element gets IDOM_Element* test BodyLevel21
  1246.     element = (IDOM_Element*) abc15;
  1247.     XMLString::transcode("dBodyLevel31", tempStr, 3999);
  1248.     IDOM_Node*  abc16 = document->getElementsByTagName(tempStr)->item(0); // element2 gets IDOM_Element* test BodyLevel31
  1249.     element2 = (IDOM_Element*) abc16;
  1250.     IDOM_NodeList* text = ((IDOM_Node*  &) element2)->getChildNodes();
  1251.     int textSize = text->getLength();
  1252.     int j;
  1253.     static bool firstTime = true;
  1254.     if (firstTime)
  1255.     {
  1256.         firstTime = false;      // Temporary fix.  Subsequent tests alter the doc, causing
  1257.                                 //   this test to fail on all but the first time through.
  1258.         for (j = 0; j < textSize; j++)
  1259.         {
  1260.             IDOM_Node*  n = text->item(j);
  1261.             XMLString::transcode(textCompare[j], tempStr, 3999);
  1262.             if (XMLString::compareString(tempStr, n->getNodeValue()))
  1263.             {
  1264.                 printf("Warning!!! Comparison of original text nodes via IDOM_Node*  'getChildNodes' & IDOM_NodeList 'item'n"
  1265.                     "     failed at text node: #%d at line %i n     ", j, __LINE__ );
  1266.                 OK = false;
  1267.                 break;
  1268.             }
  1269.             //  printf("IDOM_Element* testBodyLevel31's child text node " + j + " is: " + n->getNodeValue());
  1270.         }
  1271.     }
  1272.     element = document->getDocumentElement(); // element gets doc's firstElement
  1273.     element->normalize();        // Concatenates all adjacent text nodes in this element's subtree
  1274.     IDOM_NodeList* text2 = ((IDOM_Node*) element2)->getChildNodes();
  1275.     XMLString::transcode("dBodyLevel31'sChildTextNode11dBodyLevel31'sChildTextNode12dBodyLevel31'sChildTextNode13", tempStr, 3999);
  1276.     IDOM_Node*  n = text2->item(0);
  1277.     if (XMLString::compareString(tempStr, n->getNodeValue()))
  1278.     {
  1279.         printf("Warning!!! Comparison of concatenated text nodes created by IDOM_Element's 'normalize' failed!n");
  1280.         OK = false;
  1281.     }
  1282.     XMLString::transcode("FirstElementLastAttribute", tempStr, 3999);
  1283.     XMLString::transcode("More attribute stuff for firstElement!!", tempStr2, 3999);
  1284.     element->setAttribute(tempStr, tempStr2);
  1285.     XMLString::transcode("FirstElementLastAttribute", tempStr, 3999);
  1286.     element->removeAttribute(tempStr);
  1287.     element->removeAttributeNode(newAttributeNode);
  1288.     //  doc->getLastChild()->setNodeValue("This shouldn't work");//!! Throws a NO_MODIFICATION_ALLOWED_ERR***
  1289. // For debugging*****       printf("All IDOM_Element* method calls worked correctly.n");
  1290.     if (!OK)
  1291.         printf("n*****The IDOM_Element* method calls listed above failed, all others worked correctly.*****n");
  1292. //  printf("");
  1293. };
  1294. /**
  1295.  * This method tests IDOM_Entity* methods for the XML IDOM implementation
  1296.  * @param document org.w3c.dom.IDOM_Document
  1297.  *
  1298.  */
  1299. void IDTest::testEntity(IDOM_Document* document)
  1300. {
  1301.     IDOM_Entity* entity;
  1302.     IDOM_Node* node, *node2;
  1303.     bool OK = true;
  1304. // For debugging*****   printf("n          testEntity's outputs:nn");
  1305.     XMLString::transcode("ourEntityNode", tempStr, 3999);
  1306.     IDOM_Node*  abc20 = document->getDoctype()->getEntities()->getNamedItem(tempStr);
  1307.     entity = (IDOM_Entity*) abc20;
  1308.     node = entity;
  1309.     node2 = entity->cloneNode(true);
  1310.     // Check nodes for equality, both their name and value or lack thereof
  1311.     if (XMLString::compareString(node->getNodeName(), node2->getNodeName()) &&         // Compares node names for equality
  1312.             ((node->getNodeValue() != 0 && node2->getNodeValue() != 0) ?    // Checks to make sure each node has a value node
  1313.                !XMLString::compareString(node->getNodeValue(), node2->getNodeValue()) :       // If both have value nodes test those value nodes for equality
  1314.                (node->getNodeValue() == 0 && node2->getNodeValue() == 0))) // If one node doesn't have a value node make sure both don't
  1315.     {
  1316.         printf("Warning!!! 'cloneNode' did not clone the IDOM_Entity* node correctly");
  1317.         OK = false;
  1318.     }
  1319.     // Deep clone test comparison is in testNode & testDocument
  1320. // For debugging*****       printf("All IDOM_Entity* method calls worked correctly.n");
  1321.     if (!OK)
  1322.         printf("n*****The IDOM_Entity* method calls listed above failed, all others worked correctly.*****n");
  1323. //  printf("");
  1324. };
  1325. /**
  1326.  * This method tests IDOM_EntityReference* methods for the XML IDOM implementation
  1327.  * @param document org.w3c.dom.IDOM_Document
  1328.  *
  1329.  */
  1330. void IDTest::testEntityReference(IDOM_Document* document)
  1331. {
  1332.     IDOM_EntityReference* entityReference;
  1333.     IDOM_Node* node, *node2;
  1334.     bool OK = true;
  1335. // For debugging*****   printf("n          testEntityReference's outputs:n");
  1336.     IDOM_Node*  abc30 = document->getLastChild()->getLastChild()->getLastChild()->getFirstChild();
  1337.     entityReference = (IDOM_EntityReference*) abc30;
  1338.     node = entityReference;
  1339.     node2 = node->cloneNode(true);
  1340.     // Check nodes for equality, both their name and value or lack thereof
  1341.     if (XMLString::compareString(node->getNodeName(), node2->getNodeName()) &&         // Compares node names for equality
  1342.          (node->getNodeValue() != 0 && node2->getNodeValue() != 0)  // Checks to make sure each node has a value node
  1343.         ? !XMLString::compareString(node->getNodeValue(), node2->getNodeValue())          // If both have value nodes test those value nodes for equality
  1344.         :(node->getNodeValue() == 0 && node2->getNodeValue() == 0))// If one node doesn't have a value node make sure both don't
  1345.     {
  1346.         printf("'cloneNode' did not clone the IDOM_EntityReference* node correctlyn");
  1347.         OK = false;
  1348.     }
  1349.     // Deep clone test comparison is in testNode & testDocument
  1350.     //  entityReference->setNodeValue("This shouldn't work");//!! Throws a NO_MODIFICATION_ALLOWED_ERR ********
  1351. // For debugging*****       printf("All IDOM_EntityReference* method calls worked correctly.n");
  1352.     if (!OK)
  1353.         printf("n*****The IDOM_EntityReference* method calls listed above failed, all others worked correctly.*****n");
  1354. //  printf("n");
  1355. };
  1356. /**
  1357.  * This method tests IDOM_Node*  methods for the XML IDOM implementation
  1358.  * @param document org.w3c.dom.IDOM_Document
  1359.  *
  1360.  *
  1361.  *
  1362.  ********* This is only for a test of cloneNode "deep"*******
  1363.  ********* And for error tests*********
  1364.  */
  1365. void IDTest::testNode(IDOM_Document* document)
  1366. {
  1367.     IDOM_Node* node, *node2;
  1368.     bool result;
  1369.     bool OK = true;
  1370. // For debugging*****   printf("n          testNode's outputs:n");
  1371.     node = document->getDocumentElement();
  1372.     node2 = node->cloneNode(true);
  1373.     result = treeCompare(node, node2); // Deep clone test of cloneNode
  1374.     if (result)
  1375.     {
  1376.         //printf("'cloneNode' successfully cloned this whole node tree (deep)!n");
  1377.     }
  1378.     else
  1379.     {
  1380.         printf("'cloneNode' did not successfully clone this whole node tree (deep)!n");
  1381.         OK = false;
  1382.     }
  1383.     //!! The following gives a did not clone successfully message*********
  1384.     node = document->getDocumentElement();
  1385.     node2 = node->getFirstChild();
  1386.     result = treeCompare(node, node2);
  1387.     if (!result)
  1388.     {
  1389.         //printf("'cloneNode' did not successfully clone this whole node tree (deep)!n");
  1390.     }
  1391.     else
  1392.     {
  1393.         printf("'cloneNode' was supposed to fail here, either it or 'treeCompare' failed!!!n");
  1394.         OK = false;
  1395.     }
  1396.     // Deep clone test also in testDocument
  1397. // For debugging*****       printf("All IDOM_Node*  method calls worked correctly.n");
  1398.     if (!OK)
  1399.         printf("n*****The IDOM_Node*  method calls listed above failed, all others worked correctly.*****n");
  1400. //  printf("n");
  1401. };
  1402. /**
  1403.  * This method tests IDOM_Notation* methods for the XML IDOM implementation
  1404.  * @param document org.w3c.dom.IDOM_Document
  1405.  *
  1406.  */
  1407. void IDTest::testNotation(IDOM_Document* document)
  1408. {
  1409.     IDOM_Node* node, *node2;
  1410.     IDOM_Notation* notation;
  1411.     bool OK = true;
  1412. // For debugging*****   printf("n          testNotation's outputs:n");
  1413.     XMLString::transcode("ourNotationNode", tempStr, 3999);
  1414. IDOM_Node*  abc40 = document->getDoctype()->getNotations()->getNamedItem(tempStr);
  1415.     notation = (IDOM_Notation*) abc40;
  1416.     node = notation;
  1417.     node2 = notation->cloneNode(true);//*****?
  1418.     // Check nodes for equality, both their name and value or lack thereof
  1419.     if (XMLString::compareString(node->getNodeName(), node2->getNodeName()) &&         // Compares node names for equality
  1420.          (node->getNodeValue() != 0 && node2->getNodeValue() != 0)  // Checks to make sure each node has a value node
  1421.         ? !XMLString::compareString(node->getNodeValue(), node2->getNodeValue())          // If both have value nodes test those value nodes for equality
  1422.         :(node->getNodeValue() == 0 && node2->getNodeValue() == 0))// If one node doesn't have a value node make sure both don't
  1423.     {
  1424.         printf("'cloneNode' did not clone the IDOM_Notation* node correctly");
  1425.         OK = false;
  1426.     }
  1427.     // Deep clone test comparison is in testNode & testDocument
  1428.     //  notation->setNodeValue("This shouldn't work");//!! Throws a NO_MODIFICATION_ALLOWED_ERR ********
  1429. // For debugging*****       printf("All IDOM_Notation* method calls worked correctly.n");
  1430.     if (!OK)
  1431.         printf("n*****The IDOM_Notation* method calls listed above failed, all others worked correctly.*****n");
  1432. //  printf("");
  1433. };
  1434. /**
  1435.  * This method tests IDOM_ProcessingInstruction* methods for the XML IDOM implementation
  1436.  * @param document org.w3c.dom.IDOM_Document
  1437.  *
  1438.  */
  1439. void IDTest::testPI(IDOM_Document* document)
  1440. {
  1441.     IDOM_ProcessingInstruction* pI, *pI2;
  1442.     bool OK = true;
  1443. // For debugging*****   printf("n          testPI's outputs:n");
  1444. IDOM_Node*   abc50 = document->getDocumentElement()->getFirstChild();// Get doc's IDOM_ProcessingInstruction
  1445.     pI  = (IDOM_ProcessingInstruction*) abc50;
  1446. IDOM_Node*   abc51 = pI->cloneNode(true);//*****?
  1447.     pI2 = (IDOM_ProcessingInstruction*) abc51;
  1448.     // Check nodes for equality, both their name and value or lack thereof
  1449.     if (XMLString::compareString(pI->getNodeName(), pI2->getNodeName()) &&         // Compares node names for equality
  1450.          (pI->getNodeValue() != 0 && pI2->getNodeValue() != 0)  // Checks to make sure each node has a value node
  1451.         ? !XMLString::compareString(pI->getNodeValue(), pI2->getNodeValue())      // If both have value nodes test those value nodes for equality
  1452.         :(pI->getNodeValue() == 0 && pI2->getNodeValue() == 0))// If one node doesn't have a value node make sure both don't
  1453.     {
  1454.         printf("'cloneNode' did not clone the IDOM_Entity* node correctlyn");
  1455.         OK = false;
  1456.     }
  1457.     // Deep clone test comparison is in testNode & testDocument
  1458.     // compare = "This is [#document: 0]'s processing instruction";  // AH Revisit.  Where id
  1459.     //                  this ": 0]" stuff come from in the Java version??  I don' think that it is right.
  1460.     XMLString::transcode("This is #document's processing instruction", tempStr, 3999);
  1461.     if (XMLString::compareString(tempStr, pI->getData()))
  1462.     {
  1463.         printf("Warning!!! PI's 'getData' failed!n");
  1464.         OK = false;
  1465.     }
  1466.     XMLString::transcode("PI's reset data", tempStr, 3999);
  1467.     pI->setData(tempStr);
  1468.     if (XMLString::compareString(tempStr, pI->getData()))
  1469.     {
  1470.         printf("Warning!!! PI's 'setData' failed!n");
  1471.         OK = false;
  1472.     }
  1473.     XMLString::transcode("dTargetProcessorChannel", tempStr, 3999);
  1474.     if (XMLString::compareString(tempStr, pI->getTarget()))
  1475.     {
  1476.         printf("Warning!!! PI's 'getTarget' failed!n");
  1477.         OK = false;
  1478.     }
  1479.     // Restore original PI data.
  1480.     XMLString::transcode("This is #document's processing instruction", tempStr, 3999);
  1481.     pI->setData(tempStr);
  1482. // For debugging*****       printf("All PI method calls worked correctly.n");
  1483.     if (!OK)
  1484.         printf("n*****The PI method calls listed above failed, all others worked correctly.*****n");
  1485. //  printf("n");
  1486. };
  1487. /**
  1488.  * This method tests IDOM_Text* methods for the XML IDOM implementation
  1489.  * @param document org.w3c.dom.IDOM_Document
  1490.  *
  1491.  */
  1492. void IDTest::testText(IDOM_Document* document)
  1493. {
  1494.     IDOM_Node* node, *node2;
  1495.     IDOM_Text* text;
  1496.     bool OK = true;
  1497. // For debugging*****   printf("n          testText's outputs:n");
  1498.     XMLString::transcode("dBodyLevel31", tempStr, 3999);
  1499.     IDOM_Node*  abc70 = document->getDocumentElement()->getElementsByTagName(tempStr)->item(0);
  1500.     IDOM_Element* elem = (IDOM_Element*) abc70;
  1501.     node = elem->getFirstChild(); // charData gets textNode11
  1502.     text = (IDOM_Text*) node;
  1503.     node2 = node->cloneNode(true);//*****?
  1504.     // Check nodes for equality, both their name and value or lack thereof
  1505.     if (XMLString::compareString(node->getNodeName(), node2->getNodeName()) &&         // Compares node names for equality
  1506.          (node->getNodeValue() != 0 && node2->getNodeValue() != 0)  // Checks to make sure each node has a value node
  1507.         ? !XMLString::compareString(node->getNodeValue(), node2->getNodeValue())          // If both have value nodes test those value nodes for equality
  1508.         :(node->getNodeValue() == 0 && node2->getNodeValue() == 0))// If one node doesn't have a value node make sure both don't
  1509.     {
  1510.         printf("'cloneNode' did not clone the IDOM_Text* node correctlyn");
  1511.         OK = false;
  1512.     }
  1513.     // Deep clone test comparison is in testNode & testDocument
  1514.     text->splitText(25);
  1515.     // Three original text nodes were concatenated by 'normalize' in testElement
  1516.     XMLString::transcode("dBodyLevel31'sChildTextNo", tempStr, 3999);
  1517.     if (XMLString::compareString(tempStr, text->getNodeValue()))
  1518.         {
  1519.             printf("First part of IDOM_Text's split text failed!n" );
  1520.             OK = false;
  1521.         }
  1522.     // Three original text nodes were concatenated by 'normalize' in testElement
  1523.     XMLString::transcode("de11dBodyLevel31'sChildTextNode12dBodyLevel31'sChildTextNode13", tempStr, 3999);
  1524.     if (XMLString::compareString(tempStr, text->getNextSibling()->getNodeValue()))
  1525.         {
  1526.             printf("The second part of IDOM_Text's split text failed!n") ;
  1527.             OK = false;
  1528.         }
  1529.     // Re-normalize the text nodes under elem, so that this test can be rerun->
  1530.     elem->normalize();
  1531. //************************************************* ERROR TESTS
  1532.     IDTest tests;
  1533.     //!! Throws INDEX_SIZE_ERR ********************
  1534.     //  text.splitText(-1);
  1535.     //  text.splitText(100);
  1536. // For debugging*****       printf("All IDOM_Text* method calls worked correctly.n");
  1537.     if (!OK)
  1538.         printf("n*****The IDOM_Text* method calls listed above failed, all others worked correctly.*****n");
  1539. //  printf("n");
  1540. };
  1541. /**
  1542.  *
  1543.  * @param node org.w3c.dom.IDOM_Node
  1544.  * @param node2 org.w3c.dom.IDOM_Node
  1545.  *
  1546.  */
  1547. bool IDTest::treeCompare(IDOM_Node* node, IDOM_Node* node2)
  1548. {
  1549.     bool answer = true;
  1550.     IDOM_Node*  kid, *kid2;         // Check the subtree for equality
  1551.     kid = node->getFirstChild();
  1552.     kid2 = node2->getFirstChild();
  1553.     if (!kid && !kid2)
  1554.     {
  1555.         answer = treeCompare(kid, kid2);
  1556.         if (!answer)
  1557.             return answer;
  1558.         else
  1559.             if (!kid->getNextSibling() && !kid2->getNextSibling())
  1560.             {
  1561.                 while (!kid->getNextSibling() && !kid2->getNextSibling())
  1562.                 {
  1563.                     answer = treeCompare(kid->getNextSibling(), kid2->getNextSibling());
  1564.                     if (!answer)
  1565.                         return answer;
  1566.                     else
  1567.                     {
  1568.                         kid = kid->getNextSibling();
  1569.                         kid2 = kid2->getNextSibling();
  1570.                     }
  1571.                 }
  1572.             } else
  1573.                 if (!(kid->getNextSibling() && kid2->getNextSibling()))
  1574.                 {
  1575.                     return false;
  1576.                 }
  1577.     } else
  1578.         if (kid != kid2)
  1579.         {
  1580.             // One or the other of (kid1, kid2) is 0, but not both.
  1581.             return false;
  1582.         }
  1583.     if (XMLString::compareString(node->getNodeName(), node2->getNodeName()))
  1584.         return false;
  1585.     if (node->getNodeValue()==0 && node2->getNodeValue()!=0)
  1586.         return false;
  1587.     if (node->getNodeValue()!=0 && node2->getNodeValue()==0)
  1588.         return false;
  1589.     if (XMLString::compareString(node->getNodeValue(), node2->getNodeValue()))
  1590.         return false;
  1591.     return answer;
  1592. };