1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
\r
2 <html xmlns="http://www.w3.org/1999/xhtml">
\r
4 <title>Plugin: styles</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
10 CKEDITOR.plugins.load( [ 'styles', 'domiterator', 'htmldataprocessor' ] );
\r
13 <script type="text/javascript">
\r
18 CKEDITOR.test.addTestCase( testCase = (function()
\r
20 // Local references.
\r
21 var assert = CKEDITOR.test.assert;
\r
22 var getInnerHtml = CKEDITOR.test.getInnerHtml;
\r
24 function getInnerHtmlParsed( element )
\r
26 var dataProcessor = new CKEDITOR.htmlDataProcessor();
\r
27 dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();
\r
28 return dataProcessor.toDataFormat( getInnerHtml( element, false ) );
\r
31 var doc = new CKEDITOR.dom.document( document );
\r
34 test_inline1 : function()
\r
36 doc.getById( '_P1' ).setHtml( 'this is some sample text' );
\r
38 var range = new CKEDITOR.dom.range( doc );
\r
39 range.setStart( doc.getById( '_P1' ).getFirst(), 5 );
\r
40 range.setEnd( doc.getById( '_P1' ).getFirst(), 7 );
\r
42 var style = new CKEDITOR.style( { element : 'b' } );
\r
43 style.applyToRange( range );
\r
45 assert.areSame( 'this <b>is</b> some sample text', getInnerHtml( '_P1' ) );
\r
48 test_inline2 : function()
\r
50 doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );
\r
52 var range = new CKEDITOR.dom.range( doc );
\r
53 range.setStart( doc.getById( '_P1' ).getChild( 1 ), 0 );
\r
54 range.setEnd( doc.getById( '_P1' ), 2 );
\r
56 var style = new CKEDITOR.style( { element : 'i' } );
\r
57 style.applyToRange( range );
\r
59 assert.areSame( 'this <i><b>is some </b></i>sample text', getInnerHtml( '_P1' ) );
\r
62 test_inline3 : function()
\r
64 doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );
\r
66 var range = new CKEDITOR.dom.range( doc );
\r
67 range.setStart( doc.getById( '_P1' ).getChild( 1 ), 0 );
\r
68 range.setEnd( doc.getById( '_P1' ).getChild( 1 ).getFirst(), 2 );
\r
70 var style = new CKEDITOR.style( { element : 'i' } );
\r
71 style.applyToRange( range );
\r
73 assert.areSame( 'this <b><i>is</i> some </b>sample text', getInnerHtml( '_P1' ) );
\r
76 // Inline - Remove inner duplicates.
\r
77 test_inline4 : function()
\r
79 doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );
\r
81 var range = new CKEDITOR.dom.range( doc );
\r
82 range.setStart( doc.getById( '_P1' ), 0 );
\r
83 range.setEnd( doc.getById( '_P1' ), 3 );
\r
85 var style = new CKEDITOR.style( { element : 'b' } );
\r
86 style.applyToRange( range );
\r
88 assert.areSame( '<b>this is some sample text</b>', getInnerHtml( '_P1' ) );
\r
91 // Inline - Merge with next.
\r
92 test_inline5 : function()
\r
94 doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );
\r
96 var range = new CKEDITOR.dom.range( doc );
\r
97 range.setStart( doc.getById( '_P1' ), 0 );
\r
98 range.setEnd( doc.getById( '_P1' ), 1 );
\r
100 var style = new CKEDITOR.style( { element : 'b' } );
\r
101 style.applyToRange( range );
\r
103 assert.areSame( '<b>this is some </b>sample text', getInnerHtml( '_P1' ) );
\r
106 // Inline - Merge with previous.
\r
107 test_inline6 : function()
\r
109 doc.getById( '_P1' ).setHtml( 'this <b>is some </b>sample text' );
\r
111 var range = new CKEDITOR.dom.range( doc );
\r
112 range.setStart( doc.getById( '_P1' ), 2 );
\r
113 range.setEnd( doc.getById( '_P1' ).getChild( 2 ), 6 );
\r
115 var style = new CKEDITOR.style( { element : 'b' } );
\r
116 style.applyToRange( range );
\r
118 assert.areSame( 'this <b>is some sample</b> text', getInnerHtml( '_P1' ) );
\r
121 // Inline - Merge several with next.
\r
122 test_inline7 : function()
\r
124 doc.getById( '_P1' ).setHtml( '<i><u>this </u></i><b><i><u>is</u> some</i> sample</b> text' );
\r
126 var range = new CKEDITOR.dom.range( doc );
\r
127 range.setStart( doc.getById( '_P1' ), 0 );
\r
128 range.setEnd( doc.getById( '_P1' ), 1 );
\r
130 var style = new CKEDITOR.style( { element : 'b' } );
\r
131 style.applyToRange( range );
\r
133 assert.areSame( '<b><i><u>this is</u> some</i> sample</b> text', getInnerHtml( '_P1' ) );
\r
136 // Inline - Merge several with previous.
\r
137 test_inline8 : function()
\r
139 doc.getById( '_P1' ).setHtml( 'this <b>is <i>some <u>sample</u></i></b><i><u> text</u></i>' );
\r
141 var range = new CKEDITOR.dom.range( doc );
\r
142 range.setStart( doc.getById( '_P1' ), 2 );
\r
143 range.setEnd( doc.getById( '_P1' ), 3 );
\r
145 var style = new CKEDITOR.style( { element : 'b' } );
\r
146 style.applyToRange( range );
\r
148 assert.areSame( 'this <b>is <i>some <u>sample text</u></i></b>', getInnerHtml( '_P1' ) );
\r
151 test_inline9 : function()
\r
153 doc.getById( '_P1' ).setHtml( 'this <i>is some </i>sample text' );
\r
155 var range = new CKEDITOR.dom.range( doc );
\r
156 range.setStart( doc.getById( '_P1' ), 0 );
\r
157 range.setEnd( doc.getById( '_P1' ).getChild( 1 ), 0 );
\r
159 var style = new CKEDITOR.style( { element : 'b' } );
\r
160 style.applyToRange( range );
\r
162 assert.areSame( '<b>this </b><i>is some </i>sample text', getInnerHtml( '_P1' ) );
\r
165 test_inline10 : function()
\r
167 doc.getById( '_P1' ).setHtml( 'this is some sample text' );
\r
169 var range = new CKEDITOR.dom.range( doc );
\r
170 range.setStart( doc.getById( '_P1' ), 0 );
\r
171 range.setEnd( doc.getById( '_P1' ), 1 );
\r
173 var style = new CKEDITOR.style(
\r
183 'font-size' : '10pt',
\r
184 'text-decoration' : 'line-through'
\r
187 style.applyToRange( range );
\r
189 assert.areSame( '<b lang="it" style="font-size:10pt;text-decoration:line-through;" title="test">this is some sample text</b>', getInnerHtml( '_P1' ) );
\r
192 test_inline11 : function()
\r
194 doc.getById( '_P1' ).setHtml( 'this <b lang="it" class="sample">is</b> <b lang="it" style="font-size: 10pt; text-decoration: line-through;" title="test">some sample</b> <b>t</b>ext' );
\r
196 var range = new CKEDITOR.dom.range( doc );
\r
197 range.setStart( doc.getById( '_P1' ), 0 );
\r
198 range.setEnd( doc.getById( '_P1' ), 7 );
\r
200 var style = new CKEDITOR.style(
\r
210 'font-size' : '10pt',
\r
211 'text-decoration' : 'line-through'
\r
214 style.applyToRange( range );
\r
216 assert.areSame( '<b lang="it" style="font-size: 10pt; text-decoration: line-through;" title="test">this <b class="sample">is</b> some sample text</b>', getInnerHtml( '_P1' ) );
\r
219 test_inline11 : function()
\r
221 doc.getById( '_P1' ).setHtml( 'this <span class="a">is</span> some <span class="b">sample</span> text' );
\r
223 var range = new CKEDITOR.dom.range( doc );
\r
224 range.setStart( doc.getById( '_P1' ), 0 );
\r
225 range.setEnd( doc.getById( '_P1' ), 5 );
\r
227 var style = new CKEDITOR.style( { element : 'span', attributes : { 'class' : 'b' } } );
\r
228 style.applyToRange( range );
\r
230 assert.areSame( '<span class="b">this <span class="a">is</span> some sample text</span>', getInnerHtml( '_P1' ) );
\r
233 test_inline12 : function()
\r
235 doc.getById( '_P1' ).setHtml( 'this <span style="font-size:12pt; font-weight:600">is</span> some <span style="font-size:10px;">sample</span> text' );
\r
237 var range = new CKEDITOR.dom.range( doc );
\r
238 range.setStart( doc.getById( '_P1' ), 0 );
\r
239 range.setEnd( doc.getById( '_P1' ), 5 );
\r
241 var style = new CKEDITOR.style( { element : 'span', styles : { 'font-size' : '1.5em' } } );
\r
242 style.applyToRange( range );
\r
244 assert.areSame( '<span style="font-size:1.5em;">this <span style="font-weight:600;">is</span> some sample text</span>', getInnerHtml( '_P1' ) );
\r
247 test_inline13 : function()
\r
249 doc.getById( '_P1' ).setHtml( 'this <b>is some sample</b> text' );
\r
251 var range = new CKEDITOR.dom.range( doc );
\r
252 range.setStart( doc.getById( '_P1' ).getChild( 1 ).getFirst(), 3 );
\r
253 range.setEnd( doc.getById( '_P1' ), 3 );
\r
255 var style = new CKEDITOR.style( { element : 'i' } );
\r
256 style.applyToRange( range );
\r
258 assert.areSame( 'this <b>is <i>some sample</i></b><i> text</i>', getInnerHtml( '_P1' ) );
\r
261 test_inline14 : function()
\r
263 var para = doc.getById( '_P1' );
\r
265 para.setHtml( 'this is some sample text' );
\r
267 var range = new CKEDITOR.dom.range( doc );
\r
268 range.setStart( para.getFirst(), 0 );
\r
269 range.setEnd( para.getFirst(), 7 );
\r
271 var style = new CKEDITOR.style( { element : 'b' } );
\r
272 style.applyToRange( range );
\r
274 assert.areSame( '<b>this is</b> some sample text', getInnerHtml( '_P1' ), 'First range' );
\r
276 para.setHtml( para.getHtml() );
\r
278 range = new CKEDITOR.dom.range( doc );
\r
279 range.setStart( para.getFirst().getFirst(), 5 );
\r
280 range.setEnd( para.getChild( 1 ), 5 );
\r
282 style.applyToRange( range );
\r
284 assert.areSame( '<b>this is some</b> sample text', getInnerHtml( '_P1' ), 'Second range' );
\r
287 test_inline15 : function()
\r
289 var para = doc.getById( '_P1' );
\r
291 para.setHtml( 'this is some sample text' );
\r
293 var range = new CKEDITOR.dom.range( doc );
\r
294 range.setStart( para.getFirst(), 0 );
\r
295 range.setEnd( para.getFirst(), 7 );
\r
297 var style = new CKEDITOR.style( { element : 'span', styles : { 'font-family' : '#(family)' } }, { family : 'Arial,Helvetica,sans-serif' } );
\r
298 style.applyToRange( range );
\r
300 assert.areSame( '<span style="font-family:arial,helvetica,sans-serif;">this is</span> some sample text', getInnerHtml( '_P1' ), 'First range' );
\r
302 para.setHtml( para.getHtml() );
\r
304 range = new CKEDITOR.dom.range( doc );
\r
305 range.setStart( para.getFirst().getFirst(), 5 );
\r
306 range.setEnd( para.getChild( 1 ), 5 );
\r
308 style = new CKEDITOR.style( { element : 'span', styles : { 'font-family' : '#(family)' } }, { family : 'Georgia,serif' } );
\r
309 style.applyToRange( range );
\r
311 assert.areSame( '<span style="font-family:arial,helvetica,sans-serif;">this <span style="font-family:georgia,serif;">is</span></span><span style="font-family:georgia,serif;"> some</span> sample text', getInnerHtml( '_P1' ), 'Second range' );
\r
314 test_inline16 : function()
\r
316 var para = doc.getById( '_P1' );
\r
318 para.setHtml( '<b lang="pt" style="font-size:11pt;color:red;">this is some sample text</b>' );
\r
320 var range = new CKEDITOR.dom.range( doc );
\r
321 range.setStart( para.getFirst().getFirst(), 4 );
\r
322 range.setEnd( para.getFirst(), 10 );
\r
324 var style = new CKEDITOR.style( { element : 'b', styles : { color : 'red', 'font-weight' : '700' } } );
\r
325 style.applyToRange( range );
\r
327 assert.areSame( '<b lang="pt" style="color:red;font-size:11pt;">this<b style="font-weight:700;"> is some sample text</b></b>', getInnerHtml( '_P1' ), 'First range' );
\r
330 test_inline_nobreak1 : function()
\r
332 doc.getById( '_P1' ).setHtml( 'this is <a href="http://example.com/">some sample</a> text' );
\r
334 var range = new CKEDITOR.dom.range( doc );
\r
335 range.setStart( doc.getById( '_P1' ), 0 );
\r
336 range.setEnd( doc.getById( '_P1' ).getChild( 1 ).getFirst(), 4 );
\r
338 var style = new CKEDITOR.style( { element : 'b' } );
\r
339 style.applyToRange( range );
\r
341 assert.areSame( '<b>this is </b><a href="http://example.com/"><b>some</b> sample</a> text', getInnerHtml( '_P1' ) );
\r
344 test_ticket_2040 : function()
\r
346 doc.getById( '_P1' ).setHtml( 'This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">ckeditor<\/a>.' );
\r
348 var range = new CKEDITOR.dom.range( doc );
\r
349 range.setStart( doc.getById( '_P1' ), 1 );
\r
350 range.setEnd( doc.getById( '_P1' ).getChild( 1 ).getFirst(), 6 );
\r
352 var style = new CKEDITOR.style( { element : 'i' } );
\r
353 style.applyToRange( range );
\r
355 assert.areSame( 'this is some <strong><i>sample</i> text<\/strong>. you are using <a href="http://www.fckeditor.net/">ckeditor<\/a>.', getInnerHtml( '_P1' ) );
\r
358 test_checkElementRemovable1 : function()
\r
360 var element = CKEDITOR.dom.element.createFromHtml( '<b>Test</b>', doc );
\r
362 var style = new CKEDITOR.style( { element : 'b' } );
\r
364 assert.isTrue( style.checkElementRemovable( element ) );
\r
367 test_checkElementRemovable2 : function()
\r
369 var element = CKEDITOR.dom.element.createFromHtml( '<b>Test</b>', doc );
\r
371 var style = new CKEDITOR.style( { element : 'i' } );
\r
373 assert.isFalse( style.checkElementRemovable( element ) );
\r
376 test_checkElementRemovable3 : function()
\r
378 var element = CKEDITOR.dom.element.createFromHtml( '<b>Test</b>', doc );
\r
380 var style = new CKEDITOR.style( { element : 'b', attributes : { lang : 'pt' } } );
\r
382 assert.isTrue( style.checkElementRemovable( element ) );
\r
385 test_checkElementRemovable4 : function()
\r
387 var element = CKEDITOR.dom.element.createFromHtml( '<b>Test</b>', doc );
\r
389 var style = new CKEDITOR.style( { element : 'b', attributes : { lang : 'pt' } } );
\r
391 assert.isFalse( style.checkElementRemovable( element, true ) );
\r
394 test_checkElementRemovable5 : function()
\r
396 var element = CKEDITOR.dom.element.createFromHtml( '<span lang="pt" style="color : #fff">Test</span>', doc );
\r
398 var style = new CKEDITOR.style( { element : 'span', attributes : { lang : 'pt' }, style : { color : '#ffffff' } } );
\r
400 assert.isTrue( style.checkElementRemovable( element, true ) );
\r
403 test_checkElementRemovable6 : function()
\r
405 var element = CKEDITOR.dom.element.createFromHtml( '<span lang="pt" style="color : #fff">Test</span>', doc );
\r
407 var style = new CKEDITOR.style( { element : 'span', attributes : { lang : 'pt' }, style : { color : '#fffff0' } } );
\r
409 assert.isTrue( style.checkElementRemovable( element, true ) );
\r
412 test_checkElementRemovable7 : function()
\r
414 var element = CKEDITOR.dom.element.createFromHtml( '<span lang="pt" style="color : #fff">Test</span>', doc );
\r
416 var style = new CKEDITOR.style( { element : 'span', attributes : { lang : 'fr' }, style : { color : '#ffffff' } } );
\r
418 assert.isFalse( style.checkElementRemovable( element, true ) );
\r
421 test_checkElementRemovable8 : function()
\r
423 var element = CKEDITOR.dom.element.createFromHtml( '<span lang="pt" style="font-size: 10px">Test</span>', doc );
\r
425 var style = new CKEDITOR.style( { element : 'span', attributes : { lang : 'pt' , style : 'font-size:10px;' } } );
\r
427 assert.isTrue( style.checkElementRemovable( element, true ) );
\r
430 test_ticket_3091 : function()
\r
432 var element = doc.getById( '_P1' );
\r
433 element.setHtml( 'outter<table><tr><td>text</td></tr></table>outter' );
\r
435 var range = new CKEDITOR.dom.range( doc );
\r
436 range.selectNodeContents( element );
\r
441 styles : { 'font-family' : '#(family)' },
\r
442 overrides : [ { element : 'font', attributes : { 'face' : null } } ]
\r
445 var style = new CKEDITOR.style( styleDef, { 'family' : 'Arial,Helvetica,sans-serif' } );
\r
446 style.applyToRange( range );
\r
448 style = new CKEDITOR.style( styleDef, { 'family' : 'Comic Sans MS,cursive' } );
\r
449 style.applyToRange( range );
\r
451 style = new CKEDITOR.style( styleDef, { 'family' : 'Courier New,Courier,monospace' } );
\r
452 style.applyToRange( range );
\r
454 assert.areSame( '<span style="font-family:couriernew,courier,monospace;">outter</span><table><tbody><tr><td><span style="font-family:couriernew,courier,monospace;">text</span></td></tr></tbody></table><span style="font-family:couriernew,courier,monospace;">outter</span>', getInnerHtml( element ) );
\r
457 test_ticket_3091_2 : function()
\r
459 var element = doc.getById( '_P1' );
\r
460 element.setHtml( 'outter<p>text</p>outter' );
\r
462 var range = new CKEDITOR.dom.range( doc );
\r
463 range.selectNodeContents( element );
\r
465 var style = new CKEDITOR.style( { element : 'i', attributes : { title : 'x' } } );
\r
466 style.applyToRange( range );
\r
468 assert.areSame( '<i title="x">outter</i><p><i title="x">text</i></p><i title="x">outter</i>', getInnerHtml( element ), 'First step failed' );
\r
470 style = new CKEDITOR.style( { element : 'i', attributes : { title : 'y' } } );
\r
471 style.applyToRange( range );
\r
473 assert.areSame( '<i title="y">outter</i><p><i title="y">text</i></p><i title="y">outter</i>', getInnerHtml( element ), 'Second step failed' );
\r
475 style = new CKEDITOR.style( { element : 'i', attributes : { title : 'z' } } );
\r
476 style.applyToRange( range );
\r
478 assert.areSame( '<i title="z">outter</i><p><i title="z">text</i></p><i title="z">outter</i>', getInnerHtml( element ), 'Third step failed' );
\r
481 // TC based on the state of the second step in the above test, before it got fixed.
\r
482 test_ticket_3091_3 : function()
\r
484 var element = doc.getById( '_P1' );
\r
485 element.setHtml( '<p><i title="y">text</i><i title="x"></i></p><i title="y">outter</i><i title="x"></i>' );
\r
487 var range = new CKEDITOR.dom.range( doc );
\r
488 range.selectNodeContents( element );
\r
490 var style = new CKEDITOR.style( { element : 'i', attributes : { title : 'z' } } );
\r
491 style.applyToRange( range );
\r
493 assert.areSame( '<p><i title="z">text</i></p><i title="z">outter</i>', getInnerHtml( element ) );
\r
496 // Remove inline style when range collapsed at element boundaries,
\r
497 // move out of the removing-style element, with inner style copied.
\r
498 test_ticket_3309 : function()
\r
500 var element = doc.getById( '_P1' );
\r
501 element.setHtml( 'this is some <b><i id="_i1">styles</i></b> text' );
\r
503 // This is some <b><i>styles^</i></b> text
\r
504 var range = new CKEDITOR.dom.range( doc );
\r
505 range.setStartAt( doc.getById( '_i1' ), CKEDITOR.POSITION_BEFORE_END );
\r
507 var style = new CKEDITOR.style( { element : 'b' } );
\r
508 style.removeFromRange( range );
\r
510 assert.areSame( 'this is some <b><i id="_i1">styles</i></b><i></i> text', getInnerHtml( element ) );
\r
513 // No inner style preserved, simply move out of the removing-style element.
\r
514 test_ticket_3309_2 : function()
\r
516 var element = doc.getById( '_P1' );
\r
517 element.setHtml( 'this is some <b id="_b1">styles</b> text' );
\r
519 // This is some <b>styles^</b> text
\r
520 var range = new CKEDITOR.dom.range( doc );
\r
521 range.setStartAt( doc.getById( '_b1' ), CKEDITOR.POSITION_BEFORE_END );
\r
523 var style = new CKEDITOR.style( { element : 'b' } );
\r
524 style.removeFromRange( range );
\r
525 // This is some <b>styles</b>^ text
\r
526 assert.areSame( doc.getById( '_b1' ).getParent().$, range.startContainer.$ );
\r
527 assert.areSame( 2, range.startOffset );
\r
528 assert.areSame( 'this is some <b id="_b1">styles</b> text', getInnerHtml( element ) );
\r
531 // With style overrides.
\r
532 test_ticket_3309_3 : function()
\r
534 var element = doc.getById( '_P1' );
\r
535 element.setHtml( 'text <strong><bold><span><b><i id="_i1">styles</i></b></span></bold></strong>' );
\r
537 // text <strong><bold><span><b><i id="_i1">^styles</i></b></span></bold></strong>
\r
538 var range = new CKEDITOR.dom.range( doc );
\r
539 range.setStartAt( doc.getById( '_i1' ), CKEDITOR.POSITION_AFTER_START );
\r
541 var style = new CKEDITOR.style( { element : 'b' , overrides : [ 'strong', 'bold' ] } );
\r
542 style.removeFromRange( range );
\r
544 // text <span><i>^</i></span><bold><span><b><i>styles</i></b></span></bold>
\r
545 assert.areSame( 'text <span><i></i></span><strong><bold><span><b><i id="_i1">styles</i></b></span></bold></strong>', getInnerHtml( element ) );
\r
548 // Test convert multiple paragraphs to one <pre>.
\r
549 test_ticket_3188 : function()
\r
551 var element = doc.getById( '_P1' );
\r
552 element.setHtml( '<p id="_P2">\nparagraph1<br /><br />para\t\ngraph2</p><p id="_P3">\nparagraph3\n</p>' );
\r
554 // <p id="_P2">[paragraph1</p><p id="_P3">paragraph2]</p>
\r
555 var range = new CKEDITOR.dom.range( doc );
\r
556 range.setStartAt( doc.getById( '_P2' ), CKEDITOR.POSITION_AFTER_START );
\r
557 range.setEndAt( doc.getById( '_P3' ), CKEDITOR.POSITION_BEFORE_END );
\r
559 var style = new CKEDITOR.style( { element : 'pre' } );
\r
560 style.applyToRange( range );
\r
562 var result = getInnerHtmlParsed( element );
\r
563 assert.areSame( '<pre>paragraph1\n\npara graph2\n\nparagraph3</pre>', result );
\r
566 // Test convert one <pre> to multiple paragraphs.
\r
567 test_ticket_3188_2 : function()
\r
569 var element = doc.getById( '_P1' );
\r
570 element.setHtml( '<pre>\n\tparagraph1\t\tparagraph1\nparagraph2\n\t\n\tpara graph3\n</pre>' );
\r
572 //<pre>[\n\tparagraph1\t\tparagraph1\nparagraph2\n\t\n\tpara graph3\n]</pre>
\r
573 var range = new CKEDITOR.dom.range( doc );
\r
574 range.selectNodeContents( doc.getById( '_P1' ).getFirst() );
\r
575 var style = new CKEDITOR.style( { element : 'p' } );
\r
576 style.applyToRange( range );
\r
578 var result = getInnerHtmlParsed( element );
\r
580 if ( CKEDITOR.env.webkit || CKEDITOR.env.opera )
\r
581 result = result.replace( /\xa0/g, ' ' );
\r
583 assert.areSame( '<p> paragraph1 paragraph1<br />paragraph2</p><p> para graph3</p>',
\r
586 name : document.title
\r
589 //window.onload = testCase.test_ticket_3188;
\r
594 <div id="_P1"></div>
\r