git-svn-id: http://svn.openlayers.org/trunk/openlayers@11162 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
178 lines
7.6 KiB
HTML
178 lines
7.6 KiB
HTML
<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>
|