1
YUI.add('event-key-tests', function(Y) {
3
Y.Node.prototype.key = function (keyCode, charCode, mods, type) {
4
var simulate = Y.Event.simulate,
6
config = Y.merge(mods || {});
9
if (type === 'keypress') {
10
config.charCode = config.keyCode = config.which = charCode || keyCode;
12
config.keyCode = config.which = keyCode;
14
simulate(el, type, config);
16
config.keyCode = config.which = keyCode;
17
simulate(el, 'keydown', config);
18
simulate(el, 'keyup', config);
20
config.charCode = config.keyCode = config.which = charCode || keyCode;
21
simulate(el, 'keypress', config);
26
var testbed = Y.one('#testbed'),
31
testbed = body.create('<div id="testbed"></div>');
32
body.prepend(testbed);
38
'<div id="div1"><input type="text" id="text1" name="text1"></div>' +
41
'<div id="div2"><input type="text" id="text2" name="text2"></div>' +
44
'<div id="div3"><textarea id="area1" name="area1"></textarea></div>' +
50
var testbed = Y.one('#testbed');
53
testbed.remove().destroy(true);
57
var suite = new Y.Test.Suite("event-key");
59
suite.add(new Y.Test.Case({
60
name: "node.on('key',...)",
65
"test node.on('key', fn, '65')": function () {
66
var input = Y.one("#text1"),
67
target, type, currentTarget, keyCode, thisObj;
69
input.on("key", function (e) {
72
currentTarget = e.currentTarget;
79
Y.Assert.areSame(input, target);
80
Y.Assert.areSame("key", type);
81
Y.Assert.areSame(input, currentTarget);
82
Y.Assert.areSame(65, keyCode);
83
Y.Assert.areSame(input, thisObj);
86
"test node.on('key', fn, '65', thisObj)": function () {
87
var input = Y.one("#text1"),
89
target, type, currentTarget, keyCode, thisObj;
91
input.on("key", function (e) {
94
currentTarget = e.currentTarget;
101
Y.Assert.areSame(input, target);
102
Y.Assert.areSame("key", type);
103
Y.Assert.areSame(input, currentTarget);
104
Y.Assert.areSame(65, keyCode);
105
Y.Assert.areSame(obj, thisObj);
108
"test node.on('key', fn, '65', thisObj, args)": function () {
109
var input = Y.one("#text1"),
110
obj = { foo: "foo" },
111
target, type, currentTarget, keyCode, thisObj, arg;
113
input.on("key", function (e, x) {
116
currentTarget = e.currentTarget;
120
}, '65', obj, "ARG!");
124
Y.Assert.areSame(input, target);
125
Y.Assert.areSame("key", type);
126
Y.Assert.areSame(input, currentTarget);
127
Y.Assert.areSame(65, keyCode);
128
Y.Assert.areSame(obj, thisObj);
129
Y.Assert.areSame("ARG!", arg);
133
suite.add(new Y.Test.Case({
134
name: "nodelist.on('key',...)",
139
"test nodelist.on('key', fn, '65')": function () {
140
var inputs = Y.all("#items input"),
141
item0 = inputs.item(0),
142
item1 = inputs.item(1),
149
inputs.on("key", function (e) {
150
target.push(e.target);
152
currentTarget.push(e.currentTarget);
153
keyCode.push(e.keyCode);
160
Y.ArrayAssert.itemsAreSame([item0, item1], target);
161
Y.ArrayAssert.itemsAreSame(["key", "key"], type);
162
Y.ArrayAssert.itemsAreSame([item0, item1], currentTarget);
163
Y.ArrayAssert.itemsAreSame([65, 65], keyCode);
164
// Synth infrastructure iterates nodelist input for individual
165
// subscription for each node, so 'this' is not the nodelist as
166
// it is with nodelist.on('click');
167
//Y.ArrayAssert.itemsAreSame([inputs, inputs], thisObj);
168
Y.ArrayAssert.itemsAreSame([item0, item1], thisObj);
171
"test nodelist.on('key', fn, '65', thisObj)": function () {
172
var inputs = Y.all("#items input"),
173
item0 = inputs.item(0),
174
item1 = inputs.item(1),
175
obj = { foo: "foo" },
182
inputs.on("key", function (e) {
183
target.push(e.target);
185
currentTarget.push(e.currentTarget);
186
keyCode.push(e.keyCode);
193
Y.ArrayAssert.itemsAreSame([item0, item1], target);
194
Y.ArrayAssert.itemsAreSame(["key", "key"], type);
195
Y.ArrayAssert.itemsAreSame([item0, item1], currentTarget);
196
Y.ArrayAssert.itemsAreSame([65, 65], keyCode);
197
Y.ArrayAssert.itemsAreSame([obj, obj], thisObj);
200
"test nodelist.on('key', fn, '65', thisObj, args)": function () {
201
var inputs = Y.all("#items input"),
202
item0 = inputs.item(0),
203
item1 = inputs.item(1),
204
obj = { foo: "foo" },
212
inputs.on("key", function (e, x) {
213
target.push(e.target);
215
currentTarget.push(e.currentTarget);
216
keyCode.push(e.keyCode);
219
}, '65', obj, "ARG!");
224
Y.ArrayAssert.itemsAreSame([item0, item1], target);
225
Y.ArrayAssert.itemsAreSame(["key", "key"], type);
226
Y.ArrayAssert.itemsAreSame([item0, item1], currentTarget);
227
Y.ArrayAssert.itemsAreSame([65, 65], keyCode);
228
Y.ArrayAssert.itemsAreSame([obj, obj], thisObj);
229
Y.ArrayAssert.itemsAreSame(["ARG!", "ARG!"], arg);
233
suite.add(new Y.Test.Case({
234
name: "Y.on('key',...)",
239
"test Y.on('key', fn, selector, '65')": function () {
240
var input = Y.one("#text1"),
241
target, type, currentTarget, keyCode, thisObj;
243
Y.on("key", function (e) {
246
currentTarget = e.currentTarget;
253
Y.Assert.areSame(input, target);
254
Y.Assert.areSame("key", type);
255
Y.Assert.areSame(input, currentTarget);
256
Y.Assert.areSame(65, keyCode);
257
Y.Assert.areSame(input, thisObj);
260
"test Y.on('key', fn, node, '65')": function () {
261
var input = Y.one("#text1"),
262
target, type, currentTarget, keyCode, thisObj;
264
Y.on("key", function (e) {
267
currentTarget = e.currentTarget;
274
Y.Assert.areSame(input, target);
275
Y.Assert.areSame("key", type);
276
Y.Assert.areSame(input, currentTarget);
277
Y.Assert.areSame(65, keyCode);
278
Y.Assert.areSame(input, thisObj);
281
"test Y.on('key', fn, selector, '65', thisObj)": function () {
282
var input = Y.one("#text1"),
283
obj = { foo: "foo" },
284
target, type, currentTarget, keyCode, thisObj;
286
Y.on("key", function (e) {
289
currentTarget = e.currentTarget;
292
}, '#text1', '65', obj);
296
Y.Assert.areSame(input, target);
297
Y.Assert.areSame("key", type);
298
Y.Assert.areSame(input, currentTarget);
299
Y.Assert.areSame(65, keyCode);
300
Y.Assert.areSame(obj, thisObj);
303
"test Y.on('key', fn, selector, '65', thisObj, args)": function () {
304
var input = Y.one("#text1"),
305
obj = { foo: "foo" },
306
target, type, currentTarget, keyCode, thisObj, arg;
308
Y.on("key", function (e, x) {
311
currentTarget = e.currentTarget;
315
}, '#text1', '65', obj, "ARG!");
319
Y.Assert.areSame(input, target);
320
Y.Assert.areSame("key", type);
321
Y.Assert.areSame(input, currentTarget);
322
Y.Assert.areSame(65, keyCode);
323
Y.Assert.areSame(obj, thisObj);
324
Y.Assert.areSame("ARG!", arg);
328
suite.add(new Y.Test.Case({
329
name: "node.delegate('key',...)",
334
"test node.delegate('key', fn, '65', filter)": function () {
335
var items = Y.one("#items"),
336
item0 = items.one("#text1"),
337
item1 = items.one("#text2"),
338
item2 = items.one("#area1"),
346
items.delegate("key", function (e) {
347
target.push(e.target);
349
currentTarget.push(e.currentTarget);
350
container.push(e.container);
351
keyCode.push(e.keyCode);
359
Y.ArrayAssert.itemsAreSame([item0, item1], target);
360
Y.ArrayAssert.itemsAreSame(["key", "key"], type);
361
Y.ArrayAssert.itemsAreSame([item0, item1], currentTarget);
362
Y.ArrayAssert.itemsAreSame([65, 65], keyCode);
363
Y.ArrayAssert.itemsAreSame([item0, item1], thisObj);
364
Y.ArrayAssert.itemsAreSame([items, items], container);
367
"test node.delegate('key', fn, '65', filter, thisObj)": function () {
368
var items = Y.one("#items"),
369
item0 = items.one("#text1"),
370
item1 = items.one("#text2"),
371
item2 = items.one("#area1"),
372
obj = { foo: "foo" },
380
items.delegate("key", function (e) {
381
target.push(e.target);
383
currentTarget.push(e.currentTarget);
384
container.push(e.container);
385
keyCode.push(e.keyCode);
387
}, '65', 'input', obj);
393
Y.ArrayAssert.itemsAreSame([item0, item1], target);
394
Y.ArrayAssert.itemsAreSame(["key", "key"], type);
395
Y.ArrayAssert.itemsAreSame([item0, item1], currentTarget);
396
Y.ArrayAssert.itemsAreSame([65, 65], keyCode);
397
Y.ArrayAssert.itemsAreSame([obj, obj], thisObj);
398
Y.ArrayAssert.itemsAreSame([items, items], container);
401
"test node.delegate('key', fn, '65', filter, thisObj, args)": function () {
402
var items = Y.one("#items"),
403
item0 = items.one("#text1"),
404
item1 = items.one("#text2"),
405
item2 = items.one("#area1"),
406
obj = { foo: "foo" },
415
items.delegate("key", function (e, x) {
416
target.push(e.target);
418
currentTarget.push(e.currentTarget);
419
container.push(e.container);
420
keyCode.push(e.keyCode);
423
}, '65', 'input', obj, "ARG!");
429
Y.ArrayAssert.itemsAreSame([item0, item1], target);
430
Y.ArrayAssert.itemsAreSame(["key", "key"], type);
431
Y.ArrayAssert.itemsAreSame([item0, item1], currentTarget);
432
Y.ArrayAssert.itemsAreSame([65, 65], keyCode);
433
Y.ArrayAssert.itemsAreSame([obj, obj], thisObj);
434
Y.ArrayAssert.itemsAreSame(["ARG!", "ARG!"], args);
435
Y.ArrayAssert.itemsAreSame([items, items], container);
439
suite.add(new Y.Test.Case({
440
name: "Y.delegate('key',...)",
445
"test Y.delegate('key', fn, '65', selector, filter)": function () {
446
var items = Y.one("#items"),
447
item0 = items.one("#text1"),
448
item1 = items.one("#text2"),
449
item2 = items.one("#area1"),
457
Y.delegate("key", function (e) {
458
target.push(e.target);
460
currentTarget.push(e.currentTarget);
461
container.push(e.container);
462
keyCode.push(e.keyCode);
464
}, '#items', '65', 'input');
470
Y.ArrayAssert.itemsAreSame([item0, item1], target);
471
Y.ArrayAssert.itemsAreSame(["key", "key"], type);
472
Y.ArrayAssert.itemsAreSame([item0, item1], currentTarget);
473
Y.ArrayAssert.itemsAreSame([65, 65], keyCode);
474
Y.ArrayAssert.itemsAreSame([item0, item1], thisObj);
475
Y.ArrayAssert.itemsAreSame([items, items], container);
478
"test Y.delegate('key', fn, '65', node, filter)": function () {
479
var items = Y.one("#items"),
480
item0 = items.one("#text1"),
481
item1 = items.one("#text2"),
482
item2 = items.one("#area1"),
490
Y.delegate("key", function (e) {
491
target.push(e.target);
493
currentTarget.push(e.currentTarget);
494
container.push(e.container);
495
keyCode.push(e.keyCode);
497
}, items, '65', 'input');
503
Y.ArrayAssert.itemsAreSame([item0, item1], target);
504
Y.ArrayAssert.itemsAreSame(["key", "key"], type);
505
Y.ArrayAssert.itemsAreSame([item0, item1], currentTarget);
506
Y.ArrayAssert.itemsAreSame([65, 65], keyCode);
507
Y.ArrayAssert.itemsAreSame([item0, item1], thisObj);
508
Y.ArrayAssert.itemsAreSame([items, items], container);
511
"test Y.delegate('key', fn, '65', selector, filter, thisObj)": function () {
512
var items = Y.one("#items"),
513
item0 = items.one("#text1"),
514
item1 = items.one("#text2"),
515
item2 = items.one("#area1"),
516
obj = { foo: "foo" },
524
Y.delegate("key", function (e) {
525
target.push(e.target);
527
currentTarget.push(e.currentTarget);
528
container.push(e.container);
529
keyCode.push(e.keyCode);
531
}, '#items', '65', 'input', obj);
537
Y.ArrayAssert.itemsAreSame([item0, item1], target);
538
Y.ArrayAssert.itemsAreSame(["key", "key"], type);
539
Y.ArrayAssert.itemsAreSame([item0, item1], currentTarget);
540
Y.ArrayAssert.itemsAreSame([65, 65], keyCode);
541
Y.ArrayAssert.itemsAreSame([obj, obj], thisObj);
542
Y.ArrayAssert.itemsAreSame([items, items], container);
545
"test Y.delegate('key', fn, '65', selector, filter, thisObj, args)": function () {
546
var items = Y.one("#items"),
547
item0 = items.one("#text1"),
548
item1 = items.one("#text2"),
549
item2 = items.one("#area1"),
550
obj = { foo: "foo" },
559
Y.delegate("key", function (e, x) {
560
target.push(e.target);
562
currentTarget.push(e.currentTarget);
563
container.push(e.container);
564
keyCode.push(e.keyCode);
567
}, '#items', '65', 'input', obj, "ARG!");
573
Y.ArrayAssert.itemsAreSame([item0, item1], target);
574
Y.ArrayAssert.itemsAreSame(["key", "key"], type);
575
Y.ArrayAssert.itemsAreSame([item0, item1], currentTarget);
576
Y.ArrayAssert.itemsAreSame([65, 65], keyCode);
577
Y.ArrayAssert.itemsAreSame([obj, obj], thisObj);
578
Y.ArrayAssert.itemsAreSame(["ARG!", "ARG!"], args);
579
Y.ArrayAssert.itemsAreSame([items, items], container);
584
suite.add(new Y.Test.Case({
585
name: "key spec/filter",
590
"test 'down:65'": function () {
591
var input = Y.one("#text1"),
598
input.on("key", inc, 'down:65');
601
Y.Assert.areSame(1, count);
603
input.key(65, null, null, 'keydown');
604
Y.Assert.areSame(2, count);
606
input.key(65, 65, null, 'keypress');
607
Y.Assert.areSame(2, count);
610
Y.Assert.areSame(2, count);
613
"test 'up:65'": function () {
614
var input = Y.one("#text1"),
621
input.on("key", inc, 'up:65');
624
Y.Assert.areSame(1, count);
626
input.key(65, null, null, 'keyup');
627
Y.Assert.areSame(2, count);
629
input.key(65, 65, null, 'keypress');
630
Y.Assert.areSame(2, count);
633
Y.Assert.areSame(2, count);
636
"test 'press:65'": function () {
637
var input = Y.one("#text1"),
644
input.on("key", inc, 'press:65');
647
Y.Assert.areSame(1, count);
649
input.key(65, null, null, 'keypress');
650
Y.Assert.areSame(2, count);
652
input.key(65, 65, null, 'keyup');
653
Y.Assert.areSame(2, count);
656
Y.Assert.areSame(2, count);
659
"test 'a'": function () {
660
var input = Y.one("#text1"),
667
input.on("key", inc, 'a');
670
Y.Assert.areSame(1, count);
672
input.key(65, null, null, 'keydown');
673
Y.Assert.areSame(1, count);
675
input.key(65, 97, null, 'keypress');
676
Y.Assert.areSame(2, count);
679
Y.Assert.areSame(2, count);
682
"test 'down:a'": function () {
683
var input = Y.one("#text1"),
690
input.on("key", inc, 'down:a');
692
// keydown sends keyCode, which for 'a' is 65, but I can't calculate
693
// the keyCode from a character, only the charCode (97). So none of
694
// these should match.
696
Y.Assert.areSame(0, count);
698
input.key(65, null, null, 'keydown');
699
Y.Assert.areSame(0, count);
701
input.key(65, 97, null, 'keypress');
702
Y.Assert.areSame(0, count);
704
// FIXME: bug confirmation that a different keyCode will trigger the
705
// subscriber (keyCode 97 is NOT 'a' in keydown phase).
707
Y.Assert.areSame(1, count);
710
"test 'up:a'": function () {
711
var input = Y.one("#text1"),
718
input.on("key", inc, 'up:a');
720
// keydown sends keyCode, which for 'a' is 65, but I can't calculate
721
// the keyCode from a character, only the charCode (97). So none of
722
// these should match.
724
Y.Assert.areSame(0, count);
726
input.key(65, null, null, 'keyup');
727
Y.Assert.areSame(0, count);
729
input.key(65, 97, null, 'keypress');
730
Y.Assert.areSame(0, count);
732
// FIXME: bug confirmation that a different keyCode will trigger the
733
// subscriber (keyCode 97 is NOT 'a' in keyup phase).
735
Y.Assert.areSame(1, count);
738
"test 'press:a'": function () {
739
var input = Y.one("#text1"),
746
input.on("key", inc, 'press:a');
749
Y.Assert.areSame(1, count);
751
input.key(65, 97, null, 'keypress');
752
Y.Assert.areSame(2, count);
754
input.key(65, 97, null, 'keyup');
755
Y.Assert.areSame(2, count);
758
Y.Assert.areSame(2, count);
761
"test 'A'": function () {
762
var input = Y.one("#text1"),
769
input.on("key", inc, 'A');
771
input.key(65, 65, { shiftKey: true });
772
Y.Assert.areSame(1, count);
774
input.key(65, 97); // 'a'
775
Y.Assert.areSame(1, count);
777
input.key(65, 65, { shiftKey: true }, 'keypress');
778
Y.Assert.areSame(2, count);
780
input.key(99, 99, { shiftKey: true });
781
Y.Assert.areSame(2, count);
784
"test 'enter', 'esc', 'backspace', 'tab', 'pageup', 'pagedown'": function () {
785
var input = Y.one("#text1"),
800
Y.Object.each(map, function (code, name) {
802
input.on("key", inc, name);
805
Y.Assert.areSame(1, count);
807
// default for named keys is keydown
808
input.key(code, null, null, 'keydown');
809
Y.Assert.areSame(2, count);
811
input.key(code, code, null, 'keypress');
812
Y.Assert.areSame(2, count);
815
Y.Assert.areSame(2, count);
819
"test 'a,b'": function () {
820
var input = Y.one("#text1"),
827
input.on("key", inc, 'a,b');
830
Y.Assert.areSame(1, count);
833
Y.Assert.areSame(2, count);
835
input.key(65, 97, null, 'keypress');
836
Y.Assert.areSame(3, count);
838
input.key(66, null, null, 'keyup');
839
Y.Assert.areSame(3, count);
842
Y.Assert.areSame(3, count);
845
"test '65,b,esc'": function () {
846
var input = Y.one("#text1"),
853
input.on("key", inc, '65,b,esc');
856
Y.Assert.areSame(1, count);
858
// FIXME: I want this to work, but 'esc' triggers keydown subscription,
859
// which breaks the charCode mapping from 'b'.
861
Y.Assert.areSame(1, count);
864
Y.Assert.areSame(2, count);
866
// subscribed to keydown, so this misses.
867
input.key(65, 97, null, 'keypress');
868
Y.Assert.areSame(2, count);
871
input.key(66, null, null, 'keydown');
872
Y.Assert.areSame(2, count);
874
input.key(27, null, null, 'keydown');
875
Y.Assert.areSame(3, count);
878
Y.Assert.areSame(3, count);
881
"test 'unknownKeyName'": function () {
882
var input = Y.one("#text1"),
889
input.on("key", inc, 'ack!');
891
// Uses first character
893
Y.Assert.areSame(1, count);
895
input.key(65, 97, null, 'keypress');
896
Y.Assert.areSame(2, count);
898
input.key(66, null, null, 'keyup');
899
Y.Assert.areSame(2, count);
902
Y.Assert.areSame(2, count);
905
"test '65,unknownKeyName'": function () {
908
"test '65,unknownKeyName+alt'": function () {
911
"test 'press:a,b'": function () {
914
"test 'a+shift'": function () {
915
var input = Y.one("#text1"),
922
input.on("key", inc, 'press:a,b');
925
Y.Assert.areSame(1, count);
928
Y.Assert.areSame(2, count);
930
input.key(65, 97, null, 'keypress');
931
Y.Assert.areSame(3, count);
933
input.key(66, null, null, 'keyup');
934
Y.Assert.areSame(3, count);
937
Y.Assert.areSame(3, count);
940
"test 'enter+ctrl'": function () {
941
var input = Y.one("#text1"),
948
input.on("key", inc, 'enter+ctrl');
951
Y.Assert.areSame(0, count);
953
input.key(13, null, { ctrlKey: true });
954
Y.Assert.areSame(1, count);
956
input.key(13, 13, { ctrlKey: true }, 'keypress');
957
Y.Assert.areSame(1, count);
959
input.key(13, null, { ctrlKey: true }, 'keydown');
960
Y.Assert.areSame(2, count);
963
Y.Assert.areSame(2, count);
966
"test 'up:a+alt'": function () {
969
"test 'a,b+shift+meta'": function () {
970
var input = Y.one("#text1"),
977
input.on("key", inc, 'a,b+shift+meta');
980
Y.Assert.areSame(0, count);
982
input.key(65, 97, { ctrlKey: true });
983
Y.Assert.areSame(0, count);
985
input.key(65, 65, { ctrlKey: true, shiftKey: true });
986
Y.Assert.areSame(0, count);
988
input.key(65, 65, { metaKey: true, shiftKey: true });
989
Y.Assert.areSame(1, count);
991
input.key(65, 65, { ctrlKey: true, metaKey: true, shiftKey: true });
992
Y.Assert.areSame(2, count);
994
input.key(66, 66, { metaKey: true, shiftKey: true });
995
Y.Assert.areSame(3, count);
997
input.key(65, 65, { metaKey: true, shiftKey: true }, 'keypress');
998
Y.Assert.areSame(4, count);
1000
input.key(65, null, { metaKey: true, shiftKey: true }, 'keyup');
1001
Y.Assert.areSame(4, count);
1003
input.key(99, 99, { metaKey: true, shiftKey: true });
1004
Y.Assert.areSame(4, count);
1007
"test spec with spaces 'down:65, 66, 67'": function () {
1008
var input = Y.one("#text1"),
1015
input.on("key", inc, 'down:65, 66, 67');
1018
Y.Assert.areSame(1, count);
1021
Y.Assert.areSame(2, count);
1024
Y.Assert.areSame(3, count);
1026
input.key(65, null, null, 'keyup');
1027
Y.Assert.areSame(3, count);
1029
input.key(65, null, null, 'keydown');
1030
Y.Assert.areSame(4, count);
1033
"test spec with no keyCodes 'down:'": function () {
1034
var input = Y.one("#text1"),
1041
input.on("key", inc, 'down:');
1044
Y.Assert.areSame(1, count);
1047
Y.Assert.areSame(2, count);
1050
Y.Assert.areSame(3, count);
1052
input.key(65, null, null, 'keyup');
1053
Y.Assert.areSame(3, count);
1055
input.key(40, null, null, 'keydown');
1056
Y.Assert.areSame(4, count);
1059
"test spec with only modifiers '+ctrl+shift'": function () {
1060
var input = Y.one("#text1"),
1067
input.on("key", inc, '+ctrl+shift');
1070
Y.Assert.areSame(0, count);
1072
input.key(65, 65, { shiftKey: true });
1073
Y.Assert.areSame(0, count);
1075
input.key(65, 97, { ctrlKey: true });
1076
Y.Assert.areSame(0, count);
1078
input.key(65, 65, { shiftKey: true, ctrlKey: true });
1079
Y.Assert.areSame(1, count);
1081
input.key(65, 65, { shiftKey: true, ctrlKey: true, metaKey: true });
1082
Y.Assert.areSame(2, count);
1084
input.key(65, null, { shiftKey: true, ctrlKey: true }, 'keyup');
1085
Y.Assert.areSame(2, count);
1087
input.key(65, 65, { shiftKey: true, ctrlKey: true }, 'keypress');
1088
Y.Assert.areSame(3, count);
1092
suite.add(new Y.Test.Case({
1098
"test node.on() + node.detach()": function () {
1101
"test Y.on() + node.detach()": function () {
1104
"test node.on() + handle.detach()": function () {
1107
"test node.on('cat|key',...) + node.detach('cat|...')": function () {
1110
"test node.delegate() + node.detach()": function () {
1113
"test node.delegate() + handle.detach()": function () {
1117
Y.Test.Runner.add(suite);
1120
}, '@VERSION@' ,{requires:['event-key', 'test']});