--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+ <title>CKEDITOR.dom.range</title>\r
+ <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+ <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+ <script type="text/javascript" src="../../test.js"></script>\r
+ <script type="text/javascript">\r
+ //<![CDATA[\r
+\r
+var html1, html2;\r
+var tests;\r
+\r
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+ // Local references.\r
+ var assert = CKEDITOR.test.assert;\r
+ var getInnerHtml = CKEDITOR.test.getInnerHtml;\r
+\r
+ var doc = new CKEDITOR.dom.document( document );\r
+\r
+ var getRange = function( startId, endId )\r
+ {\r
+ var range = new CKEDITOR.dom.range( CKEDITOR.document );\r
+ range.moveToBookmark( { startNode : startId, endNode : endId, serializable : true } );\r
+ return range;\r
+ };\r
+\r
+ return tests = {\r
+ test__constructor : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ assert.isNotNull( range, 'range must not be null' );\r
+\r
+ assert.isNull( range.startContainer, 'startContainer must be null' );\r
+ assert.isNull( range.startOffset, 'startOffset must be null' );\r
+ assert.isNull( range.endContainer, 'endContainer must be null' );\r
+ assert.isNull( range.endOffset, 'endOffset must be null' );\r
+\r
+ assert.isTrue( range.collapsed, 'range must be collapsed' );\r
+ },\r
+\r
+ test_setStart : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( 'playground' ), 1 );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ), range.startContainer.$ );\r
+ assert.areSame( 1, range.startOffset );\r
+ assert.areSame( document.getElementById( 'playground' ), range.endContainer.$ );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed );\r
+ },\r
+\r
+ test_setEnd : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setEnd( doc.getById( 'playground' ), 1 );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ), range.startContainer.$ );\r
+ assert.areSame( 1, range.startOffset );\r
+ assert.areSame( document.getElementById( 'playground' ), range.endContainer.$ );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed );\r
+ },\r
+\r
+ test_setStartAfter : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStartAfter( doc.getById( '_B' ) );\r
+ range.setStartAfter( doc.getById( '_H1' ).getFirst() );\r
+\r
+ assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_setStartBefore : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStartBefore( doc.getById( '_B' ) );\r
+ range.setStartBefore( doc.getById( '_H1' ).getFirst() );\r
+\r
+ assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_setEndAfter : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setEndAfter( doc.getById( '_H1' ).getFirst() );\r
+ range.setEndAfter( doc.getById( '_B' ) );\r
+\r
+ assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_setEndBefore : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setEndBefore( doc.getById( '_H1' ).getFirst() );\r
+ range.setEndBefore( doc.getById( '_B' ) );\r
+\r
+ assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_setStartAt_1 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_START );\r
+\r
+ assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
+ assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+ assert.isTrue( range.collapsed, 'collapsed' );\r
+ },\r
+\r
+ test_setStartAt_2 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+ assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
+ assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+ assert.isTrue( range.collapsed, 'collapsed' );\r
+ },\r
+\r
+ test_setStartAt_3 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_START );\r
+\r
+ assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
+ assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
+ assert.isTrue( range.collapsed, 'collapsed' );\r
+ },\r
+\r
+ test_setStartAt_4 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_END );\r
+\r
+ assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
+ assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
+ assert.isTrue( range.collapsed, 'collapsed' );\r
+ },\r
+\r
+ test_setEndAt_1 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_START );\r
+\r
+ assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
+ assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+ assert.isTrue( range.collapsed, 'collapsed' );\r
+ },\r
+\r
+ test_setEndAt_2 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+ assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
+ assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+ assert.isTrue( range.collapsed, 'collapsed' );\r
+ },\r
+\r
+ test_setEndAt_3 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_START );\r
+\r
+ assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
+ assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
+ assert.isTrue( range.collapsed, 'collapsed' );\r
+ },\r
+\r
+ test_setEndAt_4 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_END );\r
+\r
+ assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
+ assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
+ assert.isTrue( range.collapsed, 'collapsed' );\r
+ },\r
+\r
+ test_collapsed : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStartAt( doc.getById( '_P' ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+ assert.isTrue( range.collapsed );\r
+ },\r
+\r
+ test_collapse : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStartAt( doc.getById( '_Para' ), CKEDITOR.POSITION_AFTER_START );\r
+ range.setEndAt( doc.getById( '_Span' ), CKEDITOR.POSITION_BEFORE_END );\r
+\r
+ assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'startContainer' );\r
+ assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
+ assert.isFalse( range.collapsed, 'collapsed' );\r
+\r
+ range.collapse( true );\r
+\r
+ assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'startContainer' );\r
+ assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'endContainer' );\r
+ assert.isTrue( range.collapsed, 'collapsed' );\r
+ },\r
+\r
+ test_selectNodeContents_Element : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ // Test with an Element node.\r
+ range.selectNodeContents( doc.getById( '_Para' ) );\r
+\r
+ assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_selectNodeContents_Text : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ // Test with a Text node.\r
+ range.selectNodeContents( doc.getById( '_Para' ).getFirst() );\r
+\r
+ assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 8, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_collapse_ToStart : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.selectNodeContents( doc.getById( '_P' ) );\r
+ range.collapse( true );\r
+\r
+ assert.areSame( document.getElementById( '_P' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_P' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_collapse_ToEnd : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.selectNodeContents( doc.getById( '_Para' ) );\r
+ range.collapse( false );\r
+\r
+ assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 3, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_insertNode_ElementContents : function()\r
+ {\r
+ var newNode = new CKEDITOR.dom.element( 'span' );\r
+ newNode.setHtml( 'test_' );\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.selectNodeContents( doc.getById( '_B' ) );\r
+ range.insertNode( newNode );\r
+\r
+ assert.areSame( document.getElementById( '_B' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_B' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_insertNode_ElementCollapsed : function()\r
+ {\r
+ var newNode = new CKEDITOR.dom.element( 'span' );\r
+ newNode.setHtml( 'test_' );\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartBefore( doc.getById( '_Para' ) );\r
+ range.insertNode( newNode );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_insertNode_ElementNotCollapsed : function()\r
+ {\r
+ var newNode = new CKEDITOR.dom.element( 'span' );\r
+ newNode.setHtml( 'test_' );\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartBefore( doc.getById( '_Para' ) );\r
+ range.setStartBefore( doc.getById( '_H1' ) );\r
+ range.insertNode( newNode );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_insertNode_DiffElements : function()\r
+ {\r
+ var newNode = new CKEDITOR.dom.element( 'span' );\r
+ newNode.setHtml( 'test_' );\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.selectNodeContents( doc.getById( '_Para' ) );\r
+\r
+ range.setStart( doc.getById( '_H1' ), 0 );\r
+ range.insertNode( newNode );\r
+\r
+ assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+\r
+ assert.isTrue( range.startContainer.getChild( range.startOffset ).equals( newNode ), 'Start must be on new node' );\r
+ },\r
+\r
+ test_insertNode_TextCollapsed : function()\r
+ {\r
+ var newNode = new CKEDITOR.dom.element( 'span' );\r
+ newNode.setHtml( 'test_' );\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( doc.getById( '_H1' ).getFirst(), 3 );\r
+ range.insertNode( newNode );\r
+\r
+ assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_H1' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_insertNode_TextNotCollapsed : function()\r
+ {\r
+ var newNode = new CKEDITOR.dom.element( 'span' );\r
+ newNode.setHtml( 'test_' );\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( doc.getById( '_H1' ).getFirst(), 3 );\r
+ range.setEnd( doc.getById( '_H1' ).getFirst(), 5 );\r
+ range.insertNode( newNode );\r
+\r
+ assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_H1' ).childNodes[2], range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_insertNode_Mixed : function()\r
+ {\r
+ var newNode = new CKEDITOR.dom.element( 'span' );\r
+ newNode.setHtml( 'test_' );\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( doc.getById( '_H1' ).getFirst(), 0 );\r
+ range.setEnd( doc.getById( '_P' ), 1 );\r
+ range.insertNode( newNode );\r
+\r
+ assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_P' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_getCommonAncestor1 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_H1' ).getFirst(), 3 );\r
+\r
+ assert.areSame( document.getElementById( '_H1' ).firstChild, range.getCommonAncestor().$ );\r
+ },\r
+\r
+ test_getCommonAncestor2 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_H1' ), 0 );\r
+\r
+ assert.areSame( document.getElementById( '_H1' ), range.getCommonAncestor().$ );\r
+ },\r
+\r
+ test_getCommonAncestor3 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_H1' ), 0 );\r
+ range.setEnd( doc.getById( '_Para' ), 0 );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ), range.getCommonAncestor().$ );\r
+ },\r
+\r
+ test_getCommonAncestor4 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( '_B' ), 0 );\r
+\r
+ assert.areSame( document.getElementById( '_Para' ), range.getCommonAncestor().$ );\r
+ },\r
+\r
+ test_getCommonAncestor5 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getBody(), 0 );\r
+ range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
+\r
+ assert.areSame( document.body, range.getCommonAncestor().$ );\r
+ },\r
+\r
+ test_getCommonAncestor6 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
+ range.setEnd( doc.getById( '_EnlargeB' ), 3 );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeB' ), range.getCommonAncestor().$ );\r
+ },\r
+\r
+ test_enlarge_element1 : function()\r
+ {\r
+ // For IE, see the next test.\r
+ if ( CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p> Test <b> <i> [Enlarge]</i> this</b> </p>\r
+ // <p> Test <b> [<i> Enlarge</i>] this</b> </p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
+ range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeB' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element1_ie : function()\r
+ {\r
+ // IE normalizes whitespaces when parsing the HTML, so we need a\r
+ // specific test for it.\r
+ if ( !CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p>Test <b><i>[Enlarge]</i> this</b></p>\r
+ // <p>Test <b>[<i>Enlarge</i>] this</b></p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );\r
+ range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeB' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element2 : function()\r
+ {\r
+ // For IE, see the next test.\r
+ if ( CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p> Test <b> <i> [Enlarge</i> this]</b> </p>\r
+ // <p> Test [<b> <i> Enlarge</i> this</b>] </p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
+ range.setEnd( doc.getById( '_EnlargeB' ), 3 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element2_ie : function()\r
+ {\r
+ // IE normalizes whitespaces when parsing the HTML, so we need a\r
+ // specific test for it.\r
+ if ( !CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p>Test <b><i>[Enlarge</i> this]</b></p>\r
+ // <p>Test [<b><i>Enlarge</i> this</b>]</p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );\r
+ range.setEnd( doc.getById( '_EnlargeB' ), 2 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element3 : function()\r
+ {\r
+ // For IE, see the next test.\r
+ if ( CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p> [Test <b> <i> Enlarge]</i> this</b> </p>\r
+ // <p> [Test <b> <i> Enlarge</i>] this</b> </p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element3_ie : function()\r
+ {\r
+ // IE normalizes whitespaces when parsing the HTML, so we need a\r
+ // specific test for it.\r
+ if ( !CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p>[Test <b><i>Enlarge]</i> this</b></p>\r
+ // <p>[Test <b><i>Enlarge</i>] this</b></p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 0 );\r
+ range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element4 : function()\r
+ {\r
+ // For IE, see the next test.\r
+ if ( CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p> [Test <b> <i> Enlarge</i> this]</b> </p>\r
+ // [<p> Test <b> <i> Enlarge</i> this</b> </p>]\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( '_EnlargeB' ).getChild( 2 ), 5 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( doc.getById( '_EnlargeP' ).getIndex(), range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( doc.getById( '_EnlargeP' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element4_ie : function()\r
+ {\r
+ // IE normalizes whitespaces when parsing the HTML, so we need a\r
+ // specific test for it.\r
+ if ( !CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p>[Test <b><i>Enlarge</i> this]</b></p>\r
+ // [<p>Test <b><i>Enlarge</i> this</b></p>]\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 0 );\r
+ range.setEnd( doc.getById( '_EnlargeB' ).getChild( 1 ), 5 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( doc.getById( '_EnlargeP' ).getIndex(), range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( doc.getById( '_EnlargeP' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element5 : function()\r
+ {\r
+ // For IE, see the next test.\r
+ if ( CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p> Test<b> <i> [Enlarge</i> this]</b> </p>\r
+ // <p> Test<b> [<i> Enlarge</i> this]</b> </p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI1' ).getFirst(), 2 );\r
+ range.setEnd( doc.getById( '_EnlargeB1' ).getChild( 2 ), 5 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeB1' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeB1' ).childNodes[ 2 ], range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element5_ie : function()\r
+ {\r
+ // IE normalizes whitespaces when parsing the HTML, so we need a\r
+ // specific test for it.\r
+ if ( !CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p>Test<b> <i>[Enlarge</i> this]</b></p>\r
+ // <p>Test<b> [<i>Enlarge</i> this]</b></p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI1' ).getFirst(), 0 );\r
+ range.setEnd( doc.getById( '_EnlargeB1' ).getChild( 2 ), 5 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeB1' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeB1' ).childNodes[ 2 ], range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element6 : function()\r
+ {\r
+ // For IE, see the next test.\r
+ if ( CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p> <b> <i> [Enlarge</i>] this</b> </p>\r
+ // <p> <b> [<i> Enlarge</i>] this</b> </p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 2 );\r
+ range.setEnd( doc.getById( '_EnlargeB2' ), 2 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeB2' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeB2' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element6_ie : function()\r
+ {\r
+ // IE normalizes whitespaces when parsing the HTML, so we need a\r
+ // specific test for it.\r
+ if ( !CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p><b><i>[Enlarge</i>] this</b></p>\r
+ // <p><b>[<i>Enlarge</i>] this</b></p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 0 );\r
+ range.setEnd( doc.getById( '_EnlargeB2' ), 1 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeB2' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeB2' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element7 : function()\r
+ {\r
+ // For IE, see the next test.\r
+ if ( CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p> <b> <i> [Enlarge</i> this]</b> </p>\r
+ // [<p> <b> <i> Enlarge</i> this</b> </p>]\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 2 );\r
+ range.setEnd( doc.getById( '_EnlargeB2' ), 3 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( doc.getById( '_EnlargeP2' ).getIndex(), range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element7_ie : function()\r
+ {\r
+ // IE normalizes whitespaces when parsing the HTML, so we need a\r
+ // specific test for it.\r
+ if ( !CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p><b><i>[Enlarge</i> this]</b></p>\r
+ // [<p><b><i>Enlarge</i> this</b></p>]\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 0 );\r
+ range.setEnd( doc.getById( '_EnlargeB2' ), 2 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( doc.getById( '_EnlargeP2' ).getIndex(), range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element8 : function()\r
+ {\r
+ // For IE, see the next test.\r
+ if ( CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p> Test <b> <i> [Enlarge</i> this</b> </p><p> <b> <i> Enlarge</i> this]</b> </p>\r
+ // <p> Test [<b> <i> Enlarge</i> this</b> </p><p> <b> <i> Enlarge</i> this</b> </p>]\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
+ range.setEnd( doc.getById( '_EnlargeB2' ), 3 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element8_ie : function()\r
+ {\r
+ // IE normalizes whitespaces when parsing the HTML, so we need a\r
+ // specific test for it.\r
+ if ( !CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p>Test <b><i>[Enlarge</i> this</b></p><p><b><i>Enlarge</i> this]</b></p>\r
+ // <p>Test [<b><i>Enlarge</i> this</b></p><p><b><i>Enlarge</i> this</b></p>]\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );\r
+ range.setEnd( doc.getById( '_EnlargeB2' ), 2 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element9 : function()\r
+ {\r
+ // <p>Test<i> [Enlarge</i>]</p>\r
+ // <p>Test<i> [Enlarge</i>]</p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI3' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( '_EnlargeP3' ), 2 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeI3' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP3' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element10 : function()\r
+ {\r
+ // For IE, see the next test.\r
+ if ( CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p>Test <i> [Enlarge</i>]</p>\r
+ // <p>Test [<i> Enlarge</i>]</p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI4' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( '_EnlargeP4' ), 2 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP4' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP4' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element10_ie : function()\r
+ {\r
+ // IE normalizes whitespaces when parsing the HTML, so we need a\r
+ // specific test for it.\r
+ if ( !CKEDITOR.env.ie )\r
+ return;\r
+\r
+ // <p>Test <i>[Enlarge</i>]</p>\r
+ // <p>Test [<i>Enlarge</i>]</p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI4' ).getFirst(), 0 );\r
+ range.setEnd( doc.getById( '_EnlargeP4' ), 2 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP4' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP4' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element11 : function()\r
+ {\r
+ // <p>Test <i>[Enlarge]</i></p>\r
+ // <p>Test [<i>Enlarge</i>]</p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI5' ), 0 );\r
+ range.setEnd( doc.getById( '_EnlargeI5' ), 1 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP5' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP5' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element12 : function()\r
+ {\r
+ // <p>Test <i><b></b>[Enlarge]</i></p>\r
+ // <p>Test [<i><b></b>Enlarge</i>]</p>\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeI6' ), 1 );\r
+ range.setEnd( doc.getById( '_EnlargeI6' ), 2 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP6' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP6' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_element13 : function()\r
+ {\r
+ // <p>Test <i><b></b>[Enlarge]</i></p>\r
+ // <p>Test [<i><b></b>Enlarge</i>]</p>\r
+\r
+ doc.getById( '_EnlargeP' ).setHtml( 'this <i>is some </i>sample text' );\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_EnlargeP' ), 0 );\r
+ range.setEnd( doc.getById( '_EnlargeP' ).getChild( 1 ), 0 );\r
+\r
+ range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP' ).childNodes[ 1 ], range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_list1 : function()\r
+ {\r
+ var range = getRange( 'S1', null );\r
+ range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP7' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP7' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_list2 : function()\r
+ {\r
+ var range = getRange( 'S2', 'E2' );\r
+ range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP8' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP8' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 4, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_list3 : function()\r
+ {\r
+ var range = getRange( 'S3', null );\r
+ range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP9' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP9' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_list4 : function()\r
+ {\r
+ var range = getRange( 'S4', null );\r
+ range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP10' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 3, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP10' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_list5 : function()\r
+ {\r
+ var range = getRange( 'S9', null );\r
+ var bookmark = range.createBookmark();\r
+ range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP15' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP15' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 4, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ range.moveToBookmark( bookmark );\r
+ },\r
+\r
+ test_enlarge_block1 : function()\r
+ {\r
+ var range = getRange( 'S5', null );\r
+ range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP11' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP11'), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_block2 : function()\r
+ {\r
+ var range = getRange( 'S10', null );\r
+ var bookmark = range.createBookmark();\r
+ range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP16' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP16'), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ range.moveToBookmark( bookmark );\r
+ },\r
+\r
+ test_enlarge_block3 : function()\r
+ {\r
+ var range = getRange( 'S6', null );\r
+ range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP12' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP12'), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_block4 : function()\r
+ {\r
+ var range = getRange( 'S7', null );\r
+ range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP13' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_EnlargeP13'), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_enlarge_block5 : function()\r
+ {\r
+ var range = getRange( 'S8', null );\r
+ range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP14' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ /**\r
+ * Test enlarge list when there's no nodes between\r
+ * range start and the block boundary.\r
+ */\r
+ test_enlarge_block6 : function()\r
+ {\r
+ var range = getRange( 'S11', null );\r
+ range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
+\r
+ assert.areSame( document.getElementById( '_EnlargeP17' ),\r
+ range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ },\r
+\r
+ test_deleteContents_W3C_1 : function()\r
+ {\r
+ // W3C DOM Range Specs - Section 2.6 - Example 1\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( '_Para' ), 2 );\r
+\r
+ range.deleteContents();\r
+\r
+ assert.areSame( 't text.', getInnerHtml( '_Para' ), 'HTML after deletion' );\r
+\r
+ assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_deleteContents_W3C_2 : function()\r
+ {\r
+ // W3C DOM Range Specs - Section 2.6 - Example 2\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_B' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( '_B' ).getNext(), 1 );\r
+\r
+ range.deleteContents();\r
+\r
+ assert.areSame( 'this is <b id="_b">s</b>text.', getInnerHtml( '_Para' ) );\r
+\r
+ assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_deleteContents_W3C_3 : function()\r
+ {\r
+ // W3C DOM Range Specs - Section 2.6 - Example 3\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_B' ).getPrevious(), 1 );\r
+ range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
+\r
+ range.deleteContents();\r
+\r
+ assert.areSame( 't<b id="_b">ome</b> text.', getInnerHtml( '_Para' ) );\r
+\r
+ assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_deleteContents_W3C_4 : function()\r
+ {\r
+ // W3C DOM Range Specs - Section 2.6 - Example 4\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_H1' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );\r
+\r
+ range.deleteContents();\r
+\r
+ assert.areSame( '<h1 id="_h1">f</h1><p>nother paragraph.</p>', getInnerHtml( 'playground' ) );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_deleteContents_Other : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_H1' ), 0 );\r
+ range.setEnd( doc.getById( 'playground' ).getLast(), 1 );\r
+\r
+ range.deleteContents();\r
+\r
+ assert.areSame( '<h1 id="_h1"></h1><p></p>', getInnerHtml( 'playground' ) );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_deleteContents_Other_2 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( 'playground' ), 0 );\r
+ range.setEnd( doc.getById( 'playground' ), 2 );\r
+\r
+ range.deleteContents();\r
+\r
+ assert.areSame( '<p>another paragraph.</p>', getInnerHtml( 'playground' ) );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame(document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_deleteContents_Other_3 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.selectNodeContents( doc.getById('_B') );\r
+\r
+ range.deleteContents();\r
+\r
+ assert.areSame( '', getInnerHtml('_B') );\r
+\r
+ assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_deleteContents_Other_4 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.selectNodeContents( doc.getById('_Para') );\r
+\r
+ range.deleteContents();\r
+\r
+ assert.areSame( '', getInnerHtml('_Para') );\r
+\r
+ assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_extractContents_W3C_1 : function()\r
+ {\r
+ // W3C DOM Range Specs - Section 2.7 - Example 1\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( '_Para' ), 2 );\r
+\r
+ var docFrag = range.extractContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( 'his is <b id="_b">some</b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+ assert.areSame( 't text.', getInnerHtml( '_Para' ), 'HTML after extraction' );\r
+\r
+ assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_extractContents_W3C_2 : function()\r
+ {\r
+ // W3C DOM Range Specs - Section 2.7 - Example 2\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_B' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( '_B' ).getNext(), 2 );\r
+\r
+ var docFrag = range.extractContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( '<b>ome</b> t', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+ assert.areSame( 'this is <b id="_b">s</b>ext.', getInnerHtml( '_Para' ), 'HTML after extraction' );\r
+\r
+ assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_extractContents_W3C_3 : function()\r
+ {\r
+ // W3C DOM Range Specs - Section 2.6 - Example 3\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_B' ).getPrevious(), 1 );\r
+ range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
+\r
+ var docFrag = range.extractContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( 'his is <b>s</b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+ assert.areSame( 't<b id="_b">ome</b> text.', getInnerHtml( '_Para' ), 'HTML after extraction' );\r
+\r
+ assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_extractContents_W3C_4 : function()\r
+ {\r
+ // W3C DOM Range Specs - Section 2.6 - Example 4\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_H1' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );\r
+\r
+ var docFrag = range.extractContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( '<h1>ckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p><p>a</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+ assert.areSame( '<h1 id="_h1">f</h1><p>nother paragraph.</p>', getInnerHtml( 'playground' ) );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_extractContents_Other : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_H1' ), 0 );\r
+ range.setEnd( doc.getById( 'playground' ).getLast(), 1 );\r
+\r
+ var docFrag = range.extractContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( '<h1>fckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p><p>another paragraph.</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+ assert.areSame( '<h1 id="_h1"></h1><p></p>', getInnerHtml( 'playground' ) );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_extractContents_Other_2 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( 'playground' ), 0 );\r
+ range.setEnd( doc.getById( 'playground' ), 2 );\r
+\r
+ var docFrag = range.extractContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( '<h1 id="_h1">fckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+ assert.areSame( '<p>another paragraph.</p>', getInnerHtml( 'playground' ) );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_extractContents_Other_3 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.selectNodeContents( doc.getById('_B') );\r
+\r
+ var docFrag = range.extractContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( 'some', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+ assert.areSame( '', getInnerHtml('_B'), 'HTML after extraction' );\r
+\r
+ assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_extractContents_Other_4 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.selectNodeContents( doc.getById('_Para') );\r
+\r
+ var docFrag = range.extractContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( 'this is <b id="_b">some</b> text.', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+ assert.areSame( '', getInnerHtml('_Para'), 'HTML after extraction' );\r
+\r
+ assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_extractContents_Other_5 : function()\r
+ {\r
+ document.getElementById( 'playground' ).innerHTML = '<p><b><i>test</i></b></p>';\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStartAfter( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('i')[0] ) );\r
+ range.setEndAfter( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('b')[0] ) );\r
+\r
+ var docFrag = range.extractContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( '<b></b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+ assert.areSame( '<p><b><i>test</i></b></p>', getInnerHtml( 'playground' ), 'HTML after extraction' );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( 'playground' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_extractContents_Other_6 : function()\r
+ {\r
+ document.getElementById( 'playground' ).innerHTML = '<p><b><i>test</i></b></p>';\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartBefore( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('b')[0] ) );\r
+ range.setEndBefore( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('i')[0] ) );\r
+\r
+ var docFrag = range.extractContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( '<b></b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
+ assert.areSame( '<p><b><i>test</i></b></p>', getInnerHtml( 'playground' ), 'HTML after extraction' );\r
+\r
+ assert.areSame( document.getElementById( 'playground' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( 'playground' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
+ assert.isTrue( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_cloneContents_W3C_1 : function()\r
+ {\r
+ // W3C DOM Range Specs - Section 2.7 - Example 1\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( '_Para' ), 2 );\r
+\r
+ var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+ var docFrag = range.cloneContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( 'his is <b>some</b>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+ // The body HTML must remain unchanged.\r
+ assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+ // The range must also remain unchanged.\r
+ assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_cloneContents_W3C_2 : function()\r
+ {\r
+ // W3C DOM Range Specs - Section 2.7 - Example 2\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_B' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( '_B' ).getNext(), 2 );\r
+\r
+ var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+ var docFrag = range.cloneContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( '<b>ome</b> t', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+ // The body HTML must remain unchanged.\r
+ assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+ // The range must also remain unchanged.\r
+ assert.areSame( document.getElementById( '_B' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_B' ).nextSibling, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_cloneContents_W3C_3 : function()\r
+ {\r
+ // W3C DOM Range Specs - Section 2.6 - Example 3\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.setStart( doc.getById( '_B' ).getPrevious(), 1 );\r
+ range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
+\r
+ var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+ var docFrag = range.cloneContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( 'his is <b>s</b>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+ // The body HTML must remain unchanged.\r
+ assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+ // The range must also remain unchanged.\r
+ assert.areSame( document.getElementById( '_B' ).previousSibling, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( '_B' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ // W3C DOM Range Specs - Section 2.6 - Example 4\r
+ test_cloneContents_W3C_4 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( doc.getById( '_H1' ).getFirst(), 1 );\r
+ range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );\r
+\r
+ var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+ var docFrag = range.cloneContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( '<h1>ckw3crange test</h1><p>this is <b>some</b> text.</p><p>a</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+ // The body HTML must remain unchanged.\r
+ assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+ // The range must also remain unchanged.\r
+ assert.areSame( document.getElementById( '_H1' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( 'playground' ).lastChild.firstChild, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_cloneContents_Other : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( doc.getById( '_H1' ), 0 );\r
+ range.setEnd( doc.getById( 'playground' ).getLast(), 1 );\r
+\r
+ var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+ var docFrag = range.cloneContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( '<h1>fckw3crange test</h1><p>this is <b>some</b> text.</p><p>another paragraph.</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+ // The body HTML must remain unchanged.\r
+ assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+ // The range must also remain unchanged.\r
+ assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( 'playground' ).lastChild, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_cloneContents_Other_2 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( doc.getById( 'playground' ), 0 );\r
+ range.setEnd( doc.getById( 'playground' ), 2 );\r
+\r
+ var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+ var docFrag = range.cloneContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( '<h1>fckw3crange test</h1><p>this is <b>some</b> text.</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+ // The body HTML must remain unchanged.\r
+ assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+ // The range must also remain unchanged.\r
+ assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_cloneContents_Other_3 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.selectNodeContents( doc.getById('_B') );\r
+\r
+ var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+ var docFrag = range.cloneContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( 'some', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+ // The body HTML must remain unchanged.\r
+ assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+ assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_cloneContents_Other_4 : function()\r
+ {\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.selectNodeContents( doc.getById('_Para') );\r
+\r
+ var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
+\r
+ var docFrag = range.cloneContents();\r
+\r
+ var tmpDiv = doc.createElement( 'div' );\r
+ docFrag.appendTo( tmpDiv );\r
+\r
+ assert.areSame( 'this is <b>some</b> text.', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
+\r
+ // The body HTML must remain unchanged.\r
+ assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
+\r
+ assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_createBookmark2_1 : function()\r
+ {\r
+ doc.getById( 'playground' ).setHtml( '<p id="P">This is <b id="B">a test</b></p>' );\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( doc.getById( 'P' ), 0 );\r
+ range.setEnd( doc.getById( 'B' ).getFirst(), 3 );\r
+\r
+ var bookmark = range.createBookmark2();\r
+\r
+ range = new CKEDITOR.dom.range( doc );\r
+ range.moveToBookmark( bookmark );\r
+\r
+ assert.areSame( document.getElementById('P'), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById('B').firstChild, range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ // This test is just like test_createBookmark2_3, but uses a "non\r
+ // normalized" bookmark.\r
+ test_createBookmark2_2 : function()\r
+ {\r
+ var html = '<p id="P">A B <b>C </b>D E</p>';\r
+\r
+ doc.getById( 'playground' ).setHtml( html );\r
+\r
+ var p = doc.getById( 'P' );\r
+\r
+ // Split the text nodes.\r
+ p.getFirst().split( 2 ); // Right before "B"\r
+ p.getChild( 3 ).split( 2 ); // Right before "E"\r
+\r
+ assert.areSame( 5, p.getChildCount(), 'The number of nodes after split doesn\'t match' );\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ // Create a range that enbraces "E".\r
+ range.setStartBefore( p.getChild( 4 ) );\r
+ range.setEndAfter( p.getChild( 4 ) );\r
+\r
+ var bookmark = range.createBookmark2();\r
+\r
+ range = new CKEDITOR.dom.range( doc );\r
+ range.moveToBookmark( bookmark );\r
+\r
+ assert.areSame( document.getElementById('P'), range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 4, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById('P'), range.endContainer.$, 'range.endContainer' );\r
+ assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_createBookmark2_3 : function()\r
+ {\r
+ var html = '<p id="P">A B <b>C </b>D E</p>';\r
+\r
+ doc.getById( 'playground' ).setHtml( html );\r
+\r
+ var p = doc.getById( 'P' );\r
+\r
+ // Split the text nodes.\r
+ p.getFirst().split( 2 ); // Right before "B"\r
+ p.getChild( 3 ).split( 2 ); // Right before "E"\r
+\r
+ assert.areSame( 5, p.getChildCount(), 'The number of nodes after split doesn\'t match' );\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ // Create a range that enbraces "E".\r
+ range.setStartBefore( p.getChild( 4 ) );\r
+ range.setEndAfter( p.getChild( 4 ) );\r
+\r
+ var bookmark = range.createBookmark2( true );\r
+\r
+ // Normalize the contents.\r
+ doc.getById( 'playground' ).setHtml( html );\r
+\r
+ range = new CKEDITOR.dom.range( doc );\r
+ range.moveToBookmark( bookmark );\r
+\r
+ assert.areSame( document.getElementById('P').childNodes[2], range.startContainer.$, 'range.startContainer' );\r
+ assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
+ assert.areSame( document.getElementById('P'), range.endContainer.$, 'range.endContainer' );\r
+\r
+ // Note that the endOffset doesn't get normalized as it's not\r
+ // needed. Any offset pointing over the container size is meant to\r
+ // be at the end of it.\r
+ assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
+ assert.isFalse( range.collapsed, 'range.collapsed' );\r
+ },\r
+\r
+ test_checkStartOfBlock1 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
+ range.collapse( true );\r
+\r
+ assert.isTrue( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock2 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
+ range.collapse( true );\r
+\r
+ assert.isFalse( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock3 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+ range.collapse( true );\r
+\r
+ assert.isTrue( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock4 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+ range.collapse( true );\r
+\r
+ assert.isFalse( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock5 : function()\r
+ {\r
+ var el = doc.getById( 'playground' );\r
+ el.setHtml( '<p> Test </p>' );\r
+ el = el.getFirst().getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ // IE trims the space in the beginning of text nodes in our case.\r
+ // So, let's just check it and make it pass.\r
+ range.setStart( el, ( el.substring( 0, 1 ) == 'T' ) ? 0 : 1 );\r
+ range.collapse( true );\r
+\r
+ assert.isTrue( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock6 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p> Test </p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( p.getFirst(), 5 );\r
+ range.collapse( true );\r
+\r
+ assert.isFalse( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock7 : function()\r
+ {\r
+ var el = doc.getById( 'playground' );\r
+ el.setHtml( '<p><b>Test</b></p>' );\r
+ el = el.getFirst().getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.selectNodeContents( el );\r
+\r
+ assert.isTrue( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock8 : function()\r
+ {\r
+ var el = doc.getById( 'playground' );\r
+ el.setHtml( '<p>A<b>Test</b>B</p>' );\r
+ el = el.getFirst().getFirst().getNext();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.selectNodeContents( el );\r
+\r
+ assert.isFalse( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock1 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
+ range.collapse( true );\r
+\r
+ assert.isFalse( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock2 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
+ range.collapse( true );\r
+\r
+ assert.isTrue( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock3 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+ range.collapse( true );\r
+\r
+ assert.isFalse( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock4 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+ range.collapse( true );\r
+\r
+ assert.isTrue( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock5 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p> Test </p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( p.getFirst(), 1 );\r
+ range.collapse( true );\r
+\r
+ assert.isFalse( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock6 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p> Test </p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( p.getFirst(), 5 );\r
+ range.collapse( true );\r
+\r
+ assert.isTrue( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock7 : function()\r
+ {\r
+ var el = doc.getById( 'playground' );\r
+ el.setHtml( '<p><b>Test</b></p>' );\r
+ el = el.getFirst().getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.selectNodeContents( el );\r
+\r
+ assert.isTrue( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock8 : function()\r
+ {\r
+ var el = doc.getById( 'playground' );\r
+ el.setHtml( '<p>A<b>Test</b>B</p>' );\r
+ el = el.getFirst().getFirst().getNext();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.selectNodeContents( el );\r
+\r
+ assert.isFalse( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock1 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
+ range.collapse( true );\r
+\r
+ assert.isTrue( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock2 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
+ range.collapse( true );\r
+\r
+ assert.isFalse( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock3 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+ range.collapse( true );\r
+\r
+ assert.isTrue( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock4 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+ range.collapse( true );\r
+\r
+ assert.isFalse( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock5 : function()\r
+ {\r
+ var el = doc.getById( 'playground' );\r
+ el.setHtml( '<p> Test </p>' );\r
+ el = el.getFirst().getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ // IE trims the space in the beginning of text nodes in our case.\r
+ // So, let's just check it and make it pass.\r
+ range.setStart( el, ( el.substring( 0, 1 ) == 'T' ) ? 0 : 1 );\r
+ range.collapse( true );\r
+\r
+ assert.isTrue( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock6 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p> Test </p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( p.getFirst(), 5 );\r
+ range.collapse( true );\r
+\r
+ assert.isFalse( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock7 : function()\r
+ {\r
+ var el = doc.getById( 'playground' );\r
+ el.setHtml( '<p><b>Test</b></p>' );\r
+ el = el.getFirst().getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.selectNodeContents( el );\r
+\r
+ assert.isTrue( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkStartOfBlock8 : function()\r
+ {\r
+ var el = doc.getById( 'playground' );\r
+ el.setHtml( '<p>A<b>Test</b>B</p>' );\r
+ el = el.getFirst().getFirst().getNext();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.selectNodeContents( el );\r
+\r
+ assert.isFalse( range.checkStartOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock1 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
+ range.collapse( true );\r
+\r
+ assert.isFalse( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock2 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
+ range.collapse( true );\r
+\r
+ assert.isTrue( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock3 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+ range.collapse( true );\r
+\r
+ assert.isFalse( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock4 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p>Test</p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+ range.collapse( true );\r
+\r
+ assert.isTrue( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock5 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p> Test </p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( p.getFirst(), 1 );\r
+ range.collapse( true );\r
+\r
+ assert.isFalse( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock6 : function()\r
+ {\r
+ var p = doc.getById( 'playground' );\r
+ p.setHtml( '<p> Test </p>' );\r
+ p = p.getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+\r
+ range.setStart( p.getFirst(), 5 );\r
+ range.collapse( true );\r
+\r
+ assert.isTrue( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock7 : function()\r
+ {\r
+ var el = doc.getById( 'playground' );\r
+ el.setHtml( '<p><b>Test</b></p>' );\r
+ el = el.getFirst().getFirst();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.selectNodeContents( el );\r
+\r
+ assert.isTrue( range.checkEndOfBlock() );\r
+ },\r
+\r
+ test_checkEndOfBlock8 : function()\r
+ {\r
+ var el = doc.getById( 'playground' );\r
+ el.setHtml( '<p>A<b>Test</b>B</p>' );\r
+ el = el.getFirst().getFirst().getNext();\r
+\r
+ var range = new CKEDITOR.dom.range( doc );\r
+ range.selectNodeContents( el );\r
+\r
+ assert.isFalse( range.checkEndOfBlock() );\r
+ },\r
+\r
+ /**\r
+ * Test trim with text range.\r
+ */\r
+ test_trim : function()\r
+ {\r
+ var text = doc.getById( '_trim_ct').getFirst();\r
+ var range = new CKEDITOR.dom.range();\r
+ range.setStart(text, 2);\r
+ range.setEnd(text, 6);\r
+ range.trim();\r
+\r
+ assert.isFalse( range.collapsed );\r
+ assert.isTrue( range.startContainer.equals( doc.getById( '_trim_ct') ) );\r
+ assert.areEqual( range.startOffset, 1 );\r
+ assert.isTrue( range.endContainer.equals( doc.getById( '_trim_ct') ) );\r
+ assert.areEqual( range.endOffset, 2 );\r
+ },\r
+\r
+ /**\r
+ * Trim range which collapsed at text node boundary.\r
+ */\r
+ test_trim_3790 : function()\r
+ {\r
+\r
+ var ct = doc.getById( '_trim_ct');\r
+ ct.setHtml( '<span id="_SPAN1">text</span>' );\r
+ var text = doc.getById( '_trim_ct').getFirst();\r
+\r
+ // <span id="_SPAN1">text^</span>\r
+ var range = new CKEDITOR.dom.range();\r
+ range.setStartAt( doc.getById( '_SPAN1' ).getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
+ range.collapse( true );\r
+ range.trim( true );\r
+\r
+ // <span id="_SPAN1">text^</span>\r
+ assert.isTrue( range.collapsed );\r
+ assert.areEqual( doc.getById( '_SPAN1').$, range.startContainer.$ );\r
+ assert.areEqual( range.startOffset, 1 );\r
+ },\r
+\r
+ /**\r
+ * Trim range which collapsed inside text node.\r
+ */\r
+ test_trim_3790_2 : function()\r
+ {\r
+\r
+ var ct = doc.getById( '_trim_ct');\r
+ ct.setHtml( '<span id="_SPAN1">text</span>' );\r
+ var text = doc.getById( '_trim_ct').getFirst();\r
+\r
+ // <span id="_SPAN1">te^xt</span>\r
+ var range = new CKEDITOR.dom.range();\r
+ range.setStart( doc.getById( '_SPAN1' ).getFirst(), 2 );\r
+ range.collapse( true );\r
+ range.trim( true );\r
+\r
+ // <span id="_SPAN1">te^xt</span>\r
+ assert.isTrue( range.collapsed );\r
+ assert.areEqual( doc.getById( '_SPAN1').$, range.startContainer.$ );\r
+ assert.areEqual( range.startOffset, 1 );\r
+ },\r
+ /////////////\r
+\r
+ setUp : function()\r
+ {\r
+ document.getElementById( 'playground' ).innerHTML = html1;\r
+ document.getElementById( 'playground2' ).innerHTML = html2;\r
+ },\r
+\r
+ name : document.title\r
+ };\r
+})() );\r
+\r
+//window.onload = tests.test_trim;\r
+ //]]>\r
+ </script>\r
+</head>\r
+<body>\r
+ <div id="playground" style="visibility:hidden"><h1 id="_H1">FCKW3CRange Test</h1><p id="_Para">This is <b id="_B">some</b> text.</p><p>Another paragraph.</p></div>\r
+ <div id="playground2" style="visibility: hidden">\r
+ <h1>\r
+ Test page for CKEditor\r
+ </h1>\r
+ <p id="_P">\r
+ This document contains various markup features commonly used by content editors\r
+ or "<span id="_Span" lang="fr">rédacteurs de contenu</span>" as they are\r
+ called in <a id="_A" href="http://en.wikipedia.org/wiki/France" title="Wikipedia article about France">\r
+ France</a>.<br />\r
+ It is important that a <acronym id="_Acronym" title="what you see is what you get">WYSIWYG</acronym>\r
+ tool has features that are easily available for the editor. If not, there is a risk\r
+ that content won't receive <strong id="_Strong">proper</strong> markup. Examples\r
+ of commonly found content are:</p>\r
+ <p id="_Pnbsp">\r
+ \r
+ </p>\r
+ <p id="_Pspaces">\r
+ </p>\r
+ <ol>\r
+ <li>Headings</li>\r
+ <li style="color: Red">Links (with optional title) </li>\r
+ <li>Lists (like this one)\r
+ <ul>\r
+ <li>including nested lists </li>\r
+ </ul>\r
+ </li>\r
+ <li>Tables\r
+ <ul>\r
+ <li>caption</li>\r
+ <li>headers</li>\r
+ <li>summary</li>\r
+ </ul>\r
+ </li>\r
+ <li>Language information</li>\r
+ <li>Acronyms and abbreviations</li>\r
+ <li>Emphasis and strong emphasis </li>\r
+ <li>Quotes, inline and block </li>\r
+ <li>Images</li>\r
+ </ol>\r
+ <hr />\r
+ <h2 style="background-color: Silver">\r
+ Test procedure\r
+ </h2>\r
+ This text has no block tag. It should be corrected when working with the enter key\r
+ set to "p" or "div" tags. The "br" configuration should not make changes instead.\r
+ <p id="_P2">\r
+ In the test we will try to recreate this document using the editor tools. To make\r
+ sure tables can be inserted <em id="_Em">properly</em> we re-visit banana import\r
+ statistics from 1998.\r
+ </p>\r
+ <p id="_P3">\r
+ This paragraph has and image at the very end of its contents.<img id="_Img" src="img.gif"\r
+ alt="" />\r
+ </p>\r
+ This text has no block tag.<br />It should be corrected when working with the enter key\r
+ set to "p" or "div" tags. The <strong id="_StrongNoPara">"br" configuration</strong>\r
+ should not make changes instead.<br />It has three lines separated by BR tags.\r
+ <p>\r
+ In the test we will try to recreate this document using the editor tools. To make\r
+ sure tables can be inserted <em>properly</em> we re-visit banana import statistics\r
+ from 1998.\r
+ </p>\r
+ <table summary="Sweden was the top importing country by far in 1998.">\r
+ <caption>\r
+ Top banana importers 1998 (value of banana imports in millions of US dollars per\r
+ million people)<br />\r
+ <br />\r
+ </caption>\r
+ <tr>\r
+ <th scope="col">\r
+ Country</th>\r
+ <th scope="col">\r
+ Millions of US dollars per million people</th>\r
+ </tr>\r
+ <tr>\r
+ <td>\r
+ Sweden</td>\r
+ <td>\r
+ 17.12</td>\r
+ </tr>\r
+ <tr>\r
+ <td>\r
+ United Kingdom</td>\r
+ <td>\r
+ 8.88</td>\r
+ </tr>\r
+ <tr>\r
+ <td>\r
+ Germany</td>\r
+ <td>\r
+ 8.36</td>\r
+ </tr>\r
+ <tr>\r
+ <td>\r
+ Italy</td>\r
+ <td>\r
+ 5.96</td>\r
+ </tr>\r
+ <tr>\r
+ <td>\r
+ United States</td>\r
+ <td>\r
+ 4.78</td>\r
+ </tr>\r
+ </table>\r
+ <p>\r
+ For block quotes we will have a look at <a href="http://fawny.org/rhcp.html">what Joe\r
+ Clark says about redheads</a>:</p>\r
+ <blockquote cite="http://fawny.org/rhcp.html#me">\r
+ <p>\r
+ "Since boyhood I’ve always believed, at the deepest level, that redheads are\r
+ standard-bearers of the grandest and most wondrous human beauty."</p>\r
+ </blockquote>\r
+ <p>\r
+ <img src="img.gif" alt="" /></p>\r
+ <p>\r
+ The above is the CKEditor logo loaded from the FCKeditor.net web site.</p>\r
+ <p><b id="_B1">Line 1<br />Line 2<br /><i id="_I1">Line 3</i></b></p>\r
+ <p id="_EnlargeP"> Test <b id="_EnlargeB"> <i id="_EnlargeI"> Enlarge</i> this</b> </p>\r
+ <p id="_EnlargeP1"> Test<b id="_EnlargeB1"> <i id="_EnlargeI1"> Enlarge</i> this</b> </p>\r
+ <p id="_EnlargeP2"> <b id="_EnlargeB2"> <i id="_EnlargeI2"> Enlarge</i> this</b> </p>\r
+ <p id="_EnlargeP3">Test<i id="_EnlargeI3"> Enlarge</i></p>\r
+ <p id="_EnlargeP4">Test <i id="_EnlargeI4"> Enlarge</i></p>\r
+ <p id="_EnlargeP5">Test <i id="_EnlargeI5">Enlarge</i></p>\r
+ <p id="_EnlargeP6">Test <i id="_EnlargeI6"><b></b>Enlarge</i></p>\r
+ <p id="_EnlargeP7">Test <span id="S1"></span>List<br/ >Item Enlarge</p>\r
+ <p id="_EnlargeP8">Test <span id="S2"></span>List<span id="E2"></span> <br /><br />Item Enlarge</p>\r
+ <p id="_EnlargeP9">Test List <br /><span id="S3"></span><br />Item Enlarge</p>\r
+ <p id="_EnlargeP10">Test List <br /><br />Item<span id="S4"></span> Enlarge</p>\r
+ <p id="_EnlargeP11">Test <strong>Block<span id="S5"></span></strong><br /><br />Enlarge</p>\r
+ <div id="_EnlargeP12">Test<span id="S6"></span> Block <div>Enlarge</div></div>\r
+ <div>Test <div id="_EnlargeP13">Blo<span id="S7"></span>ck</div> Enlarge</div>\r
+ <p id="_EnlargeP14"><span id="S8"></span></p>\r
+ <p id="_EnlargeP15">Test <span id="S9"></span>List<br/ >Item Enlarge</p>\r
+ <p id="_EnlargeP16">Test <strong>Block<span id="S10"></span></strong><br /><br />Enlarge</p>\r
+ <p id="_EnlargeP17"><span><span id="S11"></span>Test Block Enlarge<span id="E11"></span></span></p>\r
+ <p id="_trim_ct">Test trim</p>\r
+ </div>\r
+ <script type="text/javascript">\r
+ //<![CDATA[\r
+\r
+html1 = document.getElementById( 'playground' ).innerHTML;\r
+html2 = document.getElementById( 'playground2' ).innerHTML;\r
+\r
+ //]]>\r
+ </script>\r
+</body>\r
+</html>\r