summaryrefslogtreecommitdiff
path: root/misc/openlayers/tests/Control/GetFeature.html
diff options
context:
space:
mode:
Diffstat (limited to 'misc/openlayers/tests/Control/GetFeature.html')
-rw-r--r--misc/openlayers/tests/Control/GetFeature.html177
1 files changed, 177 insertions, 0 deletions
diff --git a/misc/openlayers/tests/Control/GetFeature.html b/misc/openlayers/tests/Control/GetFeature.html
new file mode 100644
index 0000000..bbdd0e4
--- /dev/null
+++ b/misc/openlayers/tests/Control/GetFeature.html
@@ -0,0 +1,177 @@
+<html>
+<head>
+ <script src="../OLLoader.js"></script>
+ <script type="text/javascript">
+ function test_Control_GetFeature_constructor(t) {
+ t.plan(3);
+ var protocol = "foo";
+ var control = new OpenLayers.Control.GetFeature({
+ protocol: protocol
+ });
+ t.ok(control instanceof OpenLayers.Control.GetFeature,
+ "new OpenLayers.Control.SelectFeature returns an instance");
+ t.eq(control.protocol, "foo",
+ "constructor sets protocol correctly");
+
+ control = new OpenLayers.Control.GetFeature({
+ filterType: OpenLayers.Filter.Spatial.INTERSECTS
+ });
+ t.eq(control.filterType, OpenLayers.Filter.Spatial.INTERSECTS,
+ "constructor sets filterType correctly");
+
+ }
+
+ function test_Control_GetFeature_select(t) {
+ t.plan(10);
+ var cssAdded;
+ var map = new OpenLayers.Map("map");
+ var layer = new OpenLayers.Layer.WMS("foo", "wms", {
+ layers: "foo"
+ });
+ map.addLayer(layer);
+ map.setCenter(new OpenLayers.LonLat(1,2));
+ var feature1 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,2));
+ var feature2 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(2,3));
+ var feature3 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(3,1));
+ var control = new OpenLayers.Control.GetFeature({
+ protocol: new OpenLayers.Protocol({
+ read: function(obj) {
+ cssAdded = OpenLayers.Element.hasClass(map.viewPortDiv,
+ "olCursorWait");
+ obj.callback.call(obj.scope, {
+ features: [feature1, feature2, feature3],
+ success: function() {return true;}
+ });
+ }
+ }),
+ box: true
+ });
+ map.addControl(control);
+
+ var singleTest = function(evt) {
+ t.eq(evt.feature.id, feature1.id, "featureselected callback called with closest feature");
+ }
+ cssAdded = false;
+ control.events.register("featureselected", this, singleTest);
+ control.selectClick({xy: new OpenLayers.Pixel(200, 125)});
+ t.ok(cssAdded,
+ "select adds CSS class (click)");
+ t.ok(!OpenLayers.Element.hasClass(map.viewPortDiv, "olCursorWait"),
+ "callback removes CSS class (click)");
+ control.events.unregister("featureselected", this, singleTest);
+
+ var count = 0;
+ var beforeFeatureSelected = function(evt) {
+ count++;
+ return count < 3;
+ }
+ var features = [];
+ var boxTest = function(evt) {
+ features.push(evt.feature);
+ }
+ var beforeFeaturesSelected = function(evt) {
+ t.eq(evt.features.length, 3, "3 features passed to the beforefeaturesselected handler");
+ }
+ var featuresSelected = function(evt) {
+ t.eq(evt.features.length, 2, "2 features passed to the featuresselected handler");
+ }
+ control.events.register("beforefeatureselected", this, beforeFeatureSelected);
+ control.events.register("featureselected", this, boxTest);
+ control.events.register("beforefeaturesselected", this, beforeFeaturesSelected);
+ control.events.register("featuresselected", this, featuresSelected);
+ cssAdded = false;
+ control.selectBox(new OpenLayers.Bounds(0,0,4,4));
+ control.events.unregister("beforefeatureselected", this, beforeFeatureSelected);
+ control.events.unregister("featureselected", this, boxTest);
+ control.events.unregister("beforefeaturesselected", this, beforeFeaturesSelected);
+ control.events.unregister("featuresselected", this, featuresSelected);
+ t.eq(features.length, 2, "2 features inside box selected");
+ t.eq(features[1].id, feature2.id, "featureselected callback called with multiple features");
+ t.ok(cssAdded,
+ "select adds CSS class (box)");
+ t.ok(!OpenLayers.Element.hasClass(map.viewPortDiv, "olCursorWait"),
+ "callback removes CSS class (box)");
+
+ // allow several features even for single click
+ control.single = false;
+ var multiplePointTest = function(evt) {
+ t.eq(evt.features.length, 3, "3 features passed to the featuresselected handler");
+ }
+ control.events.register("featuresselected", this, multiplePointTest);
+ control.selectClick({xy: new OpenLayers.Pixel(200, 125)});
+ control.events.unregister("featuresselected", this, multiplePointTest);
+ }
+
+ function test_Control_GetFeature_hover(t) {
+ t.plan(9);
+ var cssAdded;
+ var abortedResponse = null;
+ var map = new OpenLayers.Map("map");
+ var layer = new OpenLayers.Layer.WMS("foo", "wms", {
+ layers: "foo"
+ });
+ map.addLayer(layer);
+ map.setCenter(new OpenLayers.LonLat(1,2));
+ var feature1 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,2));
+ var feature2 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(2,3));
+ var response = new OpenLayers.Protocol.Response();
+ var control = new OpenLayers.Control.GetFeature({
+ protocol: new OpenLayers.Protocol({
+ read: function(obj){
+ cssAdded = OpenLayers.Element.hasClass(map.viewPortDiv,
+ "olCursorWait");
+ obj.callback.call(obj.scope, {
+ features: [feature1, feature2],
+ success: function() {return true;}
+ });
+ return response;
+ },
+ abort: function(response) {
+ abortedResponse = response;
+ }
+ }),
+ hover: true
+ });
+ map.addControl(control);
+
+ var hoverFeature;
+ var hoverTest = function(evt) {
+ t.eq(evt.feature.id, hoverFeature.id, "hoverfeature callback called with closest feature");
+ }
+ var outTest = function(evt) {
+ t.eq(evt.feature.id, feature1.id, "outfeature callback called with previously hovered feature");
+ }
+ control.events.register("hoverfeature", this, hoverTest);
+ control.events.register("outfeature", this, outTest);
+ hoverFeature = feature1;
+ control.selectHover({xy: new OpenLayers.Pixel(200, 125)});
+ t.ok(control.hoverResponse == response,
+ "selectHover stores the protocol response in the hoverResponse property");
+
+ hoverFeature = feature2;
+ cssAdded = false;
+ control.selectHover({xy: new OpenLayers.Pixel(400, 0)});
+ t.ok(cssAdded,
+ "select adds CSS class (hover)");
+ t.ok(!OpenLayers.Element.hasClass(map.viewPortDiv, "olCursorWait"),
+ "callback removes CSS class (hover)");
+
+ OpenLayers.Element.addClass(map.viewPortDiv, "olCursorWait");
+ control.cancelHover();
+ t.ok(abortedResponse == response,
+ "cancelHover calls protocol.abort() with the expected response");
+ t.eq(control.hoverResponse, null,
+ "cancelHover sets this.hoverResponse to null");
+ t.ok(!OpenLayers.Element.hasClass(map.viewPortDiv, "olCursorWait"),
+ "cancelHover removes CSS class");
+
+ control.events.unregister("hoverfeature", this, hoverTest);
+ control.events.unregister("outfeature", this, outTest);
+ }
+
+ </script>
+</head>
+<body>
+ <div id="map" style="width: 400px; height: 250px;"/>
+</body>
+</html>