JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0
[ckeditor.git] / _source / tests / core / dom / range.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.range</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 html1, html2;\r
12 var tests;\r
13 \r
14 CKEDITOR.test.addTestCase( (function()\r
15 {\r
16         // Local references.\r
17         var assert                      = CKEDITOR.test.assert;\r
18         var getInnerHtml        = CKEDITOR.test.getInnerHtml;\r
19 \r
20         var doc = new CKEDITOR.dom.document( document );\r
21 \r
22         var getRange = function( startId, endId )\r
23         {\r
24                 var range = new CKEDITOR.dom.range( CKEDITOR.document );\r
25                 range.moveToBookmark( { startNode : startId, endNode : endId, serializable : true } );\r
26                 return range;\r
27         };\r
28 \r
29         return tests = {\r
30                 test__constructor : function()\r
31                 {\r
32                         var range = new CKEDITOR.dom.range( doc );\r
33 \r
34                         assert.isNotNull( range, 'range must not be null' );\r
35 \r
36                         assert.isNull( range.startContainer, 'startContainer must be null' );\r
37                         assert.isNull( range.startOffset, 'startOffset must be null' );\r
38                         assert.isNull( range.endContainer, 'endContainer must be null' );\r
39                         assert.isNull( range.endOffset, 'endOffset must be null' );\r
40 \r
41                         assert.isTrue( range.collapsed, 'range must be collapsed' );\r
42                 },\r
43 \r
44                 test_setStart : function()\r
45                 {\r
46                         var range = new CKEDITOR.dom.range( doc );\r
47                         range.setStart( doc.getById( 'playground' ), 1 );\r
48 \r
49                         assert.areSame( document.getElementById( 'playground' ), range.startContainer.$ );\r
50                         assert.areSame( 1, range.startOffset );\r
51                         assert.areSame( document.getElementById( 'playground' ), range.endContainer.$ );\r
52                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
53                         assert.isTrue( range.collapsed );\r
54                 },\r
55 \r
56                 test_setEnd : function()\r
57                 {\r
58                         var range = new CKEDITOR.dom.range( doc );\r
59                         range.setEnd( doc.getById( 'playground' ), 1 );\r
60 \r
61                         assert.areSame( document.getElementById( 'playground' ), range.startContainer.$ );\r
62                         assert.areSame( 1, range.startOffset );\r
63                         assert.areSame( document.getElementById( 'playground' ), range.endContainer.$ );\r
64                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
65                         assert.isTrue( range.collapsed );\r
66                 },\r
67 \r
68                 test_setStartAfter : function()\r
69                 {\r
70                         var range = new CKEDITOR.dom.range( doc );\r
71                         range.setStartAfter( doc.getById( '_B' ) );\r
72                         range.setStartAfter( doc.getById( '_H1' ).getFirst() );\r
73 \r
74                         assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
75                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
76                         assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
77                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
78                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
79                 },\r
80 \r
81                 test_setStartBefore : function()\r
82                 {\r
83                         var range = new CKEDITOR.dom.range( doc );\r
84                         range.setStartBefore( doc.getById( '_B' ) );\r
85                         range.setStartBefore( doc.getById( '_H1' ).getFirst() );\r
86 \r
87                         assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
88                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
89                         assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
90                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
91                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
92                 },\r
93 \r
94                 test_setEndAfter : function()\r
95                 {\r
96                         var range = new CKEDITOR.dom.range( doc );\r
97                         range.setEndAfter( doc.getById( '_H1' ).getFirst() );\r
98                         range.setEndAfter( doc.getById( '_B' ) );\r
99 \r
100                         assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
101                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
102                         assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
103                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
104                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
105                 },\r
106 \r
107                 test_setEndBefore : function()\r
108                 {\r
109                         var range = new CKEDITOR.dom.range( doc );\r
110                         range.setEndBefore( doc.getById( '_H1' ).getFirst() );\r
111                         range.setEndBefore( doc.getById( '_B' ) );\r
112 \r
113                         assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
114                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
115                         assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
116                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
117                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
118                 },\r
119 \r
120                 test_setStartAt_1 : function()\r
121                 {\r
122                         var range = new CKEDITOR.dom.range( doc );\r
123                         range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_START );\r
124 \r
125                         assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
126                         assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
127                         assert.isTrue( range.collapsed, 'collapsed' );\r
128                 },\r
129 \r
130                 test_setStartAt_2 : function()\r
131                 {\r
132                         var range = new CKEDITOR.dom.range( doc );\r
133                         range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_END );\r
134 \r
135                         assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
136                         assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
137                         assert.isTrue( range.collapsed, 'collapsed' );\r
138                 },\r
139 \r
140                 test_setStartAt_3 : function()\r
141                 {\r
142                         var range = new CKEDITOR.dom.range( doc );\r
143                         range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_START );\r
144 \r
145                         assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
146                         assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
147                         assert.isTrue( range.collapsed, 'collapsed' );\r
148                 },\r
149 \r
150                 test_setStartAt_4 : function()\r
151                 {\r
152                         var range = new CKEDITOR.dom.range( doc );\r
153                         range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_END );\r
154 \r
155                         assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
156                         assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
157                         assert.isTrue( range.collapsed, 'collapsed' );\r
158                 },\r
159 \r
160                 test_setEndAt_1 : function()\r
161                 {\r
162                         var range = new CKEDITOR.dom.range( doc );\r
163                         range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_START );\r
164 \r
165                         assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
166                         assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
167                         assert.isTrue( range.collapsed, 'collapsed' );\r
168                 },\r
169 \r
170                 test_setEndAt_2 : function()\r
171                 {\r
172                         var range = new CKEDITOR.dom.range( doc );\r
173                         range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_END );\r
174 \r
175                         assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );\r
176                         assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
177                         assert.isTrue( range.collapsed, 'collapsed' );\r
178                 },\r
179 \r
180                 test_setEndAt_3 : function()\r
181                 {\r
182                         var range = new CKEDITOR.dom.range( doc );\r
183                         range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_START );\r
184 \r
185                         assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
186                         assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
187                         assert.isTrue( range.collapsed, 'collapsed' );\r
188                 },\r
189 \r
190                 test_setEndAt_4 : function()\r
191                 {\r
192                         var range = new CKEDITOR.dom.range( doc );\r
193                         range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_END );\r
194 \r
195                         assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );\r
196                         assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );\r
197                         assert.isTrue( range.collapsed, 'collapsed' );\r
198                 },\r
199 \r
200                 test_collapsed : function()\r
201                 {\r
202                         var range = new CKEDITOR.dom.range( doc );\r
203                         range.setStartAt( doc.getById( '_P' ), CKEDITOR.POSITION_AFTER_START );\r
204 \r
205                         assert.isTrue( range.collapsed );\r
206                 },\r
207 \r
208                 test_collapse : function()\r
209                 {\r
210                         var range = new CKEDITOR.dom.range( doc );\r
211                         range.setStartAt( doc.getById( '_Para' ), CKEDITOR.POSITION_AFTER_START );\r
212                         range.setEndAt( doc.getById( '_Span' ), CKEDITOR.POSITION_BEFORE_END );\r
213 \r
214                         assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'startContainer' );\r
215                         assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );\r
216                         assert.isFalse( range.collapsed, 'collapsed' );\r
217 \r
218                         range.collapse( true );\r
219 \r
220                         assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'startContainer' );\r
221                         assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'endContainer' );\r
222                         assert.isTrue( range.collapsed, 'collapsed' );\r
223                 },\r
224 \r
225                 test_selectNodeContents_Element : function()\r
226                 {\r
227                         var range = new CKEDITOR.dom.range( doc );\r
228 \r
229                         // Test with an Element node.\r
230                         range.selectNodeContents( doc.getById( '_Para' ) );\r
231 \r
232                         assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
233                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
234                         assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
235                         assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
236                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
237                 },\r
238 \r
239                 test_selectNodeContents_Text : function()\r
240                 {\r
241                         var range = new CKEDITOR.dom.range( doc );\r
242 \r
243                         // Test with a Text node.\r
244                         range.selectNodeContents( doc.getById( '_Para' ).getFirst() );\r
245 \r
246                         assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
247                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
248                         assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
249                         assert.areSame( 8, range.endOffset, 'range.endOffset' );\r
250                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
251                 },\r
252 \r
253                 test_collapse_ToStart : function()\r
254                 {\r
255                         var range = new CKEDITOR.dom.range( doc );\r
256 \r
257                         range.selectNodeContents( doc.getById( '_P' ) );\r
258                         range.collapse( true );\r
259 \r
260                         assert.areSame( document.getElementById( '_P' ), range.startContainer.$, 'range.startContainer' );\r
261                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
262                         assert.areSame( document.getElementById( '_P' ), range.endContainer.$, 'range.endContainer' );\r
263                         assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
264                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
265                 },\r
266 \r
267                 test_collapse_ToEnd : function()\r
268                 {\r
269                         var range = new CKEDITOR.dom.range( doc );\r
270 \r
271                         range.selectNodeContents( doc.getById( '_Para' ) );\r
272                         range.collapse( false );\r
273 \r
274                         assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
275                         assert.areSame( 3, range.startOffset, 'range.startOffset' );\r
276                         assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
277                         assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
278                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
279                 },\r
280 \r
281                 test_insertNode_ElementContents : function()\r
282                 {\r
283                         var newNode = new CKEDITOR.dom.element( 'span' );\r
284                         newNode.setHtml( 'test_' );\r
285 \r
286                         var range = new CKEDITOR.dom.range( doc );\r
287 \r
288                         range.selectNodeContents( doc.getById( '_B' ) );\r
289                         range.insertNode( newNode );\r
290 \r
291                         assert.areSame( document.getElementById( '_B' ), range.startContainer.$, 'range.startContainer' );\r
292                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
293                         assert.areSame( document.getElementById( '_B' ), range.endContainer.$, 'range.endContainer' );\r
294                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
295                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
296                 },\r
297 \r
298                 test_insertNode_ElementCollapsed : function()\r
299                 {\r
300                         var newNode = new CKEDITOR.dom.element( 'span' );\r
301                         newNode.setHtml( 'test_' );\r
302 \r
303                         var range = new CKEDITOR.dom.range( doc );\r
304 \r
305                         range.setStartBefore( doc.getById( '_Para' ) );\r
306                         range.insertNode( newNode );\r
307 \r
308                         assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
309                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
310                         assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
311                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
312                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
313                 },\r
314 \r
315                 test_insertNode_ElementNotCollapsed : function()\r
316                 {\r
317                         var newNode = new CKEDITOR.dom.element( 'span' );\r
318                         newNode.setHtml( 'test_' );\r
319 \r
320                         var range = new CKEDITOR.dom.range( doc );\r
321 \r
322                         range.setStartBefore( doc.getById( '_Para' ) );\r
323                         range.setStartBefore( doc.getById( '_H1' ) );\r
324                         range.insertNode( newNode );\r
325 \r
326                         assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
327                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
328                         assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
329                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
330                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
331                 },\r
332 \r
333                 test_insertNode_DiffElements : function()\r
334                 {\r
335                         var newNode = new CKEDITOR.dom.element( 'span' );\r
336                         newNode.setHtml( 'test_' );\r
337 \r
338                         var range = new CKEDITOR.dom.range( doc );\r
339 \r
340                         range.selectNodeContents( doc.getById( '_Para' ) );\r
341 \r
342                         range.setStart( doc.getById( '_H1' ), 0 );\r
343                         range.insertNode( newNode );\r
344 \r
345                         assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
346                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
347                         assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
348                         assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
349                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
350 \r
351                         assert.isTrue( range.startContainer.getChild( range.startOffset ).equals( newNode ), 'Start must be on new node' );\r
352                 },\r
353 \r
354                 test_insertNode_TextCollapsed : function()\r
355                 {\r
356                         var newNode = new CKEDITOR.dom.element( 'span' );\r
357                         newNode.setHtml( 'test_' );\r
358 \r
359                         var range = new CKEDITOR.dom.range( doc );\r
360 \r
361                         range.setStart( doc.getById( '_H1' ).getFirst(), 3 );\r
362                         range.insertNode( newNode );\r
363 \r
364                         assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
365                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
366                         assert.areSame( document.getElementById( '_H1' ), range.endContainer.$, 'range.endContainer' );\r
367                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
368                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
369                 },\r
370 \r
371                 test_insertNode_TextNotCollapsed : function()\r
372                 {\r
373                         var newNode = new CKEDITOR.dom.element( 'span' );\r
374                         newNode.setHtml( 'test_' );\r
375 \r
376                         var range = new CKEDITOR.dom.range( doc );\r
377 \r
378                         range.setStart( doc.getById( '_H1' ).getFirst(), 3 );\r
379                         range.setEnd( doc.getById( '_H1' ).getFirst(), 5 );\r
380                         range.insertNode( newNode );\r
381 \r
382                         assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
383                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
384                         assert.areSame( document.getElementById( '_H1' ).childNodes[2], range.endContainer.$, 'range.endContainer' );\r
385                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
386                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
387                 },\r
388 \r
389                 test_insertNode_Mixed : function()\r
390                 {\r
391                         var newNode = new CKEDITOR.dom.element( 'span' );\r
392                         newNode.setHtml( 'test_' );\r
393 \r
394                         var range = new CKEDITOR.dom.range( doc );\r
395 \r
396                         range.setStart( doc.getById( '_H1' ).getFirst(), 0 );\r
397                         range.setEnd( doc.getById( '_P' ), 1 );\r
398                         range.insertNode( newNode );\r
399 \r
400                         assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
401                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
402                         assert.areSame( document.getElementById( '_P' ), range.endContainer.$, 'range.endContainer' );\r
403                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
404                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
405                 },\r
406 \r
407                 test_getCommonAncestor1 : function()\r
408                 {\r
409                         var range = new CKEDITOR.dom.range( doc );\r
410                         range.setStart( doc.getById( '_H1' ).getFirst(), 3 );\r
411 \r
412                         assert.areSame( document.getElementById( '_H1' ).firstChild, range.getCommonAncestor().$ );\r
413                 },\r
414 \r
415                 test_getCommonAncestor2 : function()\r
416                 {\r
417                         var range = new CKEDITOR.dom.range( doc );\r
418                         range.setStart( doc.getById( '_H1' ), 0 );\r
419 \r
420                         assert.areSame( document.getElementById( '_H1' ), range.getCommonAncestor().$ );\r
421                 },\r
422 \r
423                 test_getCommonAncestor3 : function()\r
424                 {\r
425                         var range = new CKEDITOR.dom.range( doc );\r
426                         range.setStart( doc.getById( '_H1' ), 0 );\r
427                         range.setEnd( doc.getById( '_Para' ), 0 );\r
428 \r
429                         assert.areSame( document.getElementById( 'playground' ), range.getCommonAncestor().$ );\r
430                 },\r
431 \r
432                 test_getCommonAncestor4 : function()\r
433                 {\r
434                         var range = new CKEDITOR.dom.range( doc );\r
435                         range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
436                         range.setEnd( doc.getById( '_B' ), 0 );\r
437 \r
438                         assert.areSame( document.getElementById( '_Para' ), range.getCommonAncestor().$ );\r
439                 },\r
440 \r
441                 test_getCommonAncestor5 : function()\r
442                 {\r
443                         var range = new CKEDITOR.dom.range( doc );\r
444                         range.setStart( doc.getBody(), 0 );\r
445                         range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
446 \r
447                         assert.areSame( document.body, range.getCommonAncestor().$ );\r
448                 },\r
449 \r
450                 test_getCommonAncestor6 : function()\r
451                 {\r
452                         var range = new CKEDITOR.dom.range( doc );\r
453                         range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
454                         range.setEnd( doc.getById( '_EnlargeB' ), 3 );\r
455 \r
456                         assert.areSame( document.getElementById( '_EnlargeB' ), range.getCommonAncestor().$ );\r
457                 },\r
458 \r
459                 test_enlarge_element1 : function()\r
460                 {\r
461                         // For IE, see the next test.\r
462                         if ( CKEDITOR.env.ie )\r
463                                 return;\r
464 \r
465                         // <p> Test <b> <i>  [Enlarge]</i> this</b>   </p>\r
466                         // <p> Test <b> [<i>  Enlarge</i>] this</b>   </p>\r
467 \r
468                         var range = new CKEDITOR.dom.range( doc );\r
469                         range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
470                         range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
471 \r
472                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
473 \r
474                         assert.areSame( document.getElementById( '_EnlargeB' ), range.startContainer.$, 'range.startContainer' );\r
475                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
476                         assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
477                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
478                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
479                 },\r
480 \r
481                 test_enlarge_element1_ie : function()\r
482                 {\r
483                         // IE normalizes whitespaces when parsing the HTML, so we need a\r
484                         // specific test for it.\r
485                         if ( !CKEDITOR.env.ie )\r
486                                 return;\r
487 \r
488                         // <p>Test <b><i>[Enlarge]</i> this</b></p>\r
489                         // <p>Test <b>[<i>Enlarge</i>] this</b></p>\r
490 \r
491                         var range = new CKEDITOR.dom.range( doc );\r
492                         range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );\r
493                         range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
494 \r
495                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
496 \r
497                         assert.areSame( document.getElementById( '_EnlargeB' ), range.startContainer.$, 'range.startContainer' );\r
498                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
499                         assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
500                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
501                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
502                 },\r
503 \r
504                 test_enlarge_element2 : function()\r
505                 {\r
506                         // For IE, see the next test.\r
507                         if ( CKEDITOR.env.ie )\r
508                                 return;\r
509 \r
510                         // <p> Test <b> <i>  [Enlarge</i> this]</b>   </p>\r
511                         // <p> Test [<b> <i>  Enlarge</i> this</b>]   </p>\r
512 \r
513                         var range = new CKEDITOR.dom.range( doc );\r
514                         range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
515                         range.setEnd( doc.getById( '_EnlargeB' ), 3 );\r
516 \r
517                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
518 \r
519                         assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
520                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
521                         assert.areSame( document.getElementById( '_EnlargeP' ), range.endContainer.$, 'range.endContainer' );\r
522                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
523                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
524                 },\r
525 \r
526                 test_enlarge_element2_ie : function()\r
527                 {\r
528                         // IE normalizes whitespaces when parsing the HTML, so we need a\r
529                         // specific test for it.\r
530                         if ( !CKEDITOR.env.ie )\r
531                                 return;\r
532 \r
533                         // <p>Test <b><i>[Enlarge</i> this]</b></p>\r
534                         // <p>Test [<b><i>Enlarge</i> this</b>]</p>\r
535 \r
536                         var range = new CKEDITOR.dom.range( doc );\r
537                         range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );\r
538                         range.setEnd( doc.getById( '_EnlargeB' ), 2 );\r
539 \r
540                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
541 \r
542                         assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
543                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
544                         assert.areSame( document.getElementById( '_EnlargeP' ), range.endContainer.$, 'range.endContainer' );\r
545                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
546                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
547                 },\r
548 \r
549                 test_enlarge_element3 : function()\r
550                 {\r
551                         // For IE, see the next test.\r
552                         if ( CKEDITOR.env.ie )\r
553                                 return;\r
554 \r
555                         // <p> [Test <b> <i>  Enlarge]</i> this</b>   </p>\r
556                         // <p> [Test <b> <i>  Enlarge</i>] this</b>   </p>\r
557 \r
558                         var range = new CKEDITOR.dom.range( doc );\r
559                         range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 1 );\r
560                         range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
561 \r
562                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
563 \r
564                         assert.areSame( document.getElementById( '_EnlargeP' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
565                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
566                         assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
567                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
568                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
569                 },\r
570 \r
571                 test_enlarge_element3_ie : function()\r
572                 {\r
573                         // IE normalizes whitespaces when parsing the HTML, so we need a\r
574                         // specific test for it.\r
575                         if ( !CKEDITOR.env.ie )\r
576                                 return;\r
577 \r
578                         // <p>[Test <b><i>Enlarge]</i> this</b></p>\r
579                         // <p>[Test <b><i>Enlarge</i>] this</b></p>\r
580 \r
581                         var range = new CKEDITOR.dom.range( doc );\r
582                         range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 0 );\r
583                         range.setEnd( doc.getById( '_EnlargeI' ), 1 );\r
584 \r
585                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
586 \r
587                         assert.areSame( document.getElementById( '_EnlargeP' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
588                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
589                         assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );\r
590                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
591                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
592                 },\r
593 \r
594                 test_enlarge_element4 : function()\r
595                 {\r
596                         // For IE, see the next test.\r
597                         if ( CKEDITOR.env.ie )\r
598                                 return;\r
599 \r
600                         // <p> [Test <b> <i>  Enlarge</i> this]</b>   </p>\r
601                         // [<p> Test <b> <i>  Enlarge</i> this</b>   </p>]\r
602 \r
603                         var range = new CKEDITOR.dom.range( doc );\r
604                         range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 1 );\r
605                         range.setEnd( doc.getById( '_EnlargeB' ).getChild( 2 ), 5 );\r
606 \r
607                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
608 \r
609                         assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
610                         assert.areSame( doc.getById( '_EnlargeP' ).getIndex(), range.startOffset, 'range.startOffset' );\r
611                         assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
612                         assert.areSame( doc.getById( '_EnlargeP' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
613                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
614                 },\r
615 \r
616                 test_enlarge_element4_ie : function()\r
617                 {\r
618                         // IE normalizes whitespaces when parsing the HTML, so we need a\r
619                         // specific test for it.\r
620                         if ( !CKEDITOR.env.ie )\r
621                                 return;\r
622 \r
623                         // <p>[Test <b><i>Enlarge</i> this]</b></p>\r
624                         // [<p>Test <b><i>Enlarge</i> this</b></p>]\r
625 \r
626                         var range = new CKEDITOR.dom.range( doc );\r
627                         range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 0 );\r
628                         range.setEnd( doc.getById( '_EnlargeB' ).getChild( 1 ), 5 );\r
629 \r
630                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
631 \r
632                         assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
633                         assert.areSame( doc.getById( '_EnlargeP' ).getIndex(), range.startOffset, 'range.startOffset' );\r
634                         assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
635                         assert.areSame( doc.getById( '_EnlargeP' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
636                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
637                 },\r
638 \r
639                 test_enlarge_element5 : function()\r
640                 {\r
641                         // For IE, see the next test.\r
642                         if ( CKEDITOR.env.ie )\r
643                                 return;\r
644 \r
645                         // <p> Test<b> <i>  [Enlarge</i> this]</b>   </p>\r
646                         // <p> Test<b> [<i>  Enlarge</i> this]</b>   </p>\r
647 \r
648                         var range = new CKEDITOR.dom.range( doc );\r
649                         range.setStart( doc.getById( '_EnlargeI1' ).getFirst(), 2 );\r
650                         range.setEnd( doc.getById( '_EnlargeB1' ).getChild( 2 ), 5 );\r
651 \r
652                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
653 \r
654                         assert.areSame( document.getElementById( '_EnlargeB1' ), range.startContainer.$, 'range.startContainer' );\r
655                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
656                         assert.areSame( document.getElementById( '_EnlargeB1' ).childNodes[ 2 ], range.endContainer.$, 'range.endContainer' );\r
657                         assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
658                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
659                 },\r
660 \r
661                 test_enlarge_element5_ie : function()\r
662                 {\r
663                         // IE normalizes whitespaces when parsing the HTML, so we need a\r
664                         // specific test for it.\r
665                         if ( !CKEDITOR.env.ie )\r
666                                 return;\r
667 \r
668                         // <p>Test<b> <i>[Enlarge</i> this]</b></p>\r
669                         // <p>Test<b> [<i>Enlarge</i> this]</b></p>\r
670 \r
671                         var range = new CKEDITOR.dom.range( doc );\r
672                         range.setStart( doc.getById( '_EnlargeI1' ).getFirst(), 0 );\r
673                         range.setEnd( doc.getById( '_EnlargeB1' ).getChild( 2 ), 5 );\r
674 \r
675                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
676 \r
677                         assert.areSame( document.getElementById( '_EnlargeB1' ), range.startContainer.$, 'range.startContainer' );\r
678                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
679                         assert.areSame( document.getElementById( '_EnlargeB1' ).childNodes[ 2 ], range.endContainer.$, 'range.endContainer' );\r
680                         assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
681                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
682                 },\r
683 \r
684                 test_enlarge_element6 : function()\r
685                 {\r
686                         // For IE, see the next test.\r
687                         if ( CKEDITOR.env.ie )\r
688                                 return;\r
689 \r
690                         // <p> <b> <i>  [Enlarge</i>] this</b>   </p>\r
691                         // <p> <b> [<i>  Enlarge</i>] this</b>   </p>\r
692 \r
693                         var range = new CKEDITOR.dom.range( doc );\r
694                         range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 2 );\r
695                         range.setEnd( doc.getById( '_EnlargeB2' ), 2 );\r
696 \r
697                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
698 \r
699                         assert.areSame( document.getElementById( '_EnlargeB2' ), range.startContainer.$, 'range.startContainer' );\r
700                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
701                         assert.areSame( document.getElementById( '_EnlargeB2' ), range.endContainer.$, 'range.endContainer' );\r
702                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
703                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
704                 },\r
705 \r
706                 test_enlarge_element6_ie : function()\r
707                 {\r
708                         // IE normalizes whitespaces when parsing the HTML, so we need a\r
709                         // specific test for it.\r
710                         if ( !CKEDITOR.env.ie )\r
711                                 return;\r
712 \r
713                         // <p><b><i>[Enlarge</i>] this</b></p>\r
714                         // <p><b>[<i>Enlarge</i>] this</b></p>\r
715 \r
716                         var range = new CKEDITOR.dom.range( doc );\r
717                         range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 0 );\r
718                         range.setEnd( doc.getById( '_EnlargeB2' ), 1 );\r
719 \r
720                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
721 \r
722                         assert.areSame( document.getElementById( '_EnlargeB2' ), range.startContainer.$, 'range.startContainer' );\r
723                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
724                         assert.areSame( document.getElementById( '_EnlargeB2' ), range.endContainer.$, 'range.endContainer' );\r
725                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
726                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
727                 },\r
728 \r
729                 test_enlarge_element7 : function()\r
730                 {\r
731                         // For IE, see the next test.\r
732                         if ( CKEDITOR.env.ie )\r
733                                 return;\r
734 \r
735                         // <p> <b> <i>  [Enlarge</i> this]</b>   </p>\r
736                         // [<p> <b> <i>  Enlarge</i> this</b>   </p>]\r
737 \r
738                         var range = new CKEDITOR.dom.range( doc );\r
739                         range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 2 );\r
740                         range.setEnd( doc.getById( '_EnlargeB2' ), 3 );\r
741 \r
742                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
743 \r
744                         assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
745                         assert.areSame( doc.getById( '_EnlargeP2' ).getIndex(), range.startOffset, 'range.startOffset' );\r
746                         assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
747                         assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
748                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
749                 },\r
750 \r
751                 test_enlarge_element7_ie : function()\r
752                 {\r
753                         // IE normalizes whitespaces when parsing the HTML, so we need a\r
754                         // specific test for it.\r
755                         if ( !CKEDITOR.env.ie )\r
756                                 return;\r
757 \r
758                         // <p><b><i>[Enlarge</i> this]</b></p>\r
759                         // [<p><b><i>Enlarge</i> this</b></p>]\r
760 \r
761                         var range = new CKEDITOR.dom.range( doc );\r
762                         range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 0 );\r
763                         range.setEnd( doc.getById( '_EnlargeB2' ), 2 );\r
764 \r
765                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
766 \r
767                         assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.startContainer.$, 'range.startContainer' );\r
768                         assert.areSame( doc.getById( '_EnlargeP2' ).getIndex(), range.startOffset, 'range.startOffset' );\r
769                         assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
770                         assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
771                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
772                 },\r
773 \r
774                 test_enlarge_element8 : function()\r
775                 {\r
776                         // For IE, see the next test.\r
777                         if ( CKEDITOR.env.ie )\r
778                                 return;\r
779 \r
780                         // <p> Test <b> <i>  [Enlarge</i> this</b>   </p><p> <b> <i>  Enlarge</i> this]</b>   </p>\r
781                         // <p> Test [<b> <i>  Enlarge</i> this</b>   </p><p> <b> <i>  Enlarge</i> this</b>   </p>]\r
782 \r
783                         var range = new CKEDITOR.dom.range( doc );\r
784                         range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );\r
785                         range.setEnd( doc.getById( '_EnlargeB2' ), 3 );\r
786 \r
787                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
788 \r
789                         assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
790                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
791                         assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
792                         assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
793                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
794                 },\r
795 \r
796                 test_enlarge_element8_ie : function()\r
797                 {\r
798                         // IE normalizes whitespaces when parsing the HTML, so we need a\r
799                         // specific test for it.\r
800                         if ( !CKEDITOR.env.ie )\r
801                                 return;\r
802 \r
803                         // <p>Test <b><i>[Enlarge</i> this</b></p><p><b><i>Enlarge</i> this]</b></p>\r
804                         // <p>Test [<b><i>Enlarge</i> this</b></p><p><b><i>Enlarge</i> this</b></p>]\r
805 \r
806                         var range = new CKEDITOR.dom.range( doc );\r
807                         range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );\r
808                         range.setEnd( doc.getById( '_EnlargeB2' ), 2 );\r
809 \r
810                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
811 \r
812                         assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
813                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
814                         assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );\r
815                         assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );\r
816                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
817                 },\r
818 \r
819                 test_enlarge_element9 : function()\r
820                 {\r
821                         // <p>Test<i> [Enlarge</i>]</p>\r
822                         // <p>Test<i> [Enlarge</i>]</p>\r
823 \r
824                         var range = new CKEDITOR.dom.range( doc );\r
825                         range.setStart( doc.getById( '_EnlargeI3' ).getFirst(), 1 );\r
826                         range.setEnd( doc.getById( '_EnlargeP3' ), 2 );\r
827 \r
828                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
829 \r
830                         assert.areSame( document.getElementById( '_EnlargeI3' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
831                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
832                         assert.areSame( document.getElementById( '_EnlargeP3' ), range.endContainer.$, 'range.endContainer' );\r
833                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
834                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
835                 },\r
836 \r
837                 test_enlarge_element10 : function()\r
838                 {\r
839                         // For IE, see the next test.\r
840                         if ( CKEDITOR.env.ie )\r
841                                 return;\r
842 \r
843                         // <p>Test <i> [Enlarge</i>]</p>\r
844                         // <p>Test [<i> Enlarge</i>]</p>\r
845 \r
846                         var range = new CKEDITOR.dom.range( doc );\r
847                         range.setStart( doc.getById( '_EnlargeI4' ).getFirst(), 1 );\r
848                         range.setEnd( doc.getById( '_EnlargeP4' ), 2 );\r
849 \r
850                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
851 \r
852                         assert.areSame( document.getElementById( '_EnlargeP4' ), range.startContainer.$, 'range.startContainer' );\r
853                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
854                         assert.areSame( document.getElementById( '_EnlargeP4' ), range.endContainer.$, 'range.endContainer' );\r
855                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
856                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
857                 },\r
858 \r
859                 test_enlarge_element10_ie : function()\r
860                 {\r
861                         // IE normalizes whitespaces when parsing the HTML, so we need a\r
862                         // specific test for it.\r
863                         if ( !CKEDITOR.env.ie )\r
864                                 return;\r
865 \r
866                         // <p>Test <i>[Enlarge</i>]</p>\r
867                         // <p>Test [<i>Enlarge</i>]</p>\r
868 \r
869                         var range = new CKEDITOR.dom.range( doc );\r
870                         range.setStart( doc.getById( '_EnlargeI4' ).getFirst(), 0 );\r
871                         range.setEnd( doc.getById( '_EnlargeP4' ), 2 );\r
872 \r
873                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
874 \r
875                         assert.areSame( document.getElementById( '_EnlargeP4' ), range.startContainer.$, 'range.startContainer' );\r
876                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
877                         assert.areSame( document.getElementById( '_EnlargeP4' ), range.endContainer.$, 'range.endContainer' );\r
878                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
879                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
880                 },\r
881 \r
882                 test_enlarge_element11 : function()\r
883                 {\r
884                         // <p>Test <i>[Enlarge]</i></p>\r
885                         // <p>Test [<i>Enlarge</i>]</p>\r
886 \r
887                         var range = new CKEDITOR.dom.range( doc );\r
888                         range.setStart( doc.getById( '_EnlargeI5' ), 0 );\r
889                         range.setEnd( doc.getById( '_EnlargeI5' ), 1 );\r
890 \r
891                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
892 \r
893                         assert.areSame( document.getElementById( '_EnlargeP5' ), range.startContainer.$, 'range.startContainer' );\r
894                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
895                         assert.areSame( document.getElementById( '_EnlargeP5' ), range.endContainer.$, 'range.endContainer' );\r
896                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
897                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
898                 },\r
899 \r
900                 test_enlarge_element12 : function()\r
901                 {\r
902                         // <p>Test <i><b></b>[Enlarge]</i></p>\r
903                         // <p>Test [<i><b></b>Enlarge</i>]</p>\r
904 \r
905                         var range = new CKEDITOR.dom.range( doc );\r
906                         range.setStart( doc.getById( '_EnlargeI6' ), 1 );\r
907                         range.setEnd( doc.getById( '_EnlargeI6' ), 2 );\r
908 \r
909                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
910 \r
911                         assert.areSame( document.getElementById( '_EnlargeP6' ), range.startContainer.$, 'range.startContainer' );\r
912                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
913                         assert.areSame( document.getElementById( '_EnlargeP6' ), range.endContainer.$, 'range.endContainer' );\r
914                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
915                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
916                 },\r
917 \r
918                 test_enlarge_element13 : function()\r
919                 {\r
920                         // <p>Test <i><b></b>[Enlarge]</i></p>\r
921                         // <p>Test [<i><b></b>Enlarge</i>]</p>\r
922 \r
923                         doc.getById( '_EnlargeP' ).setHtml( 'this <i>is some </i>sample text' );\r
924 \r
925                         var range = new CKEDITOR.dom.range( doc );\r
926                         range.setStart( doc.getById( '_EnlargeP' ), 0 );\r
927                         range.setEnd( doc.getById( '_EnlargeP' ).getChild( 1 ), 0 );\r
928 \r
929                         range.enlarge( CKEDITOR.ENLARGE_ELEMENT );\r
930 \r
931                         assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );\r
932                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
933                         assert.areSame( document.getElementById( '_EnlargeP' ).childNodes[ 1 ], range.endContainer.$, 'range.endContainer' );\r
934                         assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
935                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
936                 },\r
937 \r
938                 test_enlarge_list1 : function()\r
939                 {\r
940                         var range = getRange( 'S1', null );\r
941                         range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
942 \r
943                         assert.areSame( document.getElementById( '_EnlargeP7' ), range.startContainer.$, 'range.startContainer' );\r
944                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
945                         assert.areSame( document.getElementById( '_EnlargeP7' ), range.endContainer.$, 'range.endContainer' );\r
946                         assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
947                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
948                 },\r
949 \r
950                 test_enlarge_list2 : function()\r
951                 {\r
952                         var range = getRange( 'S2', 'E2' );\r
953                         range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
954 \r
955                         assert.areSame( document.getElementById( '_EnlargeP8' ), range.startContainer.$, 'range.startContainer' );\r
956                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
957                         assert.areSame( document.getElementById( '_EnlargeP8' ), range.endContainer.$, 'range.endContainer' );\r
958                         assert.areSame( 4, range.endOffset, 'range.endOffset' );\r
959                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
960                 },\r
961 \r
962                 test_enlarge_list3 : function()\r
963                 {\r
964                         var range = getRange( 'S3', null );\r
965                         range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
966 \r
967                         assert.areSame( document.getElementById( '_EnlargeP9' ), range.startContainer.$, 'range.startContainer' );\r
968                         assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
969                         assert.areSame( document.getElementById( '_EnlargeP9' ), range.endContainer.$, 'range.endContainer' );\r
970                         assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
971                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
972                 },\r
973 \r
974                 test_enlarge_list4 : function()\r
975                 {\r
976                         var range = getRange( 'S4', null );\r
977                         range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
978 \r
979                         assert.areSame( document.getElementById( '_EnlargeP10' ), range.startContainer.$, 'range.startContainer' );\r
980                         assert.areSame( 3, range.startOffset, 'range.startOffset' );\r
981                         assert.areSame( document.getElementById( '_EnlargeP10' ), range.endContainer.$, 'range.endContainer' );\r
982                         assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
983                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
984                 },\r
985 \r
986                 test_enlarge_list5 : function()\r
987                 {\r
988                         var range = getRange( 'S9', null );\r
989                         var bookmark = range.createBookmark();\r
990                         range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
991 \r
992                         assert.areSame( document.getElementById( '_EnlargeP15' ), range.startContainer.$, 'range.startContainer' );\r
993                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
994                         assert.areSame( document.getElementById( '_EnlargeP15' ), range.endContainer.$, 'range.endContainer' );\r
995                         assert.areSame( 4, range.endOffset, 'range.endOffset' );\r
996                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
997                         range.moveToBookmark( bookmark );\r
998                 },\r
999 \r
1000                 test_enlarge_block1 : function()\r
1001                 {\r
1002                         var range = getRange( 'S5', null );\r
1003                         range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
1004 \r
1005                         assert.areSame( document.getElementById( '_EnlargeP11' ), range.startContainer.$, 'range.startContainer' );\r
1006                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1007                         assert.areSame( document.getElementById( '_EnlargeP11'), range.endContainer.$, 'range.endContainer' );\r
1008                         assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
1009                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1010                 },\r
1011 \r
1012                 test_enlarge_block2 : function()\r
1013                 {\r
1014                         var range = getRange( 'S10', null );\r
1015                         var bookmark = range.createBookmark();\r
1016                         range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
1017 \r
1018                         assert.areSame( document.getElementById( '_EnlargeP16' ), range.startContainer.$, 'range.startContainer' );\r
1019                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1020                         assert.areSame( document.getElementById( '_EnlargeP16'), range.endContainer.$, 'range.endContainer' );\r
1021                         assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
1022                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1023                         range.moveToBookmark( bookmark );\r
1024                 },\r
1025 \r
1026                 test_enlarge_block3 : function()\r
1027                 {\r
1028                         var range = getRange( 'S6', null );\r
1029                         range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
1030 \r
1031                         assert.areSame( document.getElementById( '_EnlargeP12' ), range.startContainer.$, 'range.startContainer' );\r
1032                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1033                         assert.areSame( document.getElementById( '_EnlargeP12'), range.endContainer.$, 'range.endContainer' );\r
1034                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
1035                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1036                 },\r
1037 \r
1038                 test_enlarge_block4 : function()\r
1039                 {\r
1040                         var range = getRange( 'S7', null );\r
1041                         range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
1042 \r
1043                         assert.areSame( document.getElementById( '_EnlargeP13' ), range.startContainer.$, 'range.startContainer' );\r
1044                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1045                         assert.areSame( document.getElementById( '_EnlargeP13'), range.endContainer.$, 'range.endContainer' );\r
1046                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
1047                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1048                 },\r
1049 \r
1050                 test_enlarge_block5 : function()\r
1051                 {\r
1052                         var range = getRange( 'S8', null );\r
1053                         range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );\r
1054 \r
1055                         assert.areSame( document.getElementById( '_EnlargeP14' ), range.startContainer.$, 'range.startContainer' );\r
1056                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1057                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1058                 },\r
1059 \r
1060                 /**\r
1061                  * Test enlarge list when there's no nodes between\r
1062                  * range start and the block boundary.\r
1063                  */\r
1064                 test_enlarge_block6 : function()\r
1065                 {\r
1066                         var range = getRange( 'S11', null );\r
1067                         range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\r
1068 \r
1069                         assert.areSame( document.getElementById( '_EnlargeP17' ),\r
1070                                 range.startContainer.$, 'range.startContainer' );\r
1071                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1072                 },\r
1073 \r
1074                 test_deleteContents_W3C_1 : function()\r
1075                 {\r
1076                         // W3C DOM Range Specs - Section 2.6 - Example 1\r
1077 \r
1078                         var range = new CKEDITOR.dom.range( doc );\r
1079                         range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
1080                         range.setEnd( doc.getById( '_Para' ), 2 );\r
1081 \r
1082                         range.deleteContents();\r
1083 \r
1084                         assert.areSame( 't text.', getInnerHtml( '_Para' ), 'HTML after deletion' );\r
1085 \r
1086                         assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
1087                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1088                         assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
1089                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1090                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1091                 },\r
1092 \r
1093                 test_deleteContents_W3C_2 : function()\r
1094                 {\r
1095                         // W3C DOM Range Specs - Section 2.6 - Example 2\r
1096 \r
1097                         var range = new CKEDITOR.dom.range( doc );\r
1098                         range.setStart( doc.getById( '_B' ).getFirst(), 1 );\r
1099                         range.setEnd( doc.getById( '_B' ).getNext(), 1 );\r
1100 \r
1101                         range.deleteContents();\r
1102 \r
1103                         assert.areSame( 'this is <b id="_b">s</b>text.', getInnerHtml( '_Para' ) );\r
1104 \r
1105                         assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
1106                         assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
1107                         assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
1108                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
1109                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1110                 },\r
1111 \r
1112                 test_deleteContents_W3C_3 : function()\r
1113                 {\r
1114                         // W3C DOM Range Specs - Section 2.6 - Example 3\r
1115 \r
1116                         var range = new CKEDITOR.dom.range( doc );\r
1117                         range.setStart( doc.getById( '_B' ).getPrevious(), 1 );\r
1118                         range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
1119 \r
1120                         range.deleteContents();\r
1121 \r
1122                         assert.areSame( 't<b id="_b">ome</b> text.', getInnerHtml( '_Para' ) );\r
1123 \r
1124                         assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
1125                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1126                         assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
1127                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1128                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1129                 },\r
1130 \r
1131                 test_deleteContents_W3C_4 : function()\r
1132                 {\r
1133                         // W3C DOM Range Specs - Section 2.6 - Example 4\r
1134 \r
1135                         var range = new CKEDITOR.dom.range( doc );\r
1136                         range.setStart( doc.getById( '_H1' ).getFirst(), 1 );\r
1137                         range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );\r
1138 \r
1139                         range.deleteContents();\r
1140 \r
1141                         assert.areSame( '<h1 id="_h1">f</h1><p>nother paragraph.</p>', getInnerHtml( 'playground' ) );\r
1142 \r
1143                         assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
1144                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1145                         assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
1146                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1147                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1148                 },\r
1149 \r
1150                 test_deleteContents_Other : function()\r
1151                 {\r
1152                         var range = new CKEDITOR.dom.range( doc );\r
1153                         range.setStart( doc.getById( '_H1' ), 0 );\r
1154                         range.setEnd( doc.getById( 'playground' ).getLast(), 1 );\r
1155 \r
1156                         range.deleteContents();\r
1157 \r
1158                         assert.areSame( '<h1 id="_h1"></h1><p></p>', getInnerHtml( 'playground' ) );\r
1159 \r
1160                         assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
1161                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1162                         assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
1163                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1164                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1165                 },\r
1166 \r
1167                 test_deleteContents_Other_2 : function()\r
1168                 {\r
1169                         var range = new CKEDITOR.dom.range( doc );\r
1170                         range.setStart( doc.getById( 'playground' ), 0 );\r
1171                         range.setEnd( doc.getById( 'playground' ), 2 );\r
1172 \r
1173                         range.deleteContents();\r
1174 \r
1175                         assert.areSame( '<p>another paragraph.</p>', getInnerHtml( 'playground' ) );\r
1176 \r
1177                         assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
1178                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1179                         assert.areSame(document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
1180                         assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
1181                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1182                 },\r
1183 \r
1184                 test_deleteContents_Other_3 : function()\r
1185                 {\r
1186                         var range = new CKEDITOR.dom.range( doc );\r
1187                         range.selectNodeContents( doc.getById('_B') );\r
1188 \r
1189                         range.deleteContents();\r
1190 \r
1191                         assert.areSame( '', getInnerHtml('_B') );\r
1192 \r
1193                         assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );\r
1194                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1195                         assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );\r
1196                         assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
1197                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1198                 },\r
1199 \r
1200                 test_deleteContents_Other_4 : function()\r
1201                 {\r
1202                         var range = new CKEDITOR.dom.range( doc );\r
1203                         range.selectNodeContents( doc.getById('_Para') );\r
1204 \r
1205                         range.deleteContents();\r
1206 \r
1207                         assert.areSame( '', getInnerHtml('_Para') );\r
1208 \r
1209                         assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );\r
1210                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1211                         assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );\r
1212                         assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
1213                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1214                 },\r
1215 \r
1216                 test_extractContents_W3C_1 : function()\r
1217                 {\r
1218                         // W3C DOM Range Specs - Section 2.7 - Example 1\r
1219 \r
1220                         var range = new CKEDITOR.dom.range( doc );\r
1221                         range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
1222                         range.setEnd( doc.getById( '_Para' ), 2 );\r
1223 \r
1224                         var docFrag = range.extractContents();\r
1225 \r
1226                         var tmpDiv = doc.createElement( 'div' );\r
1227                         docFrag.appendTo( tmpDiv );\r
1228 \r
1229                         assert.areSame( 'his is <b id="_b">some</b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
1230                         assert.areSame( 't text.', getInnerHtml( '_Para' ), 'HTML after extraction' );\r
1231 \r
1232                         assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
1233                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1234                         assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
1235                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1236                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1237                 },\r
1238 \r
1239                 test_extractContents_W3C_2 : function()\r
1240                 {\r
1241                         // W3C DOM Range Specs - Section 2.7 - Example 2\r
1242 \r
1243                         var range = new CKEDITOR.dom.range( doc );\r
1244                         range.setStart( doc.getById( '_B' ).getFirst(), 1 );\r
1245                         range.setEnd( doc.getById( '_B' ).getNext(), 2 );\r
1246 \r
1247                         var docFrag = range.extractContents();\r
1248 \r
1249                         var tmpDiv = doc.createElement( 'div' );\r
1250                         docFrag.appendTo( tmpDiv );\r
1251 \r
1252                         assert.areSame( '<b>ome</b> t', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
1253                         assert.areSame( 'this is <b id="_b">s</b>ext.', getInnerHtml( '_Para' ), 'HTML after extraction' );\r
1254 \r
1255                         assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
1256                         assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
1257                         assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
1258                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
1259                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1260                 },\r
1261 \r
1262                 test_extractContents_W3C_3 : function()\r
1263                 {\r
1264                         // W3C DOM Range Specs - Section 2.6 - Example 3\r
1265 \r
1266                         var range = new CKEDITOR.dom.range( doc );\r
1267                         range.setStart( doc.getById( '_B' ).getPrevious(), 1 );\r
1268                         range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
1269 \r
1270                         var docFrag = range.extractContents();\r
1271 \r
1272                         var tmpDiv = doc.createElement( 'div' );\r
1273                         docFrag.appendTo( tmpDiv );\r
1274 \r
1275                         assert.areSame( 'his is <b>s</b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
1276                         assert.areSame( 't<b id="_b">ome</b> text.', getInnerHtml( '_Para' ), 'HTML after extraction' );\r
1277 \r
1278                         assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );\r
1279                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1280                         assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
1281                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1282                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1283                 },\r
1284 \r
1285                 test_extractContents_W3C_4 : function()\r
1286                 {\r
1287                         // W3C DOM Range Specs - Section 2.6 - Example 4\r
1288 \r
1289                         var range = new CKEDITOR.dom.range( doc );\r
1290                         range.setStart( doc.getById( '_H1' ).getFirst(), 1 );\r
1291                         range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );\r
1292 \r
1293                         var docFrag = range.extractContents();\r
1294 \r
1295                         var tmpDiv = doc.createElement( 'div' );\r
1296                         docFrag.appendTo( tmpDiv );\r
1297 \r
1298                         assert.areSame( '<h1>ckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p><p>a</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
1299                         assert.areSame( '<h1 id="_h1">f</h1><p>nother paragraph.</p>', getInnerHtml( 'playground' ) );\r
1300 \r
1301                         assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
1302                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1303                         assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
1304                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1305                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1306                 },\r
1307 \r
1308                 test_extractContents_Other : function()\r
1309                 {\r
1310                         var range = new CKEDITOR.dom.range( doc );\r
1311                         range.setStart( doc.getById( '_H1' ), 0 );\r
1312                         range.setEnd( doc.getById( 'playground' ).getLast(), 1 );\r
1313 \r
1314                         var docFrag = range.extractContents();\r
1315 \r
1316                         var tmpDiv = doc.createElement( 'div' );\r
1317                         docFrag.appendTo( tmpDiv );\r
1318 \r
1319                         assert.areSame( '<h1>fckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p><p>another paragraph.</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
1320                         assert.areSame( '<h1 id="_h1"></h1><p></p>', getInnerHtml( 'playground' ) );\r
1321 \r
1322                         assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
1323                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1324                         assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
1325                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1326                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1327                 },\r
1328 \r
1329                 test_extractContents_Other_2 : function()\r
1330                 {\r
1331                         var range = new CKEDITOR.dom.range( doc );\r
1332                         range.setStart( doc.getById( 'playground' ), 0 );\r
1333                         range.setEnd( doc.getById( 'playground' ), 2 );\r
1334 \r
1335                         var docFrag = range.extractContents();\r
1336 \r
1337                         var tmpDiv = doc.createElement( 'div' );\r
1338                         docFrag.appendTo( tmpDiv );\r
1339 \r
1340                         assert.areSame( '<h1 id="_h1">fckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
1341                         assert.areSame( '<p>another paragraph.</p>', getInnerHtml( 'playground' ) );\r
1342 \r
1343                         assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
1344                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1345                         assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
1346                         assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
1347                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1348                 },\r
1349 \r
1350                 test_extractContents_Other_3 : function()\r
1351                 {\r
1352                         var range = new CKEDITOR.dom.range( doc );\r
1353 \r
1354                         range.selectNodeContents( doc.getById('_B') );\r
1355 \r
1356                         var docFrag = range.extractContents();\r
1357 \r
1358                         var tmpDiv = doc.createElement( 'div' );\r
1359                         docFrag.appendTo( tmpDiv );\r
1360 \r
1361                         assert.areSame( 'some', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
1362                         assert.areSame( '', getInnerHtml('_B'), 'HTML after extraction' );\r
1363 \r
1364                         assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );\r
1365                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1366                         assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );\r
1367                         assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
1368                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1369                 },\r
1370 \r
1371                 test_extractContents_Other_4 : function()\r
1372                 {\r
1373                         var range = new CKEDITOR.dom.range( doc );\r
1374 \r
1375                         range.selectNodeContents( doc.getById('_Para') );\r
1376 \r
1377                         var docFrag = range.extractContents();\r
1378 \r
1379                         var tmpDiv = doc.createElement( 'div' );\r
1380                         docFrag.appendTo( tmpDiv );\r
1381 \r
1382                         assert.areSame( 'this is <b id="_b">some</b> text.', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
1383                         assert.areSame( '', getInnerHtml('_Para'), 'HTML after extraction' );\r
1384 \r
1385                         assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );\r
1386                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1387                         assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );\r
1388                         assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
1389                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1390                 },\r
1391 \r
1392                 test_extractContents_Other_5 : function()\r
1393                 {\r
1394                         document.getElementById( 'playground' ).innerHTML = '<p><b><i>test</i></b></p>';\r
1395 \r
1396                         var range = new CKEDITOR.dom.range( doc );\r
1397                         range.setStartAfter( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('i')[0] ) );\r
1398                         range.setEndAfter( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('b')[0] ) );\r
1399 \r
1400                         var docFrag = range.extractContents();\r
1401 \r
1402                         var tmpDiv = doc.createElement( 'div' );\r
1403                         docFrag.appendTo( tmpDiv );\r
1404 \r
1405                         assert.areSame( '<b></b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
1406                         assert.areSame( '<p><b><i>test</i></b></p>', getInnerHtml( 'playground' ), 'HTML after extraction' );\r
1407 \r
1408                         assert.areSame( document.getElementById( 'playground' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
1409                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1410                         assert.areSame( document.getElementById( 'playground' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
1411                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1412                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1413                 },\r
1414 \r
1415                 test_extractContents_Other_6 : function()\r
1416                 {\r
1417                         document.getElementById( 'playground' ).innerHTML = '<p><b><i>test</i></b></p>';\r
1418 \r
1419                         var range = new CKEDITOR.dom.range( doc );\r
1420 \r
1421                         range.setStartBefore( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('b')[0] ) );\r
1422                         range.setEndBefore( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('i')[0] ) );\r
1423 \r
1424                         var docFrag = range.extractContents();\r
1425 \r
1426                         var tmpDiv = doc.createElement( 'div' );\r
1427                         docFrag.appendTo( tmpDiv );\r
1428 \r
1429                         assert.areSame( '<b></b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );\r
1430                         assert.areSame( '<p><b><i>test</i></b></p>', getInnerHtml( 'playground' ), 'HTML after extraction' );\r
1431 \r
1432                         assert.areSame( document.getElementById( 'playground' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
1433                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1434                         assert.areSame( document.getElementById( 'playground' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
1435                         assert.areSame( 0, range.endOffset, 'range.endOffset' );\r
1436                         assert.isTrue( range.collapsed, 'range.collapsed' );\r
1437                 },\r
1438 \r
1439                 test_cloneContents_W3C_1 : function()\r
1440                 {\r
1441                         // W3C DOM Range Specs - Section 2.7 - Example 1\r
1442 \r
1443                         var range = new CKEDITOR.dom.range( doc );\r
1444                         range.setStart( doc.getById( '_Para' ).getFirst(), 1 );\r
1445                         range.setEnd( doc.getById( '_Para' ), 2 );\r
1446 \r
1447                         var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
1448 \r
1449                         var docFrag = range.cloneContents();\r
1450 \r
1451                         var tmpDiv = doc.createElement( 'div' );\r
1452                         docFrag.appendTo( tmpDiv );\r
1453 \r
1454                         assert.areSame( 'his is <b>some</b>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
1455 \r
1456                         // The body HTML must remain unchanged.\r
1457                         assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
1458 \r
1459                         // The range must also remain unchanged.\r
1460                         assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
1461                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1462                         assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );\r
1463                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
1464                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1465                 },\r
1466 \r
1467                 test_cloneContents_W3C_2 : function()\r
1468                 {\r
1469                         // W3C DOM Range Specs - Section 2.7 - Example 2\r
1470 \r
1471                         var range = new CKEDITOR.dom.range( doc );\r
1472                         range.setStart( doc.getById( '_B' ).getFirst(), 1 );\r
1473                         range.setEnd( doc.getById( '_B' ).getNext(), 2 );\r
1474 \r
1475                         var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
1476 \r
1477                         var docFrag = range.cloneContents();\r
1478 \r
1479                         var tmpDiv = doc.createElement( 'div' );\r
1480                         docFrag.appendTo( tmpDiv );\r
1481 \r
1482                         assert.areSame( '<b>ome</b> t', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
1483 \r
1484                         // The body HTML must remain unchanged.\r
1485                         assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
1486 \r
1487                         // The range must also remain unchanged.\r
1488                         assert.areSame( document.getElementById( '_B' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
1489                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1490                         assert.areSame( document.getElementById( '_B' ).nextSibling, range.endContainer.$, 'range.endContainer' );\r
1491                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
1492                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1493                 },\r
1494 \r
1495                 test_cloneContents_W3C_3 : function()\r
1496                 {\r
1497                         // W3C DOM Range Specs - Section 2.6 - Example 3\r
1498 \r
1499                         var range = new CKEDITOR.dom.range( doc );\r
1500                         range.setStart( doc.getById( '_B' ).getPrevious(), 1 );\r
1501                         range.setEnd( doc.getById( '_B' ).getFirst(), 1 );\r
1502 \r
1503                         var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
1504 \r
1505                         var docFrag = range.cloneContents();\r
1506 \r
1507                         var tmpDiv = doc.createElement( 'div' );\r
1508                         docFrag.appendTo( tmpDiv );\r
1509 \r
1510                         assert.areSame( 'his is <b>s</b>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
1511 \r
1512                         // The body HTML must remain unchanged.\r
1513                         assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
1514 \r
1515                         // The range must also remain unchanged.\r
1516                         assert.areSame( document.getElementById( '_B' ).previousSibling, range.startContainer.$, 'range.startContainer' );\r
1517                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1518                         assert.areSame( document.getElementById( '_B' ).firstChild, range.endContainer.$, 'range.endContainer' );\r
1519                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1520                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1521                 },\r
1522 \r
1523                 // W3C DOM Range Specs - Section 2.6 - Example 4\r
1524                 test_cloneContents_W3C_4 : function()\r
1525                 {\r
1526                         var range = new CKEDITOR.dom.range( doc );\r
1527 \r
1528                         range.setStart( doc.getById( '_H1' ).getFirst(), 1 );\r
1529                         range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );\r
1530 \r
1531                         var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
1532 \r
1533                         var docFrag = range.cloneContents();\r
1534 \r
1535                         var tmpDiv = doc.createElement( 'div' );\r
1536                         docFrag.appendTo( tmpDiv );\r
1537 \r
1538                         assert.areSame( '<h1>ckw3crange test</h1><p>this is <b>some</b> text.</p><p>a</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
1539 \r
1540                         // The body HTML must remain unchanged.\r
1541                         assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
1542 \r
1543                         // The range must also remain unchanged.\r
1544                         assert.areSame( document.getElementById( '_H1' ).firstChild, range.startContainer.$, 'range.startContainer' );\r
1545                         assert.areSame( 1, range.startOffset, 'range.startOffset' );\r
1546                         assert.areSame( document.getElementById( 'playground' ).lastChild.firstChild, range.endContainer.$, 'range.endContainer' );\r
1547                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1548                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1549                 },\r
1550 \r
1551                 test_cloneContents_Other : function()\r
1552                 {\r
1553                         var range = new CKEDITOR.dom.range( doc );\r
1554 \r
1555                         range.setStart( doc.getById( '_H1' ), 0 );\r
1556                         range.setEnd( doc.getById( 'playground' ).getLast(), 1 );\r
1557 \r
1558                         var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
1559 \r
1560                         var docFrag = range.cloneContents();\r
1561 \r
1562                         var tmpDiv = doc.createElement( 'div' );\r
1563                         docFrag.appendTo( tmpDiv );\r
1564 \r
1565                         assert.areSame( '<h1>fckw3crange test</h1><p>this is <b>some</b> text.</p><p>another paragraph.</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
1566 \r
1567                         // The body HTML must remain unchanged.\r
1568                         assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
1569 \r
1570                         // The range must also remain unchanged.\r
1571                         assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );\r
1572                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1573                         assert.areSame( document.getElementById( 'playground' ).lastChild, range.endContainer.$, 'range.endContainer' );\r
1574                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1575                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1576                 },\r
1577 \r
1578                 test_cloneContents_Other_2 : function()\r
1579                 {\r
1580                         var range = new CKEDITOR.dom.range( doc );\r
1581 \r
1582                         range.setStart( doc.getById( 'playground' ), 0 );\r
1583                         range.setEnd( doc.getById( 'playground' ), 2 );\r
1584 \r
1585                         var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
1586 \r
1587                         var docFrag = range.cloneContents();\r
1588 \r
1589                         var tmpDiv = doc.createElement( 'div' );\r
1590                         docFrag.appendTo( tmpDiv );\r
1591 \r
1592                         assert.areSame( '<h1>fckw3crange test</h1><p>this is <b>some</b> text.</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
1593 \r
1594                         // The body HTML must remain unchanged.\r
1595                         assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
1596 \r
1597                         // The range must also remain unchanged.\r
1598                         assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );\r
1599                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1600                         assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );\r
1601                         assert.areSame( 2, range.endOffset, 'range.endOffset' );\r
1602                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1603                 },\r
1604 \r
1605                 test_cloneContents_Other_3 : function()\r
1606                 {\r
1607                         var range = new CKEDITOR.dom.range( doc );\r
1608 \r
1609                         range.selectNodeContents( doc.getById('_B') );\r
1610 \r
1611                         var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
1612 \r
1613                         var docFrag = range.cloneContents();\r
1614 \r
1615                         var tmpDiv = doc.createElement( 'div' );\r
1616                         docFrag.appendTo( tmpDiv );\r
1617 \r
1618                         assert.areSame( 'some', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
1619 \r
1620                         // The body HTML must remain unchanged.\r
1621                         assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
1622 \r
1623                         assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );\r
1624                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1625                         assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );\r
1626                         assert.areSame( 1, range.endOffset, 'range.endOffset' );\r
1627                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1628                 },\r
1629 \r
1630                 test_cloneContents_Other_4 : function()\r
1631                 {\r
1632                         var range = new CKEDITOR.dom.range( doc );\r
1633 \r
1634                         range.selectNodeContents( doc.getById('_Para') );\r
1635 \r
1636                         var bodyHtml = document.getElementById( 'playground' ).innerHTML;\r
1637 \r
1638                         var docFrag = range.cloneContents();\r
1639 \r
1640                         var tmpDiv = doc.createElement( 'div' );\r
1641                         docFrag.appendTo( tmpDiv );\r
1642 \r
1643                         assert.areSame( 'this is <b>some</b> text.', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );\r
1644 \r
1645                         // The body HTML must remain unchanged.\r
1646                         assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );\r
1647 \r
1648                         assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );\r
1649                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1650                         assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );\r
1651                         assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
1652                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1653                 },\r
1654 \r
1655                 test_createBookmark2_1 : function()\r
1656                 {\r
1657                         doc.getById( 'playground' ).setHtml( '<p id="P">This is <b id="B">a test</b></p>' );\r
1658 \r
1659                         var range = new CKEDITOR.dom.range( doc );\r
1660 \r
1661                         range.setStart( doc.getById( 'P' ), 0 );\r
1662                         range.setEnd( doc.getById( 'B' ).getFirst(), 3 );\r
1663 \r
1664                         var bookmark = range.createBookmark2();\r
1665 \r
1666                         range = new CKEDITOR.dom.range( doc );\r
1667                         range.moveToBookmark( bookmark );\r
1668 \r
1669                         assert.areSame( document.getElementById('P'), range.startContainer.$, 'range.startContainer' );\r
1670                         assert.areSame( 0, range.startOffset, 'range.startOffset' );\r
1671                         assert.areSame( document.getElementById('B').firstChild, range.endContainer.$, 'range.endContainer' );\r
1672                         assert.areSame( 3, range.endOffset, 'range.endOffset' );\r
1673                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1674                 },\r
1675 \r
1676                 // This test is just like test_createBookmark2_3, but uses a "non\r
1677                 // normalized" bookmark.\r
1678                 test_createBookmark2_2 : function()\r
1679                 {\r
1680                         var html = '<p id="P">A B <b>C </b>D E</p>';\r
1681 \r
1682                         doc.getById( 'playground' ).setHtml( html );\r
1683 \r
1684                         var p = doc.getById( 'P' );\r
1685 \r
1686                         // Split the text nodes.\r
1687                         p.getFirst().split( 2 );        // Right before "B"\r
1688                         p.getChild( 3 ).split( 2 );     // Right before "E"\r
1689 \r
1690                         assert.areSame( 5, p.getChildCount(), 'The number of nodes after split doesn\'t match' );\r
1691 \r
1692                         var range = new CKEDITOR.dom.range( doc );\r
1693 \r
1694                         // Create a range that enbraces "E".\r
1695                         range.setStartBefore( p.getChild( 4 ) );\r
1696                         range.setEndAfter( p.getChild( 4 ) );\r
1697 \r
1698                         var bookmark = range.createBookmark2();\r
1699 \r
1700                         range = new CKEDITOR.dom.range( doc );\r
1701                         range.moveToBookmark( bookmark );\r
1702 \r
1703                         assert.areSame( document.getElementById('P'), range.startContainer.$, 'range.startContainer' );\r
1704                         assert.areSame( 4, range.startOffset, 'range.startOffset' );\r
1705                         assert.areSame( document.getElementById('P'), range.endContainer.$, 'range.endContainer' );\r
1706                         assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
1707                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1708                 },\r
1709 \r
1710                 test_createBookmark2_3 : function()\r
1711                 {\r
1712                         var html = '<p id="P">A B <b>C </b>D E</p>';\r
1713 \r
1714                         doc.getById( 'playground' ).setHtml( html );\r
1715 \r
1716                         var p = doc.getById( 'P' );\r
1717 \r
1718                         // Split the text nodes.\r
1719                         p.getFirst().split( 2 );        // Right before "B"\r
1720                         p.getChild( 3 ).split( 2 );     // Right before "E"\r
1721 \r
1722                         assert.areSame( 5, p.getChildCount(), 'The number of nodes after split doesn\'t match' );\r
1723 \r
1724                         var range = new CKEDITOR.dom.range( doc );\r
1725 \r
1726                         // Create a range that enbraces "E".\r
1727                         range.setStartBefore( p.getChild( 4 ) );\r
1728                         range.setEndAfter( p.getChild( 4 ) );\r
1729 \r
1730                         var bookmark = range.createBookmark2( true );\r
1731 \r
1732                         // Normalize the contents.\r
1733                         doc.getById( 'playground' ).setHtml( html );\r
1734 \r
1735                         range = new CKEDITOR.dom.range( doc );\r
1736                         range.moveToBookmark( bookmark );\r
1737 \r
1738                         assert.areSame( document.getElementById('P').childNodes[2], range.startContainer.$, 'range.startContainer' );\r
1739                         assert.areSame( 2, range.startOffset, 'range.startOffset' );\r
1740                         assert.areSame( document.getElementById('P'), range.endContainer.$, 'range.endContainer' );\r
1741 \r
1742                         // Note that the endOffset doesn't get normalized as it's not\r
1743                         // needed. Any offset pointing over the container size is meant to\r
1744                         // be at the end of it.\r
1745                         assert.areSame( 5, range.endOffset, 'range.endOffset' );\r
1746                         assert.isFalse( range.collapsed, 'range.collapsed' );\r
1747                 },\r
1748 \r
1749                 test_checkStartOfBlock1 : function()\r
1750                 {\r
1751                         var p = doc.getById( 'playground' );\r
1752                         p.setHtml( '<p>Test</p>' );\r
1753                         p = p.getFirst();\r
1754 \r
1755                         var range = new CKEDITOR.dom.range( doc );\r
1756 \r
1757                         range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
1758                         range.collapse( true );\r
1759 \r
1760                         assert.isTrue( range.checkStartOfBlock() );\r
1761                 },\r
1762 \r
1763                 test_checkStartOfBlock2 : function()\r
1764                 {\r
1765                         var p = doc.getById( 'playground' );\r
1766                         p.setHtml( '<p>Test</p>' );\r
1767                         p = p.getFirst();\r
1768 \r
1769                         var range = new CKEDITOR.dom.range( doc );\r
1770 \r
1771                         range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
1772                         range.collapse( true );\r
1773 \r
1774                         assert.isFalse( range.checkStartOfBlock() );\r
1775                 },\r
1776 \r
1777                 test_checkStartOfBlock3 : function()\r
1778                 {\r
1779                         var p = doc.getById( 'playground' );\r
1780                         p.setHtml( '<p>Test</p>' );\r
1781                         p = p.getFirst();\r
1782 \r
1783                         var range = new CKEDITOR.dom.range( doc );\r
1784 \r
1785                         range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
1786                         range.collapse( true );\r
1787 \r
1788                         assert.isTrue( range.checkStartOfBlock() );\r
1789                 },\r
1790 \r
1791                 test_checkStartOfBlock4 : function()\r
1792                 {\r
1793                         var p = doc.getById( 'playground' );\r
1794                         p.setHtml( '<p>Test</p>' );\r
1795                         p = p.getFirst();\r
1796 \r
1797                         var range = new CKEDITOR.dom.range( doc );\r
1798 \r
1799                         range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
1800                         range.collapse( true );\r
1801 \r
1802                         assert.isFalse( range.checkStartOfBlock() );\r
1803                 },\r
1804 \r
1805                 test_checkStartOfBlock5 : function()\r
1806                 {\r
1807                         var el = doc.getById( 'playground' );\r
1808                         el.setHtml( '<p> Test </p>' );\r
1809                         el = el.getFirst().getFirst();\r
1810 \r
1811                         var range = new CKEDITOR.dom.range( doc );\r
1812 \r
1813                         // IE trims the space in the beginning of text nodes in our case.\r
1814                         // So, let's just check it and make it pass.\r
1815                         range.setStart( el, ( el.substring( 0, 1 ) == 'T' ) ? 0 : 1 );\r
1816                         range.collapse( true );\r
1817 \r
1818                         assert.isTrue( range.checkStartOfBlock() );\r
1819                 },\r
1820 \r
1821                 test_checkStartOfBlock6 : function()\r
1822                 {\r
1823                         var p = doc.getById( 'playground' );\r
1824                         p.setHtml( '<p> Test </p>' );\r
1825                         p = p.getFirst();\r
1826 \r
1827                         var range = new CKEDITOR.dom.range( doc );\r
1828 \r
1829                         range.setStart( p.getFirst(), 5 );\r
1830                         range.collapse( true );\r
1831 \r
1832                         assert.isFalse( range.checkStartOfBlock() );\r
1833                 },\r
1834 \r
1835                 test_checkStartOfBlock7 : function()\r
1836                 {\r
1837                         var el = doc.getById( 'playground' );\r
1838                         el.setHtml( '<p><b>Test</b></p>' );\r
1839                         el = el.getFirst().getFirst();\r
1840 \r
1841                         var range = new CKEDITOR.dom.range( doc );\r
1842                         range.selectNodeContents( el );\r
1843 \r
1844                         assert.isTrue( range.checkStartOfBlock() );\r
1845                 },\r
1846 \r
1847                 test_checkStartOfBlock8 : function()\r
1848                 {\r
1849                         var el = doc.getById( 'playground' );\r
1850                         el.setHtml( '<p>A<b>Test</b>B</p>' );\r
1851                         el = el.getFirst().getFirst().getNext();\r
1852 \r
1853                         var range = new CKEDITOR.dom.range( doc );\r
1854                         range.selectNodeContents( el );\r
1855 \r
1856                         assert.isFalse( range.checkStartOfBlock() );\r
1857                 },\r
1858 \r
1859                 test_checkEndOfBlock1 : function()\r
1860                 {\r
1861                         var p = doc.getById( 'playground' );\r
1862                         p.setHtml( '<p>Test</p>' );\r
1863                         p = p.getFirst();\r
1864 \r
1865                         var range = new CKEDITOR.dom.range( doc );\r
1866 \r
1867                         range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
1868                         range.collapse( true );\r
1869 \r
1870                         assert.isFalse( range.checkEndOfBlock() );\r
1871                 },\r
1872 \r
1873                 test_checkEndOfBlock2 : function()\r
1874                 {\r
1875                         var p = doc.getById( 'playground' );\r
1876                         p.setHtml( '<p>Test</p>' );\r
1877                         p = p.getFirst();\r
1878 \r
1879                         var range = new CKEDITOR.dom.range( doc );\r
1880 \r
1881                         range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
1882                         range.collapse( true );\r
1883 \r
1884                         assert.isTrue( range.checkEndOfBlock() );\r
1885                 },\r
1886 \r
1887                 test_checkEndOfBlock3 : function()\r
1888                 {\r
1889                         var p = doc.getById( 'playground' );\r
1890                         p.setHtml( '<p>Test</p>' );\r
1891                         p = p.getFirst();\r
1892 \r
1893                         var range = new CKEDITOR.dom.range( doc );\r
1894 \r
1895                         range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
1896                         range.collapse( true );\r
1897 \r
1898                         assert.isFalse( range.checkEndOfBlock() );\r
1899                 },\r
1900 \r
1901                 test_checkEndOfBlock4 : function()\r
1902                 {\r
1903                         var p = doc.getById( 'playground' );\r
1904                         p.setHtml( '<p>Test</p>' );\r
1905                         p = p.getFirst();\r
1906 \r
1907                         var range = new CKEDITOR.dom.range( doc );\r
1908 \r
1909                         range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
1910                         range.collapse( true );\r
1911 \r
1912                         assert.isTrue( range.checkEndOfBlock() );\r
1913                 },\r
1914 \r
1915                 test_checkEndOfBlock5 : function()\r
1916                 {\r
1917                         var p = doc.getById( 'playground' );\r
1918                         p.setHtml( '<p> Test </p>' );\r
1919                         p = p.getFirst();\r
1920 \r
1921                         var range = new CKEDITOR.dom.range( doc );\r
1922 \r
1923                         range.setStart( p.getFirst(), 1 );\r
1924                         range.collapse( true );\r
1925 \r
1926                         assert.isFalse( range.checkEndOfBlock() );\r
1927                 },\r
1928 \r
1929                 test_checkEndOfBlock6 : function()\r
1930                 {\r
1931                         var p = doc.getById( 'playground' );\r
1932                         p.setHtml( '<p> Test </p>' );\r
1933                         p = p.getFirst();\r
1934 \r
1935                         var range = new CKEDITOR.dom.range( doc );\r
1936 \r
1937                         range.setStart( p.getFirst(), 5 );\r
1938                         range.collapse( true );\r
1939 \r
1940                         assert.isTrue( range.checkEndOfBlock() );\r
1941                 },\r
1942 \r
1943                 test_checkEndOfBlock7 : function()\r
1944                 {\r
1945                         var el = doc.getById( 'playground' );\r
1946                         el.setHtml( '<p><b>Test</b></p>' );\r
1947                         el = el.getFirst().getFirst();\r
1948 \r
1949                         var range = new CKEDITOR.dom.range( doc );\r
1950                         range.selectNodeContents( el );\r
1951 \r
1952                         assert.isTrue( range.checkEndOfBlock() );\r
1953                 },\r
1954 \r
1955                 test_checkEndOfBlock8 : function()\r
1956                 {\r
1957                         var el = doc.getById( 'playground' );\r
1958                         el.setHtml( '<p>A<b>Test</b>B</p>' );\r
1959                         el = el.getFirst().getFirst().getNext();\r
1960 \r
1961                         var range = new CKEDITOR.dom.range( doc );\r
1962                         range.selectNodeContents( el );\r
1963 \r
1964                         assert.isFalse( range.checkEndOfBlock() );\r
1965                 },\r
1966 \r
1967                 test_checkStartOfBlock1 : function()\r
1968                 {\r
1969                         var p = doc.getById( 'playground' );\r
1970                         p.setHtml( '<p>Test</p>' );\r
1971                         p = p.getFirst();\r
1972 \r
1973                         var range = new CKEDITOR.dom.range( doc );\r
1974 \r
1975                         range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
1976                         range.collapse( true );\r
1977 \r
1978                         assert.isTrue( range.checkStartOfBlock() );\r
1979                 },\r
1980 \r
1981                 test_checkStartOfBlock2 : function()\r
1982                 {\r
1983                         var p = doc.getById( 'playground' );\r
1984                         p.setHtml( '<p>Test</p>' );\r
1985                         p = p.getFirst();\r
1986 \r
1987                         var range = new CKEDITOR.dom.range( doc );\r
1988 \r
1989                         range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
1990                         range.collapse( true );\r
1991 \r
1992                         assert.isFalse( range.checkStartOfBlock() );\r
1993                 },\r
1994 \r
1995                 test_checkStartOfBlock3 : function()\r
1996                 {\r
1997                         var p = doc.getById( 'playground' );\r
1998                         p.setHtml( '<p>Test</p>' );\r
1999                         p = p.getFirst();\r
2000 \r
2001                         var range = new CKEDITOR.dom.range( doc );\r
2002 \r
2003                         range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
2004                         range.collapse( true );\r
2005 \r
2006                         assert.isTrue( range.checkStartOfBlock() );\r
2007                 },\r
2008 \r
2009                 test_checkStartOfBlock4 : function()\r
2010                 {\r
2011                         var p = doc.getById( 'playground' );\r
2012                         p.setHtml( '<p>Test</p>' );\r
2013                         p = p.getFirst();\r
2014 \r
2015                         var range = new CKEDITOR.dom.range( doc );\r
2016 \r
2017                         range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
2018                         range.collapse( true );\r
2019 \r
2020                         assert.isFalse( range.checkStartOfBlock() );\r
2021                 },\r
2022 \r
2023                 test_checkStartOfBlock5 : function()\r
2024                 {\r
2025                         var el = doc.getById( 'playground' );\r
2026                         el.setHtml( '<p> Test </p>' );\r
2027                         el = el.getFirst().getFirst();\r
2028 \r
2029                         var range = new CKEDITOR.dom.range( doc );\r
2030 \r
2031                         // IE trims the space in the beginning of text nodes in our case.\r
2032                         // So, let's just check it and make it pass.\r
2033                         range.setStart( el, ( el.substring( 0, 1 ) == 'T' ) ? 0 : 1 );\r
2034                         range.collapse( true );\r
2035 \r
2036                         assert.isTrue( range.checkStartOfBlock() );\r
2037                 },\r
2038 \r
2039                 test_checkStartOfBlock6 : function()\r
2040                 {\r
2041                         var p = doc.getById( 'playground' );\r
2042                         p.setHtml( '<p> Test </p>' );\r
2043                         p = p.getFirst();\r
2044 \r
2045                         var range = new CKEDITOR.dom.range( doc );\r
2046 \r
2047                         range.setStart( p.getFirst(), 5 );\r
2048                         range.collapse( true );\r
2049 \r
2050                         assert.isFalse( range.checkStartOfBlock() );\r
2051                 },\r
2052 \r
2053                 test_checkStartOfBlock7 : function()\r
2054                 {\r
2055                         var el = doc.getById( 'playground' );\r
2056                         el.setHtml( '<p><b>Test</b></p>' );\r
2057                         el = el.getFirst().getFirst();\r
2058 \r
2059                         var range = new CKEDITOR.dom.range( doc );\r
2060                         range.selectNodeContents( el );\r
2061 \r
2062                         assert.isTrue( range.checkStartOfBlock() );\r
2063                 },\r
2064 \r
2065                 test_checkStartOfBlock8 : function()\r
2066                 {\r
2067                         var el = doc.getById( 'playground' );\r
2068                         el.setHtml( '<p>A<b>Test</b>B</p>' );\r
2069                         el = el.getFirst().getFirst().getNext();\r
2070 \r
2071                         var range = new CKEDITOR.dom.range( doc );\r
2072                         range.selectNodeContents( el );\r
2073 \r
2074                         assert.isFalse( range.checkStartOfBlock() );\r
2075                 },\r
2076 \r
2077                 test_checkEndOfBlock1 : function()\r
2078                 {\r
2079                         var p = doc.getById( 'playground' );\r
2080                         p.setHtml( '<p>Test</p>' );\r
2081                         p = p.getFirst();\r
2082 \r
2083                         var range = new CKEDITOR.dom.range( doc );\r
2084 \r
2085                         range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );\r
2086                         range.collapse( true );\r
2087 \r
2088                         assert.isFalse( range.checkEndOfBlock() );\r
2089                 },\r
2090 \r
2091                 test_checkEndOfBlock2 : function()\r
2092                 {\r
2093                         var p = doc.getById( 'playground' );\r
2094                         p.setHtml( '<p>Test</p>' );\r
2095                         p = p.getFirst();\r
2096 \r
2097                         var range = new CKEDITOR.dom.range( doc );\r
2098 \r
2099                         range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );\r
2100                         range.collapse( true );\r
2101 \r
2102                         assert.isTrue( range.checkEndOfBlock() );\r
2103                 },\r
2104 \r
2105                 test_checkEndOfBlock3 : function()\r
2106                 {\r
2107                         var p = doc.getById( 'playground' );\r
2108                         p.setHtml( '<p>Test</p>' );\r
2109                         p = p.getFirst();\r
2110 \r
2111                         var range = new CKEDITOR.dom.range( doc );\r
2112 \r
2113                         range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
2114                         range.collapse( true );\r
2115 \r
2116                         assert.isFalse( range.checkEndOfBlock() );\r
2117                 },\r
2118 \r
2119                 test_checkEndOfBlock4 : function()\r
2120                 {\r
2121                         var p = doc.getById( 'playground' );\r
2122                         p.setHtml( '<p>Test</p>' );\r
2123                         p = p.getFirst();\r
2124 \r
2125                         var range = new CKEDITOR.dom.range( doc );\r
2126 \r
2127                         range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
2128                         range.collapse( true );\r
2129 \r
2130                         assert.isTrue( range.checkEndOfBlock() );\r
2131                 },\r
2132 \r
2133                 test_checkEndOfBlock5 : function()\r
2134                 {\r
2135                         var p = doc.getById( 'playground' );\r
2136                         p.setHtml( '<p> Test </p>' );\r
2137                         p = p.getFirst();\r
2138 \r
2139                         var range = new CKEDITOR.dom.range( doc );\r
2140 \r
2141                         range.setStart( p.getFirst(), 1 );\r
2142                         range.collapse( true );\r
2143 \r
2144                         assert.isFalse( range.checkEndOfBlock() );\r
2145                 },\r
2146 \r
2147                 test_checkEndOfBlock6 : function()\r
2148                 {\r
2149                         var p = doc.getById( 'playground' );\r
2150                         p.setHtml( '<p> Test </p>' );\r
2151                         p = p.getFirst();\r
2152 \r
2153                         var range = new CKEDITOR.dom.range( doc );\r
2154 \r
2155                         range.setStart( p.getFirst(), 5 );\r
2156                         range.collapse( true );\r
2157 \r
2158                         assert.isTrue( range.checkEndOfBlock() );\r
2159                 },\r
2160 \r
2161                 test_checkEndOfBlock7 : function()\r
2162                 {\r
2163                         var el = doc.getById( 'playground' );\r
2164                         el.setHtml( '<p><b>Test</b></p>' );\r
2165                         el = el.getFirst().getFirst();\r
2166 \r
2167                         var range = new CKEDITOR.dom.range( doc );\r
2168                         range.selectNodeContents( el );\r
2169 \r
2170                         assert.isTrue( range.checkEndOfBlock() );\r
2171                 },\r
2172 \r
2173                 test_checkEndOfBlock8 : function()\r
2174                 {\r
2175                         var el = doc.getById( 'playground' );\r
2176                         el.setHtml( '<p>A<b>Test</b>B</p>' );\r
2177                         el = el.getFirst().getFirst().getNext();\r
2178 \r
2179                         var range = new CKEDITOR.dom.range( doc );\r
2180                         range.selectNodeContents( el );\r
2181 \r
2182                         assert.isFalse( range.checkEndOfBlock() );\r
2183                 },\r
2184 \r
2185                 /**\r
2186                  *  Test trim with text range.\r
2187                  */\r
2188                 test_trim : function()\r
2189                 {\r
2190                         var text = doc.getById( '_trim_ct').getFirst();\r
2191                         var range = new CKEDITOR.dom.range();\r
2192                         range.setStart(text, 2);\r
2193                         range.setEnd(text, 6);\r
2194                         range.trim();\r
2195 \r
2196                         assert.isFalse( range.collapsed );\r
2197                         assert.isTrue( range.startContainer.equals( doc.getById( '_trim_ct') ) );\r
2198                         assert.areEqual( range.startOffset, 1 );\r
2199                         assert.isTrue( range.endContainer.equals( doc.getById( '_trim_ct') ) );\r
2200                         assert.areEqual( range.endOffset, 2 );\r
2201                 },\r
2202 \r
2203                 /**\r
2204                  * Trim range which collapsed at text node boundary.\r
2205                  */\r
2206                 test_trim_3790 : function()\r
2207                 {\r
2208 \r
2209                         var ct = doc.getById( '_trim_ct');\r
2210                         ct.setHtml( '<span id="_SPAN1">text</span>' );\r
2211                         var text = doc.getById( '_trim_ct').getFirst();\r
2212 \r
2213                         // <span id="_SPAN1">text^</span>\r
2214                         var range = new CKEDITOR.dom.range();\r
2215                         range.setStartAt( doc.getById( '_SPAN1' ).getFirst(), CKEDITOR.POSITION_BEFORE_END );\r
2216                         range.collapse( true );\r
2217                         range.trim( true );\r
2218 \r
2219                         // <span id="_SPAN1">text^</span>\r
2220                         assert.isTrue( range.collapsed );\r
2221                         assert.areEqual( doc.getById( '_SPAN1').$, range.startContainer.$ );\r
2222                         assert.areEqual( range.startOffset, 1 );\r
2223                 },\r
2224 \r
2225                 /**\r
2226                  * Trim range which collapsed inside text node.\r
2227                  */\r
2228                 test_trim_3790_2 : function()\r
2229                 {\r
2230 \r
2231                         var ct = doc.getById( '_trim_ct');\r
2232                         ct.setHtml( '<span id="_SPAN1">text</span>' );\r
2233                         var text = doc.getById( '_trim_ct').getFirst();\r
2234 \r
2235                         // <span id="_SPAN1">te^xt</span>\r
2236                         var range = new CKEDITOR.dom.range();\r
2237                         range.setStart( doc.getById( '_SPAN1' ).getFirst(), 2 );\r
2238                         range.collapse( true );\r
2239                         range.trim( true );\r
2240 \r
2241                         // <span id="_SPAN1">te^xt</span>\r
2242                         assert.isTrue( range.collapsed );\r
2243                         assert.areEqual( doc.getById( '_SPAN1').$, range.startContainer.$ );\r
2244                         assert.areEqual( range.startOffset, 1 );\r
2245                 },\r
2246                 /////////////\r
2247 \r
2248                 setUp : function()\r
2249                 {\r
2250                          document.getElementById( 'playground' ).innerHTML = html1;\r
2251                          document.getElementById( 'playground2' ).innerHTML = html2;\r
2252                 },\r
2253 \r
2254                 name : document.title\r
2255         };\r
2256 })() );\r
2257 \r
2258 //window.onload = tests.test_trim;\r
2259         //]]>\r
2260         </script>\r
2261 </head>\r
2262 <body>\r
2263         <div id="playground" style="visibility:hidden"><h1 id="_H1">FCKW3CRange Test</h1><p id="_Para">This is <b id="_B">some</b> text.</p><p>Another paragraph.</p></div>\r
2264         <div id="playground2" style="visibility: hidden">\r
2265                 <h1>\r
2266                         Test page for CKEditor\r
2267                 </h1>\r
2268                 <p id="_P">\r
2269                         This document contains various markup features commonly used by content editors\r
2270                         or "<span id="_Span" lang="fr">r&eacute;dacteurs de contenu</span>" as they are\r
2271                         called in <a id="_A" href="http://en.wikipedia.org/wiki/France" title="Wikipedia article about France">\r
2272                                 France</a>.<br />\r
2273                         It is important that a <acronym id="_Acronym" title="what you see is what you get">WYSIWYG</acronym>\r
2274                         tool has features that are easily available for the editor. If not, there is a risk\r
2275                         that content won't receive <strong id="_Strong">proper</strong> markup. Examples\r
2276                         of commonly found content are:</p>\r
2277                 <p id="_Pnbsp">\r
2278                         &nbsp;\r
2279                 </p>\r
2280                 <p id="_Pspaces">\r
2281                 </p>\r
2282                 <ol>\r
2283                         <li>Headings</li>\r
2284                         <li style="color: Red">Links (with optional title) </li>\r
2285                         <li>Lists (like this one)\r
2286                                 <ul>\r
2287                                         <li>including nested lists </li>\r
2288                                 </ul>\r
2289                         </li>\r
2290                         <li>Tables\r
2291                                 <ul>\r
2292                                         <li>caption</li>\r
2293                                         <li>headers</li>\r
2294                                         <li>summary</li>\r
2295                                 </ul>\r
2296                         </li>\r
2297                         <li>Language information</li>\r
2298                         <li>Acronyms and abbreviations</li>\r
2299                         <li>Emphasis and strong emphasis </li>\r
2300                         <li>Quotes, inline and block </li>\r
2301                         <li>Images</li>\r
2302                 </ol>\r
2303                 <hr />\r
2304                 <h2 style="background-color: Silver">\r
2305                         Test procedure\r
2306                 </h2>\r
2307                 This text has no block tag. It should be corrected when working with the enter key\r
2308                 set to "p" or "div" tags. The "br" configuration should not make changes instead.\r
2309                 <p id="_P2">\r
2310                         In the test we will try to recreate this document using the editor tools. To make\r
2311                         sure tables can be inserted <em id="_Em">properly</em> we re-visit banana import\r
2312                         statistics from 1998.\r
2313                 </p>\r
2314                 <p id="_P3">\r
2315                         This paragraph has and image at the very end of its contents.<img id="_Img" src="img.gif"\r
2316                                 alt="" />\r
2317                 </p>\r
2318                 This text has no block tag.<br />It should be corrected when working with the enter key\r
2319                 set to "p" or "div" tags. The <strong id="_StrongNoPara">"br" configuration</strong>\r
2320                 should not make changes instead.<br />It has three lines separated by BR tags.\r
2321                 <p>\r
2322                         In the test we will try to recreate this document using the editor tools. To make\r
2323                         sure tables can be inserted <em>properly</em> we re-visit banana import statistics\r
2324                         from 1998.\r
2325                 </p>\r
2326                 <table summary="Sweden was the top importing country by far in 1998.">\r
2327                         <caption>\r
2328                                 Top banana importers 1998 (value of banana imports in millions of US dollars per\r
2329                                 million people)<br />\r
2330                                 <br />\r
2331                         </caption>\r
2332                         <tr>\r
2333                                 <th scope="col">\r
2334                                         Country</th>\r
2335                                 <th scope="col">\r
2336                                         Millions of US dollars per million people</th>\r
2337                         </tr>\r
2338                         <tr>\r
2339                                 <td>\r
2340                                         Sweden</td>\r
2341                                 <td>\r
2342                                         17.12</td>\r
2343                         </tr>\r
2344                         <tr>\r
2345                                 <td>\r
2346                                         United&nbsp;Kingdom</td>\r
2347                                 <td>\r
2348                                         8.88</td>\r
2349                         </tr>\r
2350                         <tr>\r
2351                                 <td>\r
2352                                         Germany</td>\r
2353                                 <td>\r
2354                                         8.36</td>\r
2355                         </tr>\r
2356                         <tr>\r
2357                                 <td>\r
2358                                         Italy</td>\r
2359                                 <td>\r
2360                                         5.96</td>\r
2361                         </tr>\r
2362                         <tr>\r
2363                                 <td>\r
2364                                         United States</td>\r
2365                                 <td>\r
2366                                         4.78</td>\r
2367                         </tr>\r
2368                 </table>\r
2369                 <p>\r
2370                         For block quotes we will have a look at <a href="http://fawny.org/rhcp.html">what Joe\r
2371                                 Clark says about redheads</a>:</p>\r
2372                 <blockquote cite="http://fawny.org/rhcp.html#me">\r
2373                         <p>\r
2374                                 "Since boyhood I&rsquo;ve always believed, at the deepest level, that redheads are\r
2375                                 standard-bearers of the grandest and most wondrous human beauty."</p>\r
2376                 </blockquote>\r
2377                 <p>\r
2378                         <img src="img.gif" alt="" /></p>\r
2379                 <p>\r
2380                         The above is the CKEditor logo loaded from the FCKeditor.net web site.</p>\r
2381                 <p><b id="_B1">Line 1<br />Line 2<br /><i id="_I1">Line 3</i></b></p>\r
2382                 <p id="_EnlargeP"> Test <b id="_EnlargeB"> <i id="_EnlargeI">  Enlarge</i> this</b>   </p>\r
2383                 <p id="_EnlargeP1"> Test<b id="_EnlargeB1"> <i id="_EnlargeI1">  Enlarge</i> this</b>   </p>\r
2384                 <p id="_EnlargeP2"> <b id="_EnlargeB2"> <i id="_EnlargeI2">  Enlarge</i> this</b>   </p>\r
2385                 <p id="_EnlargeP3">Test<i id="_EnlargeI3"> Enlarge</i></p>\r
2386                 <p id="_EnlargeP4">Test <i id="_EnlargeI4"> Enlarge</i></p>\r
2387                 <p id="_EnlargeP5">Test <i id="_EnlargeI5">Enlarge</i></p>\r
2388                 <p id="_EnlargeP6">Test <i id="_EnlargeI6"><b></b>Enlarge</i></p>\r
2389                 <p id="_EnlargeP7">Test <span id="S1"></span>List<br/ >Item Enlarge</p>\r
2390                 <p id="_EnlargeP8">Test <span id="S2"></span>List<span id="E2"></span> <br /><br />Item Enlarge</p>\r
2391                 <p id="_EnlargeP9">Test List <br /><span id="S3"></span><br />Item Enlarge</p>\r
2392                 <p id="_EnlargeP10">Test List <br /><br />Item<span id="S4"></span> Enlarge</p>\r
2393                 <p id="_EnlargeP11">Test <strong>Block<span id="S5"></span></strong><br /><br />Enlarge</p>\r
2394                 <div id="_EnlargeP12">Test<span id="S6"></span> Block <div>Enlarge</div></div>\r
2395                 <div>Test <div id="_EnlargeP13">Blo<span id="S7"></span>ck</div> Enlarge</div>\r
2396                 <p id="_EnlargeP14"><span id="S8"></span></p>\r
2397                 <p id="_EnlargeP15">Test <span id="S9"></span>List<br/ >Item Enlarge</p>\r
2398                 <p id="_EnlargeP16">Test <strong>Block<span id="S10"></span></strong><br /><br />Enlarge</p>\r
2399                 <p id="_EnlargeP17"><span><span id="S11"></span>Test Block Enlarge<span id="E11"></span></span></p>\r
2400                 <p id="_trim_ct">Test trim</p>\r
2401         </div>\r
2402         <script type="text/javascript">\r
2403         //<![CDATA[\r
2404 \r
2405 html1 = document.getElementById( 'playground' ).innerHTML;\r
2406 html2 = document.getElementById( 'playground2' ).innerHTML;\r
2407 \r
2408         //]]>\r
2409         </script>\r
2410 </body>\r
2411 </html>\r