forked from cowboy/jquery-outside-events
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathunit.js
132 lines (103 loc) · 5.16 KB
/
unit.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Not sure why this isn't set by default in qunit.js..
QUnit.jsDump.HTML = false;
$(function(){ // START CLOSURE
$('#jq_version').html( $.fn.jquery );
var events = [
// Default "outside" events.
{ outside: 'clickoutside', originating: 'click' },
{ outside: 'dblclickoutside', originating: 'dblclick' },
{ outside: 'focusoutside', originating: 'focusin' },
{ outside: 'bluroutside', originating: 'focusout' },
{ outside: 'mousemoveoutside', originating: 'mousemove' },
{ outside: 'mousedownoutside', originating: 'mousedown' },
{ outside: 'mouseupoutside', originating: 'mouseup' },
{ outside: 'mouseoveroutside', originating: 'mouseover' },
{ outside: 'mouseoutoutside', originating: 'mouseout' },
{ outside: 'keydownoutside', originating: 'keydown' },
{ outside: 'keypressoutside', originating: 'keypress' },
{ outside: 'keyupoutside', originating: 'keyup' },
{ outside: 'changeoutside', originating: 'change' },
{ outside: 'selectoutside', originating: 'select' },
{ outside: 'submitoutside', originating: 'submit' },
// A custom "outside" event.
{ outside: 'super-duper-awesome-outside', originating: 'omg-ponies' }
];
test( '$.addOutsideEvent', function() {
expect( 1 );
$.addOutsideEvent( 'omg-ponies', 'super-duper-awesome-outside' );
ok( !!$.event.special[ 'super-duper-awesome-outside' ], 'custom super-duper-awesome-outside event has been initialized' );
});
$.map( events, function(e){
var event_name = e.outside,
originating_event_name = e.originating;
test( event_name, function() {
expect( 21 );
var div = $('<div><div id="a"><div id="a1"></div></div><div id="b"><div id="b1"><div id="b2"></div></div></div><div id="c"></div></div>').appendTo( 'body' ),
bound = div.find('*'),
a = $('#a')[0],
a1 = $('#a1')[0],
b = $('#b')[0],
b1 = $('#b1')[0],
b2 = $('#b2')[0],
c = $('#c')[0],
body = $('body')[0],
elems,
targets;
ok( $.data( document, 'events' ) == undefined, event_name + '-specific ' + originating_event_name + ' event should not be bound to document yet' );
bound.bind( event_name, function(e){
elems.push( this );
targets.push( e.target );
});
equals( $.data( document, 'events' )[ originating_event_name ][0].namespace, event_name +'-special-event', event_name + '-specific ' + originating_event_name + ' event should be bound to document' );
elems = [];
targets = [];
$(a).trigger( originating_event_name );
same( targets, [a,a,a,a,a], 'target should be the ' + originating_event_name + ' event target element' );
same( elems, [a1,b,b1,b2,c], 'event should have been triggered on these elements' );
elems = [];
targets = [];
$(a1).trigger( originating_event_name );
same( targets, [a1,a1,a1,a1], 'target should be the ' + originating_event_name + ' event target element' );
same( elems, [b,b1,b2,c], 'event should have been triggered on these elements' );
elems = [];
targets = [];
$(b).trigger( originating_event_name );
same( targets, [b,b,b,b,b], 'target should be the ' + originating_event_name + ' event target element' );
same( elems, [a,a1,b1,b2,c], 'event should have been triggered on these elements' );
elems = [];
targets = [];
$(b1).trigger( originating_event_name );
same( targets, [b1,b1,b1,b1], 'target should be the ' + originating_event_name + ' event target element' );
same( elems, [a,a1,b2,c], 'event should have been triggered on these elements' );
elems = [];
targets = [];
$(b2).trigger( originating_event_name );
same( targets, [b2,b2,b2], 'target should be the ' + originating_event_name + ' event target element' );
same( elems, [a,a1,c], 'event should have been triggered on these elements' );
elems = [];
targets = [];
$(c).trigger( originating_event_name );
same( targets, [c,c,c,c,c], 'target should be the ' + originating_event_name + ' event target element' );
same( elems, [a,a1,b,b1,b2], 'event should have been triggered on these elements' );
elems = [];
targets = [];
$(body).trigger( originating_event_name );
same( targets, [body,body,body,body,body,body], 'target should be the ' + originating_event_name + ' event target element' );
same( elems, [a,a1,b,b1,b2,c], 'event should have been triggered on these elements' );
$(a).add(a1).unbind( event_name );
elems = [];
targets = [];
$(body).trigger( originating_event_name );
same( targets, [body,body,body,body], 'target should be the ' + originating_event_name + ' event target element' );
same( elems, [b,b1,b2,c], 'event should have been triggered on these elements' );
bound.unbind( event_name );
ok( $.data( document, 'events' ) == undefined, event_name +'-specific ' + originating_event_name + ' event should no longer be bound to document' );
elems = [];
targets = [];
$(body).trigger( originating_event_name );
same( targets, [], 'event should not trigger' );
same( elems, [], 'event should not trigger' );
div.remove();
});
});
}); // END CLOSURE