JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0
[ckeditor.git] / _source / tests / plugins / htmldataprocessor / htmldataprocessor.html
diff --git a/_source/tests/plugins/htmldataprocessor/htmldataprocessor.html b/_source/tests/plugins/htmldataprocessor/htmldataprocessor.html
new file mode 100644 (file)
index 0000000..b7672b9
--- /dev/null
@@ -0,0 +1,386 @@
+<!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&nbsp;</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&nbsp;</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&nbsp;</p>\n',\r
+                               dataProcessor.toDataFormat( '<p>Some text<br><br>&nbsp;</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&nbsp;</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&nbsp;</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>&nbsp;</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&lt;gallery&gt;\r
+       file.jpg\r
+       &lt;options name="test1" value="value1"&gt;&lt;/options&gt;\r
+       &lt;options name="test2" value="value2"&gt;&lt;/options&gt;\r
+       &lt;/gallery&gt;&lt;?\r
+               echo '&lt;script type="text/javascript"&gt;';\r
+               echo '&lt;!--alert("--&gt;");//--&gt;';\r
+               echo '&lt;/script&gt;';\r
+       ?&gt;&lt;!--&lt;%Response.Write(now())%&gt;//--&gt;invalid&lt;?\r
+               echo 'bbb&lt;script&gt;\r
+               &lt;!--\r
+               ccc();&lt;!-- &lt;/script&gt;&lt;!-- &lt;/script&gt;\r
+               //--&gt;&lt;/script&gt;\r
+               &lt;script&gt;&lt;!--\r
+               &lt;!--\r
+               ffff();\r
+               //--&gt;&lt;/script&gt;\r
+               ddd';\r
+       ?&gt;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