ole
Version:
OpenLayers Editor
130 lines (121 loc) • 5.05 kB
JavaScript
const FORCE = { force: true };
describe('ModifyControl', () => {
beforeEach(() => {
cy.visit('/');
// Draw polygon (click on map container, double click to finish drawing)
cy.get('[title="Draw Polygon"]').click();
cy.get('.ol-overlaycontainer').click(100, 100, FORCE);
cy.get('.ol-overlaycontainer').click(100, 150, FORCE);
cy.get('.ol-overlaycontainer').click(150, 170, FORCE);
cy.get('.ol-overlaycontainer').dblclick(200, 100, FORCE);
// Draw line (click on map container, double click to finish drawing)
cy.get('[title="Draw LineString"]').click();
cy.get('.ol-overlaycontainer').click(400, 350, FORCE);
cy.get('.ol-overlaycontainer').click(270, 344, FORCE);
cy.get('.ol-overlaycontainer').dblclick(200, 450, FORCE);
});
it('should correctly handle node deletion', () => {
cy.window().then((win) => {
// Spy on selectModify.addFeatureLayerAssociation_, called when a feature is selected
const omitFeatureSelectSpy = cy.spy(
win.modify.selectModify,
'addFeatureLayerAssociation_',
);
let selectedFeaturesArray = [];
// Select Modify Control (click on toolbar)
cy.get('.ole-control-modify').click();
// Select polygon (double click polygon in map canvas container to start modifying)
cy.get('.ol-viewport')
.dblclick(100, 100, FORCE)
.then(() => {
selectedFeaturesArray = win.modify.selectModify
.getFeatures()
.getArray();
// Check if only one feature is selected
expect(selectedFeaturesArray.length).to.equal(1);
// Verify the polygon has 4 nodes (5 coordinates)
expect(
selectedFeaturesArray[0].getGeometry().getCoordinates()[0].length,
).to.equal(5);
});
// Click & delete a node (click on map canvas at node pixel)
// Click & delete a node (click on map canvas at node pixel)
cy.get('.ol-viewport')
.click(102, 152)
.then(() => {
// singleclick event needs a timeout period.
cy.wait(400).then(() => {
selectedFeaturesArray = win.modify.selectModify
.getFeatures()
.getArray();
// Verify one polygon node was deleted on click (3 nodes, 4 coordinates)
expect(
selectedFeaturesArray[0].getGeometry().getCoordinates()[0].length,
).to.equal(4);
});
});
// Click another node (click on map canvas at node pixel)
cy.get('.ol-viewport')
.click(100, 100, FORCE)
.then(() => {
// singleclick event needs a timeout period.
cy.wait(400).then(() => {
// Verify no further node was deleted on click (because polygon minimum number nodes is 3)
expect(
selectedFeaturesArray[0].getGeometry().getCoordinates()[0].length,
).to.equal(4);
// Check that no features from the overlay are mistakenly selected
const toTest = omitFeatureSelectSpy.withArgs(
omitFeatureSelectSpy.args[0][0],
null,
);
// eslint-disable-next-line no-unused-expressions
expect(toTest).to.not.be.called;
});
});
// Select line (double click line in map canvas container to start modifying)
cy.get('.ol-viewport')
.dblclick(270, 344, FORCE)
.then(() => {
selectedFeaturesArray = win.modify.selectModify
.getFeatures()
.getArray();
// Check if only one feature is selected
expect(selectedFeaturesArray.length).to.equal(1);
// Verify the line has 3 nodes (3 coordinates)
expect(
selectedFeaturesArray[0].getGeometry().getCoordinates().length,
).to.equal(3);
});
// Click & delete a node (click on map canvas at node pixel)
cy.get('.ol-viewport')
.click(270, 344, FORCE)
.then(() => {
// singleclick event needs a timeout period.
cy.wait(400).then(() => {
// Verify one line node was deleted on click (2 nodes, 2 coordinates)
expect(
selectedFeaturesArray[0].getGeometry().getCoordinates().length,
).to.equal(2);
});
});
// Click another node (click on map canvas at node pixel)
cy.get('.ol-viewport')
.click(400, 350, FORCE)
.then(() => {
// Verify no further node was deleted on click (because polygon minimum number nodes is 2)
expect(
selectedFeaturesArray[0].getGeometry().getCoordinates().length,
).to.equal(2);
// Check that no features from the overlay are mistakenly selected
// eslint-disable-next-line no-unused-expressions
expect(
omitFeatureSelectSpy.withArgs(
omitFeatureSelectSpy.args[0][0],
null,
),
).to.not.be.called;
});
});
});
});