Files
openlayers/tests/Control/test_DragFeature.html
crschmidt b2a4acb717 When you have a polygon feature over a point feature in the same layer, and you
attempt to drag the point feature, you get errors about this.feature.geometry
being undefined. Fix this by not unsetting this.feature inside the
doneDragging.  (Closes #971)


git-svn-id: http://svn.openlayers.org/trunk/openlayers@4341 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
2007-09-16 19:27:23 +00:00

226 lines
7.5 KiB
HTML

<html>
<head>
<script src="../../lib/OpenLayers.js"></script>
<script type="text/javascript">
function test_Control_DragFeature_constructor(t) {
t.plan(3);
var options = {
geometryTypes: "foo"
};
var layer = "bar";
var control = new OpenLayers.Control.DragFeature(layer, options);
t.ok(control instanceof OpenLayers.Control.DragFeature,
"new OpenLayers.Control.DragFeature returns an instance");
t.eq(control.layer, "bar",
"constructor sets layer correctly");
t.eq(control.featureHandler.geometryTypes, "foo",
"constructor sets options correctly on feature handler");
}
function test_Control_DragFeature_destroy(t) {
t.plan(2);
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector();
map.addLayer(layer);
var control = new OpenLayers.Control.DragFeature(layer);
control.dragHandler.destroy = function() {
t.ok(true,
"control.destroy calls destroy on drag handler");
}
control.featureHandler.destroy = function() {
t.ok(true,
"control.destroy calls destroy on feature handler");
}
control.destroy();
}
function test_Control_DragFeature_activate(t) {
t.plan(2);
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector();
map.addLayer(layer);
var control = new OpenLayers.Control.DragFeature(layer);
map.addControl(control);
t.ok(!control.featureHandler.active,
"feature handler is not active prior to activating control");
control.activate();
t.ok(control.featureHandler.active,
"feature handler is active after activating control");
}
function test_Control_DragFeature_deactivate(t) {
t.plan(2);
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector();
map.addLayer(layer);
var control = new OpenLayers.Control.DragFeature(layer);
map.addControl(control);
control.dragHandler.deactivate = function() {
t.ok(true,
"control.deactivate calls deactivate on drag handler");
}
control.featureHandler.deactivate = function() {
t.ok(true,
"control.deactivate calls deactivate on feature handler");
}
control.deactivate();
}
function test_Control_DragFeature_over(t) {
t.plan(3);
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector();
map.addLayer(layer);
var control = new OpenLayers.Control.DragFeature(layer);
map.addControl(control);
control.activate();
t.ok(!control.dragHandler.active,
"drag handler is not active before over a feature");
// simulate a mouseover on a feature
layer.getFeatureFromEvent = function(evt) {
return "foo";
}
map.events.triggerEvent("mousemove");
t.eq(control.feature, "foo",
"control gets the proper feature from the feature handler");
t.ok(control.dragHandler.active,
"drag handler activated when over a feature");
}
function test_Control_DragFeature_down(t) {
t.plan(3);
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector();
map.addLayer(layer);
var control = new OpenLayers.Control.DragFeature(layer);
map.addControl(control);
control.activate();
// simulate a mouseover on a feature
layer.getFeatureFromEvent = function(evt) {
return "foo";
}
map.events.triggerEvent("mousemove");
// simulate a mousedown on a feature
control.onStart = function(feature, pixel) {
t.eq(feature, "foo", "onStart called with the correct feature");
t.eq(pixel, "bar", "onStart called with the correct pixel");
}
map.events.triggerEvent("mousedown", {xy: "bar", which: 1});
t.eq(control.lastPixel, "bar",
"mousedown sets the lastPixel correctly");
}
function test_Control_DragFeature_move(t) {
t.plan(3);
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector();
map.addLayer(layer);
var control = new OpenLayers.Control.DragFeature(layer);
map.addControl(control);
map.getResolution = function() {
return 2;
}
control.activate();
// mock up a feature - for the sole purpose of testing mousemove
var uid = Math.random();
layer.getFeatureFromEvent = function() {
var geom = new OpenLayers.Geometry.Point(Math.random(),
Math.random());
geom.move = function(x, y) {
t.eq(x, 2, "move called with dx * res");
t.eq(y, -4, "move called with -dy * res");
};
var feature = new OpenLayers.Feature.Vector(geom);
feature.uid = uid;
return feature;
};
layer.drawFeature = function(feature) {
t.eq(feature.uid, uid,
"layer.drawFeature called with correct feature");
};
// simulate a mouseover on a feature
map.events.triggerEvent("mousemove");
// simulate a mousedown on a feature
var down = new OpenLayers.Pixel(0, 0);
map.events.triggerEvent("mousedown", {xy: down, which: 1});
// simulate a mousemove on a feature
var move = new OpenLayers.Pixel(1, 2);
map.events.triggerEvent("mousemove", {xy: move, which: 1});
}
function test_Control_DragFeature_done(t) {
t.plan(2);
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector();
map.addLayer(layer);
var control = new OpenLayers.Control.DragFeature(layer);
map.addControl(control);
control.activate();
// simulate a mouseover on a feature
layer.getFeatureFromEvent = function() {
return "foo";
};
map.events.triggerEvent("mousemove");
t.eq(control.feature, "foo",
"feature is set on mouse over");
control.doneDragging();
t.eq(control.feature, "foo",
"feature sticks around after doneDragging is called.");
}
function test_Control_DragFeature_out(t) {
t.plan(2);
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector();
map.addLayer(layer);
var control = new OpenLayers.Control.DragFeature(layer);
map.addControl(control);
control.activate();
// simulate a mouseover on a feature
layer.getFeatureFromEvent = function() {
return "foo";
};
map.events.triggerEvent("mousemove");
t.eq(control.feature, "foo",
"feature is set on mouse over");
// simulate a mouseout on a feature
layer.getFeatureFromEvent = function() {
return null;
};
map.events.triggerEvent("mousemove");
t.ok(control.feature == null,
"feature is set to null on mouse out");
}
</script>
</head>
<body>
<div id="map" style="width: 400px; height: 250px;"/>
</body>
</html>