JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0
[ckeditor.git] / _tests / plugins / domiterator / domiterator.html
diff --git a/_tests/plugins/domiterator/domiterator.html b/_tests/plugins/domiterator/domiterator.html
new file mode 100644 (file)
index 0000000..6eb42e9
--- /dev/null
@@ -0,0 +1,236 @@
+<!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: domiterator</title>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\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
+\r
+CKEDITOR.plugins.load( [ 'htmldataprocessor', 'htmlwriter', 'domiterator'] );\r
+\r
+\r
+       </script>\r
+       <script type="text/javascript">\r
+       //<![CDATA[\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
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+\r
+       // Local references.\r
+       var assert = CKEDITOR.test.assert,\r
+               arrayAssert = YAHOO.util.ArrayAssert;\r
+\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 line-feed, so remove it when retrieving\r
+        * pre-formated text from text area.\r
+        */\r
+       function getTextAreaValue( id )\r
+       {\r
+               return CKEDITOR.document.getById( id ).getValue().replace( /\r/gi, '' );\r
+       }\r
+\r
+       function assumeElementContentAreSame( container, textareaId )\r
+       {\r
+               if( typeof container == 'string' )\r
+                       container = doc.getById( container );\r
+               //Assume result document content\r
+               var html = getDataProcessor().toDataFormat( container.getHtml() );\r
+               assert.areSame( getTextAreaValue( textareaId ) , html );\r
+       }\r
+\r
+       function assumeElementAreSame( element, textareaId )\r
+       {\r
+               if( typeof element == 'string' )\r
+                       element = doc.getById( element );\r
+               //Assume result document content\r
+               var html = getDataProcessor().toDataFormat( element.getOuterHtml() );\r
+               assert.areSame( getTextAreaValue( textareaId ) , html );\r
+       }\r
+\r
+       /**\r
+        *\r
+        * @param {String|CKEDITOR.dom.range} containerId|range Either the id of html container which contents are treated as range, or a exisiting range object.\r
+        * @param {Object} iteratorOption\r
+        * @param {Array} expectedTagList block elements tagName list in iteration orders.\r
+        */\r
+       function assumeIterationSameAs( containerIdOrRange, iteratorOption, expectedTagList )\r
+       {\r
+               var range;\r
+               if( typeof containerIdOrRange == 'string' )\r
+               {\r
+                       range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( doc.getById( containerIdOrRange ) );\r
+               }\r
+               else\r
+                       range = containerIdOrRange;\r
+\r
+               var iter = range.createIterator();\r
+               CKEDITOR.tools.extend( iter, iteratorOption, true );\r
+               var blockList = [], block;\r
+               while (( block = iter.getNextParagraph() ) )\r
+               {\r
+                       blockList.push( block.getName() );\r
+               }\r
+               arrayAssert.itemsAreEqual( expectedTagList, blockList );\r
+       }\r
+\r
+       return {\r
+\r
+               /**\r
+                * Test iterating over table cells.\r
+                */\r
+               test_iterator_table_cells : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( 'iterTarget2a' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( 'iterTarget2b' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'th', 'p', 'td' ]);\r
+                       assumeElementContentAreSame( 'iterContainer2', 'iterResult2' );\r
+               },\r
+\r
+               /**\r
+                * Test iterating over list items.\r
+                */\r
+               test_iterator_listItems : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( 'iterTarget3a' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( 'iterTarget3b' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'li', 'p', 'li' ,'p', 'li' ]);\r
+                       assumeElementContentAreSame( 'iterContainer3', 'iterResult3' );\r
+               },\r
+\r
+               /**\r
+                * Test iterating over pseudo block.\r
+                */\r
+               test_iterator_pseudoBlock : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( 'iterTarget4a' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt( doc.getById( 'iterTarget4b' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'p', 'p' ] );\r
+                       assumeElementContentAreSame( 'iterContainer4', 'iterResult4' );\r
+               },\r
+\r
+               /**\r
+                * Test collapsed range before paraghraph end.\r
+                */\r
+               test_iterator_collapsed_before_paragraph : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( doc.getById( 'iterTarget7' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'p' ]);\r
+                       assumeElementContentAreSame( 'iterContainer7', 'iterResult7' );\r
+               },\r
+\r
+               /**\r
+                * Test range collapsed  inside paraghraph.\r
+                */\r
+               test_iterator_collapsed_inside_paragraph : function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStart( doc.getById( 'para8' ).getFirst(), 3 );\r
+                       assumeIterationSameAs( range, null, [ 'p' ]);\r
+                       assumeElementContentAreSame( 'iterContainer8', 'iterResult8' );\r
+               },\r
+\r
+               /**\r
+                * Test fix paragraph-less content.\r
+                */\r
+               test_iterator_establish_paragraph: function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range(doc);\r
+                       range.setStartAt(doc.getById('iterTarget9'), CKEDITOR.POSITION_AFTER_START);\r
+                       range.setEndAt(doc.getById('iterTarget9'), CKEDITOR.POSITION_BEFORE_END);\r
+                       assumeIterationSameAs(range, null, ['p']);\r
+                       assumeElementContentAreSame( 'iterContainer9', 'iterResult9');\r
+               },\r
+\r
+               /**\r
+                * Test iterating over more than one paragraphs. (#3352)\r
+                */\r
+               test_iterator_multiple_paragraphs: function()\r
+               {\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt(doc.getById( 'iterTarget10a' ), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEndAt(doc.getById( 'iterTarget10b' ), CKEDITOR.POSITION_BEFORE_END );\r
+                       assumeIterationSameAs( range, null, [ 'p', 'p' ] );\r
+               },\r
+\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+\r
+\r
+<div id="iterContainer2"><table summary="summary">\r
+       <caption>caption</caption>\r
+       <tr>\r
+               <th id="iterTarget2a">\r
+                       head1</th>\r
+       </tr>\r
+       <tr>\r
+               <td><p>cell1</p></td>\r
+       </tr>\r
+       <tr>\r
+               <td id="iterTarget2b">cell2</td>\r
+       </tr>\r
+</table></div>\r
+<textarea id="iterResult2"><table summary="summary"><caption>caption</caption><tbody><tr><th id="iterTarget2a">head1</th></tr><tr><td><p>cell1</p></td></tr><tr><td id="iterTarget2b">cell2</td></tr></tbody></table></textarea>\r
+\r
+<div id="iterContainer3"><ul>\r
+       <li id="iterTarget3a">item1</li>\r
+       <li><p>item2</p></li>\r
+       <li>\r
+               <ul><li>item3</li></ul>\r
+               <ul><li><p>item5</p></li></ul>\r
+       </li>\r
+       <li id="iterTarget3b">item5</li>\r
+       </ul></div>\r
+<textarea id="iterResult3"><ul><li id="iterTarget3a">item1</li><li><p>item2</p></li><li><ul><li>item3</li></ul><ul><li><p>item5</p></li></ul></li><li id="iterTarget3b">item5</li></ul></textarea>\r
+\r
+<div id="iterContainer4">\r
+       <div id="iterTarget4b"><p id="iterTarget4a">paragraph</p>text</div>\r
+</div>\r
+<textarea id="iterResult4"><div id="iterTarget4b"><p id="iterTarget4a">paragraph</p><p>text</p></div></textarea>\r
+\r
+<div id="iterContainer7"><p id="iterTarget7">paragraph</p></div>\r
+<textarea id="iterResult7"><p id="iterTarget7">paragraph</p></textarea>\r
+\r
+<div id="iterContainer8"><p id="para8">paragraph</p></div>\r
+<textarea id="iterResult8"><p id="para8">paragraph</p></textarea>\r
+\r
+<form id="iterContainer9"><span id="iterTarget9">non-paragraph</span></form>\r
+<textarea id="iterResult9"><p><span id="iterTarget9">non-paragraph</span></p></textarea>\r
+\r
+<div id="iterContainer10"><p id="iterTarget10a">para1</p><p id="iterTarget10b">para2</p></div>\r
+\r
+</body>\r
+</html>\r