JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
b7672b9560d13603f0b966730fee1cca3b04a79c
[ckeditor.git] / _source / tests / plugins / htmldataprocessor / htmldataprocessor.html
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
3 <head>\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
9         //<![CDATA[\r
10 \r
11 // Load the required plugins and launch the runner.\r
12 CKEDITOR.test.deferRunner = true;\r
13 CKEDITOR.plugins.load( 'htmldataprocessor' , function()\r
14 {\r
15  CKEDITOR.test.runner.run();\r
16 } );\r
17 \r
18 var testCase;\r
19 \r
20 CKEDITOR.test.addTestCase( testCase = (function()\r
21 {\r
22         // Local references.\r
23         var assert = CKEDITOR.test.assert;\r
24         var doc = new CKEDITOR.dom.document( document );\r
25 \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
30         {\r
31                 var dataProcessor = new CKEDITOR.htmlDataProcessor();\r
32                 dataProcessor.writer._.rules = [];\r
33                 return dataProcessor;\r
34         };\r
35 \r
36         /**\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
39          */\r
40         function getTextAreaValue( id )\r
41         {\r
42                 return CKEDITOR.document.getById( id ).getValue().replace(/\r/gi,'');\r
43         }\r
44 \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
48         // sense.\r
49 \r
50         return {\r
51                 test_toDataFormat_1a : function()\r
52                 {\r
53                         var element = new CKEDITOR.dom.element.createFromHtml( '<div><p>Test</p></div>' );\r
54 \r
55                         assert.areSame( '<p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
56                 },\r
57 \r
58                 test_toDataFormat_1b : function()\r
59                 {\r
60                         var element = new CKEDITOR.dom.element.createFromHtml( '<div><x:x>Test</x:x></div>' );\r
61 \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
65                         else\r
66                                 assert.areSame( '<x:x>Test</x:x>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
67                 },\r
68 \r
69                 test_toDataFormat_2a : function()\r
70                 {\r
71                         var element = new CKEDITOR.dom.element.createFromHtml( '<div><br /><p>Test</p></div>' );\r
72 \r
73                         assert.areSame( '<br /><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
74                 },\r
75 \r
76                 test_toDataFormat_2b : function()\r
77                 {\r
78                         var element = new CKEDITOR.dom.element.createFromHtml( '<div><x:x></x:x><p>Test</p></div>' );\r
79 \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
83                         else\r
84                                 assert.areSame( '<x:x></x:x><p>Test</p>', getDataProcessor().toDataFormat( element.getHtml() ) );\r
85                 },\r
86 \r
87                 test_toDataFormat_3 : function()\r
88                 {\r
89                         assert.areSame( '<div><x:x><p>Test</p></x:x></div>', getDataProcessor().toDataFormat( '<div><x:x><p>Test</p></div>' ) );\r
90                 },\r
91 \r
92                 test_toDataFormat_ticket_2774 : function()\r
93                 {\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
95 \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
99                         else\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
101                 },\r
102 \r
103                 test_toDataFormat_ticket_3036_1 : function()\r
104                 {\r
105                         assert.areSame( '<input autocomplete="off" checked="checked" type="checkbox" />',\r
106                                 getDataProcessor().toDataFormat( '<INPUT type="checkbox" CHECKED  autocomplete=off>' ) );\r
107                 },\r
108 \r
109                 test_toDataFormat_ticket_3036_2 : function()\r
110                 {\r
111                         assert.areSame( '<input autocomplete="off" type="checkbox" unknown="" />',\r
112                                 getDataProcessor().toDataFormat( '<INPUT type="checkbox" UNKNOWN  autocomplete=off>' ) );\r
113                 },\r
114 \r
115                 test_toDataFormat_ticket_2886_1 : function()\r
116                 {\r
117                         var editor = CKEDITOR.instances.editor1;\r
118                         var test = this;\r
119                         var isReady = !!editor.dataProcessor;\r
120 \r
121                         if ( !isReady )\r
122                         {\r
123                                 editor.on( 'instanceReady', function()\r
124                                 {\r
125                                         isReady = true;\r
126                                 } );\r
127                         }\r
128 \r
129                         this.wait( function()\r
130                                 {\r
131                                         if ( !isReady )\r
132                                         {\r
133                                                 test.wait( arguments.callee, 100 );\r
134                                                 return;\r
135                                         }\r
136 \r
137                                         assert.areSame( '<p>\n\t&nbsp;</p>\n',\r
138                                                 editor.dataProcessor.toDataFormat( '<p></p>' ) );\r
139                                 }, 100 );\r
140                 },\r
141 \r
142                 test_toDataFormat_ticket_2886_2 : function()\r
143                 {\r
144                         var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
145 \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&nbsp;</p>\n',\r
150                                 dataProcessor.toDataFormat( source ) );\r
151                 },\r
152 \r
153                 test_toDataFormat_ticket_2886_3 : function()\r
154                 {\r
155                         var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
156 \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
159                 },\r
160 \r
161                 test_toDataFormat_ticket_2886_4 : function()\r
162                 {\r
163                         var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
164 \r
165                         assert.areSame( '<p>\n\tSome text<br />\n\t<br />\n\t&nbsp;</p>\n',\r
166                                 dataProcessor.toDataFormat( '<p>Some text<br><br>&nbsp;</p>' ) );\r
167                 },\r
168 \r
169                 test_toDataFormat_ticket_2886_5 : function()\r
170                 {\r
171                         if ( CKEDITOR.env.ie )\r
172                                 return;\r
173 \r
174                         var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
175 \r
176                         assert.areSame( '<p>\n\t&nbsp;</p>\n',\r
177                                 dataProcessor.toDataFormat( '<p><br></p>' ) );\r
178                 },\r
179 \r
180                 test_toDataFormat_ticket_2886_6 : function()\r
181                 {\r
182                         var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
183 \r
184                         var source = '<p><br><br></p>';\r
185                         if ( CKEDITOR.env.ie )\r
186                                 source = '<p><br></p>';\r
187 \r
188                         assert.areSame( '<p>\n\t<br />\n\t&nbsp;</p>\n',\r
189                                 dataProcessor.toDataFormat( source ) );\r
190                 },\r
191 \r
192                 test_toHtml_ticket_2886_1 : function()\r
193                 {\r
194                         var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
195 \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
200                 },\r
201 \r
202                 test_toHtml_ticket_2886_2 : function()\r
203                 {\r
204                         var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
205 \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
208                 },\r
209 \r
210                 test_toHtml_ticket_2886_3 : function()\r
211                 {\r
212                         var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
213 \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>&nbsp;</p>' ) );\r
218                 },\r
219 \r
220                 test_toHtml_ticket_2886_4 : function()\r
221                 {\r
222                         var dataProcessor = CKEDITOR.instances.editor1.dataProcessor;\r
223 \r
224                         var expected = '<p>Some text</p>';\r
225                         assert.areSame( expected, dataProcessor.toHtml( '<p>Some text<br></p>' ));\r
226                 },\r
227 \r
228                 test_ticket_3407 : function()\r
229                 {\r
230                         var editor = CKEDITOR.instances.editor1,\r
231                                 dataProcessor = editor.dataProcessor,\r
232                                 config = editor.config;\r
233 \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
241                 },\r
242 \r
243                 test_ticket_3591 : function()\r
244                 {\r
245                         var editor = CKEDITOR.instances.editor1,\r
246                                 dataProcessor = editor.dataProcessor;\r
247 \r
248                         dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
249                         var html = getTextAreaValue( '_TEXTAREA_3591' );\r
250                         var protectedHtml = dataProcessor.toHtml( html );\r
251 \r
252                         assert.areSame( getTextAreaValue( CKEDITOR.env.ie ? '_TEXTAREA_3591_protected_ie' : '_TEXTAREA_3591_protected' ),\r
253                                 protectedHtml );\r
254                         assert.areSame( getTextAreaValue( '_TEXTAREA_3591' ),\r
255                                 dataProcessor.toDataFormat( protectedHtml ) );\r
256                 },\r
257 \r
258                 test_ticket_3591_2 : function()\r
259                 {\r
260                         var editor = CKEDITOR.instances.editor1,\r
261                                 dataProcessor = editor.dataProcessor;\r
262 \r
263                         dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
264                         dataProcessor.writer.sortAttributes = true;\r
265 \r
266                         var html = getTextAreaValue( '_TEXTAREA_3591_2' );\r
267                         var protectedHtml = dataProcessor.toHtml( html );\r
268 \r
269                         assert.areSame( getTextAreaValue( '_TEXTAREA_3591_2' ),\r
270                                 dataProcessor.toDataFormat( protectedHtml ) );\r
271                 },\r
272 \r
273                 test_ticket_3869_1 : function()\r
274                 {\r
275                         var editor = CKEDITOR.instances.editor1,\r
276                                 dataProcessor = editor.dataProcessor;\r
277 \r
278                         dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
279                         var html = getTextAreaValue( '_TEXTAREA_3869_1' );\r
280                         var protectedHtml = dataProcessor.toHtml( html );\r
281 \r
282                         assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );\r
283                 },\r
284 \r
285                 test_ticket_3869_2 : function()\r
286                 {\r
287                         var editor = CKEDITOR.instances.editor1,\r
288                                 dataProcessor = editor.dataProcessor,\r
289                                 config = editor.config;\r
290 \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
299 \r
300                         assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) );\r
301                 },\r
302 \r
303                 /**\r
304                  * Test empty value attributes.\r
305                  */\r
306                 test_ticket_3884 : function()\r
307                 {\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
312 \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
315                 },\r
316 \r
317                 test_innerHtmlComments_ticket_3801 : function()\r
318                 {\r
319                         var editor = CKEDITOR.instances.editor1,\r
320                                 dataProcessor = editor.dataProcessor;\r
321 \r
322                         dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter();\r
323 \r
324                         for ( var i = 1; i <= 7; i++ )\r
325                         {\r
326                                 var html = getTextAreaValue( '_TEXTAREA_3801_' + i );\r
327                                 var protectedHtml = dataProcessor.toHtml( html );\r
328 \r
329                                 assert.areSame( getTextAreaValue( '_TEXTAREA_3801_' + i ),\r
330                                         dataProcessor.toDataFormat( protectedHtml ) );\r
331                         }\r
332                 },\r
333 \r
334                 name : document.title\r
335         };\r
336 })() );\r
337 \r
338 //window.onload = testCase.test_ticket_3884;\r
339         //]]>\r
340         </script>\r
341 </head>\r
342 <body>\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
345         <![if lt IE 8 ]>\r
346         gIE conditional comments\r
347 <![endif]>\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
361         <!--\r
362                 alert('-->');\r
363         //-->\r
364         </script></textarea>\r
365         <textarea id="_TEXTAREA_3869_2">#3869&lt;gallery&gt;\r
366         file.jpg\r
367         &lt;options name="test1" value="value1"&gt;&lt;/options&gt;\r
368         &lt;options name="test2" value="value2"&gt;&lt;/options&gt;\r
369         &lt;/gallery&gt;&lt;?\r
370                 echo '&lt;script type="text/javascript"&gt;';\r
371                 echo '&lt;!--alert("--&gt;");//--&gt;';\r
372                 echo '&lt;/script&gt;';\r
373         ?&gt;&lt;!--&lt;%Response.Write(now())%&gt;//--&gt;invalid&lt;?\r
374                 echo 'bbb&lt;script&gt;\r
375                 &lt;!--\r
376                 ccc();&lt;!-- &lt;/script&gt;&lt;!-- &lt;/script&gt;\r
377                 //--&gt;&lt;/script&gt;\r
378                 &lt;script&gt;&lt;!--\r
379                 &lt;!--\r
380                 ffff();\r
381                 //--&gt;&lt;/script&gt;\r
382                 ddd';\r
383         ?&gt;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
385 </body>\r
386 </html>\r