--- /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>CKEDITOR.event</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
+CKEDITOR.test.addTestCase( (function()\r
+{\r
+ // Local reference to the "assert" object.\r
+ var assert = CKEDITOR.test.assert;\r
+\r
+ return {\r
+ test_inherit : function()\r
+ {\r
+ // Create a testClass that inherits from CKEDITOR.event.\r
+ var testClass = function()\r
+ {\r
+ CKEDITOR.event.call( this );\r
+ };\r
+ testClass.prototype = CKEDITOR.event.prototype;\r
+\r
+ var calls = [];\r
+\r
+ var testInstance = new testClass();\r
+\r
+ testInstance.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( testInstance, this, 'Scope 1 is not valid' );\r
+\r
+ assert.areSame( 'someEvent', ev.name, 'ev.name (1) is wrong' );\r
+ assert.areSame( testInstance, ev.sender, 'ev.sender (1) is wrong' );\r
+ assert.isUndefined( ev.editor, 'ev.editor (1) is wrong' );\r
+ assert.isUndefined( ev.data, 'ev.data (1) is wrong' );\r
+ assert.isUndefined( ev.listenerData, 'ev.listenerData (1) is wrong' );\r
+\r
+ calls.push( 'a' );\r
+ } );\r
+\r
+ testInstance.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( testInstance, this, 'Scope 2 is not valid' );\r
+\r
+ assert.areSame( 'someEvent', ev.name, 'ev.name (2) is wrong' );\r
+ assert.areSame( testInstance, ev.sender, 'ev.sender (2) is wrong' );\r
+ assert.isUndefined( ev.editor, 'ev.editor (2) is wrong' );\r
+ assert.isUndefined( ev.data, 'ev.data (2) is wrong' );\r
+ assert.isUndefined( ev.listenerData, 'ev.listenerData (2) is wrong' );\r
+\r
+ calls.push( 'b' );\r
+ } );\r
+\r
+ assert.areSame( false, testInstance.fire( 'someEvent' ) );\r
+\r
+ assert.areSame( 2, calls.length, 'number of calls doesn\'t match' );\r
+ assert.areSame( 'a,b', calls.toString() );\r
+ },\r
+\r
+ test_implementOn : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = { someprop : 'Test' };\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ assert.areSame( 'Test', testObject.someprop );\r
+\r
+ var calls = [];\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( testObject, this, 'Scope 1 is not valid' );\r
+\r
+ assert.areSame( 'someEvent', ev.name, 'ev.name (1) is wrong' );\r
+ assert.areSame( testObject, ev.sender, 'ev.sender (1) is wrong' );\r
+ assert.isUndefined( ev.editor, 'ev.editor (1) is wrong' );\r
+ assert.isUndefined( ev.data, 'ev.data (1) is wrong' );\r
+ assert.isUndefined( ev.listenerData, 'ev.listenerData (1) is wrong' );\r
+\r
+ calls.push( 'a' );\r
+ } );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( testObject, this, 'Scope 2 is not valid' );\r
+\r
+ assert.areSame( 'someEvent', ev.name, 'ev.name (2) is wrong' );\r
+ assert.areSame( testObject, ev.sender, 'ev.sender (2) is wrong' );\r
+ assert.isUndefined( ev.editor, 'ev.editor (2) is wrong' );\r
+ assert.isUndefined( ev.data, 'ev.data (2) is wrong' );\r
+ assert.isUndefined( ev.listenerData, 'ev.listenerData (2) is wrong' );\r
+\r
+ calls.push( 'b' );\r
+ } );\r
+\r
+ assert.areSame( false, testObject.fire( 'someEvent' ) );\r
+\r
+ assert.areSame( 2, calls.length, 'number of calls doesn\'t match' );\r
+ assert.areSame( 'a,b', calls.toString() );\r
+ },\r
+\r
+ test_eventNameCase : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ var counter = 0;\r
+\r
+ // Event Names are case sensitive.\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( 'someEvent', ev.name, 'ev.name (someEvent) is wrong' );\r
+ counter++;\r
+ } );\r
+\r
+ testObject.on( 'SomeEvent', function( ev )\r
+ {\r
+ assert.areSame( 'SomeEvent', ev.name, 'ev.name (SomeEvent) is wrong' );\r
+ counter++;\r
+ } );\r
+\r
+ testObject.fire( 'someEvent' );\r
+ assert.areSame( 1, counter, '"someEvent" calls doesn\'t match' );\r
+\r
+ counter = 0;\r
+\r
+ testObject.fire( 'SomeEvent' );\r
+ assert.areSame( 1, counter, '"SomeEvent" calls doesn\'t match' );\r
+ },\r
+\r
+ test_scope : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ // Counter used just to check that the calls are effectively done.\r
+ var counter = 0;\r
+\r
+ var testScope = {};\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( testObject, this, 'scope (testObject) is wrong' );\r
+ assert.areSame( testObject, ev.sender, 'sender (testObject) is wrong' );\r
+ counter++;\r
+ } );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( testScope, this, 'scope (testScope) is wrong' );\r
+ assert.areSame( testObject, ev.sender, 'sender (testScope) is wrong' );\r
+ counter++;\r
+ }, testScope );\r
+\r
+ testObject.fire( 'someEvent' );\r
+\r
+ assert.areSame( 2, counter, 'wrong number of calls' );\r
+ },\r
+\r
+ test_listenerData : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ // Counter used just to check that the calls are effectively done.\r
+ var counter = 0;\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( 'Test1', ev.listenerData, 'listenerData (1) is wrong' );\r
+ counter++;\r
+ }, null, 'Test1' );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( 'Test2', ev.listenerData, 'listenerData (2) is wrong' );\r
+ counter++;\r
+ }, null, 'Test2' );\r
+\r
+ testObject.fire( 'someEvent' );\r
+\r
+ assert.areSame( 2, counter, 'wrong number of calls' );\r
+ },\r
+\r
+ test_data : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ // Counter used just to check that the calls are effectively done.\r
+ var counter = 0;\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( 'Test data', ev.data, 'data (1) is wrong' );\r
+ counter++;\r
+ } );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( 'Test data', ev.data, 'data (2) is wrong' );\r
+ counter++;\r
+ } );\r
+\r
+ testObject.fire( 'someEvent', 'Test data' );\r
+\r
+ assert.areSame( 2, counter, 'wrong number of calls' );\r
+ },\r
+\r
+ test_editor : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ // Counter used just to check that the calls are effectively done.\r
+ var counter = 0;\r
+\r
+ var editor = {};\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( editor, ev.editor, 'editor is wrong' );\r
+ counter++;\r
+ } );\r
+\r
+ testObject.fire( 'someEvent', null, editor );\r
+\r
+ assert.areSame( 1, counter, 'wrong number of calls' );\r
+ },\r
+\r
+ test_stop : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ var counter = 0;\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ ev.stop();\r
+ counter++;\r
+ } );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ counter++;\r
+ } );\r
+\r
+ assert.areSame( false, testObject.fire( 'someEvent' ), 'fire must return "false"' );\r
+ assert.areSame( 1, counter, 'number of calls doesn\'t match' );\r
+ },\r
+\r
+ test_cancel : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ var counter = 0;\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ ev.cancel();\r
+ counter++;\r
+ } );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ counter++;\r
+ } );\r
+\r
+ assert.areSame( true, testObject.fire( 'someEvent' ), 'fire must return "true"' );\r
+ assert.areSame( 1, counter, 'number of calls doesn\'t match' );\r
+ },\r
+\r
+ test_dataManipulation : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ var counter = 0;\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( 'Test1', ev.data );\r
+ ev.data = 'Test2';\r
+ counter++;\r
+ } );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( 'Test2', ev.data );\r
+ ev.data = 'Test3';\r
+ counter++;\r
+ } );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ assert.areSame( 'Test3', ev.data );\r
+ ev.data = 'Test4';\r
+ counter++;\r
+ } );\r
+\r
+ assert.areSame( 'Test4', testObject.fire( 'someEvent', 'Test1' ), 'fire must return "Test4"' );\r
+ assert.areSame( 3, counter, 'number of calls doesn\'t match' );\r
+ },\r
+\r
+ test_priority : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ var calls = [];\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ calls.push( 'e' );\r
+ }, null, null, 11 );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ calls.push( 'c' );\r
+ } );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ calls.push( 'a' );\r
+ }, null, null, 9 );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ calls.push( 'f' );\r
+ }, null, null, 11 );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ calls.push( 'd' );\r
+ } );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ calls.push( 'b' );\r
+ }, null, null, 9 );\r
+\r
+ testObject.fire( 'someEvent', 'Test data' );\r
+ assert.areSame( 'a,b,c,d,e,f', calls.toString() );\r
+ },\r
+\r
+ test_removeListener : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ var calls = [];\r
+\r
+ var listener = function( ev )\r
+ {\r
+ calls.push( 'a' );\r
+ };\r
+\r
+ testObject.on( 'someEvent', listener );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ calls.push( 'b' );\r
+ } );\r
+\r
+ testObject.fire( 'someEvent', 'Test data' );\r
+ assert.areSame( 'a,b', calls.toString() );\r
+\r
+ testObject.removeListener( 'someEvent', listener );\r
+\r
+ calls = [];\r
+\r
+ testObject.fire( 'someEvent', 'Test data' );\r
+ assert.areSame( 'b', calls.toString() );\r
+ },\r
+\r
+ test_fireOnce : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ var counter = 0;\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ counter++;\r
+ } );\r
+\r
+ testObject.on( 'someEvent', function( ev )\r
+ {\r
+ counter++;\r
+ } );\r
+\r
+ assert.areSame( false, testObject.fireOnce( 'someEvent' ), 'fireOnce must return "false"' );\r
+ assert.areSame( 2, counter, 'number of calls doesn\'t match' );\r
+\r
+ counter = 0;\r
+\r
+ assert.areSame( false, testObject.fire( 'someEvent' ), 'fire must return "false"' );\r
+ assert.areSame( 0, counter, 'number of calls doesn\'t match' );\r
+ },\r
+\r
+ test_nestedCancel : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ var isCanceledA,\r
+ isCanceledB,\r
+ isCanceledC;\r
+\r
+ testObject.on( 'A', function( ev )\r
+ {\r
+ isCanceledB = testObject.fire( 'B' );\r
+ isCanceledC = testObject.fire( 'C' );\r
+ });\r
+\r
+ testObject.on( 'B', function( ev )\r
+ {\r
+ ev.cancel();\r
+ });\r
+\r
+ testObject.on( 'C', function( ev )\r
+ {\r
+ });\r
+\r
+ isCanceledA = testObject.fire( 'A' );\r
+\r
+ assert.areSame( false, isCanceledA, 'event A must not be canceled' );\r
+ assert.areSame( true, isCanceledB, 'event B must be canceled' );\r
+ assert.areSame( false, isCanceledC, 'event C must not be canceled' );\r
+ },\r
+\r
+ test_event_removeListener : function()\r
+ {\r
+ // Create a testObject and implement CKEDITOR.event on it.\r
+ var testObject = {};\r
+ CKEDITOR.event.implementOn( testObject );\r
+\r
+ var counter = 0;\r
+\r
+ // Add two listeners for the same event "A".\r
+\r
+ testObject.on( 'A', function( ev )\r
+ {\r
+ counter++;\r
+ ev.removeListener();\r
+ });\r
+\r
+ testObject.on( 'A', function( ev )\r
+ {\r
+ counter++;\r
+ });\r
+\r
+ // Fire the event twice.\r
+ testObject.fire( 'A' );\r
+ testObject.fire( 'A' );\r
+\r
+ assert.areSame( 3, counter );\r
+ },\r
+\r
+ name : document.title\r
+ };\r
+})() );\r
+\r
+ //]]>\r
+ </script>\r
+</head>\r
+<body>\r
+</body>\r
+</html>\r