summaryrefslogtreecommitdiff
path: root/misc/openlayers/tests/Events/buttonclick.html
diff options
context:
space:
mode:
Diffstat (limited to 'misc/openlayers/tests/Events/buttonclick.html')
-rw-r--r--misc/openlayers/tests/Events/buttonclick.html214
1 files changed, 214 insertions, 0 deletions
diff --git a/misc/openlayers/tests/Events/buttonclick.html b/misc/openlayers/tests/Events/buttonclick.html
new file mode 100644
index 0000000..dadbd3a
--- /dev/null
+++ b/misc/openlayers/tests/Events/buttonclick.html
@@ -0,0 +1,214 @@
+<html>
+<head>
+ <script src="../OLLoader.js"></script>
+ <script type="text/javascript">
+
+ var log, buttonClick, events, element, button;
+ function init() {
+ element = document.getElementById("map");
+ button = document.getElementById("button");
+ }
+ function trigger(evt) {
+ OpenLayers.Util.applyDefaults(evt, {
+ button: 1,
+ target: button
+ });
+ events.handleBrowserEvent(evt);
+ }
+ function logEvent(evt) {
+ log.push(evt);
+ }
+
+ function test_ButtonClick(t) {
+ t.plan(1);
+ events = new OpenLayers.Events({}, element);
+ buttonClick = new OpenLayers.Events.buttonclick(events);
+ t.ok(buttonClick.target === events, "target set from constructor arg");
+ buttonClick.destroy();
+ events.destroy();
+ }
+
+ function test_getPressedButton(t) {
+ t.plan(4);
+
+ // set up
+
+ events = new OpenLayers.Events({}, element);
+ buttonClick = new OpenLayers.Events.buttonclick(events);
+
+ var button = document.createElement('button'),
+ span1 = document.createElement('span'),
+ span2 = document.createElement('span'),
+ span3 = document.createElement('span');
+ button.className = 'olButton';
+ button.appendChild(span1);
+ span1.appendChild(span2);
+ span2.appendChild(span3);
+
+ t.ok(buttonClick.getPressedButton(button) === button,
+ 'getPressedButton returns button when element is button');
+ t.ok(buttonClick.getPressedButton(span1) === button,
+ 'getPressedButton returns button when element is button descendant level 1');
+ t.ok(buttonClick.getPressedButton(span2) === button,
+ 'getPressedButton returns button when element is button descendant level 2');
+ t.eq(buttonClick.getPressedButton(span3), undefined,
+ 'getPressedButton returns undefined when element is button descendant level 3');
+
+ // test
+
+
+ // tear down
+
+ buttonClick.destroy();
+ events.destroy();
+ }
+
+ function test_ignore(t) {
+ t.plan(5);
+
+ // set up
+
+ events = new OpenLayers.Events({}, element);
+ buttonClick = new OpenLayers.Events.buttonclick(events);
+
+ var link = document.createElement('a'),
+ span1 = document.createElement('span'),
+ span2 = document.createElement('span'),
+ span3 = document.createElement('span');
+ link.appendChild(span1);
+ span1.appendChild(span2);
+ span2.appendChild(span3);
+
+ t.eq(buttonClick.ignore(link), true,
+ 'ignore returns true when element is a link');
+ t.eq(buttonClick.ignore(span1), true,
+ 'ignore returns true when element is link descendant level 1');
+ t.eq(buttonClick.ignore(span2), true,
+ 'ignore returns true when element is link descendant level 2');
+ t.eq(buttonClick.ignore(span3), false,
+ 'ignore returns false when element is link descendant level 3');
+ t.eq(buttonClick.ignore(element), false,
+ 'ignore returns false when element is not a link');
+
+
+ // tear down
+
+ buttonClick.destroy();
+ events.destroy();
+ }
+
+ function test_ButtonClick_buttonClick(t) {
+ t.plan(27);
+ events = new OpenLayers.Events({}, element);
+ events.on({
+ "buttonclick": logEvent,
+ "mousedown": logEvent,
+ "mouseup": logEvent,
+ "click": logEvent,
+ "dblclick": logEvent,
+ "touchstart": logEvent,
+ "touchend": logEvent,
+ "keydown": logEvent
+ });
+ buttonClick = events.extensions["buttonclick"];
+
+ // a complete click
+ log = [];
+ trigger({type: "mousedown"});
+ trigger({type: "mouseup"});
+ t.eq(log.length, 1, "one event fired for mousedown-mouseup");
+ t.eq(log[0].type, "buttonclick", "buttonclick event fired");
+
+ // a complete tap
+ log = [];
+ trigger({type: "touchstart"});
+ trigger({type: "touchend"});
+ t.eq(log.length, 1, "one event fired for touchstart-touchend");
+ t.eq(log[0].type, "buttonclick", "buttonclick event fired");
+
+ // mouse sequence started on button
+ log = [];
+ trigger({type: "mousedown"});
+ trigger({type: "mouseup", target: element});
+ t.eq(log.length, 1, "one event fired for mousedown-(leave)-mouseup");
+ t.eq(log[0].type, "mouseup", "mouseup event goes through when sequence not finished on button");
+
+ // touch sequence started on button
+ log = [];
+ trigger({type: "touchstart"});
+ trigger({type: "touchmove"});
+ trigger({type: "touchend"});
+ t.eq(log.length, 1, "one event fired for touchstart-(leave)-touchend");
+ t.eq(log[0].type, "touchend", "touchend event goes through when sequence not finished on button");
+
+ // mouse sequence finished on button
+ log = [];
+ trigger({type: "mousedown", target: element});
+ trigger({type: "mouseup"});
+ t.eq(log.length, 2, "two event fired for mousedown-(enter)-mouseup");
+ t.eq(log[0].type, "mousedown", "mousedown unrelated to button goes through");
+ t.eq(log[1].type, "mouseup", "mouseup goes through when sequence started outside button");
+
+ // touch sequence finished on button
+ log = [];
+ trigger({type: "touchstart", target: element});
+ trigger({type: "touchend"});
+ t.eq(log.length, 2, "two event fired for touchstart-(enter)-touchend");
+ t.eq(log[0].type, "touchstart", "touchstart unrelated to button goes through");
+ t.eq(log[1].type, "touchend", "touchend goes through when sequence started outside button");
+
+ // dblclick
+ log = [];
+ trigger({type: "mousedown"});
+ trigger({type: "mouseup"});
+ trigger({type: "click"});
+ trigger({type: "mousedown"});
+ trigger({type: "mouseup"});
+ trigger({type: "click"});
+ trigger({type: "dblclick"});
+ t.eq(log.length, 2, "two events fired for doubleclick");
+ t.eq(log[0].type, "buttonclick", "buttonclick for 1st click");
+ t.eq(log[1].type, "buttonclick", "buttonclick for 2nd click");
+
+ // dblclick - IE
+ log = [];
+ trigger({type: "mousedown"});
+ trigger({type: "mouseup"});
+ trigger({type: "mouseup"});
+ trigger({type: "dblclick"});
+ t.eq(log.length, 2, "two events fired for dblclick in IE");
+ t.eq(log[0].type, "buttonclick", "buttonclick for 1st click in IE");
+ t.eq(log[1].type, "buttonclick", "buttonclick for 2nd click IE");
+
+ // rightclick
+ log = [];
+ trigger({type: "mousedown", button: 2});
+ trigger({type: "mouseup", button: 2});
+ t.eq(log.length, 2, "two events fired for rightclick");
+ t.eq(log[0].type, "mousedown", "mousedown from rightclick goes through");
+ t.eq(log[1].type, "mouseup", "mouseup from rightclick goes through");
+
+ // keydown RETURN
+ log = [];
+ trigger({type: "keydown", keyCode: OpenLayers.Event.KEY_RETURN});
+ trigger({type: "click"});
+ t.eq(log.length, 1, "one event fired for RETURN keydown");
+ t.eq(log[0].type, "buttonclick", "buttonclick for RETURN keydown");
+
+ // keydown SPACE
+ log = [];
+ trigger({type: "keydown", keyCode: OpenLayers.Event.KEY_SPACE});
+ trigger({type: "click"});
+ t.eq(log.length, 1, "one event fired for SPACE keydown");
+ t.eq(log[0].type, "buttonclick", "buttonclick for SPACE keydown");
+ }
+ </script>
+</head>
+<body onload="init()">
+ <div id="map" style="width: 600px; height: 300px;">
+ <div id="button" class="olButton">
+ <img class="olAlphaImg">
+ </div>
+ </div>
+</body>
+</html>