traversal.cpp

来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 603 行 · 第 1/2 页

CPP
603
字号
            unsigned long       whatToShow = DOMNodeFilter::SHOW_ALL;            MyFilter* filter = new MyFilter(0);            DOMNodeIterator*  iter = ((DOMDocumentTraversal*)doc)->createNodeIterator(root, whatToShow,  filter, true);            TASSERT(iter->getWhatToShow() == 65535);            TASSERT(iter->getExpandEntityReferences() == 1);            DOMNode*  nd;            nd = iter->nextNode();            TASSERT (nd ==root);            nd = iter->nextNode();            TASSERT (nd ==E11);            nd = iter->nextNode();            TASSERT(nd == textNode1);            nd = iter->nextNode();            TASSERT(nd == E111);            nd = iter->nextNode();            TASSERT(nd == E112);            nd = iter->nextNode();            TASSERT(nd == cdataSec);            nd = iter->nextNode();            TASSERT(nd == E12);            nd = iter->nextNode();            TASSERT(nd == textNode2);            nd = iter->nextNode();            TASSERT(nd == E121);            nd = iter->nextNode();            TASSERT(nd == E122);            nd = iter->nextNode();            TASSERT(nd == E13);            nd = iter->nextNode();            TASSERT(nd == E131);            nd = iter->nextNode();            TASSERT(nd == docPI);            nd = iter->nextNode();            TASSERT(nd == comment);            nd = iter->previousNode();            TASSERT(nd == comment);            nd = iter->previousNode();            TASSERT(nd == docPI);            nd = iter->previousNode();            TASSERT(nd == E131);            //test getRoot            TASSERT(iter->getRoot() == root);            TASSERT(iter->getRoot() != doc);            delete filter;        }        {            //element node iterating test            DOMNode*    node = doc->getFirstChild();            unsigned long       whatToShow = DOMNodeFilter::SHOW_ELEMENT;            MyFilter* filter = new MyFilter(DOMNode::ELEMENT_NODE);            DOMNodeIterator*  iter = doc->createNodeIterator(root, whatToShow,  filter, true);            TASSERT(iter->getWhatToShow() == 1);            TASSERT(iter->getExpandEntityReferences() == 1);            DOMNode*  nd;            nd = iter->nextNode();            TASSERT (nd ==root);            nd = iter->nextNode();            TASSERT (nd ==E11);            nd = iter->nextNode();            TASSERT(nd == E111);            nd = iter->nextNode();            TASSERT(nd == E112);            nd = iter->nextNode();            TASSERT(nd == E12);            nd = iter->nextNode();            TASSERT(nd == E121);            nd = iter->nextNode();            TASSERT(nd == E122);            nd = iter->nextNode();            TASSERT(nd == E13);            nd = iter->nextNode();            TASSERT(nd == E131);            nd = iter->previousNode();            TASSERT(nd == E131);            nd = iter->previousNode();            TASSERT(nd == E13);            nd = iter->previousNode();            TASSERT(nd == E122);            delete filter;        }        {            // Text node iterating test            DOMNode*    node = doc->getFirstChild();            unsigned long       whatToShow = DOMNodeFilter::SHOW_TEXT;            MyFilter* filter = new MyFilter(DOMNode::TEXT_NODE);            DOMNodeIterator*  iter = ((DOMDocumentTraversal*)doc)->createNodeIterator(root, whatToShow,  filter, true);            TASSERT(iter->getWhatToShow() == 4);            TASSERT(iter->getExpandEntityReferences() == 1);            DOMNode*  nd;            nd = iter->nextNode();            TASSERT (nd ==textNode1);            nd = iter->nextNode();            TASSERT (nd ==textNode2);            nd = iter->previousNode();            TASSERT(nd == textNode2);            delete filter;        }        {            //CDataSection node itearating test            DOMNode*    node = doc->getFirstChild();            unsigned long       whatToShow = DOMNodeFilter::SHOW_CDATA_SECTION;            MyFilter* filter = new MyFilter(DOMNode::CDATA_SECTION_NODE);            DOMNodeIterator*  iter = doc->createNodeIterator(root, whatToShow,  filter, true);            TASSERT(iter->getWhatToShow() == 8);            TASSERT(iter->getExpandEntityReferences() == 1);            DOMNode*  nd;            nd = iter->nextNode();            TASSERT(nd == cdataSec);            nd = iter->nextNode();            TASSERT(nd == 0);            delete filter;        }        {            // PI nodes iterating test            DOMNode*    node = doc->getFirstChild();            unsigned long       whatToShow = DOMNodeFilter::SHOW_PROCESSING_INSTRUCTION;            MyFilter* filter = new MyFilter(DOMNode::PROCESSING_INSTRUCTION_NODE);            DOMNodeIterator*  iter = ((DOMDocumentTraversal*)doc)->createNodeIterator(root, whatToShow,  filter, true);            TASSERT(iter->getWhatToShow() == 64);            TASSERT(iter->getExpandEntityReferences() == 1);            DOMNode*  nd;            nd = iter->nextNode();            TASSERT(nd == docPI);            nd = iter->nextNode();            TASSERT(nd == 0);            delete filter;        }        {            DOMNode*    node = doc->getFirstChild();            unsigned long       whatToShow = DOMNodeFilter::SHOW_COMMENT;            MyFilter* filter = new MyFilter(DOMNode::COMMENT_NODE);            DOMNodeIterator*  iter = doc->createNodeIterator(root, whatToShow,  filter, true);            TASSERT(iter->getWhatToShow() == 128);            TASSERT(iter->getExpandEntityReferences() == 1);            DOMNode*  nd;            nd = iter->nextNode();            TASSERT(nd == comment);            nd = iter->nextNode();            TASSERT(nd == 0);            delete filter;        }        ////////// TreeWalker Test Cases ////////////////        {            unsigned long whatToShow = DOMNodeFilter::SHOW_ALL;            DOMTreeWalker* tw = ((DOMDocumentTraversal*)doc)->createTreeWalker(doc, whatToShow, 0, true);            TASSERT(tw->getCurrentNode() == doc);            TASSERT(tw->firstChild() == root);            TASSERT(tw->nextSibling() == 0);            TASSERT(tw->lastChild() == comment);            TASSERT(tw->firstChild() == 0);            TASSERT(tw->lastChild() == 0);            TASSERT(tw->nextSibling() == 0);            TASSERT(tw->nextNode() == 0);            TASSERT(tw->previousSibling() == E13);            TASSERT(tw->previousNode() == E122);            TASSERT(tw->parentNode() == E12);            TASSERT(tw->firstChild() == textNode2);            TASSERT(tw->previousSibling() == 0);            TASSERT(tw->nextSibling() == E121);            TASSERT(tw->nextNode() == E122);            TASSERT(tw->parentNode() == E12);            TASSERT(tw->previousSibling() == E11);            TASSERT(tw->previousNode() == root);            TASSERT(tw->previousNode() == doc);            TASSERT(tw->previousNode() == 0);            TASSERT(tw->parentNode() == 0);            TASSERT(tw->getCurrentNode() == doc);        }        {            MyFilter mf(DOMNode::ELEMENT_NODE);            unsigned long whatToShow = DOMNodeFilter::SHOW_ALL;            DOMTreeWalker* tw = doc->createTreeWalker(root, whatToShow, &mf, true);            TASSERT(tw->getCurrentNode() == root);            TASSERT(tw->parentNode() == 0);  //should not change currentNode            TASSERT(tw->getCurrentNode() == root);            TASSERT(tw->nextNode() == E11);            TASSERT(tw->nextNode() == E111);            tw->setCurrentNode(E12);            //when first is not visible, should it go to its sibling?            TASSERT(tw->firstChild() == E121);   //first visible child            TASSERT(tw->previousSibling() == 0);        }        {            MyFilter mf(DOMNode::ELEMENT_NODE, true);            unsigned long whatToShow = DOMNodeFilter::SHOW_ELEMENT;            DOMTreeWalker* tw = ((DOMDocumentTraversal*)doc)->createTreeWalker(root, whatToShow, &mf, true);            tw->setCurrentNode(E12);            TASSERT(tw->firstChild() == E121);   //still first visible child        }        {            MyFilter mf(DOMNode::TEXT_NODE);            unsigned long whatToShow = DOMNodeFilter::SHOW_TEXT;            DOMTreeWalker* tw = doc->createTreeWalker(root, whatToShow, &mf, true);            //when first is not visible, should it go to its descendent?            TASSERT(tw->firstChild() == textNode1);   //E11 skipped            TASSERT(tw->firstChild() == 0);            TASSERT(tw->nextNode() == textNode2);            TASSERT(tw->nextSibling() == 0);            TASSERT(tw->parentNode() == 0);  //no visible ancestor            TASSERT(tw->getCurrentNode() == textNode2);            tw->setCurrentNode(root);            //when last is not visible, should it go to its sibling & descendent?            TASSERT(tw->lastChild() == textNode2);   //last visible child            tw->setCurrentNode(E12);            //when next sibling is not visible, should it go to its descendent?            TASSERT(tw->nextSibling() == 0);        }        {            MyFilter mf(DOMNode::TEXT_NODE, true);            unsigned long whatToShow = DOMNodeFilter::SHOW_TEXT;            DOMTreeWalker* tw = ((DOMDocumentTraversal*)doc)->createTreeWalker(root, whatToShow, &mf, true);            TASSERT(tw->firstChild() == 0);   //E11 rejected and no children is TEXT            TASSERT(tw->getCurrentNode() == root);            TASSERT(tw->nextNode() == 0);    //E11 rejected so can't get to textNode1            //test getRoot            TASSERT(tw->getRoot() == root);            TASSERT(tw->getRoot() != doc);        }        doc->release();    };    // And call the termination method    XMLPlatformUtils::Terminate();    if (errorOccurred) {        printf("Test Failed\n");        return 4;    }    printf("Test Run Successfully\n");    return 0;};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?