Index: /CKEditor/tests/dt/plugins/domiterator/domiterator_v4.html
===================================================================
--- /CKEditor/tests/dt/plugins/domiterator/domiterator_v4.html	(revision 6494)
+++ /CKEditor/tests/dt/plugins/domiterator/domiterator_v4.html	(revision 6494)
@@ -0,0 +1,471 @@
+<!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>Plugin: domiterator</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+	<meta name="tags" content="editor,unit,v4">
+	<script type="text/javascript" src="../../../cktester/cell.js"></script>
+	<script type="text/javascript">
+CKEDITOR.test.runner.defer = true;
+CKEDITOR.plugins.load( ['domiterator'], function()
+{
+	CKEDITOR.test.runner.run();
+});
+	//<![CDATA[
+CKEDITOR.test.addTestCase( (function()
+{
+	// Local references.
+	var assert = CKEDITOR.test.assert,
+		arrayAssert = YAHOO.util.ArrayAssert,
+		$ = CKEDITOR.dom.element,
+		$$ = function( selector, singleton )
+		{
+			var retval = YAHOO.util.Selector.query( selector, '', singleton );
+			return singleton && retval ? new $( retval ) : retval;
+		};
+
+	var doc = new CKEDITOR.dom.document( document );
+
+
+	/**
+	 *
+	 * @param {String|CKEDITOR.dom.range} containerId|range Either the id of html container which contents are treated as range, or a exisiting range object.
+	 * @param {Object} blocklist
+	 * @param {Array} expectedTagList block elements tagName list in iteration orders.
+	 */
+	function checkIteration( containerIdOrRange, blocklist, opt, expectedTagList )
+	{
+		var range;
+		if( typeof containerIdOrRange == 'string' )
+		{
+			range = new CKEDITOR.dom.range( doc );
+			range.selectNodeContents( doc.getById( containerIdOrRange ) );
+		}
+		else
+			range = containerIdOrRange;
+
+		var iter = range.createIterator( blocklist );
+		opt && CKEDITOR.tools.extend( iter, opt, true );
+		var blockList = [], block;
+		while (( block = iter.getNextParagraph() ) )
+		{
+			blockList.push( block.getName() );
+		}
+		arrayAssert.itemsAreEqual( expectedTagList, blockList );
+	}
+
+	return {
+
+	/*
+	<table>
+			<tr>
+				<th>
+					[head1
+				</th>
+			</tr>
+			<tr>
+				<td><p>cell1</p></td>
+			</tr>
+			<tr>
+				<td>cell2]</td>
+			</tr>
+		</table>
+	*/
+	test_iterator_table_1 : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.setStartAt( $$( '#contents_1 th', 1 ), CKEDITOR.POSITION_AFTER_START );
+		range.setEndAt( $$( '#contents_1 tr:nth-child(3) td', 1 ), CKEDITOR.POSITION_BEFORE_END );
+		checkIteration( range, null, null, [ 'p', 'p', 'p' ] );
+	},
+
+	/*
+	[<table>
+		<caption>title</caption>
+			<tr>
+				<th>
+					head1
+				</th>
+			</tr>
+			<tr>
+				<td><p>cell1</p></td>
+			</tr>
+			<tr>
+				<td>cell2</td>
+			</tr>
+		</table>]
+	*/
+	test_iterator_table_2 : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.selectNodeContents( $$( '#contents_1_2', 1 ) );
+		checkIteration( range, [ 'caption', 'th', 'td'], null, [ 'caption', 'th', 'td', 'td' ] );
+	},
+
+	/*
+	<table>
+			<tr>
+				<th>
+					head1[
+				</th>
+			</tr>
+			<tr>
+				<td>]cell1</td>
+			</tr>
+		</table>
+	*/
+	test_iterator_table_3 : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.setStart( $$( '#contents_1_3 th', 1 ), 1 );
+		range.setEnd( $$( '#contents_1_3 td', 1 ), 0 );
+		checkIteration( range, [ 'table' ], null, [ 'table' ] );
+	},
+
+	/*
+		<p>
+			line1^
+			<br />
+			line2
+		</p>
+	*/
+	test_iterator_paragraph_brMode : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.setStartAfter( $$( '#contents_2 p', true ).getFirst() );
+		checkIteration( range, null , { enlargeBr : false }, [ 'p' ] );
+		assert.areSame( 2, $$( '#contents_2 p' ).length );
+	},
+
+	/*
+	[<p>
+		line1
+		<br />
+		line2
+		<br />
+		line3
+		<br />
+	</p>]
+	*/
+	test_iterator_paragraph_brMode_2 : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.selectNodeContents( $$( '#contents_2_2', true ) );
+		checkIteration( range, null , { enlargeBr : false }, [ 'p', 'p', 'p' ] );
+		assert.areSame( 3, $$( '#contents_2_2 p' ).length );
+	},
+
+	/*
+		line1
+		<br />
+		^line2
+	*/
+	test_iterator_paragraph_brMode_3 : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.setStart( $$( '#contents_2_3', true ), 3 );
+		checkIteration( range, null , { enlargeBr : false }, [ 'p' ] );
+		assert.areSame( 1, $$( '#contents_2_3 p' ).length );
+	},
+
+	/*
+		line1
+		<br />
+		line2^
+		<br />
+		line3
+	*/
+	test_iterator_paragraph_brMode_4 : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.setStart( $$( '#contents_2_4', true ), 4 );
+		checkIteration( range, null , { enlargeBr : false }, [ 'p' ] );
+		assert.areSame( 0, $$( '#contents_2_4 br' ).length );
+		assert.areSame( 1, $$( '#contents_2_4 p' ).length );
+	},
+
+	/*
+		[<pre>
+			line1
+			<br />
+			line2
+		</pre>]
+	*/
+	test_iterator_pre : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.selectNodeContents( $$( '#contents_3', true ) );
+		checkIteration( range, null , { enlargeBr : false }, [ 'pre' ] );
+		checkIteration( range, null , null, [ 'pre' ] );
+	},
+
+	/*
+	<ul>
+		<li>[item1</li>
+		<li>item2</li>
+		<li>item3
+			<ul>
+				<li>item4]</li>
+				<li>item5</li>
+			</ul>
+		</li>
+	</ul>
+	*/
+	test_iterator_list : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.setStartAt( $$( '#contents_4>ul>li:nth-child(1)', true ), CKEDITOR.POSITION_AFTER_START );
+		range.setEndAt( $$( '#contents_4>ul ul li', true ), CKEDITOR.POSITION_BEFORE_END );
+		checkIteration( range, [ 'li' ], null, [ 'li', 'li', 'p' ,'li' ] );
+	},
+
+	/*
+		[<ul>
+			<li>list1</li>
+		</ul>
+		<ol>
+			<li>list2</li>
+		</ol>
+		<dl>
+			<dt>list3</dt>
+			<dd>list3</dd>
+		</dl>]
+	*/
+	test_iterator_list_2 : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.selectNodeContents( $$( '#contents_4_2', true ) );
+		checkIteration( range, [ 'ul', 'ol', 'dl', 'li' ], null, [ 'ul', 'ol', 'dl' ] );
+	},
+
+	/*
+	<ul>
+		<li>item1</li>
+		<li>[item2</li>
+		<li>item3
+			<ul>
+				<li>item4</li>
+				<li>item5]</li>
+			</ul>
+		</li>
+	</ul>
+	*/
+	test_iterator_list_3 : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.setStart( $$( '#contents_4_3>ul>li:nth-child(2)', true ), 0 );
+		range.setEnd( $$( '#contents_4_3>ul ul>li:nth-child(2)', true ), 1 );
+		checkIteration( range, [ 'ul' ], null, [ 'p', 'p', 'ul' ] );
+	},
+
+	/*
+	<ul>
+		<li>item1<br />[item2</li>
+		<li>item3
+			<ul>
+				<li>item4]<br />item5</li>
+			</ul>
+		</li>
+	</ul>
+	*/
+	test_iterator_list_4 : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.setStart( $$( '#contents_4_4>ul>li:nth-child(1)', true ), 2 );
+		range.setEnd( $$( '#contents_4_4>ul ul>li:nth-child(1)', true ), 1 );
+		checkIteration( range, null, { enlargeBr: false }, [ 'p', 'p', 'p' ] );
+		assert.areSame( 3, $$( '#contents_4_4 p' ).length );
+		assert.areSame( 0, $$( '#contents_4_4 br' ).length );
+	},
+
+	/*
+	[<div>
+		pseudo paragraph
+		<p>pargraph</p>
+	</div>]
+	*/
+	test_iterator_pseudo : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.selectNodeContents( $$( '#contents_5', true ) );
+		checkIteration( range, null, null, [ 'p', 'p' ] );
+	},
+
+	/*
+	<blockquote>
+		<h1>[heading1</h1>
+		<p>paragraph1]</p>
+	</blockquote>
+	*/
+	test_iterator_blockquote : function()
+	{
+		var range = new CKEDITOR.dom.range( doc );
+		range.setStart( $$( '#contents_6 h1', true ), 0 );
+		range.setEnd( $$( '#contents_6 p', true ), 1 );
+		checkIteration( range, ['blockquote' ], null, [ 'blockquote' ] );
+	},
+
+//	shouldIgnoreAllBut : [ 'test_iterator_paragraph_brMode' ],
+	name : document.title
+	};
+})() );
+
+	//]]>
+	</script>
+</head>
+<body>
+
+
+<div id="contents_1">
+	<table>
+		<tr>
+			<th>
+				head1
+			</th>
+		</tr>
+		<tr>
+			<td><p>cell1</p></td>
+		</tr>
+		<tr>
+			<td>cell2</td>
+		</tr>
+	</table>
+</div>
+
+<div id="contents_1_2">
+	<table>
+		<caption>caption</caption>
+		<tr>
+			<th>
+				head1
+			</th>
+		</tr>
+		<tr>
+			<td><p>cell1</p></td>
+		</tr>
+		<tr>
+			<td>cell2</td>
+		</tr>
+	</table>
+</div>
+
+<div id="contents_1_3">
+	<table>
+			<tr>
+				<th>
+					head1
+				</th>
+			</tr>
+			<tr>
+				<td>cell1</td>
+			</tr>
+		</table>
+</div>
+
+<div id="contents_2">
+	<p>
+		line1
+		<br />
+		line2
+	</p>
+</div>
+
+<div id="contents_2_2">
+	<p>
+		line1
+		<br />
+		line2
+		<br />
+		line3
+		<br />
+	</p>
+</div>
+
+<div id="contents_2_3">
+		<div>paragraph</div>
+		line1
+		<br />
+		line2
+</div>
+
+<div id="contents_2_4">
+		<div>paragraph</div>
+		line1
+		<br />
+		line2
+		<br />
+		line3
+</div>
+
+<div id="contents_3">
+	<pre>
+		line1
+		<br />
+		line2
+	</pre>
+</div>
+
+<div id="contents_4">
+	<ul>
+		<li>[item1</li>
+		<li><p>item2</p></li>
+		<li>item3
+			<ul>
+				<li>item4]</li>
+				<li>item5</li>
+			</ul>
+		</li>
+	</ul>
+</div>
+
+<div id="contents_4_2">
+	<ul>
+		<li>list1</li>
+	</ul>
+	<ol>
+		<li>list2</li>
+	</ol>
+	<dl>
+		<dt>list3</dt>
+		<dd>list3</dd>
+	</dl>
+</div>
+
+<div id="contents_4_3">
+	<ul>
+		<li>[item1</li>
+		<li>item2</li>
+		<li>item3
+			<ul>
+				<li>item4</li>
+				<li>item5]</li>
+			</ul>
+		</li>
+	</ul>
+</div>
+
+<div id="contents_4_4">
+	<ul>
+		<li>item1<br />[item2</li>
+		<li>item3
+			<ul>
+				<li>item4<br />item5</li>
+			</ul>
+		</li>
+	</ul>
+</div>
+
+<div id="contents_5">
+	pseudo paragraph
+	<p>pargraph</p>
+</div>
+
+<div id="contents_6">
+	<blockquote>
+		<h1>heading1</h1>
+		<p>paragraph1</p>
+	</blockquote>
+</div>
+
+</body>
+</html>
