Index: /CKEditor/tests/tt/4513/1.html
===================================================================
--- /CKEditor/tests/tt/4513/1.html	(revision 5083)
+++ /CKEditor/tests/tt/4513/1.html	(revision 5083)
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Ticket: #4513</title>
+	<meta name="tags" content="editor,unit,stable">
+	<script type="text/javascript" src="../../cktester/cell.js"></script>
+	<script type="text/javascript">
+//<![CDATA[
+
+// Tests for CKEDITOR.dom.range::shrink.
+var tc;
+CKEDITOR.test.addTestCase( tc = (function()
+{
+	var assert	 = CKEDITOR.test.assert;
+	var doc = new CKEDITOR.dom.document( document );
+
+	return {
+//	shouldIgnoreAllBut : [ 'test_shrink_4' ],
+		test_shrink_1: function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStartAt( doc.getById( '_L1'), CKEDITOR.POSITION_BEFORE_START );
+			range.setEndAt( doc.getById( '_L1'), CKEDITOR.POSITION_AFTER_END );
+			// <p id="_P1">some text and [<a href="#">a link</a>]</p>
+
+			range.shrink();
+
+			// <p id="_P1">some text and <a href="#">[a link]</a></p>
+			assert.areSame( doc.getById( '_L1').$, range.startContainer.$ );
+			assert.areSame( doc.getById( '_L1').$, range.endContainer.$ );
+			assert.areSame( 0, range.startOffset );
+			assert.areSame( 1, range.endOffset );
+		},
+
+		test_shrink_2: function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStartAt( doc.getById( '_B1'), CKEDITOR.POSITION_BEFORE_START );
+			range.setEndAt( doc.getById( '_L1'), CKEDITOR.POSITION_AFTER_END );
+			// <p id="_P1">some text and [<b><a href="#">a link</a>]</b></p>
+
+			range.shrink();
+
+			// <p id="_P1">some text and <a href="#">[a link]</a></p>
+			assert.areSame( doc.getById( '_L1').$, range.startContainer.$ );
+			assert.areSame( doc.getById( '_L1').$, range.endContainer.$ );
+			assert.areSame( 0, range.startOffset );
+			assert.areSame( 1, range.endOffset );
+		},
+
+		test_shrink_3: function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStartAt( doc.getById( '_I1'), CKEDITOR.POSITION_BEFORE_END );
+			range.setEndAt( doc.getById( '_P1'), CKEDITOR.POSITION_AFTER_END );
+			// <p id="_P1">some text <i>and[</i><b><a href="#">a link</a></b></p>]
+
+			range.shrink();
+
+			// <p id="_P1">some text and <a href="#">[a link]</a></p>
+			assert.areSame( doc.getById( '_L1').$, range.startContainer.$ );
+			assert.areSame( doc.getById( '_L1').$, range.endContainer.$ );
+			assert.areSame( 0, range.startOffset );
+			assert.areSame( 1, range.endOffset );
+		},
+
+		test_shrink_4: function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStart( doc.getById( '_L1').getFirst(), 2 );
+			range.setEndAt( doc.getById( '_B1'), CKEDITOR.POSITION_AFTER_END );
+			// <p id="_P1">some text <i>and</i><b><a href="#">a ^link</a></b>]</p>
+
+			range.shrink();
+
+			// <p id="_P1">some text and <a href="#">a [link]</a></p>
+			assert.areSame( doc.getById( '_L1').getFirst().$, range.startContainer.$ );
+			assert.areSame( doc.getById( '_L1').$, range.endContainer.$ );
+			assert.areSame( 2, range.startOffset );
+			assert.areSame( 1, range.endOffset );
+		},
+
+		test_shrink_5: function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStart( doc.getById( '_L1').getFirst(), 2 );
+			range.setEnd( doc.getById( '_L1').getFirst(), 6 );
+			// <p id="_P1">some text <i>and</i><b><a href="#">a [link]</a></b>]</p>
+
+			range.shrink();
+
+			// <p id="_P1">some text and <a href="#">a [link]</a></p>
+			assert.areSame( doc.getById( '_L1').getFirst().$, range.startContainer.$ );
+			assert.areSame( doc.getById( '_L1').$, range.endContainer.$ );
+			assert.areSame( 2, range.startOffset );
+			assert.areSame( 1, range.endOffset );
+		},
+
+		test_shrink_6: function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStart( doc.getById( '_L1').getFirst(), 2 );
+			range.setEnd( doc.getById( '_L1').getFirst(), 4 );
+			// <p id="_P1">some text <i>and</i><b><a href="#">a [li]nk</a></b>]</p>
+
+			var retval = range.shrink();
+
+			// <p id="_P1">some text and <a href="#">a [li]nk</a></p>
+			assert.isFalse( retval );
+			assert.areSame( doc.getById( '_L1').getFirst().$, range.startContainer.$ );
+			assert.areSame( doc.getById( '_L1').getFirst().$, range.endContainer.$ );
+			assert.areSame( 2, range.startOffset );
+			assert.areSame( 4, range.endOffset );
+		},
+
+		name : document.title
+	};
+})() );
+	//]]>
+	</script>
+</head>
+<body>
+	<p id="_P1">some text <i id="_I1">and</i><b id="_B1"><a id="_L1" href="#">a link</a></b></p>
+</body>
+</html>
