1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
\r
2 <html xmlns="http://www.w3.org/1999/xhtml">
\r
4 <title>CKEDITOR.dom.walker</title>
\r
5 <link rel="stylesheet" type="text/css" href="../../test.css" />
\r
6 <script type="text/javascript" src="../../../ckeditor.js"></script>
\r
7 <script type="text/javascript" src="../../test.js"></script>
\r
8 <script type="text/javascript">
\r
13 CKEDITOR.test.addTestCase( tc = (function()
\r
15 // Local reference to the "assert" object.
\r
16 var assert = CKEDITOR.test.assert;
\r
18 var doc = new CKEDITOR.dom.document( document );
\r
20 function assertNodesList( wanted, nodes )
\r
22 var simplifiedNodes = [];
\r
24 for ( var i = 0 ; i < nodes.length ; i++ )
\r
25 simplifiedNodes.push( nodes[i].type == CKEDITOR.NODE_TEXT ? nodes[i].getText() : ( '<' + nodes[i].getName() + '>' ) );
\r
27 assert.areSame( wanted.toString(), simplifiedNodes.toString() );
\r
32 test_collapsed : function()
\r
34 var node = doc.getById( 'playground' );
\r
35 node.setHtml( '<p>Test</p>' );
\r
37 var range = new CKEDITOR.dom.range( doc );
\r
39 range.setStartAt( node.getFirst(), CKEDITOR.POSITION_AFTER_START );
\r
40 range.collapse( true );
\r
42 var walker = new CKEDITOR.dom.walker( range );
\r
44 assert.isNull( walker.next() );
\r
47 test_next_1 : function()
\r
49 var node = doc.getById( 'playground' );
\r
50 node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );
\r
52 var range = new CKEDITOR.dom.range( doc );
\r
53 range.selectNodeContents( node );
\r
55 var walker = new CKEDITOR.dom.walker( range );
\r
58 while ( ( node = walker.next() ) )
\r
61 assertNodesList( [ '<p>', 'This is ', '<b>', 'a ', '<i>', 'simple', ' test' ], nodes );
\r
64 test_next_2 : function()
\r
66 var node = doc.getById( 'playground' );
\r
67 node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );
\r
69 var range = new CKEDITOR.dom.range( doc );
\r
70 range.setStartAt( node.getFirst(), CKEDITOR.POSITION_AFTER_START );
\r
71 range.setEnd( node.getChild( [0,1,1,0] ), 2 );
\r
73 var walker = new CKEDITOR.dom.walker( range );
\r
76 while ( ( node = walker.next() ) )
\r
79 assertNodesList( [ 'This is ', '<b>', 'a ', '<i>', 'si' ], nodes );
\r
82 test_next_3 : function()
\r
84 var node = doc.getById( 'playground' );
\r
85 node.setHtml( '<p>Test</p><h1>More</h1>' );
\r
87 var range = new CKEDITOR.dom.range( doc );
\r
88 range.setStartAt( node.getChild( 1 ), CKEDITOR.POSITION_BEFORE_START );
\r
89 range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );
\r
91 var walker = new CKEDITOR.dom.walker( range );
\r
94 while ( ( node = walker.next() ) )
\r
97 assertNodesList( [ '<h1>' ], nodes );
\r
100 test_next_4 : function()
\r
102 var node = doc.getById( 'playground' );
\r
103 node.setHtml( '<p>Test</p><h1>More</h1>' );
\r
105 var range = new CKEDITOR.dom.range( doc );
\r
106 range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );
\r
107 range.setEndAt( node.getChild( 0 ), CKEDITOR.POSITION_AFTER_END );
\r
109 var walker = new CKEDITOR.dom.walker( range );
\r
112 while ( ( node = walker.next() ) )
\r
113 nodes.push( node );
\r
115 assertNodesList( [], nodes );
\r
118 test_next_5 : function()
\r
120 var node = doc.getById( 'playground' );
\r
121 node.setHtml( '<p>Test</p><h1>More</h1>' );
\r
123 var range = new CKEDITOR.dom.range( doc );
\r
124 range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );
\r
125 range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );
\r
127 var walker = new CKEDITOR.dom.walker( range );
\r
130 while ( ( node = walker.next() ) )
\r
131 nodes.push( node );
\r
133 assertNodesList( [ '<h1>' ], nodes );
\r
136 test_previous_1 : function()
\r
138 var node = doc.getById( 'playground' );
\r
139 node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );
\r
141 var range = new CKEDITOR.dom.range( doc );
\r
142 range.selectNodeContents( node );
\r
144 var walker = new CKEDITOR.dom.walker( range );
\r
147 while ( ( node = walker.previous() ) )
\r
148 nodes.push( node );
\r
150 assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', 'a ', 'This is ' ], nodes );
\r
153 test_previous_2 : function()
\r
155 var node = doc.getById( 'playground' );
\r
156 node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );
\r
158 var range = new CKEDITOR.dom.range( doc );
\r
159 range.setEnd( node.getChild( [0,0] ), 2 );
\r
160 range.setEnd( node.getChild( [0,1,1,0] ), 2 );
\r
162 var walker = new CKEDITOR.dom.walker( range );
\r
165 while ( ( node = walker.previous() ) )
\r
166 nodes.push( node );
\r
168 assertNodesList( [ 'si', 'a ', 'is is ' ], nodes );
\r
171 test_previous_3 : function()
\r
173 var node = doc.getById( 'playground' );
\r
174 node.setHtml( '<p>Test</p><h1>More</h1>' );
\r
176 var range = new CKEDITOR.dom.range( doc );
\r
177 range.setStartAt( node.getChild( 1 ), CKEDITOR.POSITION_BEFORE_START );
\r
178 range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );
\r
180 var walker = new CKEDITOR.dom.walker( range );
\r
183 while ( ( node = walker.previous() ) )
\r
184 nodes.push( node );
\r
186 assertNodesList( [ '' ], nodes );
\r
189 test_previous_4 : function()
\r
191 var node = doc.getById( 'playground' );
\r
192 node.setHtml( '<p>Test</p><h1>More</h1>' );
\r
194 var range = new CKEDITOR.dom.range( doc );
\r
195 range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );
\r
196 range.setEndAt( node.getChild( 0 ), CKEDITOR.POSITION_AFTER_END );
\r
198 var walker = new CKEDITOR.dom.walker( range );
\r
201 while ( ( node = walker.previous() ) )
\r
202 nodes.push( node );
\r
204 assertNodesList( [ '<p>' ], nodes );
\r
207 test_previous_5 : function()
\r
209 var node = doc.getById( 'playground' );
\r
210 node.setHtml( '<p>Test</p><h1>More</h1>' );
\r
212 var range = new CKEDITOR.dom.range( doc );
\r
213 range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );
\r
214 range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );
\r
216 var walker = new CKEDITOR.dom.walker( range );
\r
219 while ( ( node = walker.previous() ) )
\r
220 nodes.push( node );
\r
222 assertNodesList( [ '<p>' ], nodes );
\r
226 * Test guard function is invoked on every move when iterating forward.
\r
228 test_guard_1 : function()
\r
230 var node = doc.getById( 'playground' );
\r
231 node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );
\r
233 var range = new CKEDITOR.dom.range( doc );
\r
234 range.selectNodeContents( node );
\r
236 var walker = new CKEDITOR.dom.walker( range );
\r
239 walker.guard = function( node )
\r
241 nodes.push( node );
\r
245 while ( ( node = walker.next() ) )
\r
248 assertNodesList( [ '<p>', 'This is ', '<b>', 'a ', '<i>', 'simple', '<i>', '<b>',' test' , '<p>' ], nodes );
\r
252 * Test guard function is invoked on every move when iterating backward.
\r
254 test_guard_2 : function()
\r
256 var node = doc.getById( 'playground' );
\r
257 node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );
\r
259 var range = new CKEDITOR.dom.range( doc );
\r
260 range.selectNodeContents( node );
\r
262 var walker = new CKEDITOR.dom.walker( range );
\r
265 walker.guard = function( node )
\r
267 nodes.push( node );
\r
271 while ( ( node = walker.previous() ) )
\r
274 assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', '<i>', 'a ', '<b>', 'This is ', '<p>' ], nodes );
\r
278 * Test evaluator function is invoked on every step when iterating backward.
\r
280 test_evaluator_1 : function()
\r
282 var node = doc.getById( 'playground' );
\r
283 node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );
\r
285 var range = new CKEDITOR.dom.range( doc );
\r
286 range.selectNodeContents( node );
\r
288 var walker = new CKEDITOR.dom.walker( range );
\r
291 walker.evaluator = function( node )
\r
293 nodes.push( node );
\r
297 while ( ( node = walker.previous() ) )
\r
300 assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', 'a ', 'This is ' ], nodes );
\r
303 * Test walker stop at empty endContainer.
\r
305 test_stopGuard : function()
\r
307 var node = doc.getById( 'playground' );
\r
308 node.setHtml( '<span></span>afterEnd' );
\r
309 var endContainer = node.getFirst();
\r
310 var range = new CKEDITOR.dom.range( doc );
\r
311 range.selectNodeContents( node );
\r
312 range.setEndAt( endContainer, CKEDITOR.POSITION_AFTER_START );
\r
314 var walker = new CKEDITOR.dom.walker( range );
\r
317 walker.evaluator = function( node )
\r
319 nodes.push( node );
\r
323 while ( ( node = walker.next() ) )
\r
326 assertNodesList( [ '<span>' ], nodes );
\r
329 name : document.title
\r
333 //window.onload = tc.test_stopGuard;
\r
338 <div id="playground"></div>
\r