--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+ <title>Plugin: htmldataprocessor</title>\r
+ <link rel="stylesheet" type="text/css" href="../../test.css" />\r
+ <script type="text/javascript" src="../../../ckeditor.js"></script>\r
+ <script type="text/javascript" src="../../test.js"></script>\r
+ <script type="text/javascript">\r
+ //<![CDATA[\r
+\r
+// Load the required plugins and launch the runner.\r
+CKEDITOR.test.deferRunner = true;\r
+CKEDITOR.plugins.load( 'htmldataprocessor' , function()\r
+{\r
+ CKEDITOR.test.runner.run();\r
+} );\r
+\r
+var testCase;\r
+\r
+CKEDITOR.test.addTestCase( testCase = (function()\r
+{\r
+ // Local references.\r
+ var assert = CKEDITOR.test.assert;\r
+ var doc = new CKEDITOR.dom.document( document );\r
+\r
+ // In these tests, we may "reset" the writer rules to avoid it formatting\r
+ // the output, making the assertion easier to the done. We don't need to\r
+ // test formatting features here, so this is ok.\r
+ var getDataProcessor = function()\r
+ {\r
+ var dataProcessor = new CKEDITOR.htmlDataProcessor();\r
+ dataProcessor.writer._.rules = [];\r
+ return dataProcessor;\r
+ };\r
+\r
+ /**\r
+ * IE always returning CRLF for linefeed, so remove it when retrieve pre-formated text from text area.\r
+ * @param {Object} id\r
+ */\r
+ function getTextAreaValue( id )\r
+ {\r
+ return CKEDITOR.document.getById( id ).getValue().replace(/\r/gi,'');\r
+ }\r
+\r
+ // These tests go far beyond the strict htmlDataProcessor code testing. We\r
+ // are actually testing the entire parsing system here. The combination of\r
+ // htmlParser and htmlWriter inside htmlDataProcessor is useful in this\r
+ // sense.\r
+\r
+ return {\r
+ test_toDataFormat_1a : function()\r
+ {\r
+ var element = new CKEDITOR.dom.element.createFromHtml( '<div><p>Test</p></div>' );\r
+\r
+ assert.areSame( '<p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+ },\r
+\r
+ test_toDataFormat_1b : function()\r
+ {\r
+ var element = new CKEDITOR.dom.element.createFromHtml( '<div><x:x>Test</x:x></div>' );\r
+\r
+ // IE adds the XML namespace tag.\r
+ if ( CKEDITOR.env.ie )\r
+ assert.areSame( '<?xml:namespace prefix="x" /><x:x>Test</x:x>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+ else\r
+ assert.areSame( '<x:x>Test</x:x>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+ },\r
+\r
+ test_toDataFormat_2a : function()\r
+ {\r
+ var element = new CKEDITOR.dom.element.createFromHtml( '<div><br /><p>Test</p></div>' );\r
+\r
+ assert.areSame( '<br /><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+ },\r
+\r
+ test_toDataFormat_2b : function()\r
+ {\r
+ var element = new CKEDITOR.dom.element.createFromHtml( '<div><x:x></x:x><p>Test</p></div>' );\r
+\r
+ // IE adds the XML namespace tag.\r
+ if ( CKEDITOR.env.ie )\r
+ assert.areSame( '<?xml:namespace prefix="x" /><x:x></x:x><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+ else\r
+ assert.areSame( '<x:x></x:x><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
+ },\r
+\r
+ test_toDataFormat_3 : function()\r
+ {\r
+ assert.areSame( '<div><x:x><p>Test</p></x:x></div>', getDataProcessor().toDataFormat( '<div><x:x><p>Test</p></div>' ) );\r
+ },\r
+\r
+ test_toDataFormat_ticket_2774 : function()\r
+ {\r
+ 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
+\r
+ // IE adds the XML namespace tag.\r
+ if ( CKEDITOR.env.ie )\r
+ 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
+ else\r
+ 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
+ },\r
+\r
+ test_toDataFormat_ticket_3036_1 : function()\r
+ {\r
+ assert.areSame( '<input autocomplete="off" checked="checked" type="checkbox" />',\r
+ getDataProcessor().toDataFormat( '<INPUT type="checkbox" CHECKED autocomplete=off>' ) );\r
+ },\r
+\r
+ test_toDataFormat_ticket_3036_2 : function()\r
+ {\r
+ assert.areSame( '<input autocomplete="off" type="checkbox" unknown="" />',\r
+ getDataProcessor().toDataFormat( '<INPUT type="checkbox" UNKNOWN autocomplete=off>' ) );\r
+ },\r
+\r
+ test_toDataFormat_ticket_2886_1 : function()\r
+ {\r
+ var editor = CKEDITOR.instances.editor1;\r
+ var test = this;\r
+ var isReady = !!editor.dataProcessor;\r
+\r
+ if ( !isReady )\r
+ {\r
+ editor.on( 'instanceReady', function()\r
+ {\r
+ isReady = true;\r
+ } );\r
+ }\r
+\r
+ this.wait( function()\r
+ {\r
+ if ( !isReady )\r
+ {\r
+ test.wait( arguments.callee, 100 );\r
+ return;\r
+ }\r
+\r
+ assert.areSame( '<p>\n\t </p>\n',\r
+ editor.dataProcessor.toDataFormat( '<p></p>' ) );\r
+ }, 100 );\r
+ },\r
+\r
+ test_toDataFormat_ticket_2886_2 : function()\r
+ {\r
+ var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+ var source = '<p>Some text<br><br><br></p>';\r
+ if ( CKEDITOR.env.ie )\r
+ source = '<p>Some text<br><br></p>';\r
+ assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t </p>\n',\r
+ dataProcessor.toDataFormat( source ) );\r
+ },\r
+\r
+ test_toDataFormat_ticket_2886_3 : function()\r
+ {\r
+ var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+ assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t<br />\n\tSome more text</p>\n',\r
+ dataProcessor.toDataFormat( '<p>Some text<br><br><br>Some more text</p>' ) );\r
+ },\r
+\r
+ test_toDataFormat_ticket_2886_4 : function()\r
+ {\r
+ var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+ assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t </p>\n',\r
+ dataProcessor.toDataFormat( '<p>Some text<br><br> </p>' ) );\r
+ },\r
+\r
+ test_toDataFormat_ticket_2886_5 : function()\r
+ {\r
+ if ( CKEDITOR.env.ie )\r
+ return;\r
+\r
+ var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+ assert.areSame( '<p>\n\t </p>\n',\r
+ dataProcessor.toDataFormat( '<p><br></p>' ) );\r
+ },\r
+\r
+ test_toDataFormat_ticket_2886_6 : function()\r
+ {\r
+ var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+ var source = '<p><br><br></p>';\r
+ if ( CKEDITOR.env.ie )\r
+ source = '<p><br></p>';\r
+\r
+ assert.areSame( '<p>\n\t<br />\n\t </p>\n',\r
+ dataProcessor.toDataFormat( source ) );\r
+ },\r
+\r
+ test_toHtml_ticket_2886_1 : function()\r
+ {\r
+ var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+ var expected = '<p><br /></p>';\r
+ if ( CKEDITOR.env.ie )\r
+ expected = '<p>\xa0</p>';\r
+ assert.areSame( expected, dataProcessor.toHtml( '<p></p>' ) );\r
+ },\r
+\r
+ test_toHtml_ticket_2886_2 : function()\r
+ {\r
+ var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+ var expected = '<p>Some text<br />Some other text</p>';\r
+ assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br>Some other text</p>' ) );\r
+ },\r
+\r
+ test_toHtml_ticket_2886_3 : function()\r
+ {\r
+ var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+ var expected = '<p>Some text<br /><br /></p>';\r
+ if ( CKEDITOR.env.ie )\r
+ expected = '<p>Some text<br />\xa0</p>';\r
+ assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br> </p>' ) );\r
+ },\r
+\r
+ test_toHtml_ticket_2886_4 : function()\r
+ {\r
+ var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
+\r
+ var expected = '<p>Some text</p>';\r
+ assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br></p>' ));\r
+ },\r
+\r
+ test_ticket_3407 : function()\r
+ {\r
+ var editor = CKEDITOR.instances.editor1,\r
+ dataProcessor = editor.dataProcessor,\r
+ config = editor.config;\r
+\r
+ config.protectedSource.push( /<\?[\s\S]*?\?>/g ); // PHP Code\r
+ config.protectedSource.push( /<%[\s\S]*?%>/g ); // ASP Code\r
+ config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi ); // ASP.Net Code\r
+ dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+ var html = getTextAreaValue( '_TEXTAREA1' );\r
+ var protectedHtml = dataProcessor.toHtml( html );\r
+ assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );\r
+ },\r
+\r
+ test_ticket_3591 : function()\r
+ {\r
+ var editor = CKEDITOR.instances.editor1,\r
+ dataProcessor = editor.dataProcessor;\r
+\r
+ dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+ var html = getTextAreaValue( '_TEXTAREA_3591' );\r
+ var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+ assert.areSame( getTextAreaValue( CKEDITOR.env.ie ? '_TEXTAREA_3591_protected_ie' : '_TEXTAREA_3591_protected' ),\r
+ protectedHtml );\r
+ assert.areSame( getTextAreaValue( '_TEXTAREA_3591' ),\r
+ dataProcessor.toDataFormat( protectedHtml ) );\r
+ },\r
+\r
+ test_ticket_3591_2 : function()\r
+ {\r
+ var editor = CKEDITOR.instances.editor1,\r
+ dataProcessor = editor.dataProcessor;\r
+\r
+ dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+ dataProcessor.writer.sortAttributes = true;\r
+\r
+ var html = getTextAreaValue( '_TEXTAREA_3591_2' );\r
+ var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+ assert.areSame( getTextAreaValue( '_TEXTAREA_3591_2' ),\r
+ dataProcessor.toDataFormat( protectedHtml ) );\r
+ },\r
+\r
+ test_ticket_3869_1 : function()\r
+ {\r
+ var editor = CKEDITOR.instances.editor1,\r
+ dataProcessor = editor.dataProcessor;\r
+\r
+ dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+ var html = getTextAreaValue( '_TEXTAREA_3869_1' );\r
+ var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+ assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );\r
+ },\r
+\r
+ test_ticket_3869_2 : function()\r
+ {\r
+ var editor = CKEDITOR.instances.editor1,\r
+ dataProcessor = editor.dataProcessor,\r
+ config = editor.config;\r
+\r
+ config.protectedSource.push( /<\?[\s\S]*?\?>/g ); // PHP Code\r
+ config.protectedSource.push( /<%[\s\S]*?%>/g ); // ASP Code\r
+ config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi ); // ASP.Net Code\r
+ config.protectedSource.push(/<gallery[\s\S]*?<\/gallery>/gi ); // custom protected source\r
+ config.protectedSource.push(/<options[\s\S]*?<\/options>/gi );\r
+ dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+ var html = getTextAreaValue( '_TEXTAREA_3869_2' );\r
+ var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+ assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );\r
+ },\r
+\r
+ /**\r
+ * Test empty value attributes.\r
+ */\r
+ test_ticket_3884 : function()\r
+ {\r
+ var editor = CKEDITOR.instances.editor1,\r
+ dataProcessor = editor.dataProcessor;\r
+ dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+ dataProcessor.writer.sortAttributes = true;\r
+\r
+ assert.areSame( '<p><a href="" name="">emptylink</a></p>',\r
+ dataProcessor.toDataFormat( dataProcessor.toHtml( '<p><a href="" name="">emptylink</a></p>' ) ) );\r
+ },\r
+\r
+ test_innerHtmlComments_ticket_3801 : function()\r
+ {\r
+ var editor = CKEDITOR.instances.editor1,\r
+ dataProcessor = editor.dataProcessor;\r
+\r
+ dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
+\r
+ for ( var i = 1; i <= 7; i++ )\r
+ {\r
+ var html = getTextAreaValue( '_TEXTAREA_3801_' + i );\r
+ var protectedHtml = dataProcessor.toHtml( html );\r
+\r
+ assert.areSame( getTextAreaValue( '_TEXTAREA_3801_' + i ),\r
+ dataProcessor.toDataFormat( protectedHtml ) );\r
+ }\r
+ },\r
+\r
+ name : document.title\r
+ };\r
+})() );\r
+\r
+//window.onload = testCase.test_ticket_3884;\r
+ //]]>\r
+ </script>\r
+</head>\r
+<body>\r
+ <textarea id="editor1" class="ckeditor" cols="80" rows="10"></textarea>\r
+ <textarea id="_TEXTAREA1"><script type="text/javascript">alert('>');</script><table><tbody><tr><!--- IE doesn't handle this comment ---><!--[if gte IE 6 ]>\r
+ <![if lt IE 8 ]>\r
+ gIE conditional comments\r
+<![endif]>\r
+<![endif]--><td><%Response.Write(now())%></td><td><asp:control_name id="some_id" runat="server"/></td><td><?php\r
+include ("head.html"); ?></td></tr></tbody></table><noscript>Your browser doesn't support JavaScript</noscript></textarea>\r
+ <textarea id="_TEXTAREA_3591"><object><param /><param /><embed></embed></object></textarea>\r
+ <textarea id="_TEXTAREA_3591_protected"><cke:object><cke:param></cke:param><cke:param></cke:param><cke:embed></cke:embed></cke:object></textarea>\r
+ <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
+ <textarea id="_TEXTAREA_3801_1"><!-- foo --><p>bar</p></textarea>\r
+ <textarea id="_TEXTAREA_3801_2"><p><!-- foo -->bar</p></textarea>\r
+ <textarea id="_TEXTAREA_3801_3"><!-- foo --><p><!-- foo -->bar</p></textarea>\r
+ <textarea id="_TEXTAREA_3801_4"><p>bar</p><!-- foo --></textarea>\r
+ <textarea id="_TEXTAREA_3801_5">bar<!-- foo --></textarea>\r
+ <textarea id="_TEXTAREA_3801_6"><!-- foo -->bar</textarea>\r
+ <textarea id="_TEXTAREA_3801_7"><p><!-- foo -->bar</p><p><!-- foo -->bar</p></textarea>\r
+ <textarea id="_TEXTAREA_3869_1">#3869<script language="Javascript" type="text/javascript">\r
+ <!--\r
+ alert('-->');\r
+ //-->\r
+ </script></textarea>\r
+ <textarea id="_TEXTAREA_3869_2">#3869<gallery>\r
+ file.jpg\r
+ <options name="test1" value="value1"></options>\r
+ <options name="test2" value="value2"></options>\r
+ </gallery><?\r
+ echo '<script type="text/javascript">';\r
+ echo '<!--alert("-->");//-->';\r
+ echo '</script>';\r
+ ?><!--<%Response.Write(now())%>//-->invalid<?\r
+ echo 'bbb<script>\r
+ <!--\r
+ ccc();<!-- </script><!-- </script>\r
+ //--></script>\r
+ <script><!--\r
+ <!--\r
+ ffff();\r
+ //--></script>\r
+ ddd';\r
+ ?>html</textarea>\r
+ <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
+</body>\r
+</html>\r