Files
carto.js/test/spec/geo/geometry-views/shared-tests-for-polygon-views.js
T
2020-06-13 18:34:34 +08:00

97 lines
3.1 KiB
JavaScript

var Polygon = require('../../../../src/geo/geometry-models/polygon');
var SharedTestsForPathViews = require('./shared-tests-for-path-views');
var createMapView = require('./create-map-view');
var CoordinatesComparator = require('./coordinates-comparator');
module.exports = function (MapView, PathView) {
SharedTestsForPathViews.call(this, Polygon, MapView, PathView);
describe('expandable polygons', function () {
beforeEach(function (done) {
this.mapView = createMapView(MapView);
this.mapView.render();
this.geometry = new Polygon({
editable: true,
expandable: true
}, {
latlngs: [
[0, 0], [10, 0], [10, 10], [0, 10]
]
});
this.geometryView = new PathView({
model: this.geometry,
mapView: this.mapView
});
// Listen for the map to be ready
this.mapView.onReady(function () {
this.geometryView.render();
done();
}.bind(this));
});
it('should render markers for each vertex, the path, and middle points', function () {
var paths = this.mapView.getPaths();
var markers = this.mapView.getMarkers();
expect(paths.length).toEqual(1);
expect(markers.length).toEqual(8); // 4 markers + 4 middle points
// Markers
expect(markers[0].getCoordinates()).toEqual({ lat: 0, lng: 0 });
expect(markers[0].isDraggable()).toBe(true);
expect(markers[1].getCoordinates()).toEqual({ lat: 10, lng: 0 });
expect(markers[1].isDraggable()).toBe(true);
expect(markers[2].getCoordinates()).toEqual({ lat: 10, lng: 10 });
expect(markers[2].isDraggable()).toBe(true);
expect(markers[3].getCoordinates()).toEqual({ lat: 0, lng: 10 });
expect(markers[3].isDraggable()).toBe(true);
// Middle points
// Coordinates have different precissions and we just check they are similar
expect(CoordinatesComparator.areCoordinatesSimilar(
[ markers[4].getCoordinates() ],
[ { lat: 5, lng: 0 } ])
).toBeTruthy();
expect(markers[4].isDraggable()).toBe(true);
expect(CoordinatesComparator.areCoordinatesSimilar(
[ markers[5].getCoordinates() ],
[ { lat: 10, lng: 5 } ])
).toBeTruthy();
expect(markers[5].isDraggable()).toBe(true);
expect(CoordinatesComparator.areCoordinatesSimilar(
[ markers[6].getCoordinates() ],
[ { lat: 5, lng: 10 } ])
).toBeTruthy();
expect(markers[6].isDraggable()).toBe(true);
expect(CoordinatesComparator.areCoordinatesSimilar(
[ markers[7].getCoordinates() ],
[ { lat: 0, lng: 5 } ])
).toBeTruthy();
expect(markers[7].isDraggable()).toBe(true);
expect(paths[0].getCoordinates()).toEqual([
{ lat: 0, lng: 0 }, { lat: 10, lng: 0 }, { lat: 10, lng: 10 }, { lat: 0, lng: 10 }
]);
});
it('should re-render middle points when map is zoomed', function () {
spyOn(this.mapView, 'removeMarker');
spyOn(this.mapView, 'addMarker');
this.mapView.trigger('zoomend');
expect(this.mapView.removeMarker.calls.count()).toEqual(4);
expect(this.mapView.addMarker.calls.count()).toEqual(4);
});
});
};