Ticket #3121: test-domwalker.patch

File test-domwalker.patch, 6.1 KB (added by Garry Yao, 11 years ago)

Unit Test Case

  • _source/tests/core/dom/domwalker.html

     
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2<html xmlns="http://www.w3.org/1999/xhtml">
     3<head>
     4        <title>CKEDITOR.dom.domwalker</title>
     5        <link rel="stylesheet" type="text/css" href="../../test.css" />
     6        <script type="text/javascript" src="../../../../ckeditor_source.js"></script> <!-- %REMOVE_LINE%
     7        <script type="text/javascript" src="../../../ckeditor.js"></script>
     8        %REMOVE_LINE% -->
     9        <script type="text/javascript" src="../../test.js"></script>
     10        <script type="text/javascript">
     11        //<![CDATA[
     12CKEDITOR.test.addTestCase( ( function()
     13{
     14        // Local reference to the "assert" object.
     15        var assert = CKEDITOR.test.assert,
     16                arrayAssert = YAHOO.util.ArrayAssert;
     17
     18        // Temporary 'getName' compensate for textnode.
     19        CKEDITOR.dom.text.prototype.getName = function()
     20        {
     21                return '#text';
     22        };
     23
     24        var tranverseSequence = [ "div", "h1", "a", "#text", "ul", "li", "#text",
     25                "li", "#text", "br", "table", "tbody", "tr", "td", "#text", "span",
     26                "form", "fieldset", "legend", "#text", "label", "#text", "input" ];
     27        return  {
     28
     29                test_forward : function()
     30                {
     31                        var steps = [], resultSteps = tranverseSequence.concat();
     32
     33                        var walker = new CKEDITOR.dom.domWalker( CKEDITOR.document
     34                                .getById( 'walkerStartMark1' ) );
     35                        walker.on( 'step', function( evt )
     36                        {
     37                                var node = evt.data.node;
     38                                steps.push( node.getName() );
     39                        } );
     40                        walker.forward( function( evt )
     41                        {
     42                                var to = evt.data.to;
     43                                var id;
     44                                if ( ( to.type == CKEDITOR.NODE_ELEMENT )
     45                                        && ( id = to.getAttribute( 'id' ) )
     46                                        && id == 'walkerEndMark' )
     47                                        this.stop();
     48                        } );
     49                       
     50                        arrayAssert.itemsAreEqual( resultSteps, steps, 'Walking steps forward doesn\'t match.' );
     51                },
     52               
     53                /**
     54                 *  Test walking auto stopping when no more steps are available.
     55                 */
     56                test_foward2 : function()
     57                {
     58                        var walker = new CKEDITOR.dom.domWalker( CKEDITOR.document.getBody() );
     59                        walker.on( 'step', function( evt )
     60                        {
     61                                assert.fail( 'No element should be stepped on.' );
     62                        } );
     63                        walker.forward();
     64                },
     65
     66                test_reverse : function()
     67                {
     68                        var steps = [], resultSteps = tranverseSequence.concat().reverse();
     69
     70                        var walker = new CKEDITOR.dom.domWalker( CKEDITOR.document
     71                                .getById( 'walkerEndMark' ) );
     72                        walker.on( 'step', function( evt )
     73                        {
     74                                var node = evt.data.node;
     75                                steps.push( node.getName() );
     76                        } );
     77                        walker.reverse( function( evt )
     78                        {
     79                                var to = evt.data.to;
     80                                var id;
     81                                if ( ( to.type == CKEDITOR.NODE_ELEMENT )
     82                                        && ( id = to.getAttribute( 'id' ) )
     83                                        && id == 'walkerStartMark1' )
     84                                        this.stop();
     85                        } );
     86                        assert.isTrue( CKEDITOR.tools.arrayCompare( resultSteps, steps ),
     87                                'Walking steps reversely doesn\'t match.' );
     88                },
     89
     90                test_stopBlockBoundary1 : function()
     91                {
     92                        var walker = new CKEDITOR.dom.domWalker( CKEDITOR.document
     93                                .getById( 'walkerStartMark2' ) );
     94                        var endNode = walker.forward( CKEDITOR.dom.domWalker
     95                                .blockBoundary() ).node, resultNode = CKEDITOR.document
     96                                .getById( 'walkerEndMark2' );
     97                        assert.isTrue( resultNode.equals( endNode ),
     98                                'Walking foward doesn\'t stop at block boundaries.' );
     99
     100                        walker = new CKEDITOR.dom.domWalker( CKEDITOR.document
     101                                .getById( 'walkerStartMark3' ) );
     102                        var startNode = walker.reverse( CKEDITOR.dom.domWalker
     103                                .blockBoundary() ).node;
     104                        resultNode = CKEDITOR.document.getById( 'walkerEndMark3' );
     105                        assert.isTrue( resultNode.equals( startNode ),
     106                                'Walking reversely doesn\'t stop at block boundaries.' );
     107                },
     108
     109                test_stopBlockBoundary2 : function()
     110                {
     111                        var walker = new CKEDITOR.dom.domWalker( CKEDITOR.document
     112                                .getById( 'walkerStartMark6' ) );
     113                        var endNode = walker.forward( CKEDITOR.dom.domWalker
     114                                .blockBoundary() ).node, resultNode = CKEDITOR.document
     115                                .getById( 'walkerEndMark6' );
     116                        assert.isTrue( resultNode.equals( endNode ),
     117                                'Walking forward doesn\'t stop at block boundaries.' );
     118                },
     119
     120                test_stopListItemBoundary : function()
     121                {
     122                        var walker = new CKEDITOR.dom.domWalker( CKEDITOR.document
     123                                .getById( 'walkerStartMark4' ) );
     124                        var endNode = walker.forward( CKEDITOR.dom.domWalker
     125                                .listItemBoundary() ).node, resultNode = CKEDITOR.document
     126                                .getById( 'walkerEndMark4' );
     127                        assert.isTrue( resultNode.equals( endNode ),
     128                                'Walking forward doesn\'t stop at list items boundaries.' );
     129
     130                        walker = new CKEDITOR.dom.domWalker( CKEDITOR.document
     131                                .getById( 'walkerStartMark5' ) );
     132                        var startNode = walker.reverse( CKEDITOR.dom.domWalker
     133                                .blockBoundary() ).node;
     134                        resultNode = CKEDITOR.document.getById( 'walkerEndMark5' );
     135                        assert.isTrue( resultNode.equals( startNode ),
     136                                'Walking reversely doesn\'t stop at list items boundaries.' );
     137                },
     138
     139                name :document.title
     140        };
     141} )() );
     142        //]]>
     143        </script>
     144</head>
     145<body>
     146        <span id="walkerStartMark1"></span><div><h1><a>text</a></h1><ul><li>text</li><li>text</li></ul><br/><table><tbody><tr><td>text</td></tr></tbody></table><span><form><fieldset><legend>text</legend><label>text</label><input type="text"/></fieldset></form></span></div><span id="walkerEndMark"></span>
     147       
     148        <span id="walkerStartMark2"></span><span><b>text</b>text<input id="walkerEndMark2" type="hidden" /><p>text</p></span>
     149        <span><p>text</p><input id="walkerEndMark3" type="hidden" /><b>text</b><span id="walkerStartMark3"></span></span>
     150       
     151        <span id="walkerStartMark4"></span><span><b>text</b>text<input id="walkerEndMark4" type="hidden" /><br/></span>
     152        <ul><li><input id="walkerEndMark5" type="hidden" /><b>text</b><span id="walkerStartMark5"></span></li></ul>
     153       
     154        <table><tr><td><span id="walkerStartMark6"><span>text</span><input id="walkerEndMark6" type="hidden" /></td><td></td></tr></table>
     155</body>
     156</html>
     157 No newline at end of file
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy