Merge pull request #7749 from fredj/f7035

Check if the sketch feature is defined in finishDrawing
This commit is contained in:
Frédéric Junod
2018-01-30 12:31:41 +01:00
committed by GitHub
2 changed files with 58 additions and 7 deletions

View File

@@ -714,6 +714,9 @@ Draw.prototype.removeLastPoint = function() {
*/ */
Draw.prototype.finishDrawing = function() { Draw.prototype.finishDrawing = function() {
const sketchFeature = this.abortDrawing_(); const sketchFeature = this.abortDrawing_();
if (!sketchFeature) {
return;
}
let coordinates = this.sketchCoords_; let coordinates = this.sketchCoords_;
const geometry = /** @type {ol.geom.SimpleGeometry} */ (sketchFeature.getGeometry()); const geometry = /** @type {ol.geom.SimpleGeometry} */ (sketchFeature.getGeometry());
if (this.mode_ === Draw.Mode_.LINE_STRING) { if (this.mode_ === Draw.Mode_.LINE_STRING) {

View File

@@ -240,15 +240,24 @@ describe('ol.interaction.Draw', function() {
expect(receivedEvents.end).to.be(1); expect(receivedEvents.end).to.be(1);
expect(receivedEvents.addfeature).to.be(1); expect(receivedEvents.addfeature).to.be(1);
}); });
it('works if finishDrawing is called when the sketch feature is not defined', function() {
expect(function() {
draw.finishDrawing();
}).to.not.throwException();
});
}); });
describe('drawing multipoints', function() { describe('drawing multipoints', function() {
let draw;
beforeEach(function() { beforeEach(function() {
map.addInteraction(new Draw({ draw = new Draw({
source: source, source: source,
type: 'MultiPoint' type: 'MultiPoint'
})); });
map.addInteraction(draw);
}); });
it('draws multipoint on click', function() { it('draws multipoint on click', function() {
@@ -262,6 +271,12 @@ describe('ol.interaction.Draw', function() {
expect(geometry.getCoordinates()).to.eql([[30, -15]]); expect(geometry.getCoordinates()).to.eql([[30, -15]]);
}); });
it('works if finishDrawing is called when the sketch feature is not defined', function() {
expect(function() {
draw.finishDrawing();
}).to.not.throwException();
});
}); });
describe('drawing linestrings', function() { describe('drawing linestrings', function() {
@@ -463,6 +478,12 @@ describe('ol.interaction.Draw', function() {
expect(de.callCount).to.be(1); expect(de.callCount).to.be(1);
}); });
it('works if finishDrawing is called when the sketch feature is not defined', function() {
expect(function() {
draw.finishDrawing();
}).to.not.throwException();
});
}); });
describe('drawing with a finishCondition', function() { describe('drawing with a finishCondition', function() {
@@ -515,12 +536,14 @@ describe('ol.interaction.Draw', function() {
}); });
describe('drawing multi-linestrings', function() { describe('drawing multi-linestrings', function() {
let draw;
beforeEach(function() { beforeEach(function() {
map.addInteraction(new Draw({ draw = new Draw({
source: source, source: source,
type: 'MultiLineString' type: 'MultiLineString'
})); });
map.addInteraction(draw);
}); });
it('draws multi with clicks, finishing on last point', function() { it('draws multi with clicks, finishing on last point', function() {
@@ -545,6 +568,12 @@ describe('ol.interaction.Draw', function() {
expect(geometry.getCoordinates()).to.eql([[[10, -20], [30, -20]]]); expect(geometry.getCoordinates()).to.eql([[[10, -20], [30, -20]]]);
}); });
it('works if finishDrawing is called when the sketch feature is not defined', function() {
expect(function() {
draw.finishDrawing();
}).to.not.throwException();
});
}); });
describe('drawing polygons', function() { describe('drawing polygons', function() {
@@ -645,7 +674,6 @@ describe('ol.interaction.Draw', function() {
}); });
it('draws polygon with clicks, finishing on last point', function() { it('draws polygon with clicks, finishing on last point', function() {
// first point // first point
simulateEvent('pointermove', 10, 20); simulateEvent('pointermove', 10, 20);
@@ -732,15 +760,23 @@ describe('ol.interaction.Draw', function() {
expect(de.callCount).to.be(1); expect(de.callCount).to.be(1);
}); });
it('works if finishDrawing is called when the sketch feature is not defined', function() {
expect(function() {
draw.finishDrawing();
}).to.not.throwException();
});
}); });
describe('drawing multi-polygons', function() { describe('drawing multi-polygons', function() {
let draw;
beforeEach(function() { beforeEach(function() {
map.addInteraction(new Draw({ draw = new Draw({
source: source, source: source,
type: 'MultiPolygon' type: 'MultiPolygon'
})); });
map.addInteraction(draw);
}); });
it('draws multi with clicks, finishing on first point', function() { it('draws multi with clicks, finishing on first point', function() {
@@ -808,6 +844,12 @@ describe('ol.interaction.Draw', function() {
]); ]);
}); });
it('works if finishDrawing is called when the sketch feature is not defined', function() {
expect(function() {
draw.finishDrawing();
}).to.not.throwException();
});
}); });
describe('drawing circles', function() { describe('drawing circles', function() {
@@ -880,6 +922,12 @@ describe('ol.interaction.Draw', function() {
expect(de.callCount).to.be(1); expect(de.callCount).to.be(1);
}); });
it('works if finishDrawing is called when the sketch feature is not defined', function() {
expect(function() {
draw.finishDrawing();
}).to.not.throwException();
});
}); });
describe('#setActive()', function() { describe('#setActive()', function() {