JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0
[ckeditor.git] / _source / tests / core / dom / walker.html
diff --git a/_source/tests/core/dom/walker.html b/_source/tests/core/dom/walker.html
new file mode 100644 (file)
index 0000000..e17b3f1
--- /dev/null
@@ -0,0 +1,340 @@
+<!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>CKEDITOR.dom.walker</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
+var tc;\r
+\r
+CKEDITOR.test.addTestCase( tc = (function()\r
+{\r
+       // Local reference to the "assert" object.\r
+       var assert = CKEDITOR.test.assert;\r
+\r
+       var doc = new CKEDITOR.dom.document( document );\r
+\r
+       function assertNodesList( wanted, nodes )\r
+       {\r
+               var simplifiedNodes = [];\r
+\r
+               for ( var i = 0 ; i < nodes.length ; i++ )\r
+                       simplifiedNodes.push( nodes[i].type == CKEDITOR.NODE_TEXT ? nodes[i].getText() : ( '<' + nodes[i].getName() + '>' ) );\r
+\r
+               assert.areSame( wanted.toString(), simplifiedNodes.toString() );\r
+       }\r
+\r
+       return {\r
+\r
+               test_collapsed : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+\r
+                       range.setStartAt( node.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.collapse( true );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       assert.isNull( walker.next() );\r
+               },\r
+\r
+               test_next_1 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<p>', 'This is ', '<b>', 'a ', '<i>', 'simple', ' test' ], nodes );\r
+               },\r
+\r
+               test_next_2 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getFirst(), CKEDITOR.POSITION_AFTER_START );\r
+                       range.setEnd( node.getChild( [0,1,1,0] ), 2 );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ 'This is ', '<b>', 'a ', '<i>', 'si' ], nodes );\r
+               },\r
+\r
+               test_next_3 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 1 ), CKEDITOR.POSITION_BEFORE_START );\r
+                       range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<h1>' ], nodes );\r
+               },\r
+\r
+               test_next_4 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.setEndAt( node.getChild( 0 ), CKEDITOR.POSITION_AFTER_END );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [], nodes );\r
+               },\r
+\r
+               test_next_5 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.next() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<h1>' ], nodes );\r
+               },\r
+\r
+               test_previous_1 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', 'a ', 'This is ' ], nodes );\r
+               },\r
+\r
+               test_previous_2 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setEnd( node.getChild( [0,0] ), 2 );\r
+                       range.setEnd( node.getChild( [0,1,1,0] ), 2 );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ 'si', 'a ', 'is is ' ], nodes );\r
+               },\r
+\r
+               test_previous_3 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 1 ), CKEDITOR.POSITION_BEFORE_START );\r
+                       range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '' ], nodes );\r
+               },\r
+\r
+               test_previous_4 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.setEndAt( node.getChild( 0 ), CKEDITOR.POSITION_AFTER_END );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<p>' ], nodes );\r
+               },\r
+\r
+               test_previous_5 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>Test</p><h1>More</h1>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.setStartAt( node.getChild( 0 ), CKEDITOR.POSITION_BEFORE_END );\r
+                       range.setEndAt( node.getChild( 1 ), CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+\r
+                       var nodes = [];\r
+                       while ( ( node = walker.previous() ) )\r
+                               nodes.push( node );\r
+\r
+                       assertNodesList( [ '<p>' ], nodes );\r
+               },\r
+\r
+               /**\r
+                *  Test guard function is invoked on every move when iterating forward.\r
+                */\r
+               test_guard_1 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+                       var nodes = [];\r
+\r
+                       walker.guard = function( node )\r
+                       {\r
+                               nodes.push( node );\r
+                               return true;\r
+                       };\r
+\r
+                       while ( ( node = walker.next() ) )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       assertNodesList( [ '<p>', 'This is ', '<b>', 'a ', '<i>', 'simple', '<i>', '<b>',' test' , '<p>' ], nodes );\r
+               },\r
+\r
+               /**\r
+                *  Test guard function is invoked on every move when iterating backward.\r
+                */\r
+               test_guard_2 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+                       var nodes = [];\r
+\r
+                       walker.guard = function( node )\r
+                       {\r
+                               nodes.push( node );\r
+                               return true;\r
+                       };\r
+\r
+                       while ( ( node = walker.previous() ) )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', '<i>', 'a ', '<b>', 'This is ', '<p>' ], nodes );\r
+               },\r
+\r
+               /**\r
+                *  Test evaluator function is invoked on every  step when iterating backward.\r
+                */\r
+               test_evaluator_1 : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<p>This is <b>a <i>simple</i></b> test</p>' );\r
+\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+                       var nodes = [];\r
+\r
+                       walker.evaluator = function( node )\r
+                       {\r
+                               nodes.push( node );\r
+                               return true;\r
+                       };\r
+\r
+                       while ( ( node = walker.previous() ) )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       assertNodesList( [ '<p>', ' test', '<b>', '<i>', 'simple', 'a ', 'This is ' ], nodes );\r
+               },\r
+               /**\r
+                * Test walker stop at empty endContainer.\r
+                */\r
+               test_stopGuard : function()\r
+               {\r
+                       var node = doc.getById( 'playground' );\r
+                       node.setHtml( '<span></span>afterEnd' );\r
+                       var endContainer = node.getFirst();\r
+                       var range = new CKEDITOR.dom.range( doc );\r
+                       range.selectNodeContents( node );\r
+                       range.setEndAt( endContainer, CKEDITOR.POSITION_AFTER_START );\r
+\r
+                       var walker = new CKEDITOR.dom.walker( range );\r
+                       var nodes = [];\r
+\r
+                       walker.evaluator = function( node )\r
+                       {\r
+                               nodes.push( node );\r
+                               return true;\r
+                       };\r
+\r
+                       while ( ( node = walker.next() ) )\r
+                       { /*jsl:pass*/ }\r
+\r
+                       assertNodesList( [ '<span>' ], nodes );\r
+\r
+               },\r
+               name : document.title\r
+       };\r
+})() );\r
+\r
+//window.onload = tc.test_stopGuard;\r
+       //]]>\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="playground"></div>\r
+</body>\r
+</html>\r