rangetest.cpp

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

CPP
966
字号
            DOMText*        textNode1 = doc->createTextNode(xTitle);            E11->appendChild(textNode1);            DOMText*        textNode11 = doc->createTextNode(xAnotherText);            E11->appendChild(textNode11);            DOMText*        textNode2 = doc->createTextNode(xBlahxyz);            E12->appendChild(textNode2);            //experimental nodes            DOMElement*     E120 = doc->createElement(xElement1);            DOMElement*     E121 = doc->createElement(xElement2);            DOMElement*     E122 = doc->createElement(xElement3);            DOMElement*     E311 = doc->createElement(xSurroundNode1);            DOMText*     E210 = doc->createTextNode(xInsertedText);            DOMNode* rt = doc->getDocumentElement();            DOMRange* range = ((DOMDocumentRange*)doc)->createRange();            //Tests start here            // Initial dom tree looks like :            // <Body><H1>TitleAnother Text</H1><P>Blah xyz</P></Body>            //i.e.,            Body(rt)            //     _____________|________________            //     |                           |            //  ___H1(E11)___                    P(E12)            //  |           |                    |            //  "Title"  "Another Text"        "Blah xyz"            //test for start and end settings of a range            range->setStart(rt->getFirstChild(), 0);            TASSERT(range->getStartContainer() == rt->getFirstChild() );            TASSERT(range->getStartOffset() == 0);            range->setEnd(rt->getFirstChild(), 1);            TASSERT(range->getEndContainer() == rt->getFirstChild() );            TASSERT(range->getEndOffset() == 1);            //DOMNode* node = range->getCommonAncestorContainer();            TASSERT(range->getCommonAncestorContainer() == rt->getFirstChild());            //selection related test            range->selectNode(rt->getLastChild());            TASSERT(range->getStartContainer() == rt);            TASSERT(range->getStartOffset() == 1);            TASSERT(range->getEndContainer() == rt);            TASSERT(range->getEndOffset() == 2);            //insertion related tests            range->insertNode(E120);            //only end offset moves and new node gets into range as being inserted at boundary point            TASSERT(range->getStartContainer() == rt);            TASSERT(range->getStartOffset() == 1);            TASSERT(range->getEndContainer() == rt);            TASSERT(range->getEndOffset() == 3);            range->insertNode(E121);            //only end offset moves and new node gets into range as being inserted at boundary point            TASSERT(range->getStartContainer() == rt);            TASSERT(range->getStartOffset() == 1);            TASSERT(range->getEndContainer() == rt);            TASSERT(range->getEndOffset() == 4);            rt->insertBefore(E122, rt->getFirstChild());            //both offsets move as new node is not part of the range            TASSERT(range->getStartContainer() == rt);            TASSERT(range->getStartOffset() == 2);            TASSERT(range->getEndContainer() == rt);            TASSERT(range->getEndOffset() == 5);            //After above operations, now the tree looks like:            // <Body><Element3/><H1>TitleAnother Text</H1><Element2/><Element1/><P>Blah xyz</P></Body>            //i.e.,            Body(rt)            //     _____________|_______________________________________________________________            //     |                |                  |                |                      |            //  Element3(E122)  ___H1(E11)___        Element2(E121)    Element1(E120)          P(E12)            //                  |           |                                                  |            //               "Title"  "Another Text"                                        "Blah xyz"            //            // range has rt as start and end container, and 2 as start offset, 5 as end offset            //changing selection            range->selectNode(rt->getLastChild()->getPreviousSibling());            TASSERT(range->getStartContainer() == rt);            TASSERT(range->getStartOffset() == 3);            TASSERT(range->getEndContainer() == rt);            TASSERT(range->getEndOffset() == 4);            //deleting related tests            range->deleteContents();            TASSERT(rt->getLastChild()->getPreviousSibling() == E121);            range->setStart(rt->getFirstChild()->getNextSibling()->getFirstChild(), 2);            TASSERT(range->getStartContainer() == rt->getFirstChild()->getNextSibling()->getFirstChild());            TASSERT(!XMLString::compareString(range->getStartContainer()->getNodeValue(),xTitle));            TASSERT(range->getStartOffset() == 2);            range->setEnd(rt->getFirstChild()->getNextSibling()->getFirstChild(), 4);            TASSERT(range->getEndContainer() == rt->getFirstChild()->getNextSibling()->getFirstChild());            TASSERT(!XMLString::compareString(range->getEndContainer()->getNodeValue(),xTitle));            TASSERT(range->getEndOffset() == 4);            TASSERT(!XMLString::compareString(range->toString(),xtl));            //inserting text between a text node            range->insertNode(E210);            //only end offset moves and new node gets into range as being inserted at boundary point            TASSERT(range->getStartContainer() == rt->getFirstChild()->getNextSibling()->getFirstChild());            TASSERT(range->getStartOffset() == 2);            TASSERT(range->getEndContainer() == rt->getFirstChild()->getNextSibling()->getLastChild()->getPreviousSibling());            TASSERT(range->getEndOffset() == 2);            //inserting element node before the selected text node            range->insertNode(E120);            //only end offset moves and new node gets into range as being inserted at boundary point            TASSERT(range->getStartContainer() == rt->getFirstChild()->getNextSibling()->getFirstChild());            TASSERT(!XMLString::compareString(range->getStartContainer()->getNodeValue(),xTi));            TASSERT(range->getStartOffset() == 2);            TASSERT(range->getEndContainer() == rt->getFirstChild()->getNextSibling()->getLastChild()->getPreviousSibling());            TASSERT(!XMLString::compareString(range->getEndContainer()->getNodeValue(),xtle));            TASSERT(range->getEndOffset() == 2);            TASSERT(E11->getChildNodes()->getLength()==6);           //checking the text replacment            range->getStartContainer()->setNodeValue(xReplacedText);            //only the start offset is impact            TASSERT(range->getStartContainer() == rt->getFirstChild()->getNextSibling()->getFirstChild());            TASSERT(!XMLString::compareString(range->getStartContainer()->getNodeValue(),xReplacedText));            TASSERT(range->getStartOffset() == 0);            TASSERT(range->getEndContainer() == rt->getFirstChild()->getNextSibling()->getLastChild()->getPreviousSibling());            TASSERT(!XMLString::compareString(range->getEndContainer()->getNodeValue(),xtle));            TASSERT(range->getEndOffset() == 2);            //After above operations, now the tree looks like:            // <Body><Element3/><H1>ReplacedText<Element1/>InsertedTexttleAnother Text</H1><Element2/><P>Blah xyz</P></Body>            //i.e.,            Body(rt)            //     _____________|_______________________________________________________________________________________________            //     |                |                                                                          |                |            //  Element3(E122)  ___H1(E11)___________________________________________________________        Element2(E121)    P(E12)            //                  |              |     |                |                      |      |                             |            //               "ReplacedText"   ""   Element1(E120)   "InsertedText"(E210)   "tle"  "Another Text"              "Blah xyz"            //            // range has "ReplacedText" as start container and "tle" as end container            //   and 0 as start offset, 2 as end offset            //changing the selection. Preparing for 'surround'            range->setStart(range->getStartContainer()->getParentNode(), 2);            range->setEnd(range->getStartContainer(), 5);            TASSERT(!XMLString::compareString(range->getStartContainer()->getNodeName(),xH1));            TASSERT(!XMLString::compareString(range->getEndContainer()->getNodeName(),xH1));            TASSERT(!XMLString::compareString(range->toString(),xInsertedTexttle));            range->surroundContents(E311);            TASSERT(!XMLString::compareString(range->getStartContainer()->getNodeName(),xH1));            TASSERT(range->getStartOffset() == 2);            TASSERT(!XMLString::compareString(range->getEndContainer()->getNodeName(),xH1));            TASSERT(range->getEndOffset() == 3);            TASSERT(E11->getChildNodes()->getLength()==4);            TASSERT(E311->getChildNodes()->getLength()==3);            TASSERT(!XMLString::compareString(range->toString(),xInsertedTexttle));            //After above operations, now the tree looks like:            // <Body><Element3/><H1>ReplacedText<SurroundNode1><Element1/>InsertedTexttle</SurroundNode1>Another Text</H1><Element2/><P>Blah xyz</P></Body>            //i.e.,            Body(rt)            //     _____________|_________________________________________________________________________            //     |                |                                                    |                |            //  Element3(E122)  ___H1(E11)___________________________________        Element2(E121)    P(E12)            //                  |              |     |                      |                            |            //               "ReplacedText"   ""   SurroundNode1(E311)  "Another Text"              "Blah xyz"            //                          ____________ |_____________________________            //                          |                    |                    |            //                          Element1(E120)   "InsertedText"(E210)   "tle"            //            // range has H1 as start and end container and 2 as start offset, 3 as end offset            //testing cloning            DOMRange* aRange = range->cloneRange();            TASSERT(aRange->getStartContainer() == range->getStartContainer());            TASSERT(aRange->getEndContainer() == range->getEndContainer());            TASSERT(aRange->getStartOffset() == 2);            TASSERT(aRange->getEndOffset() == 3);            //changing the new ranges start            aRange->setStart(aRange->getStartContainer()->getFirstChild(), 1);            //comparing the ranges            short compVal = range->compareBoundaryPoints(DOMRange::END_TO_END, aRange);            TASSERT(compVal == 0);            compVal = range->compareBoundaryPoints(DOMRange::START_TO_START, aRange);            TASSERT(compVal == 1);            compVal = range->compareBoundaryPoints(DOMRange::START_TO_END, aRange);            TASSERT(compVal == 1);            compVal = range->compareBoundaryPoints(DOMRange::END_TO_START, aRange);            TASSERT(compVal == -1);            //testing collapse            //not collapsed            TASSERT(range->getCollapsed() == false);            TASSERT(range->getStartOffset() == 2);            TASSERT(range->getEndOffset() == 3);            //selectNodeContents            range->selectNodeContents(rt->getLastChild()->getFirstChild());            TASSERT(range->getStartContainer() == rt->getLastChild()->getFirstChild());            TASSERT(range->getEndContainer() == rt->getLastChild()->getFirstChild());            TASSERT(range->getStartOffset() == 0);            TASSERT(range->getEndOffset() == 8);            TASSERT(!XMLString::compareString(range->toString(),xBlahxyz));            //testing collapse            range->collapse(true); //collapse to start            TASSERT(range->getCollapsed() == true);            TASSERT(range->getStartOffset() == 0);            TASSERT(range->getEndOffset() == 0);            TASSERT(!XMLString::compareString(range->toString(),XMLUni::fgZeroLenString));            TASSERT(aRange->getEndOffset() == 3); //other range is unaffected            TASSERT(!XMLString::compareString(aRange->toString(),xeplacedTextInsertedTexttle));            //After above operations, now the tree looks like:            // <Body><Element3/><H1>ReplacedText<SurroundNode1><Element1/>InsertedTexttle</SurroundNode1>Another Text</H1><Element2/><P>Blah xyz</P></Body>            //i.e.,            Body(rt)            //     _____________|_________________________________________________________________________            //     |                |                                                    |                |            //  Element3(E122)  ___H1(E11)___________________________________        Element2(E121)    P(E12)            //                  |              |     |                      |                            |            //               "ReplacedText"   ""   SurroundNode1(E311)  "Another Text"              "Blah xyz"            //                          ____________ |_____________________________            //                          |                    |                    |            //                          Element1(E120)   "InsertedText"(E210)   "tle"            //            // range has "Blah xyz" as start and end container and 0 as start and end offset (collapsed)            // aRange has "ReplacedText" as start container and H1 as end container            //    and 1 as start offset and 3 as end offset            DOMDocumentFragment* docFrag = aRange->cloneContents();            TASSERT( docFrag != 0);

⌨️ 快捷键说明

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