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: htmldataprocessor</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
11 // Load the required plugins and launch the runner.
\r
12 CKEDITOR.test.deferRunner = true;
\r
13 CKEDITOR.plugins.load( 'htmldataprocessor' , function()
\r
15 CKEDITOR.test.runner.run();
\r
20 CKEDITOR.test.addTestCase( testCase = (function()
\r
22 // Local references.
\r
23 var assert = CKEDITOR.test.assert;
\r
24 var doc = new CKEDITOR.dom.document( document );
\r
26 // In these tests, we may "reset" the writer rules to avoid it formatting
\r
27 // the output, making the assertion easier to the done. We don't need to
\r
28 // test formatting features here, so this is ok.
\r
29 var getDataProcessor = function()
\r
31 var dataProcessor = new CKEDITOR.htmlDataProcessor();
\r
32 dataProcessor.writer._.rules = [];
\r
33 return dataProcessor;
\r
37 * IE always returning CRLF for linefeed, so remove it when retrieve pre-formated text from text area.
\r
38 * @param {Object} id
\r
40 function getTextAreaValue( id )
\r
42 return CKEDITOR.document.getById( id ).getValue().replace(/\r/gi,'');
\r
45 // These tests go far beyond the strict htmlDataProcessor code testing. We
\r
46 // are actually testing the entire parsing system here. The combination of
\r
47 // htmlParser and htmlWriter inside htmlDataProcessor is useful in this
\r
51 test_toDataFormat_1a : function()
\r
53 var element = new CKEDITOR.dom.element.createFromHtml( '<div><p>Test</p></div>' );
\r
55 assert.areSame( '<p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );
\r
58 test_toDataFormat_1b : function()
\r
60 var element = new CKEDITOR.dom.element.createFromHtml( '<div><x:x>Test</x:x></div>' );
\r
62 // IE adds the XML namespace tag.
\r
63 if ( CKEDITOR.env.ie )
\r
64 assert.areSame( '<?xml:namespace prefix="x" /><x:x>Test</x:x>', getDataProcessor().toDataFormat( element.getHtml() ) );
\r
66 assert.areSame( '<x:x>Test</x:x>', getDataProcessor().toDataFormat( element.getHtml() ) );
\r
69 test_toDataFormat_2a : function()
\r
71 var element = new CKEDITOR.dom.element.createFromHtml( '<div><br /><p>Test</p></div>' );
\r
73 assert.areSame( '<br /><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );
\r
76 test_toDataFormat_2b : function()
\r
78 var element = new CKEDITOR.dom.element.createFromHtml( '<div><x:x></x:x><p>Test</p></div>' );
\r
80 // IE adds the XML namespace tag.
\r
81 if ( CKEDITOR.env.ie )
\r
82 assert.areSame( '<?xml:namespace prefix="x" /><x:x></x:x><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );
\r
84 assert.areSame( '<x:x></x:x><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );
\r
87 test_toDataFormat_3 : function()
\r
89 assert.areSame( '<div><x:x><p>Test</p></x:x></div>', getDataProcessor().toDataFormat( '<div><x:x><p>Test</p></div>' ) );
\r
92 test_toDataFormat_ticket_2774 : function()
\r
94 var element = new CKEDITOR.dom.element.createFromHtml( '<div><P class=MsoNormal><B><I><SPAN lang=EN-US><o:p>Test</o:p></SPAN></I></B></P></div>' );
\r
96 // IE adds the XML namespace tag.
\r
97 if ( CKEDITOR.env.ie )
\r
98 assert.areSame( '<p class="MsoNormal"><b><i><span lang="EN-US"><?xml:namespace prefix="o" /><o:p>Test</o:p></span></i></b></p>', getDataProcessor().toDataFormat( element.getHtml() ) );
\r
100 assert.areSame( '<p class="MsoNormal"><b><i><span lang="EN-US"><o:p>Test</o:p></span></i></b></p>', getDataProcessor().toDataFormat( element.getHtml() ) );
\r
103 test_toDataFormat_ticket_3036_1 : function()
\r
105 assert.areSame( '<input autocomplete="off" checked="checked" type="checkbox" />',
\r
106 getDataProcessor().toDataFormat( '<INPUT type="checkbox" CHECKED autocomplete=off>' ) );
\r
109 test_toDataFormat_ticket_3036_2 : function()
\r
111 assert.areSame( '<input autocomplete="off" type="checkbox" unknown="" />',
\r
112 getDataProcessor().toDataFormat( '<INPUT type="checkbox" UNKNOWN autocomplete=off>' ) );
\r
115 test_toDataFormat_ticket_2886_1 : function()
\r
117 var editor = CKEDITOR.instances.editor1;
\r
119 var isReady = !!editor.dataProcessor;
\r
123 editor.on( 'instanceReady', function()
\r
129 this.wait( function()
\r
133 test.wait( arguments.callee, 100 );
\r
137 assert.areSame( '<p>\n\t </p>\n',
\r
138 editor.dataProcessor.toDataFormat( '<p></p>' ) );
\r
142 test_toDataFormat_ticket_2886_2 : function()
\r
144 var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;
\r
146 var source = '<p>Some text<br><br><br></p>';
\r
147 if ( CKEDITOR.env.ie )
\r
148 source = '<p>Some text<br><br></p>';
\r
149 assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t </p>\n',
\r
150 dataProcessor.toDataFormat( source ) );
\r
153 test_toDataFormat_ticket_2886_3 : function()
\r
155 var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;
\r
157 assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t<br />\n\tSome more text</p>\n',
\r
158 dataProcessor.toDataFormat( '<p>Some text<br><br><br>Some more text</p>' ) );
\r
161 test_toDataFormat_ticket_2886_4 : function()
\r
163 var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;
\r
165 assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t </p>\n',
\r
166 dataProcessor.toDataFormat( '<p>Some text<br><br> </p>' ) );
\r
169 test_toDataFormat_ticket_2886_5 : function()
\r
171 if ( CKEDITOR.env.ie )
\r
174 var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;
\r
176 assert.areSame( '<p>\n\t </p>\n',
\r
177 dataProcessor.toDataFormat( '<p><br></p>' ) );
\r
180 test_toDataFormat_ticket_2886_6 : function()
\r
182 var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;
\r
184 var source = '<p><br><br></p>';
\r
185 if ( CKEDITOR.env.ie )
\r
186 source = '<p><br></p>';
\r
188 assert.areSame( '<p>\n\t<br />\n\t </p>\n',
\r
189 dataProcessor.toDataFormat( source ) );
\r
192 test_toHtml_ticket_2886_1 : function()
\r
194 var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;
\r
196 var expected = '<p><br /></p>';
\r
197 if ( CKEDITOR.env.ie )
\r
198 expected = '<p>\xa0</p>';
\r
199 assert.areSame( expected, dataProcessor.toHtml( '<p></p>' ) );
\r
202 test_toHtml_ticket_2886_2 : function()
\r
204 var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;
\r
206 var expected = '<p>Some text<br />Some other text</p>';
\r
207 assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br>Some other text</p>' ) );
\r
210 test_toHtml_ticket_2886_3 : function()
\r
212 var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;
\r
214 var expected = '<p>Some text<br /><br /></p>';
\r
215 if ( CKEDITOR.env.ie )
\r
216 expected = '<p>Some text<br />\xa0</p>';
\r
217 assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br> </p>' ) );
\r
220 test_toHtml_ticket_2886_4 : function()
\r
222 var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;
\r
224 var expected = '<p>Some text</p>';
\r
225 assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br></p>' ));
\r
228 test_ticket_3407 : function()
\r
230 var editor = CKEDITOR.instances.editor1,
\r
231 dataProcessor = editor.dataProcessor,
\r
232 config = editor.config;
\r
234 config.protectedSource.push( /<\?[\s\S]*?\?>/g ); // PHP Code
\r
235 config.protectedSource.push( /<%[\s\S]*?%>/g ); // ASP Code
\r
236 config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi ); // ASP.Net Code
\r
237 dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();
\r
238 var html = getTextAreaValue( '_TEXTAREA1' );
\r
239 var protectedHtml = dataProcessor.toHtml( html );
\r
240 assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );
\r
243 test_ticket_3591 : function()
\r
245 var editor = CKEDITOR.instances.editor1,
\r
246 dataProcessor = editor.dataProcessor;
\r
248 dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();
\r
249 var html = getTextAreaValue( '_TEXTAREA_3591' );
\r
250 var protectedHtml = dataProcessor.toHtml( html );
\r
252 assert.areSame( getTextAreaValue( CKEDITOR.env.ie ? '_TEXTAREA_3591_protected_ie' : '_TEXTAREA_3591_protected' ),
\r
254 assert.areSame( getTextAreaValue( '_TEXTAREA_3591' ),
\r
255 dataProcessor.toDataFormat( protectedHtml ) );
\r
258 test_ticket_3591_2 : function()
\r
260 var editor = CKEDITOR.instances.editor1,
\r
261 dataProcessor = editor.dataProcessor;
\r
263 dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();
\r
264 dataProcessor.writer.sortAttributes = true;
\r
266 var html = getTextAreaValue( '_TEXTAREA_3591_2' );
\r
267 var protectedHtml = dataProcessor.toHtml( html );
\r
269 assert.areSame( getTextAreaValue( '_TEXTAREA_3591_2' ),
\r
270 dataProcessor.toDataFormat( protectedHtml ) );
\r
273 test_ticket_3869_1 : function()
\r
275 var editor = CKEDITOR.instances.editor1,
\r
276 dataProcessor = editor.dataProcessor;
\r
278 dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();
\r
279 var html = getTextAreaValue( '_TEXTAREA_3869_1' );
\r
280 var protectedHtml = dataProcessor.toHtml( html );
\r
282 assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );
\r
285 test_ticket_3869_2 : function()
\r
287 var editor = CKEDITOR.instances.editor1,
\r
288 dataProcessor = editor.dataProcessor,
\r
289 config = editor.config;
\r
291 config.protectedSource.push( /<\?[\s\S]*?\?>/g ); // PHP Code
\r
292 config.protectedSource.push( /<%[\s\S]*?%>/g ); // ASP Code
\r
293 config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi ); // ASP.Net Code
\r
294 config.protectedSource.push(/<gallery[\s\S]*?<\/gallery>/gi ); // custom protected source
\r
295 config.protectedSource.push(/<options[\s\S]*?<\/options>/gi );
\r
296 dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();
\r
297 var html = getTextAreaValue( '_TEXTAREA_3869_2' );
\r
298 var protectedHtml = dataProcessor.toHtml( html );
\r
300 assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );
\r
304 * Test empty value attributes.
\r
306 test_ticket_3884 : function()
\r
308 var editor = CKEDITOR.instances.editor1,
\r
309 dataProcessor = editor.dataProcessor;
\r
310 dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();
\r
311 dataProcessor.writer.sortAttributes = true;
\r
313 assert.areSame( '<p><a href="" name="">emptylink</a></p>',
\r
314 dataProcessor.toDataFormat( dataProcessor.toHtml( '<p><a href="" name="">emptylink</a></p>' ) ) );
\r
317 test_innerHtmlComments_ticket_3801 : function()
\r
319 var editor = CKEDITOR.instances.editor1,
\r
320 dataProcessor = editor.dataProcessor;
\r
322 dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();
\r
324 for ( var i = 1; i <= 7; i++ )
\r
326 var html = getTextAreaValue( '_TEXTAREA_3801_' + i );
\r
327 var protectedHtml = dataProcessor.toHtml( html );
\r
329 assert.areSame( getTextAreaValue( '_TEXTAREA_3801_' + i ),
\r
330 dataProcessor.toDataFormat( protectedHtml ) );
\r
334 name : document.title
\r
338 //window.onload = testCase.test_ticket_3884;
\r
343 <textarea id="editor1" class="ckeditor" cols="80" rows="10"></textarea>
\r
344 <textarea id="_TEXTAREA1"><script type="text/javascript">alert('>');</script><table><tbody><tr><!--- IE doesn't handle this comment ---><!--[if gte IE 6 ]>
\r
346 gIE conditional comments
\r
348 <![endif]--><td><%Response.Write(now())%></td><td><asp:control_name id="some_id" runat="server"/></td><td><?php
\r
349 include ("head.html"); ?></td></tr></tbody></table><noscript>Your browser doesn't support JavaScript</noscript></textarea>
\r
350 <textarea id="_TEXTAREA_3591"><object><param /><param /><embed></embed></object></textarea>
\r
351 <textarea id="_TEXTAREA_3591_protected"><cke:object><cke:param></cke:param><cke:param></cke:param><cke:embed></cke:embed></cke:object></textarea>
\r
352 <textarea id="_TEXTAREA_3591_protected_ie"><?xml:namespace prefix="cke" /><cke:object><cke:param></cke:param><cke:param></cke:param><cke:embed></cke:embed></cke:object></textarea>
\r
353 <textarea id="_TEXTAREA_3801_1"><!-- foo --><p>bar</p></textarea>
\r
354 <textarea id="_TEXTAREA_3801_2"><p><!-- foo -->bar</p></textarea>
\r
355 <textarea id="_TEXTAREA_3801_3"><!-- foo --><p><!-- foo -->bar</p></textarea>
\r
356 <textarea id="_TEXTAREA_3801_4"><p>bar</p><!-- foo --></textarea>
\r
357 <textarea id="_TEXTAREA_3801_5">bar<!-- foo --></textarea>
\r
358 <textarea id="_TEXTAREA_3801_6"><!-- foo -->bar</textarea>
\r
359 <textarea id="_TEXTAREA_3801_7"><p><!-- foo -->bar</p><p><!-- foo -->bar</p></textarea>
\r
360 <textarea id="_TEXTAREA_3869_1">#3869<script language="Javascript" type="text/javascript">
\r
364 </script></textarea>
\r
365 <textarea id="_TEXTAREA_3869_2">#3869<gallery>
\r
367 <options name="test1" value="value1"></options>
\r
368 <options name="test2" value="value2"></options>
\r
369 </gallery><?
\r
370 echo '<script type="text/javascript">';
\r
371 echo '<!--alert("-->");//-->';
\r
372 echo '</script>';
\r
373 ?><!--<%Response.Write(now())%>//-->invalid<?
\r
374 echo 'bbb<script>
\r
376 ccc();<!-- </script><!-- </script>
\r
377 //--></script>
\r
378 <script><!--
\r
381 //--></script>
\r
383 ?>html</textarea>
\r
384 <textarea id="_TEXTAREA_3591_2"><object classid="clsid"><param name="movie" value="movie.swf" /><embed src="movie.swf" type="application/x-shockwave-flash"></embed></object></textarea>
\r