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