diff --git a/test/spec/ol/interaction/translate.test.js b/test/spec/ol/interaction/translate.test.js
index 2d6e3971de..e167f3afd5 100644
--- a/test/spec/ol/interaction/translate.test.js
+++ b/test/spec/ol/interaction/translate.test.js
@@ -77,29 +77,85 @@ describe('ol.interaction.Translate', function() {
map.handleMapBrowserEvent(event);
}
+ /**
+ * Tracks events triggered by the interaction as well as feature
+ * modifications. Helper function to
+ * @param {ol.Feature} feature Translated feature.
+ * @param {ol.interaction.Translate} interaction The interaction.
+ * @return {Array
} events
+ */
+ function trackEvents(feature, interaction) {
+ var events = [];
+ feature.on('change', function(event) {
+ events.push('change');
+ });
+ interaction.on('translatestart', function(event) {
+ events.push(event);
+ });
+ interaction.on('translateend', function(event) {
+ events.push(event);
+ });
+ return events;
+ }
+
+ /**
+ * Validates the event array to verify proper event sequence. Checks
+ * that first and last event are correct TranslateEvents and that feature
+ * modifications event are in between.
+ * @param {Array} events The events.
+ * @param {Array} features The features.
+ */
+ function validateEvents(events, features) {
+
+ var startevent = events[0];
+ var endevent = events[events.length - 1];
+
+ // first event should be translatestart
+ expect(startevent).to.be.an(ol.interaction.Translate.Event);
+ expect(startevent.type).to.eql('translatestart');
+
+ // last event should be translateend
+ expect(endevent).to.be.an(ol.interaction.Translate.Event);
+ expect(endevent.type).to.eql('translateend');
+
+ // make sure we get change events to events array
+ expect(events.length > 2).to.be(true);
+ // middle events should be feature modification events
+ for (var i = 1; i < events.length - 1; i++) {
+ expect(events[i]).to.equal('change');
+ }
+
+ // TranslateEvents should include the expected features
+ expect(startevent.features.getArray()).to.eql(features);
+ expect(endevent.features.getArray()).to.eql(features);
+ }
+
+
describe('constructor', function() {
it('creates a new interaction', function() {
- var draw = new ol.interaction.Translate({
+ var translate = new ol.interaction.Translate({
features: features
});
- expect(draw).to.be.a(ol.interaction.Translate);
- expect(draw).to.be.a(ol.interaction.Interaction);
+ expect(translate).to.be.a(ol.interaction.Translate);
+ expect(translate).to.be.a(ol.interaction.Interaction);
});
});
- describe('moving features', function() {
- var draw;
+ describe('moving features, with features option', function() {
+ var translate;
beforeEach(function() {
- draw = new ol.interaction.Translate({
+ translate = new ol.interaction.Translate({
features: new ol.Collection([features[0]])
});
- map.addInteraction(draw);
+ map.addInteraction(translate);
});
it('moves a selected feature', function() {
+ var events = trackEvents(features[0], translate);
+
simulateEvent('pointermove', 10, 20);
simulateEvent('pointerdown', 10, 20);
simulateEvent('pointerdrag', 50, -40);
@@ -107,9 +163,13 @@ describe('ol.interaction.Translate', function() {
var geometry = features[0].getGeometry();
expect(geometry).to.be.a(ol.geom.Point);
expect(geometry.getCoordinates()).to.eql([50, 40]);
+
+ validateEvents(events, [features[0]]);
});
it('does not move an unselected feature', function() {
+ var events = trackEvents(features[0], translate);
+
simulateEvent('pointermove', 20, 30);
simulateEvent('pointerdown', 20, 30);
simulateEvent('pointerdrag', 50, -40);
@@ -117,6 +177,30 @@ describe('ol.interaction.Translate', function() {
var geometry = features[1].getGeometry();
expect(geometry).to.be.a(ol.geom.Point);
expect(geometry.getCoordinates()).to.eql([20, -30]);
+
+ expect(events).to.be.empty();
+ });
+ });
+
+ describe('moving features, without features option', function() {
+ var translate;
+
+ beforeEach(function() {
+ translate = new ol.interaction.Translate();
+ map.addInteraction(translate);
+ });
+
+ it('moves only targeted feature', function() {
+ var events = trackEvents(features[0], translate);
+
+ simulateEvent('pointermove', 10, 20);
+ simulateEvent('pointerdown', 10, 20);
+ simulateEvent('pointerdrag', 50, -40);
+ simulateEvent('pointerup', 50, -40);
+ expect(features[0].getGeometry().getCoordinates()).to.eql([50, 40]);
+ expect(features[1].getGeometry().getCoordinates()).to.eql([20, -30]);
+
+ validateEvents(events, [features[0]]);
});
});
});