Ticket #3020: test-selection.patch

File test-selection.patch, 7.5 KB (added by Garry Yao, 10 years ago)
  • _source/tests/plugins/selection/selection.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>Plugin: selection</title>
     5        <link rel="stylesheet" type="text/css" href="../../test.css" />
     6        <script type="text/javascript" src="../../../../ckeditor_source.js"></script>
     7        <script type="text/javascript" src="../../test.js"></script>
     8        <script type="text/javascript">
     9        //<![CDATA[
     10
     11CKEDITOR.plugins.load( 'selection' );
     12
     13/**
     14 * Helper to determine whether two {@link CKEDITOR.dom.range}'s equality.
     15 */
     16function rangesAreSame()
     17{
     18        var range1 = arguments[ 0 ], range2 = arguments[ 1 ];
     19       
     20        if ( ! ( range1 && range2 ) )
     21                return false;
     22       
     23        if ( range1.collapsed && range2.collapsed )
     24                return ( range1.startContainer.$ == range2.startContainer.$
     25                        && range1.startOffset.$ == range2.startOffset.$ )
     26                    || ( range1.endContainer.$ == range2.endContainer.$
     27                        && range1.endOffset.$ == range2.endOffset.$ );
     28
     29        return range1.startContainer.$ == range2.startContainer.$
     30            && range1.startOffset == range2.startOffset
     31            && range1.endContainer.$ == range2.endContainer.$
     32            && range1.endOffset == range2.endOffset;
     33       
     34}
     35
     36var testCase;
     37
     38CKEDITOR.test
     39    .addTestCase( ( function()
     40    {
     41            // Local references.
     42            var assert = YAHOO.util.Assert,
     43            doc = new CKEDITOR.dom.document( document );
     44
     45            return {
     46
     47                /**
     48                         * Test no range when document was leaved unselected.
     49                         */
     50                test_selection1 : function()
     51                {
     52                        var sel = new CKEDITOR.dom.selection( doc );
     53                        var nativeSel = sel.getNative();
     54                        assert.isNotNull( nativeSel,
     55                            'Native selection should not null.' );
     56
     57                        assert.areSame( CKEDITOR.SELECTION_NONE, sel.getType(),
     58                            'Selection type should be "none".' );
     59
     60                        var range = sel.getRanges()[ 0 ];
     61                       
     62                        // IE collpased the range at the position right after the first
     63                        // element in body when no selection is made.
     64                        assert.isUndefined( range, 'range should not existing.' );
     65                },
     66               
     67                /**
     68                         * Try a normal selection
     69                         */
     70                test_selection2 : function()
     71                {
     72                        var sel = new CKEDITOR.dom.selection( doc );
     73                        var range = new CKEDITOR.dom.range( doc );
     74                        range.selectNodeContents( doc.getById( 'selectedNode' ) );
     75                        sel.selectRanges( [ range ] );
     76                        assert.areSame( CKEDITOR.SELECTION_TEXT, sel.getType(),
     77                            'Selection type should be "text".' );
     78
     79                        var selectedRange = sel.getRanges()[ 0 ];
     80                        assert.isTrue( rangesAreSame( range, selectedRange ),
     81                            'Result range should be the same.' );
     82                },
     83
     84                /**
     85                         * Try to make selection when document is blurred already.
     86                         */
     87                test_selection3 : function()
     88                {
     89                        var range = new CKEDITOR.dom.range( doc );
     90                        range.selectNodeContents( doc.getById( 'selectedNode' ) );
     91                       
     92                        window.blur();
     93
     94                        var sel = new CKEDITOR.dom.selection( doc );
     95                        sel.selectRanges( [ range ] );
     96                        assert.areSame( CKEDITOR.SELECTION_TEXT, sel.getType(),
     97                            'Selection type should be "text".' );
     98                        var selectedRange = sel.getRanges()[ 0 ],
     99                                selectedElement = sel.getSelectedElement(),
     100                                firstElement = sel.getStartElement();
     101
     102                        assert.isNull( selectedElement,
     103                            'Selected element should not exist.' );
     104                        assert.areSame( doc.getById( 'selectedNode' ).$,
     105                                firstElement && firstElement.$, 'Start element doesn\'t match.' );
     106                        assert.isTrue( rangesAreSame( range, selectedRange ),
     107                            'Result range should be the same.' );
     108
     109                        document.body.focus();
     110                },
     111
     112                /**
     113                         * Selecting text node
     114                         */
     115                test_getSelectedElement1 : function()
     116                {
     117                        var range = new CKEDITOR.dom.range( doc );
     118                        range.selectNodeContents( doc.getById( 'selectedNode' ) );
     119                        var sel = new CKEDITOR.dom.selection( doc );
     120                        sel.selectRanges( [ range ] );
     121                        var selectedElement = sel.getSelectedElement(),
     122                                firstElement = sel.getStartElement();
     123
     124                        assert.isNull( selectedElement,
     125                            'Selected element should not exist.' );
     126                        assert.areSame( firstElement.$,
     127                            doc.getById( 'selectedNode' ).$,
     128                            'Start element doesn\'t match.' );
     129                },
     130
     131                /**
     132                         * Selecting element
     133                         */
     134                test_getSelectedElement2 : function()
     135                {
     136                        var i, l = 10;
     137                        for ( i = 1 ; i <= l ; i++ )
     138                        {
     139                                var element = doc.getById( 'selectedElement' + i );
     140                                if ( element )
     141                                {
     142                                        var range = new CKEDITOR.dom.range( doc );
     143                                        range.setStartBefore( element );
     144                                        range.setEndAfter( element );
     145                                        var sel = new CKEDITOR.dom.selection( doc );
     146                                        sel.selectRanges( [ range ] );
     147                                        var selectedElement = sel.getSelectedElement(),
     148                                                firstElement = sel.getStartElement();
     149
     150                                        assert.areSame( element.$, selectedElement
     151                                            && selectedElement.$,
     152                                            'Selected element ' +
     153                                            element.getName().toUpperCase() + ' doesn\'t match.' );
     154                                        assert.areSame( element.$, firstElement
     155                                            && firstElement.$, 'Start element ' +
     156                                            element.getName() + 'doesn\'t match.' );
     157                                }
     158                        }
     159                },
     160
     161                test_selectElement : function()
     162                {
     163                        var i, l = 10;
     164                        for ( i = 1 ; i <= l ; i++ )
     165                        {
     166                                var element = doc.getById( 'selectedElement' + i );
     167                                if ( element )
     168                                {
     169                                        var sel = new CKEDITOR.dom.selection( doc );
     170                                        sel.selectElement( element );
     171                                        var selectedElement = sel.getSelectedElement();
     172
     173                                        assert.areSame( element.$,
     174                                                selectedElement && selectedElement.$,
     175                                                'Selected element ' +
     176                                                element.getName().toUpperCase() + ' doesn\'t match.' );
     177                                }
     178                        }
     179                },
     180                name :document.title
     181            };
     182    } )() );
     183
     184        //]]>
     185        </script>
     186</head>
     187<body>
     188        <span id="selectedNode">text1</span>
     189    <p>
     190        <a id="selectedElement1"></a>
     191        <input id="selectedElement2" />
     192                <img id="selectedElement3" />
     193                <hr id="selectedElement4">
     194        </hr>
     195        <ul>
     196            <li id="selectedElement5">
     197            </li>
     198        </ul>
     199        <table>
     200            <tr>
     201                <td id="selectedElement6">
     202                </td>
     203            </tr>
     204        </table>
     205        <embed id="selectedElement7">
     206        </embed>
     207        <object id="selectedElement8">
     208        </object>
     209        <ol>
     210            <li id="selectedElement9">
     211            </li>
     212        </ol>
     213        <form id="selectedElement10">
     214        </form>
     215    </p>
     216</body>
     217</html>
     218 No newline at end of file
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy