Index: /CKEditor/tests/dt/core/dom/range.html
===================================================================
--- /CKEditor/tests/dt/core/dom/range.html	(revision 5253)
+++ /CKEditor/tests/dt/core/dom/range.html	(revision 5254)
@@ -27,4 +27,7 @@
 
 	return tests = {
+
+//		shouldIgnoreAllBut : [ 'test_shrink_element2' ],
+
 		test__constructor : function()
 		{
@@ -2243,4 +2246,75 @@
 			assert.areEqual( range.startOffset, 1 );
 		},
+
+		test_shrink_text : function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStartBefore( doc.getById( '_ShrinkB1' ) );
+			range.setEndAt( doc.getById( '_ShrinkB1' ).getNext(), CKEDITOR.POSITION_AFTER_START );
+			// <p>Test shrink [<b><i>text</i></b>].</p>
+
+			range.shrink( CKEDITOR.SHRINK_TEXT );
+
+			// <p>Test shrink <b><i>[text]</i></b>.</p>
+			assert.areSame( doc.getById( '_ShrinkI1' ).$, range.startContainer.$, 'range.startContainer' );
+			assert.areSame( 0, range.startOffset, 'range.startOffset' );
+			assert.areSame( doc.getById( '_ShrinkI1' ).$, range.endContainer.$, 'range.endContainer' );
+			assert.areSame( 1, range.endOffset, 'range.endOffset' );
+			assert.isFalse( range.collapsed, 'range.collapsed' );
+		},
+
+		test_shrink_text2 : function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStartBefore( doc.getById( '_ShrinkB2' ) );
+			range.setEnd( doc.getById( '_ShrinkI2' ).getFirst(), 2 );
+
+			// <p>Test [<b>shrink <i>te]xt</i></b>.</p>
+			range.shrink( CKEDITOR.SHRINK_TEXT );
+
+			// <p>Test <b>[shrink <i>te]xt</i></b>.</p>
+			assert.areSame( doc.getById( '_ShrinkB2' ).$, range.startContainer.$, 'range.startContainer' );
+			assert.areSame( 0, range.startOffset, 'range.startOffset' );
+			assert.areSame( doc.getById( '_ShrinkI2' ).getFirst().$, range.endContainer.$, 'range.endContainer' );
+			assert.areSame( 2, range.endOffset, 'range.endOffset' );
+			assert.isFalse( range.collapsed, 'range.collapsed' );
+		},
+
+		// Test shrink to an element range.
+		test_shrink_element : function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStartBefore( doc.getById( '_ShrinkB3' ) );
+			range.setEndAt( doc.getById( '_ShrinkB3' ).getNext(), CKEDITOR.POSITION_AFTER_START );
+			// <p >Test shrink [<b><i><img /></i></b>]element.</p>
+
+			range.shrink( CKEDITOR.SHRINK_ELEMENT );
+
+			// <p >Test shrink <b><i>[<img />]</i></b>element.</p>
+			assert.areSame( doc.getById( '_ShrinkI3' ).$, range.startContainer.$, 'range.startContainer' );
+			assert.areSame( 0, range.startOffset, 'range.startOffset' );
+			assert.areSame( doc.getById( '_ShrinkI3' ).$, range.endContainer.$, 'range.endContainer' );
+			assert.areSame( 1, range.endOffset, 'range.endOffset' );
+			assert.isFalse( range.collapsed, 'range.collapsed' );
+		},
+
+		// Test shrink to an element range failed.
+		test_shrink_element2 : function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStart( doc.getById( '_ShrinkB4' ).getFirst(), 2 );
+			range.setEnd( doc.getById( '_ShrinkI4' ).getNext(), 2 );
+			// <p> Test <b>sh[rink <i><img /></i>el]ement</b>.</p>
+
+			range.shrink( CKEDITOR.SHRINK_ELEMENT );
+
+			// <p> Test <b>sh[rink <i><img /></i>el]ement</b>.</p>
+			assert.areSame( doc.getById( '_ShrinkB4' ).getFirst().$, range.startContainer.$, 'range.startContainer' );
+			assert.areSame( 2, range.startOffset, 'range.startOffset' );
+			assert.areSame( doc.getById( '_ShrinkI4' ).getNext().$, range.endContainer.$, 'range.endContainer' );
+			assert.areSame( 2, range.endOffset, 'range.endOffset' );
+			assert.isFalse( range.collapsed, 'range.collapsed' );
+		},
+
 		/////////////
 
@@ -2398,4 +2472,8 @@
 		<p id="_EnlargeP17"><span><span id="S11"></span>Test Block Enlarge<span id="E11"></span></span></p>
 		<p id="_trim_ct">Test trim</p>
+		<p id="_ShrinkP1"> Test shrink <b id="_ShrinkB1"><i id="_ShrinkI1">text</i></b>.</p>
+		<p id="_ShrinkP2"> Test <b id="_ShrinkB2">shrink <i id="_ShrinkI2">text</i></b>.</p>
+		<p id="_ShrinkP3"> Test shrink <b id="_ShrinkB3"><i id="_ShrinkI3"><img /></i></b>element.</p>
+		<p id="_ShrinkP4"> Test <b id="_ShrinkB4">shrink <i id="_ShrinkI4"><img /></i>element</b>.</p>
 	</div>
 	<script type="text/javascript">
