3 <script src="../../lib/OpenLayers.js"></script>
4 <script type="text/javascript">
5 function test_Control_GetFeature_constructor(t) {
8 var control = new OpenLayers.Control.GetFeature({
11 t.ok(control instanceof OpenLayers.Control.GetFeature,
12 "new OpenLayers.Control.SelectFeature returns an instance");
13 t.eq(control.protocol, "foo",
14 "constructor sets protocol correctly");
17 function test_Control_GetFeature_select(t) {
19 var map = new OpenLayers.Map("map");
20 var layer = new OpenLayers.Layer.WMS("foo", "wms", {
24 map.setCenter(new OpenLayers.LonLat(1,2));
25 var feature1 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,2));
26 var feature2 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(2,3));
27 var control = new OpenLayers.Control.GetFeature({
28 protocol: new OpenLayers.Protocol({
30 obj.callback.call(obj.scope, {
31 features: [feature1, feature2],
38 map.addControl(control);
40 var singleTest = function(evt) {
41 t.eq(evt.feature.id, feature1.id, "featureselected callback called with closest feature");
43 control.events.register("featureselected", this, singleTest);
44 control.selectSingle({xy: new OpenLayers.Pixel(200, 125)});
45 control.events.unregister("featureselected", this, singleTest);
48 var boxTest = function(evt) {
49 features.push(evt.feature);
51 control.events.register("featureselected", this, boxTest);
52 control.selectBox(new OpenLayers.Bounds(0,0,4,4));
53 control.events.unregister("featureselected", this, boxTest);
54 t.eq(features.length, 2, "2 features inside box selected");
55 t.eq(features[1].id, feature2.id, "featureselected callback called with multiple features");
58 function test_Control_GetFeature_hover(t) {
60 var abortedResponse = null;
61 var map = new OpenLayers.Map("map");
62 var layer = new OpenLayers.Layer.WMS("foo", "wms", {
66 map.setCenter(new OpenLayers.LonLat(1,2));
67 var feature1 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,2));
68 var feature2 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(2,3));
69 var response = new OpenLayers.Protocol.Response();
70 var control = new OpenLayers.Control.GetFeature({
71 protocol: new OpenLayers.Protocol({
73 obj.callback.call(obj.scope, {
74 features: [feature1, feature2],
79 abort: function(response) {
80 abortedResponse = response;
85 map.addControl(control);
88 var hoverTest = function(evt) {
89 t.eq(evt.feature.id, hoverFeature.id, "hoverfeature callback called with closest feature");
91 var outTest = function(evt) {
92 t.eq(evt.feature.id, feature1.id, "outfeature callback called with previously hovered feature");
94 control.events.register("hoverfeature", this, hoverTest);
95 control.events.register("outfeature", this, outTest);
96 hoverFeature = feature1;
97 control.selectHover({xy: new OpenLayers.Pixel(200, 125)});
98 t.ok(control.hoverResponse == response,
99 "selectHover stores the protocol response in the hoverResponse property");
101 hoverFeature = feature2;
102 control.selectHover({xy: new OpenLayers.Pixel(400, 0)});
103 control.cancelHover();
104 t.ok(abortedResponse == response,
105 "cancelHover calls protocol.abort() with the expected response");
106 t.eq(control.hoverResponse, null,
107 "cancelHover sets this.hoverResponse to null");
109 control.events.unregister("hoverfeature", this, hoverTest);
110 control.events.unregister("outfeature", this, outTest);
116 <div id="map" style="width: 400px; height: 250px;"/>