1 | <html> |
---|
2 | <head> |
---|
3 | <script src="../OLLoader.js"></script> |
---|
4 | <script type="text/javascript"> |
---|
5 | |
---|
6 | var log, buttonClick, events, element, button; |
---|
7 | function init() { |
---|
8 | element = document.getElementById("map"); |
---|
9 | button = document.getElementById("button"); |
---|
10 | } |
---|
11 | function trigger(evt) { |
---|
12 | OpenLayers.Util.applyDefaults(evt, { |
---|
13 | button: 1, |
---|
14 | target: button |
---|
15 | }); |
---|
16 | events.handleBrowserEvent(evt); |
---|
17 | } |
---|
18 | function logEvent(evt) { |
---|
19 | log.push(evt); |
---|
20 | } |
---|
21 | |
---|
22 | function test_ButtonClick(t) { |
---|
23 | t.plan(1); |
---|
24 | events = new OpenLayers.Events({}, element); |
---|
25 | buttonClick = new OpenLayers.Events.buttonclick(events); |
---|
26 | t.ok(buttonClick.target === events, "target set from constructor arg"); |
---|
27 | buttonClick.destroy(); |
---|
28 | events.destroy(); |
---|
29 | } |
---|
30 | |
---|
31 | function test_getPressedButton(t) { |
---|
32 | t.plan(4); |
---|
33 | |
---|
34 | // set up |
---|
35 | |
---|
36 | events = new OpenLayers.Events({}, element); |
---|
37 | buttonClick = new OpenLayers.Events.buttonclick(events); |
---|
38 | |
---|
39 | var button = document.createElement('button'), |
---|
40 | span1 = document.createElement('span'), |
---|
41 | span2 = document.createElement('span'), |
---|
42 | span3 = document.createElement('span'); |
---|
43 | button.className = 'olButton'; |
---|
44 | button.appendChild(span1); |
---|
45 | span1.appendChild(span2); |
---|
46 | span2.appendChild(span3); |
---|
47 | |
---|
48 | t.ok(buttonClick.getPressedButton(button) === button, |
---|
49 | 'getPressedButton returns button when element is button'); |
---|
50 | t.ok(buttonClick.getPressedButton(span1) === button, |
---|
51 | 'getPressedButton returns button when element is button descendant level 1'); |
---|
52 | t.ok(buttonClick.getPressedButton(span2) === button, |
---|
53 | 'getPressedButton returns button when element is button descendant level 2'); |
---|
54 | t.eq(buttonClick.getPressedButton(span3), undefined, |
---|
55 | 'getPressedButton returns undefined when element is button descendant level 3'); |
---|
56 | |
---|
57 | // test |
---|
58 | |
---|
59 | |
---|
60 | // tear down |
---|
61 | |
---|
62 | buttonClick.destroy(); |
---|
63 | events.destroy(); |
---|
64 | } |
---|
65 | |
---|
66 | function test_ButtonClick_buttonClick(t) { |
---|
67 | t.plan(27); |
---|
68 | events = new OpenLayers.Events({}, element); |
---|
69 | events.on({ |
---|
70 | "buttonclick": logEvent, |
---|
71 | "mousedown": logEvent, |
---|
72 | "mouseup": logEvent, |
---|
73 | "click": logEvent, |
---|
74 | "dblclick": logEvent, |
---|
75 | "touchstart": logEvent, |
---|
76 | "touchend": logEvent, |
---|
77 | "keydown": logEvent |
---|
78 | }); |
---|
79 | buttonClick = events.extensions["buttonclick"]; |
---|
80 | |
---|
81 | // a complete click |
---|
82 | log = []; |
---|
83 | trigger({type: "mousedown"}); |
---|
84 | trigger({type: "mouseup"}); |
---|
85 | t.eq(log.length, 1, "one event fired for mousedown-mouseup"); |
---|
86 | t.eq(log[0].type, "buttonclick", "buttonclick event fired"); |
---|
87 | |
---|
88 | // a complete tap |
---|
89 | log = []; |
---|
90 | trigger({type: "touchstart"}); |
---|
91 | trigger({type: "touchend"}); |
---|
92 | t.eq(log.length, 1, "one event fired for touchstart-touchend"); |
---|
93 | t.eq(log[0].type, "buttonclick", "buttonclick event fired"); |
---|
94 | |
---|
95 | // mouse sequence started on button |
---|
96 | log = []; |
---|
97 | trigger({type: "mousedown"}); |
---|
98 | trigger({type: "mouseup", target: element}); |
---|
99 | t.eq(log.length, 1, "one event fired for mousedown-(leave)-mouseup"); |
---|
100 | t.eq(log[0].type, "mouseup", "mouseup event goes through when sequence not finished on button"); |
---|
101 | |
---|
102 | // touch sequence started on button |
---|
103 | log = []; |
---|
104 | trigger({type: "touchstart"}); |
---|
105 | trigger({type: "touchmove"}); |
---|
106 | trigger({type: "touchend"}); |
---|
107 | t.eq(log.length, 1, "one event fired for touchstart-(leave)-touchend"); |
---|
108 | t.eq(log[0].type, "touchend", "touchend event goes through when sequence not finished on button"); |
---|
109 | |
---|
110 | // mouse sequence finished on button |
---|
111 | log = []; |
---|
112 | trigger({type: "mousedown", target: element}); |
---|
113 | trigger({type: "mouseup"}); |
---|
114 | t.eq(log.length, 2, "two event fired for mousedown-(enter)-mouseup"); |
---|
115 | t.eq(log[0].type, "mousedown", "mousedown unrelated to button goes through"); |
---|
116 | t.eq(log[1].type, "mouseup", "mouseup goes through when sequence started outside button"); |
---|
117 | |
---|
118 | // touch sequence finished on button |
---|
119 | log = []; |
---|
120 | trigger({type: "touchstart", target: element}); |
---|
121 | trigger({type: "touchend"}); |
---|
122 | t.eq(log.length, 2, "two event fired for touchstart-(enter)-touchend"); |
---|
123 | t.eq(log[0].type, "touchstart", "touchstart unrelated to button goes through"); |
---|
124 | t.eq(log[1].type, "touchend", "touchend goes through when sequence started outside button"); |
---|
125 | |
---|
126 | // dblclick |
---|
127 | log = []; |
---|
128 | trigger({type: "mousedown"}); |
---|
129 | trigger({type: "mouseup"}); |
---|
130 | trigger({type: "click"}); |
---|
131 | trigger({type: "mousedown"}); |
---|
132 | trigger({type: "mouseup"}); |
---|
133 | trigger({type: "click"}); |
---|
134 | trigger({type: "dblclick"}); |
---|
135 | t.eq(log.length, 2, "two events fired for doubleclick"); |
---|
136 | t.eq(log[0].type, "buttonclick", "buttonclick for 1st click"); |
---|
137 | t.eq(log[1].type, "buttonclick", "buttonclick for 2nd click"); |
---|
138 | |
---|
139 | // dblclick - IE |
---|
140 | log = []; |
---|
141 | trigger({type: "mousedown"}); |
---|
142 | trigger({type: "mouseup"}); |
---|
143 | trigger({type: "mouseup"}); |
---|
144 | trigger({type: "dblclick"}); |
---|
145 | t.eq(log.length, 2, "two events fired for dblclick in IE"); |
---|
146 | t.eq(log[0].type, "buttonclick", "buttonclick for 1st click in IE"); |
---|
147 | t.eq(log[1].type, "buttonclick", "buttonclick for 2nd click IE"); |
---|
148 | |
---|
149 | // rightclick |
---|
150 | log = []; |
---|
151 | trigger({type: "mousedown", button: 2}); |
---|
152 | trigger({type: "mouseup", button: 2}); |
---|
153 | t.eq(log.length, 2, "two events fired for rightclick"); |
---|
154 | t.eq(log[0].type, "mousedown", "mousedown from rightclick goes through"); |
---|
155 | t.eq(log[1].type, "mouseup", "mouseup from rightclick goes through"); |
---|
156 | |
---|
157 | // keydown RETURN |
---|
158 | log = []; |
---|
159 | trigger({type: "keydown", keyCode: OpenLayers.Event.KEY_RETURN}); |
---|
160 | trigger({type: "click"}); |
---|
161 | t.eq(log.length, 1, "one event fired for RETURN keydown"); |
---|
162 | t.eq(log[0].type, "buttonclick", "buttonclick for RETURN keydown"); |
---|
163 | |
---|
164 | // keydown SPACE |
---|
165 | log = []; |
---|
166 | trigger({type: "keydown", keyCode: OpenLayers.Event.KEY_SPACE}); |
---|
167 | trigger({type: "click"}); |
---|
168 | t.eq(log.length, 1, "one event fired for SPACE keydown"); |
---|
169 | t.eq(log[0].type, "buttonclick", "buttonclick for SPACE keydown"); |
---|
170 | } |
---|
171 | </script> |
---|
172 | </head> |
---|
173 | <body onload="init()"> |
---|
174 | <div id="map" style="width: 600px; height: 300px;"> |
---|
175 | <div id="button" class="olButton"> |
---|
176 | <img class="olAlphaImg"> |
---|
177 | </div> |
---|
178 | </div> |
---|
179 | </body> |
---|
180 | </html> |
---|