JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
e17b3f1dfeda60568e5489fe4d4c183c7812873f
[ckeditor.git] / _tests / core / dom / walker.html
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
3 <head>\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
9         //<![CDATA[\r
10 \r
11 var tc;\r
12 \r
13 CKEDITOR.test.addTestCase( tc = (function()\r
14 {\r
15         // Local reference to the "assert" object.\r
16         var assert = CKEDITOR.test.assert;\r
17 \r
18         var doc = new CKEDITOR.dom.document( document );\r
19 \r
20         function assertNodesList( wanted, nodes )\r
21         {\r
22                 var simplifiedNodes = [];\r
23 \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
26 \r
27                 assert.areSame( wanted.toString(), simplifiedNodes.toString() );\r
28         }\r
29 \r
30         return {\r
31 \r
32                 test_collapsed : function()\r
33                 {\r
34                         var node = doc.getById( 'playground' );\r
35                         node.setHtml( '<p>Test</p>' );\r
36 \r
37                         var range = new CKEDITOR.dom.range( doc );\r
38 \r
39                         range.setStartAt( node.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
40                         range.collapse( true );\r
41 \r
42                         var walker = new CKEDITOR.dom.walker( range );\r
43 \r
44                         assert.isNull( walker.next() );\r
45                 },\r
46 \r
47                 test_next_1 : function()\r
48                 {\r
49                         var node = doc.getById( 'playground' );\r
50                         node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
51 \r
52                         var range = new CKEDITOR.dom.range( doc );\r
53                         range.selectNodeContents( node );\r
54 \r
55                         var walker = new CKEDITOR.dom.walker( range );\r
56 \r
57                         var nodes = [];\r
58                         while ( ( node = walker.next() ) )\r
59                                 nodes.push( node );\r
60 \r
61                         assertNodesList( [ '<p>', 'This is ', '<b>', 'a ', '<i>', 'simple', ' test' ], nodes );\r
62                 },\r
63 \r
64                 test_next_2 : function()\r
65                 {\r
66                         var node = doc.getById( 'playground' );\r
67                         node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
68 \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
72 \r
73                         var walker = new CKEDITOR.dom.walker( range );\r
74 \r
75                         var nodes = [];\r
76                         while ( ( node = walker.next() ) )\r
77                                 nodes.push( node );\r
78 \r
79                         assertNodesList( [ 'This is ', '<b>', 'a ', '<i>', 'si' ], nodes );\r
80                 },\r
81 \r
82                 test_next_3 : function()\r
83                 {\r
84                         var node = doc.getById( 'playground' );\r
85                         node.setHtml( '<p>Test</p><h1>More</h1>' );\r
86 \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
90 \r
91                         var walker = new CKEDITOR.dom.walker( range );\r
92 \r
93                         var nodes = [];\r
94                         while ( ( node = walker.next() ) )\r
95                                 nodes.push( node );\r
96 \r
97                         assertNodesList( [ '<h1>' ], nodes );\r
98                 },\r
99 \r
100                 test_next_4 : function()\r
101                 {\r
102                         var node = doc.getById( 'playground' );\r
103                         node.setHtml( '<p>Test</p><h1>More</h1>' );\r
104 \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
108 \r
109                         var walker = new CKEDITOR.dom.walker( range );\r
110 \r
111                         var nodes = [];\r
112                         while ( ( node = walker.next() ) )\r
113                                 nodes.push( node );\r
114 \r
115                         assertNodesList( [], nodes );\r
116                 },\r
117 \r
118                 test_next_5 : function()\r
119                 {\r
120                         var node = doc.getById( 'playground' );\r
121                         node.setHtml( '<p>Test</p><h1>More</h1>' );\r
122 \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
126 \r
127                         var walker = new CKEDITOR.dom.walker( range );\r
128 \r
129                         var nodes = [];\r
130                         while ( ( node = walker.next() ) )\r
131                                 nodes.push( node );\r
132 \r
133                         assertNodesList( [ '<h1>' ], nodes );\r
134                 },\r
135 \r
136                 test_previous_1 : function()\r
137                 {\r
138                         var node = doc.getById( 'playground' );\r
139                         node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
140 \r
141                         var range = new CKEDITOR.dom.range( doc );\r
142                         range.selectNodeContents( node );\r
143 \r
144                         var walker = new CKEDITOR.dom.walker( range );\r
145 \r
146                         var nodes = [];\r
147                         while ( ( node = walker.previous() ) )\r
148                                 nodes.push( node );\r
149 \r
150                         assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', 'a ', 'This is ' ], nodes );\r
151                 },\r
152 \r
153                 test_previous_2 : function()\r
154                 {\r
155                         var node = doc.getById( 'playground' );\r
156                         node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
157 \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
161 \r
162                         var walker = new CKEDITOR.dom.walker( range );\r
163 \r
164                         var nodes = [];\r
165                         while ( ( node = walker.previous() ) )\r
166                                 nodes.push( node );\r
167 \r
168                         assertNodesList( [ 'si', 'a ', 'is is ' ], nodes );\r
169                 },\r
170 \r
171                 test_previous_3 : function()\r
172                 {\r
173                         var node = doc.getById( 'playground' );\r
174                         node.setHtml( '<p>Test</p><h1>More</h1>' );\r
175 \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
179 \r
180                         var walker = new CKEDITOR.dom.walker( range );\r
181 \r
182                         var nodes = [];\r
183                         while ( ( node = walker.previous() ) )\r
184                                 nodes.push( node );\r
185 \r
186                         assertNodesList( [ '' ], nodes );\r
187                 },\r
188 \r
189                 test_previous_4 : function()\r
190                 {\r
191                         var node = doc.getById( 'playground' );\r
192                         node.setHtml( '<p>Test</p><h1>More</h1>' );\r
193 \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
197 \r
198                         var walker = new CKEDITOR.dom.walker( range );\r
199 \r
200                         var nodes = [];\r
201                         while ( ( node = walker.previous() ) )\r
202                                 nodes.push( node );\r
203 \r
204                         assertNodesList( [ '<p>' ], nodes );\r
205                 },\r
206 \r
207                 test_previous_5 : function()\r
208                 {\r
209                         var node = doc.getById( 'playground' );\r
210                         node.setHtml( '<p>Test</p><h1>More</h1>' );\r
211 \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
215 \r
216                         var walker = new CKEDITOR.dom.walker( range );\r
217 \r
218                         var nodes = [];\r
219                         while ( ( node = walker.previous() ) )\r
220                                 nodes.push( node );\r
221 \r
222                         assertNodesList( [ '<p>' ], nodes );\r
223                 },\r
224 \r
225                 /**\r
226                  *  Test guard function is invoked on every move when iterating forward.\r
227                  */\r
228                 test_guard_1 : function()\r
229                 {\r
230                         var node = doc.getById( 'playground' );\r
231                         node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
232 \r
233                         var range = new CKEDITOR.dom.range( doc );\r
234                         range.selectNodeContents( node );\r
235 \r
236                         var walker = new CKEDITOR.dom.walker( range );\r
237                         var nodes = [];\r
238 \r
239                         walker.guard = function( node )\r
240                         {\r
241                                 nodes.push( node );\r
242                                 return true;\r
243                         };\r
244 \r
245                         while ( ( node = walker.next() ) )\r
246                         { /*jsl:pass*/ }\r
247 \r
248                         assertNodesList( [ '<p>', 'This is ', '<b>', 'a ', '<i>', 'simple', '<i>', '<b>',' test' , '<p>' ], nodes );\r
249                 },\r
250 \r
251                 /**\r
252                  *  Test guard function is invoked on every move when iterating backward.\r
253                  */\r
254                 test_guard_2 : function()\r
255                 {\r
256                         var node = doc.getById( 'playground' );\r
257                         node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
258 \r
259                         var range = new CKEDITOR.dom.range( doc );\r
260                         range.selectNodeContents( node );\r
261 \r
262                         var walker = new CKEDITOR.dom.walker( range );\r
263                         var nodes = [];\r
264 \r
265                         walker.guard = function( node )\r
266                         {\r
267                                 nodes.push( node );\r
268                                 return true;\r
269                         };\r
270 \r
271                         while ( ( node = walker.previous() ) )\r
272                         { /*jsl:pass*/ }\r
273 \r
274                         assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', '<i>', 'a ', '<b>', 'This is ', '<p>' ], nodes );\r
275                 },\r
276 \r
277                 /**\r
278                  *  Test evaluator function is invoked on every  step when iterating backward.\r
279                  */\r
280                 test_evaluator_1 : function()\r
281                 {\r
282                         var node = doc.getById( 'playground' );\r
283                         node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
284 \r
285                         var range = new CKEDITOR.dom.range( doc );\r
286                         range.selectNodeContents( node );\r
287 \r
288                         var walker = new CKEDITOR.dom.walker( range );\r
289                         var nodes = [];\r
290 \r
291                         walker.evaluator = function( node )\r
292                         {\r
293                                 nodes.push( node );\r
294                                 return true;\r
295                         };\r
296 \r
297                         while ( ( node = walker.previous() ) )\r
298                         { /*jsl:pass*/ }\r
299 \r
300                         assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', 'a ', 'This is ' ], nodes );\r
301                 },\r
302                 /**\r
303                  * Test walker stop at empty endContainer.\r
304                  */\r
305                 test_stopGuard : function()\r
306                 {\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
313 \r
314                         var walker = new CKEDITOR.dom.walker( range );\r
315                         var nodes = [];\r
316 \r
317                         walker.evaluator = function( node )\r
318                         {\r
319                                 nodes.push( node );\r
320                                 return true;\r
321                         };\r
322 \r
323                         while ( ( node = walker.next() ) )\r
324                         { /*jsl:pass*/ }\r
325 \r
326                         assertNodesList( [ '<span>' ], nodes );\r
327 \r
328                 },\r
329                 name : document.title\r
330         };\r
331 })() );\r
332 \r
333 //window.onload = tc.test_stopGuard;\r
334         //]]>\r
335         </script>\r
336 </head>\r
337 <body>\r
338         <div id="playground"></div>\r
339 </body>\r
340 </html>\r