diff options
Diffstat (limited to 'misc/openlayers/tests/Control/Measure.html')
-rw-r--r-- | misc/openlayers/tests/Control/Measure.html | 386 |
1 files changed, 386 insertions, 0 deletions
diff --git a/misc/openlayers/tests/Control/Measure.html b/misc/openlayers/tests/Control/Measure.html new file mode 100644 index 0000000..ee6d192 --- /dev/null +++ b/misc/openlayers/tests/Control/Measure.html @@ -0,0 +1,386 @@ +<html> +<head> + <script src="../OLLoader.js"></script> + <script type="text/javascript"> + + function test_initialize(t) { + + t.plan(1); + + var map = new OpenLayers.Map("map"); + var control = new OpenLayers.Control.Measure( + OpenLayers.Handler.Path, {persist: true} + ); + map.addControl(control); + + t.eq(control.persist, true, "passing persist to constructor sets persist on handler"); + + map.destroy(); + + } + + function test_cancel(t) { + + t.plan(4); + + var map = new OpenLayers.Map("map"); + var layer = new OpenLayers.Layer(null, { + isBaseLayer: true + }); + map.addLayer(layer); + map.zoomToMaxExtent(); + + var control = new OpenLayers.Control.Measure( + OpenLayers.Handler.Path, {persist: true} + ); + map.addControl(control); + + control.activate(); + + try { + control.cancel(); + t.ok(true, "calling cancel before drawing works"); + } catch(err) { + t.fail("calling cancel before drawing causes trouble: " + err); + } + t.eq(control.active, true, "control remains active after cancel"); + + // create a simple measurement + function trigger(type, x, y) { + map.events.triggerEvent(type, { + xy: new OpenLayers.Pixel(x, y) + }) + }; + + trigger("mousemove", 0, 0); + // keep a reference to the line being drawn + var line = control.handler.line; + trigger("mousedown", 0, 0); + trigger("mouseup", 0, 0); + trigger("mousemove", 10, 10); + trigger("mousedown", 10, 10); + trigger("mouseup", 10, 10); + trigger("dblclick", 10, 10); + + // the geometry is finalized, we first confirm that it is persisted + t.ok(line.layer === control.handler.layer, "feature persists"); + + // cancel and see that sketch is gone + control.cancel(); + t.eq(line.layer, null, "feature is gone after cancel"); + + map.destroy(); + } + + // test for <http://trac.openlayers.org/ticket/2691> + function test_partial(t) { + + t.plan(28); + + var map = new OpenLayers.Map({ + div: "map", + units: "m", + resolutions: [1], + layers: [ + new OpenLayers.Layer(null, { + isBaseLayer: true + }) + ], + center: new OpenLayers.LonLat(0, 0) + }); + + var log = []; + var control = new OpenLayers.Control.Measure( + OpenLayers.Handler.Path, {persist: true, + eventListeners: { + measurepartial: function(evt) { + log.push(evt); + }, + measure: function(evt){ + log.push(evt); + } + }, + handlerOptions: { + pixelTolerance: 0, + dblclickTolerance: 0 + } + } + ); + map.addControl(control); + control.activate(); + + + // convenience function to trigger mouse events + function trigger(type, x, y) { + map.events.triggerEvent(type, { + xy: new OpenLayers.Pixel(x, y) + }) + }; + + // delay in seconds + var delay = control.partialDelay / 1000; + + // establish first point + trigger("mousemove", 0, 0); + trigger("mousedown", 0, 0); + trigger("mouseup", 0, 0); + + + // a) move 10 pixels and click + trigger("mousemove", 0, 10); + trigger("mousedown", 0, 10); + trigger("mouseup", 0, 10); + + // confirm measurepartial is not fired before delay + t.eq(log.length, 0, "a) no event fired yet") + + t.delay_call( + // wait for delay then confirm event was logged + delay, function() { + t.eq(log.length, 1, "a) event logged") + t.eq(log[0] && log[0].type, "measurepartial", "a) event logged"); + t.eq(log[0] && log[0].measure, 10, "a) correct measure"); + + // b) move 10 pixels and click + trigger("mousemove", 0, 20); + trigger("mousedown", 0, 20); + trigger("mouseup", 0, 20); + + // confirm measurepartial is not fired before delay + t.eq(log.length, 1, "b) no event fired yet") + + }, + delay, function() { + t.eq(log.length, 2, "b) event logged"); + t.eq(log[1] && log[1].type, "measurepartial", "b) correct type"); + t.eq(log[1] && log[1].measure, 20, "b) correct measure"); + + // c) move 10 pixels and click + trigger("mousemove", 0, 30); + trigger("mousedown", 0, 30); + trigger("mouseup", 0, 30); + }, + // wait for half delay and confirm event not logged + delay / 2, function() { + // confirm measurepartial is not fired before delay + t.eq(log.length, 2, "c) no event fired yet") + }, + // wait for rest of delay and confirm event logged + delay / 2, function() { + t.eq(log.length, 3, "c) event logged"); + t.eq(log[2] && log[2].type, "measurepartial", "c) correct type"); + t.eq(log[2] && log[2].measure, 30, "c) correct measure"); + + // d) move 10 pixels and click + trigger("mousemove", 0, 40); + trigger("mousedown", 0, 40); + trigger("mouseup", 0, 40); + + // confirm measurepartial is not fired before delay + t.eq(log.length, 3, "d) no event fired yet") + + // e) double click to finish + trigger("dblclick", 0, 40); + + t.eq(log.length, 4, "e) event logged"); + t.eq(log[3] && log[3].type, "measure", "e) correct type"); + t.eq(log[3] && log[3].measure, 40, "e) correct measure"); + }, + // wait for rest of delay and confirm no measurepartial logged + delay, function() { + // confirm measurepartial is not fired after dblclick + t.eq(log.length, 4, "e) no additional event fired"); + + // change to freehand mode and confirm synchronous event dispatch + control.handler.freehand = true; + // clear log + log = []; + + // f) establish first freehand point + trigger("mousemove", 0, 0); + trigger("mousedown", 0, 0); + t.eq(log.length, 0, "f) no event fired yet") + + // g) move 10 pixels + trigger("mousemove", 10, 0); + + t.eq(log.length, 1, "g) event logged"); + t.eq(log[0] && log[0].type, "measurepartial", "g) correct type"); + t.eq(log[0] && log[0].measure, 10, "g) correct measure"); + + // h) move 10 pixels + trigger("mousemove", 20, 0); + + t.eq(log.length, 2, "h) event logged"); + t.eq(log[1] && log[1].type, "measurepartial", "h) correct type"); + t.eq(log[1] && log[1].measure, 20, "h) correct measure"); + + // i) mouse up to finish + trigger("mouseup", 20, 0); + + t.eq(log.length, 3, "i) event logged"); + t.eq(log[2] && log[2].type, "measure", "i) correct type"); + t.eq(log[2] && log[2].measure, 20, "i) correct measure"); + + // j) clean up + log = []; + map.destroy(); + }, + // wait for delay and confirm event not logged + delay, function() { + t.eq(log.length, 0, "j) no event fired after destroy"); + } + ); + + } + + function test_immediate(t) { + t.plan(32); + + var map = new OpenLayers.Map({ + div: "map", + units: "m", + resolutions: [1], + layers: [ + new OpenLayers.Layer(null, { + isBaseLayer: true + }) + ], + center: new OpenLayers.LonLat(0, 0) + }); + + var log = []; + var control = new OpenLayers.Control.Measure( + OpenLayers.Handler.Path, { + persist: true, + immediate: true, + eventListeners: { + measurepartial: function(evt) { + log.push(evt); + }, + measure: function(evt){ + log.push(evt); + } + }, + handlerOptions: { + pixelTolerance: 0, + dblclickTolerance: 0 + } + } + ); + map.addControl(control); + control.activate(); + + // convenience function to trigger mouse events + function trigger(type, x, y) { + map.events.triggerEvent(type, { + xy: new OpenLayers.Pixel(x, y) + }) + }; + + // delay in seconds + var delay = control.partialDelay / 1000; + + // a) establish first point + trigger("mousemove", 0, 0); + trigger("mousedown", 0, 0); + trigger("mouseup", 0, 0); + + // move 10 pixels + trigger("mousemove", 0, 10); + + t.eq(log.length, 1, "a) has fired an event"); + + t.delay_call( + delay, function() { + // confirm measurepartial is fired + t.eq(log.length, 1, "a) one event logged"); + t.ok(log[0] && log[0].type == "measurepartial", "a) correct type"); + // mousemove within the partialDelay fires no event, so the + // measure below is the one of the initial point + t.eq(log[0]?log[0].measure:-1 , 10, "a) correct measure"); + + // b) move 10 pixels + trigger("mousemove", 0, 20); + // c) move 10 pixels again + trigger("mousemove", 0, 30); + + // confirm measurepartial is fired 2 times + t.eq(log.length, 3, "b) event logged"); + t.eq(log[1] && log[1].type, "measurepartial", "b) correct type"); + t.eq(log[1] && log[1].measure, 20, "b) correct measure"); + t.eq(log[2] && log[2].type, "measurepartial", "c) correct type"); + t.eq(log[2] && log[2].measure, 30, "c) correct measure"); + + // d) switch immediate measurement off + control.setImmediate(false); + t.eq(control.immediate, false, "d) immediate is false"); + + // e) move 10 pixels and click + trigger("mousemove", 0, 40); + trigger("mousedown", 0, 40); + trigger("mouseup", 0, 40); + // confirm measurepartial is not fired before delay + t.eq(log.length, 3, "e) no event fired yet") + }, + // wait for delay then confirm event was logged + delay, function() { + t.eq(log.length, 4, "e) event logged") + t.ok(log[3] && log[3].type == "measurepartial", "e) correct type"); + t.ok(log[3] && log[3].measure == 40, "e) correct measure"); + + // f) switch immediate measurement on + control.setImmediate(true); + t.eq(control.immediate, true, "f) immediate is true"); + + // g) move 10 pixels + trigger("mousemove", 0, 50); + }, + delay, function() { + t.eq(log.length, 5, "g) event logged"); + t.ok(log[4] && log[4].type == "measurepartial", "g) correct type"); + t.ok(log[4] && log[4].measure == 50, "g) correct measure"); + + // h) move 10 pixels + trigger("mousemove", 0, 60); + + t.eq(log.length, 6, "h) event logged"); + t.ok(log[5] && log[5].type == "measurepartial", "h) correct type"); + t.ok(log[5] && log[5].measure == 60, "h) correct measure"); + + // i) double click to finish + trigger("mousedown", 0, 60); + t.eq(log.length, 7, "i) event logged"); + t.eq(log[6] && log[6].type, "measurepartial", "i) correct type"); + t.eq(log[6] && log[6].measure, 60, "i) correct measure"); + trigger("mouseup", 0, 60); + t.eq(log.length, 7, "i) no event fired yet"); + }, + delay, function() { + t.eq(log.length, 8, "j) event logged"); + t.eq(log[7] && log[7].type, "measurepartial", "j) correct type"); + t.eq(log[7] && log[7].measure, 60, "j) correct measure"); + + trigger("dblclick", 0, 60); + t.eq(log.length, 9, "k) event logged"); + t.eq(log[8] && log[8].type, "measure", "k) correct type"); + t.eq(log[8] && log[8].measure, 60, "k) correct measure"); + // clear log + log = []; + + // l) clean up + map.destroy(); + // wait for delay and confirm event not logged + }, + delay, function() { + t.eq(log.length, 0, "l) no event fired after destroy"); + } + ); + } + + </script> +</head> +<body> + <div id="map" style="width: 512px; height: 256px;"></div> +</body> +</html> |