JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0
[ckeditor.git] / _source / tests / core / event.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>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
9         //<![CDATA[\r
10 \r
11 CKEDITOR.test.addTestCase( (function()\r
12 {\r
13         // Local reference to the "assert" object.\r
14         var assert = CKEDITOR.test.assert;\r
15 \r
16         return {\r
17                 test_inherit : function()\r
18                 {\r
19                         // Create a testClass that inherits from CKEDITOR.event.\r
20                         var testClass = function()\r
21                         {\r
22                                 CKEDITOR.event.call( this );\r
23                         };\r
24                         testClass.prototype = CKEDITOR.event.prototype;\r
25 \r
26                         var calls = [];\r
27 \r
28                         var testInstance = new testClass();\r
29 \r
30                         testInstance.on( 'someEvent', function( ev )\r
31                                 {\r
32                                         assert.areSame( testInstance, this, 'Scope 1 is not valid' );\r
33 \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
39 \r
40                                         calls.push( 'a' );\r
41                                 } );\r
42 \r
43                         testInstance.on( 'someEvent', function( ev )\r
44                                 {\r
45                                         assert.areSame( testInstance, this, 'Scope 2 is not valid' );\r
46 \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
52 \r
53                                         calls.push( 'b' );\r
54                                 } );\r
55 \r
56                         assert.areSame( false, testInstance.fire( 'someEvent' ) );\r
57 \r
58                         assert.areSame( 2, calls.length, 'number of calls doesn\'t match' );\r
59                         assert.areSame( 'a,b', calls.toString() );\r
60                 },\r
61 \r
62                 test_implementOn : function()\r
63                 {\r
64                         // Create a testObject and implement CKEDITOR.event on it.\r
65                         var testObject = { someprop : 'Test' };\r
66                         CKEDITOR.event.implementOn( testObject );\r
67 \r
68                         assert.areSame( 'Test', testObject.someprop );\r
69 \r
70                         var calls = [];\r
71 \r
72                         testObject.on( 'someEvent', function( ev )\r
73                                 {\r
74                                         assert.areSame( testObject, this, 'Scope 1 is not valid' );\r
75 \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
81 \r
82                                         calls.push( 'a' );\r
83                                 } );\r
84 \r
85                         testObject.on( 'someEvent', function( ev )\r
86                                 {\r
87                                         assert.areSame( testObject, this, 'Scope 2 is not valid' );\r
88 \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
94 \r
95                                         calls.push( 'b' );\r
96                                 } );\r
97 \r
98                         assert.areSame( false, testObject.fire( 'someEvent' ) );\r
99 \r
100                         assert.areSame( 2, calls.length, 'number of calls doesn\'t match' );\r
101                         assert.areSame( 'a,b', calls.toString() );\r
102                 },\r
103 \r
104                 test_eventNameCase : function()\r
105                 {\r
106                         // Create a testObject and implement CKEDITOR.event on it.\r
107                         var testObject = {};\r
108                         CKEDITOR.event.implementOn( testObject );\r
109 \r
110                         var counter = 0;\r
111 \r
112                         // Event Names are case sensitive.\r
113 \r
114                         testObject.on( 'someEvent', function( ev )\r
115                                 {\r
116                                         assert.areSame( 'someEvent', ev.name, 'ev.name (someEvent) is wrong' );\r
117                                         counter++;\r
118                                 } );\r
119 \r
120                         testObject.on( 'SomeEvent', function( ev )\r
121                                 {\r
122                                         assert.areSame( 'SomeEvent', ev.name, 'ev.name (SomeEvent) is wrong' );\r
123                                         counter++;\r
124                                 } );\r
125 \r
126                         testObject.fire( 'someEvent' );\r
127                         assert.areSame( 1, counter, '"someEvent" calls doesn\'t match' );\r
128 \r
129                         counter = 0;\r
130 \r
131                         testObject.fire( 'SomeEvent' );\r
132                         assert.areSame( 1, counter, '"SomeEvent" calls doesn\'t match' );\r
133                 },\r
134 \r
135                 test_scope : function()\r
136                 {\r
137                         // Create a testObject and implement CKEDITOR.event on it.\r
138                         var testObject = {};\r
139                         CKEDITOR.event.implementOn( testObject );\r
140 \r
141                         // Counter used just to check that the calls are effectively done.\r
142                         var counter = 0;\r
143 \r
144                         var testScope = {};\r
145 \r
146                         testObject.on( 'someEvent', function( ev )\r
147                                 {\r
148                                         assert.areSame( testObject, this, 'scope (testObject) is wrong' );\r
149                                         assert.areSame( testObject, ev.sender, 'sender (testObject) is wrong' );\r
150                                         counter++;\r
151                                 } );\r
152 \r
153                         testObject.on( 'someEvent', function( ev )\r
154                                 {\r
155                                         assert.areSame( testScope, this, 'scope (testScope) is wrong' );\r
156                                         assert.areSame( testObject, ev.sender, 'sender (testScope) is wrong' );\r
157                                         counter++;\r
158                                 }, testScope );\r
159 \r
160                         testObject.fire( 'someEvent' );\r
161 \r
162                         assert.areSame( 2, counter, 'wrong number of calls' );\r
163                 },\r
164 \r
165                 test_listenerData : function()\r
166                 {\r
167                         // Create a testObject and implement CKEDITOR.event on it.\r
168                         var testObject = {};\r
169                         CKEDITOR.event.implementOn( testObject );\r
170 \r
171                         // Counter used just to check that the calls are effectively done.\r
172                         var counter = 0;\r
173 \r
174                         testObject.on( 'someEvent', function( ev )\r
175                                 {\r
176                                         assert.areSame( 'Test1', ev.listenerData, 'listenerData (1) is wrong' );\r
177                                         counter++;\r
178                                 }, null, 'Test1'  );\r
179 \r
180                         testObject.on( 'someEvent', function( ev )\r
181                                 {\r
182                                         assert.areSame( 'Test2', ev.listenerData, 'listenerData (2) is wrong' );\r
183                                         counter++;\r
184                                 }, null, 'Test2' );\r
185 \r
186                         testObject.fire( 'someEvent' );\r
187 \r
188                         assert.areSame( 2, counter, 'wrong number of calls' );\r
189                 },\r
190 \r
191                 test_data : function()\r
192                 {\r
193                         // Create a testObject and implement CKEDITOR.event on it.\r
194                         var testObject = {};\r
195                         CKEDITOR.event.implementOn( testObject );\r
196 \r
197                         // Counter used just to check that the calls are effectively done.\r
198                         var counter = 0;\r
199 \r
200                         testObject.on( 'someEvent', function( ev )\r
201                                 {\r
202                                         assert.areSame( 'Test data', ev.data, 'data (1) is wrong' );\r
203                                         counter++;\r
204                                 } );\r
205 \r
206                         testObject.on( 'someEvent', function( ev )\r
207                                 {\r
208                                         assert.areSame( 'Test data', ev.data, 'data (2) is wrong' );\r
209                                         counter++;\r
210                                 } );\r
211 \r
212                         testObject.fire( 'someEvent', 'Test data' );\r
213 \r
214                         assert.areSame( 2, counter, 'wrong number of calls' );\r
215                 },\r
216 \r
217                 test_editor : function()\r
218                 {\r
219                         // Create a testObject and implement CKEDITOR.event on it.\r
220                         var testObject = {};\r
221                         CKEDITOR.event.implementOn( testObject );\r
222 \r
223                         // Counter used just to check that the calls are effectively done.\r
224                         var counter = 0;\r
225 \r
226                         var editor = {};\r
227 \r
228                         testObject.on( 'someEvent', function( ev )\r
229                                 {\r
230                                         assert.areSame( editor, ev.editor, 'editor is wrong' );\r
231                                         counter++;\r
232                                 } );\r
233 \r
234                         testObject.fire( 'someEvent', null, editor );\r
235 \r
236                         assert.areSame( 1, counter, 'wrong number of calls' );\r
237                 },\r
238 \r
239                 test_stop : function()\r
240                 {\r
241                         // Create a testObject and implement CKEDITOR.event on it.\r
242                         var testObject = {};\r
243                         CKEDITOR.event.implementOn( testObject );\r
244 \r
245                         var counter = 0;\r
246 \r
247                         testObject.on( 'someEvent', function( ev )\r
248                                 {\r
249                                         ev.stop();\r
250                                         counter++;\r
251                                 } );\r
252 \r
253                         testObject.on( 'someEvent', function( ev )\r
254                                 {\r
255                                         counter++;\r
256                                 } );\r
257 \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
260                 },\r
261 \r
262                 test_cancel : function()\r
263                 {\r
264                         // Create a testObject and implement CKEDITOR.event on it.\r
265                         var testObject = {};\r
266                         CKEDITOR.event.implementOn( testObject );\r
267 \r
268                         var counter = 0;\r
269 \r
270                         testObject.on( 'someEvent', function( ev )\r
271                                 {\r
272                                         ev.cancel();\r
273                                         counter++;\r
274                                 } );\r
275 \r
276                         testObject.on( 'someEvent', function( ev )\r
277                                 {\r
278                                         counter++;\r
279                                 } );\r
280 \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
283                 },\r
284 \r
285                 test_dataManipulation : function()\r
286                 {\r
287                         // Create a testObject and implement CKEDITOR.event on it.\r
288                         var testObject = {};\r
289                         CKEDITOR.event.implementOn( testObject );\r
290 \r
291                         var counter = 0;\r
292 \r
293                         testObject.on( 'someEvent', function( ev )\r
294                                 {\r
295                                         assert.areSame( 'Test1', ev.data );\r
296                                         ev.data = 'Test2';\r
297                                         counter++;\r
298                                 } );\r
299 \r
300                         testObject.on( 'someEvent', function( ev )\r
301                                 {\r
302                                         assert.areSame( 'Test2', ev.data );\r
303                                         ev.data = 'Test3';\r
304                                         counter++;\r
305                                 } );\r
306 \r
307                         testObject.on( 'someEvent', function( ev )\r
308                                 {\r
309                                         assert.areSame( 'Test3', ev.data );\r
310                                         ev.data = 'Test4';\r
311                                         counter++;\r
312                                 } );\r
313 \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
316                 },\r
317 \r
318                 test_priority : function()\r
319                 {\r
320                         // Create a testObject and implement CKEDITOR.event on it.\r
321                         var testObject = {};\r
322                         CKEDITOR.event.implementOn( testObject );\r
323 \r
324                         var calls = [];\r
325 \r
326                         testObject.on( 'someEvent', function( ev )\r
327                                 {\r
328                                         calls.push( 'e' );\r
329                                 }, null, null, 11 );\r
330 \r
331                         testObject.on( 'someEvent', function( ev )\r
332                                 {\r
333                                         calls.push( 'c' );\r
334                                 } );\r
335 \r
336                         testObject.on( 'someEvent', function( ev )\r
337                                 {\r
338                                         calls.push( 'a' );\r
339                                 }, null, null, 9 );\r
340 \r
341                         testObject.on( 'someEvent', function( ev )\r
342                                 {\r
343                                         calls.push( 'f' );\r
344                                 }, null, null, 11 );\r
345 \r
346                         testObject.on( 'someEvent', function( ev )\r
347                                 {\r
348                                         calls.push( 'd' );\r
349                                 } );\r
350 \r
351                         testObject.on( 'someEvent', function( ev )\r
352                                 {\r
353                                         calls.push( 'b' );\r
354                                 }, null, null, 9 );\r
355 \r
356                         testObject.fire( 'someEvent', 'Test data' );\r
357                         assert.areSame( 'a,b,c,d,e,f', calls.toString() );\r
358                 },\r
359 \r
360                 test_removeListener : function()\r
361                 {\r
362                         // Create a testObject and implement CKEDITOR.event on it.\r
363                         var testObject = {};\r
364                         CKEDITOR.event.implementOn( testObject );\r
365 \r
366                         var calls = [];\r
367 \r
368                         var listener = function( ev )\r
369                                 {\r
370                                         calls.push( 'a' );\r
371                                 };\r
372 \r
373                         testObject.on( 'someEvent', listener );\r
374 \r
375                         testObject.on( 'someEvent', function( ev )\r
376                                 {\r
377                                         calls.push( 'b' );\r
378                                 } );\r
379 \r
380                         testObject.fire( 'someEvent', 'Test data' );\r
381                         assert.areSame( 'a,b', calls.toString() );\r
382 \r
383                         testObject.removeListener( 'someEvent', listener );\r
384 \r
385                         calls = [];\r
386 \r
387                         testObject.fire( 'someEvent', 'Test data' );\r
388                         assert.areSame( 'b', calls.toString() );\r
389                 },\r
390 \r
391                 test_fireOnce : function()\r
392                 {\r
393                         // Create a testObject and implement CKEDITOR.event on it.\r
394                         var testObject = {};\r
395                         CKEDITOR.event.implementOn( testObject );\r
396 \r
397                         var counter = 0;\r
398 \r
399                         testObject.on( 'someEvent', function( ev )\r
400                                 {\r
401                                         counter++;\r
402                                 } );\r
403 \r
404                         testObject.on( 'someEvent', function( ev )\r
405                                 {\r
406                                         counter++;\r
407                                 } );\r
408 \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
411 \r
412                         counter = 0;\r
413 \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
416                 },\r
417 \r
418                 test_nestedCancel : function()\r
419                 {\r
420                         // Create a testObject and implement CKEDITOR.event on it.\r
421                         var testObject = {};\r
422                         CKEDITOR.event.implementOn( testObject );\r
423 \r
424                         var isCanceledA,\r
425                                 isCanceledB,\r
426                                 isCanceledC;\r
427 \r
428                         testObject.on( 'A', function( ev )\r
429                                 {\r
430                                         isCanceledB = testObject.fire( 'B' );\r
431                                         isCanceledC = testObject.fire( 'C' );\r
432                                 });\r
433 \r
434                         testObject.on( 'B', function( ev )\r
435                                 {\r
436                                         ev.cancel();\r
437                                 });\r
438 \r
439                         testObject.on( 'C', function( ev )\r
440                                 {\r
441                                 });\r
442 \r
443                         isCanceledA = testObject.fire( 'A' );\r
444 \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
448                 },\r
449 \r
450                 test_event_removeListener : function()\r
451                 {\r
452                         // Create a testObject and implement CKEDITOR.event on it.\r
453                         var testObject = {};\r
454                         CKEDITOR.event.implementOn( testObject );\r
455 \r
456                         var counter = 0;\r
457 \r
458                         // Add two listeners for the same event "A".\r
459 \r
460                         testObject.on( 'A', function( ev )\r
461                                 {\r
462                                         counter++;\r
463                                         ev.removeListener();\r
464                                 });\r
465 \r
466                         testObject.on( 'A', function( ev )\r
467                                 {\r
468                                         counter++;\r
469                                 });\r
470 \r
471                         // Fire the event twice.\r
472                         testObject.fire( 'A' );\r
473                         testObject.fire( 'A' );\r
474 \r
475                         assert.areSame( 3, counter );\r
476                 },\r
477 \r
478                 name : document.title\r
479         };\r
480 })() );\r
481 \r
482         //]]>\r
483         </script>\r
484 </head>\r
485 <body>\r
486 </body>\r
487 </html>\r