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
4 <title>CKEDITOR.event</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
11 CKEDITOR.test.addTestCase( (function()
\r
13 // Local reference to the "assert" object.
\r
14 var assert = CKEDITOR.test.assert;
\r
17 test_inherit : function()
\r
19 // Create a testClass that inherits from CKEDITOR.event.
\r
20 var testClass = function()
\r
22 CKEDITOR.event.call( this );
\r
24 testClass.prototype = CKEDITOR.event.prototype;
\r
28 var testInstance = new testClass();
\r
30 testInstance.on( 'someEvent', function( ev )
\r
32 assert.areSame( testInstance, this, 'Scope 1 is not valid' );
\r
34 assert.areSame( 'someEvent', ev.name, 'ev.name (1) is wrong' );
\r
35 assert.areSame( testInstance, ev.sender, 'ev.sender (1) is wrong' );
\r
36 assert.isUndefined( ev.editor, 'ev.editor (1) is wrong' );
\r
37 assert.isUndefined( ev.data, 'ev.data (1) is wrong' );
\r
38 assert.isUndefined( ev.listenerData, 'ev.listenerData (1) is wrong' );
\r
43 testInstance.on( 'someEvent', function( ev )
\r
45 assert.areSame( testInstance, this, 'Scope 2 is not valid' );
\r
47 assert.areSame( 'someEvent', ev.name, 'ev.name (2) is wrong' );
\r
48 assert.areSame( testInstance, ev.sender, 'ev.sender (2) is wrong' );
\r
49 assert.isUndefined( ev.editor, 'ev.editor (2) is wrong' );
\r
50 assert.isUndefined( ev.data, 'ev.data (2) is wrong' );
\r
51 assert.isUndefined( ev.listenerData, 'ev.listenerData (2) is wrong' );
\r
56 assert.areSame( false, testInstance.fire( 'someEvent' ) );
\r
58 assert.areSame( 2, calls.length, 'number of calls doesn\'t match' );
\r
59 assert.areSame( 'a,b', calls.toString() );
\r
62 test_implementOn : function()
\r
64 // Create a testObject and implement CKEDITOR.event on it.
\r
65 var testObject = { someprop : 'Test' };
\r
66 CKEDITOR.event.implementOn( testObject );
\r
68 assert.areSame( 'Test', testObject.someprop );
\r
72 testObject.on( 'someEvent', function( ev )
\r
74 assert.areSame( testObject, this, 'Scope 1 is not valid' );
\r
76 assert.areSame( 'someEvent', ev.name, 'ev.name (1) is wrong' );
\r
77 assert.areSame( testObject, ev.sender, 'ev.sender (1) is wrong' );
\r
78 assert.isUndefined( ev.editor, 'ev.editor (1) is wrong' );
\r
79 assert.isUndefined( ev.data, 'ev.data (1) is wrong' );
\r
80 assert.isUndefined( ev.listenerData, 'ev.listenerData (1) is wrong' );
\r
85 testObject.on( 'someEvent', function( ev )
\r
87 assert.areSame( testObject, this, 'Scope 2 is not valid' );
\r
89 assert.areSame( 'someEvent', ev.name, 'ev.name (2) is wrong' );
\r
90 assert.areSame( testObject, ev.sender, 'ev.sender (2) is wrong' );
\r
91 assert.isUndefined( ev.editor, 'ev.editor (2) is wrong' );
\r
92 assert.isUndefined( ev.data, 'ev.data (2) is wrong' );
\r
93 assert.isUndefined( ev.listenerData, 'ev.listenerData (2) is wrong' );
\r
98 assert.areSame( false, testObject.fire( 'someEvent' ) );
\r
100 assert.areSame( 2, calls.length, 'number of calls doesn\'t match' );
\r
101 assert.areSame( 'a,b', calls.toString() );
\r
104 test_eventNameCase : function()
\r
106 // Create a testObject and implement CKEDITOR.event on it.
\r
107 var testObject = {};
\r
108 CKEDITOR.event.implementOn( testObject );
\r
112 // Event Names are case sensitive.
\r
114 testObject.on( 'someEvent', function( ev )
\r
116 assert.areSame( 'someEvent', ev.name, 'ev.name (someEvent) is wrong' );
\r
120 testObject.on( 'SomeEvent', function( ev )
\r
122 assert.areSame( 'SomeEvent', ev.name, 'ev.name (SomeEvent) is wrong' );
\r
126 testObject.fire( 'someEvent' );
\r
127 assert.areSame( 1, counter, '"someEvent" calls doesn\'t match' );
\r
131 testObject.fire( 'SomeEvent' );
\r
132 assert.areSame( 1, counter, '"SomeEvent" calls doesn\'t match' );
\r
135 test_scope : function()
\r
137 // Create a testObject and implement CKEDITOR.event on it.
\r
138 var testObject = {};
\r
139 CKEDITOR.event.implementOn( testObject );
\r
141 // Counter used just to check that the calls are effectively done.
\r
144 var testScope = {};
\r
146 testObject.on( 'someEvent', function( ev )
\r
148 assert.areSame( testObject, this, 'scope (testObject) is wrong' );
\r
149 assert.areSame( testObject, ev.sender, 'sender (testObject) is wrong' );
\r
153 testObject.on( 'someEvent', function( ev )
\r
155 assert.areSame( testScope, this, 'scope (testScope) is wrong' );
\r
156 assert.areSame( testObject, ev.sender, 'sender (testScope) is wrong' );
\r
160 testObject.fire( 'someEvent' );
\r
162 assert.areSame( 2, counter, 'wrong number of calls' );
\r
165 test_listenerData : function()
\r
167 // Create a testObject and implement CKEDITOR.event on it.
\r
168 var testObject = {};
\r
169 CKEDITOR.event.implementOn( testObject );
\r
171 // Counter used just to check that the calls are effectively done.
\r
174 testObject.on( 'someEvent', function( ev )
\r
176 assert.areSame( 'Test1', ev.listenerData, 'listenerData (1) is wrong' );
\r
178 }, null, 'Test1' );
\r
180 testObject.on( 'someEvent', function( ev )
\r
182 assert.areSame( 'Test2', ev.listenerData, 'listenerData (2) is wrong' );
\r
184 }, null, 'Test2' );
\r
186 testObject.fire( 'someEvent' );
\r
188 assert.areSame( 2, counter, 'wrong number of calls' );
\r
191 test_data : function()
\r
193 // Create a testObject and implement CKEDITOR.event on it.
\r
194 var testObject = {};
\r
195 CKEDITOR.event.implementOn( testObject );
\r
197 // Counter used just to check that the calls are effectively done.
\r
200 testObject.on( 'someEvent', function( ev )
\r
202 assert.areSame( 'Test data', ev.data, 'data (1) is wrong' );
\r
206 testObject.on( 'someEvent', function( ev )
\r
208 assert.areSame( 'Test data', ev.data, 'data (2) is wrong' );
\r
212 testObject.fire( 'someEvent', 'Test data' );
\r
214 assert.areSame( 2, counter, 'wrong number of calls' );
\r
217 test_editor : function()
\r
219 // Create a testObject and implement CKEDITOR.event on it.
\r
220 var testObject = {};
\r
221 CKEDITOR.event.implementOn( testObject );
\r
223 // Counter used just to check that the calls are effectively done.
\r
228 testObject.on( 'someEvent', function( ev )
\r
230 assert.areSame( editor, ev.editor, 'editor is wrong' );
\r
234 testObject.fire( 'someEvent', null, editor );
\r
236 assert.areSame( 1, counter, 'wrong number of calls' );
\r
239 test_stop : function()
\r
241 // Create a testObject and implement CKEDITOR.event on it.
\r
242 var testObject = {};
\r
243 CKEDITOR.event.implementOn( testObject );
\r
247 testObject.on( 'someEvent', function( ev )
\r
253 testObject.on( 'someEvent', function( ev )
\r
258 assert.areSame( false, testObject.fire( 'someEvent' ), 'fire must return "false"' );
\r
259 assert.areSame( 1, counter, 'number of calls doesn\'t match' );
\r
262 test_cancel : function()
\r
264 // Create a testObject and implement CKEDITOR.event on it.
\r
265 var testObject = {};
\r
266 CKEDITOR.event.implementOn( testObject );
\r
270 testObject.on( 'someEvent', function( ev )
\r
276 testObject.on( 'someEvent', function( ev )
\r
281 assert.areSame( true, testObject.fire( 'someEvent' ), 'fire must return "true"' );
\r
282 assert.areSame( 1, counter, 'number of calls doesn\'t match' );
\r
285 test_dataManipulation : function()
\r
287 // Create a testObject and implement CKEDITOR.event on it.
\r
288 var testObject = {};
\r
289 CKEDITOR.event.implementOn( testObject );
\r
293 testObject.on( 'someEvent', function( ev )
\r
295 assert.areSame( 'Test1', ev.data );
\r
300 testObject.on( 'someEvent', function( ev )
\r
302 assert.areSame( 'Test2', ev.data );
\r
307 testObject.on( 'someEvent', function( ev )
\r
309 assert.areSame( 'Test3', ev.data );
\r
314 assert.areSame( 'Test4', testObject.fire( 'someEvent', 'Test1' ), 'fire must return "Test4"' );
\r
315 assert.areSame( 3, counter, 'number of calls doesn\'t match' );
\r
318 test_priority : function()
\r
320 // Create a testObject and implement CKEDITOR.event on it.
\r
321 var testObject = {};
\r
322 CKEDITOR.event.implementOn( testObject );
\r
326 testObject.on( 'someEvent', function( ev )
\r
329 }, null, null, 11 );
\r
331 testObject.on( 'someEvent', function( ev )
\r
336 testObject.on( 'someEvent', function( ev )
\r
339 }, null, null, 9 );
\r
341 testObject.on( 'someEvent', function( ev )
\r
344 }, null, null, 11 );
\r
346 testObject.on( 'someEvent', function( ev )
\r
351 testObject.on( 'someEvent', function( ev )
\r
354 }, null, null, 9 );
\r
356 testObject.fire( 'someEvent', 'Test data' );
\r
357 assert.areSame( 'a,b,c,d,e,f', calls.toString() );
\r
360 test_removeListener : function()
\r
362 // Create a testObject and implement CKEDITOR.event on it.
\r
363 var testObject = {};
\r
364 CKEDITOR.event.implementOn( testObject );
\r
368 var listener = function( ev )
\r
373 testObject.on( 'someEvent', listener );
\r
375 testObject.on( 'someEvent', function( ev )
\r
380 testObject.fire( 'someEvent', 'Test data' );
\r
381 assert.areSame( 'a,b', calls.toString() );
\r
383 testObject.removeListener( 'someEvent', listener );
\r
387 testObject.fire( 'someEvent', 'Test data' );
\r
388 assert.areSame( 'b', calls.toString() );
\r
391 test_fireOnce : function()
\r
393 // Create a testObject and implement CKEDITOR.event on it.
\r
394 var testObject = {};
\r
395 CKEDITOR.event.implementOn( testObject );
\r
399 testObject.on( 'someEvent', function( ev )
\r
404 testObject.on( 'someEvent', function( ev )
\r
409 assert.areSame( false, testObject.fireOnce( 'someEvent' ), 'fireOnce must return "false"' );
\r
410 assert.areSame( 2, counter, 'number of calls doesn\'t match' );
\r
414 assert.areSame( false, testObject.fire( 'someEvent' ), 'fire must return "false"' );
\r
415 assert.areSame( 0, counter, 'number of calls doesn\'t match' );
\r
418 test_nestedCancel : function()
\r
420 // Create a testObject and implement CKEDITOR.event on it.
\r
421 var testObject = {};
\r
422 CKEDITOR.event.implementOn( testObject );
\r
428 testObject.on( 'A', function( ev )
\r
430 isCanceledB = testObject.fire( 'B' );
\r
431 isCanceledC = testObject.fire( 'C' );
\r
434 testObject.on( 'B', function( ev )
\r
439 testObject.on( 'C', function( ev )
\r
443 isCanceledA = testObject.fire( 'A' );
\r
445 assert.areSame( false, isCanceledA, 'event A must not be canceled' );
\r
446 assert.areSame( true, isCanceledB, 'event B must be canceled' );
\r
447 assert.areSame( false, isCanceledC, 'event C must not be canceled' );
\r
450 test_event_removeListener : function()
\r
452 // Create a testObject and implement CKEDITOR.event on it.
\r
453 var testObject = {};
\r
454 CKEDITOR.event.implementOn( testObject );
\r
458 // Add two listeners for the same event "A".
\r
460 testObject.on( 'A', function( ev )
\r
463 ev.removeListener();
\r
466 testObject.on( 'A', function( ev )
\r
471 // Fire the event twice.
\r
472 testObject.fire( 'A' );
\r
473 testObject.fire( 'A' );
\r
475 assert.areSame( 3, counter );
\r
478 name : document.title
\r