rangetest.cpp

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

CPP
966
字号
            range->selectNode(rt->getFirstChild());            TASSERT(range->getStartContainer() == rt);            TASSERT(range->getEndContainer() == rt);            TASSERT(range->getStartOffset() == 0);            TASSERT(range->getEndOffset() == 1);            //Testing toString()            const XMLCh* str = aRange->toString();            TASSERT(!XMLString::compareString(str, xeplacedTextInsertedTexttle));            //start and end before and after tests            range->setStartBefore(rt->getFirstChild());            TASSERT(range->getStartOffset() == 0);            range->setEndBefore(rt->getFirstChild());            TASSERT(range->getEndOffset() == 0);            range->setStartAfter(rt->getLastChild());            TASSERT(range->getStartOffset() == 4);            range->setStartAfter(rt->getFirstChild());            TASSERT(range->getStartOffset() == 1);            range->setEndBefore(rt->getLastChild());            TASSERT(range->getEndOffset() == 3);            range->setEndAfter(rt->getLastChild());            TASSERT(range->getEndOffset() == 4);            //testing extract()            DOMDocumentFragment* frag2 = range->extractContents();            TASSERT( frag2 != 0);            //After above operations, now the tree looks like:            // <Body><Element3/></Body>            //i.e.,            Body(rt)            //                  |            //               Element3(E122)            //            // aRange has rt as start and end container, and 1 as start and end offset (collapsed)            // range has rt as start and end container, and 1 as start and end offset (collapsed)            //            //and frag2 looks:            // <Body>ReplacedText<SurroundNode1><Element1/>InsertedTexttle</SurroundNode1>Another Text</H1><Element2/><P>Blah xyz</P></Body>            //i.e.,             Body(rt)            //      ______________|________________________________________________________            //      |                                                    |                |            //   ___H1(E11)___________________________________        Element2(E121)    P(E12)            //   |              |     |                      |                            |            //"ReplacedText"   ""   SurroundNode1(E311)  "Another Text"              "Blah xyz"            //           ____________ |_____________________________            //           |                    |                    |            //        Element1(E120)   "InsertedText"(E210)   "tle"            //            //the tree do not have those node anymore after extract            //only Element3 left            TASSERT(rt->getChildNodes()->getLength()==1);            //aRange is collapsed            TASSERT(aRange->getCollapsed() == true);            TASSERT(aRange->getStartContainer() == rt);            TASSERT(aRange->getStartOffset() == 1);            TASSERT(aRange->getEndContainer() == rt);            TASSERT(aRange->getEndOffset() == 1);            //range is collapsed as well            TASSERT(range->getCollapsed() == true);            TASSERT(range->getStartContainer() == rt);            TASSERT(range->getStartOffset() == 1);            TASSERT(range->getEndContainer() == rt);            TASSERT(range->getEndOffset() == 1);            //test the document fragment frag2            TASSERT(frag2->getChildNodes()->getLength()==3);            //detaching the other range            aRange->detach();            range->detach();            //***************************************************************            //another set of test            //TEST createRange, setStart and setEnd, insertnode            //***************************************************************            DOMImplementation* impl2 = DOMImplementationRegistry::getDOMImplementation(tempStr);            DOMDocument* doc2 = impl2->createDocument();            DOMElement* root2 = doc2->createElement(xroot2);            doc2->appendChild(root2);            //case 1: simple text node, start==end            // <body>text1</body>            DOMElement* body = doc2->createElement(xBody);            DOMText* text1 = doc2->createTextNode(xtext1);            body->appendChild(text1);            root2->appendChild(body);            //set range            DOMRange* range1 = doc2->createRange();            range1->setStart(text1,1);            range1->setEnd(text1,3);            TASSERT(!XMLString::compareString(range1->toString(),xex));            TASSERT(range1->getStartOffset()==1);            TASSERT(!XMLString::compareString(range1->getStartContainer()->getNodeValue(),xtext1));            TASSERT(range1->getEndOffset()==3);            TASSERT(!XMLString::compareString(range1->getEndContainer()->getNodeValue(),xtext1));            //now insert a text node            //<body>ttext2ext1</body>            DOMText* text2 = doc2->createTextNode(xtext2);            range1->insertNode(text2);            TASSERT(!XMLString::compareString(range1->toString(),xtext2ex));            TASSERT(range1->getStartOffset()==1);            TASSERT(!XMLString::compareString(range1->getStartContainer()->getNodeValue(),xt));            TASSERT(range1->getEndOffset()==2);            TASSERT(!XMLString::compareString(range1->getEndContainer()->getNodeValue(),xext1));            //now insert a non-text node            //<body>t<p1/>text2ext1</body>            DOMElement* p1 = doc2->createElement(xp1);            range1->insertNode(p1);            TASSERT(!XMLString::compareString(range1->toString(),xtext2ex));            TASSERT(range1->getStartOffset()==1);            TASSERT(!XMLString::compareString(range1->getStartContainer()->getNodeValue(),xt));            TASSERT(range1->getEndOffset()==2);            TASSERT(!XMLString::compareString(range1->getEndContainer()->getNodeValue(),xext1));            //case 2: non-text node, start==end            // <head><h1/></head>            DOMElement* head = doc2->createElement(xhead);            DOMElement* h1 = doc2->createElement(xH1);            head->appendChild(h1);            root2->appendChild(head);            //set range            DOMRange* range2 = doc2->createRange();            range2->setStart(head,0);            range2->setEnd(head,1);            TASSERT(!XMLString::compareString(range2->toString(),XMLUni::fgZeroLenString));            TASSERT(range2->getStartOffset()==0);            TASSERT(!XMLString::compareString(range2->getStartContainer()->getNodeName(),xhead));            TASSERT(range2->getEndOffset()==1);            TASSERT(!XMLString::compareString(range2->getEndContainer()->getNodeName(),xhead));            //now insert a non-text node            //<head><h2/><h1/></head>            DOMElement* h2 = doc2->createElement(xh2);            range2->insertNode(h2);            TASSERT(!XMLString::compareString(range2->toString(),XMLUni::fgZeroLenString));            TASSERT(range2->getStartOffset()==0);            TASSERT(!XMLString::compareString(range2->getStartContainer()->getNodeName(),xhead));            TASSERT(range2->getEndOffset()==2);            TASSERT(!XMLString::compareString(range2->getEndContainer()->getNodeName(),xhead));            //now insert a text node            //<head>text5<h2/><h1/></head>            DOMText* text5 = doc2->createTextNode(xtext5);            range2->insertNode(text5);            TASSERT(!XMLString::compareString(range2->toString(),xtext5));            TASSERT(range2->getStartOffset()==0);            TASSERT(!XMLString::compareString(range2->getStartContainer()->getNodeName(),xhead));            TASSERT(range2->getEndOffset()==3);            TASSERT(!XMLString::compareString(range2->getEndContainer()->getNodeName(),xhead));            //case 3: simple text node, start!=end            // <body2>text3</body2>            DOMElement* body2 = doc2->createElement(xbody2);            DOMText* text3 = doc2->createTextNode(xtext3);            body2->appendChild(text3);            root2->appendChild(body2);            //set range            DOMRange* range3 = ((DOMDocumentRange*)doc2)->createRange();            range3->setStart(text3,1);            range3->setEnd(body2,1);            TASSERT(!XMLString::compareString(range3->toString(),xext3));            TASSERT(range3->getStartOffset()==1);            TASSERT(!XMLString::compareString(range3->getStartContainer()->getNodeValue(),xtext3));            TASSERT(range3->getEndOffset()==1);            TASSERT(!XMLString::compareString(range3->getEndContainer()->getNodeName(),xbody2));            //now insert a textnode            //<body2>ttext4ext3</body2>            DOMText* text4 = doc2->createTextNode(xtext4);            range3->insertNode(text4);            TASSERT(!XMLString::compareString(range3->toString(),XMLUni::fgZeroLenString));            TASSERT(range3->getStartOffset()==1);            TASSERT(!XMLString::compareString(range3->getStartContainer()->getNodeValue(),xt));            TASSERT(range3->getEndOffset()==1);            TASSERT(!XMLString::compareString(range3->getEndContainer()->getNodeName(),xbody2));            //now insert a non-text node            //<body2>t<p2/>text4ext3</body2>            DOMElement* p2 = doc2->createElement(xp2);            range3->insertNode(p2);            //extra empty node caused by splitting 't'            TASSERT(!XMLString::compareString(range3->toString(),XMLUni::fgZeroLenString));            TASSERT(range3->getStartOffset()==1);            TASSERT(!XMLString::compareString(range3->getStartContainer()->getNodeValue(),xt));            TASSERT(range3->getEndOffset()==1);            TASSERT(!XMLString::compareString(range3->getEndContainer()->getNodeName(),xbody2));            //test toString a bit            range3->setStart(body2,1);            range3->setEnd(body2,5);            TASSERT(!XMLString::compareString(range3->toString(),xtext4ext3));            range3->setStart(body2,0);            range3->setEnd(body2,5);            TASSERT(!XMLString::compareString(range3->toString(),xttext4ext3));            //case 4: non-text node, start!=end            // <head2><h3/></head2>            DOMElement* head2 = doc2->createElement(xhead2);            DOMElement* h3 = doc2->createElement(xh3);            head2->appendChild(h3);            root2->appendChild(head2);            //set range            DOMRange* range4 = doc2->createRange();            range4->setStart(head2,0);            range4->setEnd(h3,0);            TASSERT(!XMLString::compareString(range4->toString(),XMLUni::fgZeroLenString));            TASSERT(range4->getStartOffset()==0);            TASSERT(!XMLString::compareString(range4->getStartContainer()->getNodeName(),xhead2));            TASSERT(range4->getEndOffset()==0);            TASSERT(!XMLString::compareString(range4->getEndContainer()->getNodeName(),xh3));            //now insert a non-text node            //<head2><h4/><h3/></head2>            DOMElement* h4 = doc2->createElement(xh4);            range4->insertNode(h4);

⌨️ 快捷键说明

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