Files
openlayers/test/browser/spec/ol/source/cluster.test.js
2021-04-28 09:23:33 -07:00

120 lines
3.8 KiB
JavaScript

import Cluster from '../../../../../src/ol/source/Cluster.js';
import EventType from '../../../../../src/ol/events/EventType.js';
import Feature from '../../../../../src/ol/Feature.js';
import LineString from '../../../../../src/ol/geom/LineString.js';
import Point from '../../../../../src/ol/geom/Point.js';
import Polygon from '../../../../../src/ol/geom/Polygon.js';
import Source from '../../../../../src/ol/source/Source.js';
import VectorSource from '../../../../../src/ol/source/Vector.js';
import {get as getProjection} from '../../../../../src/ol/proj.js';
describe('ol.source.Cluster', function () {
describe('constructor', function () {
it('returns a cluster source', function () {
const source = new Cluster({
projection: getProjection('EPSG:4326'),
source: new VectorSource(),
});
expect(source).to.be.a(Source);
expect(source).to.be.a(Cluster);
expect(source.getDistance()).to.be(20);
});
});
describe('#loadFeatures', function () {
const extent = [-1, -1, 1, 1];
const projection = getProjection('EPSG:3857');
it('clusters a source with point features', function () {
const source = new Cluster({
source: new VectorSource({
features: [
new Feature(new Point([0, 0])),
new Feature(new Point([0, 0])),
],
}),
});
source.loadFeatures(extent, 1, projection);
expect(source.getFeatures().length).to.be(1);
expect(source.getFeatures()[0].get('features').length).to.be(2);
});
it('clusters with a custom geometryFunction', function () {
const source = new Cluster({
geometryFunction: function (feature) {
const geom = feature.getGeometry();
if (geom.getType() == 'Point') {
return geom;
} else if (geom.getType() == 'Polygon') {
return geom.getInteriorPoint();
}
return null;
},
source: new VectorSource({
features: [
new Feature(new Point([0, 0])),
new Feature(
new LineString([
[0, 0],
[1, 1],
])
),
new Feature(
new Polygon([
[
[-1, -1],
[-1, 1],
[1, 1],
[1, -1],
[-1, -1],
],
])
),
],
}),
});
source.loadFeatures(extent, 1, projection);
expect(source.getFeatures().length).to.be(1);
expect(source.getFeatures()[0].get('features').length).to.be(2);
});
});
describe('#setDistance', function () {
it('changes the distance value', function () {
const source = new Cluster({
distance: 100,
source: new VectorSource(),
});
expect(source.getDistance()).to.be(100);
source.setDistance(10);
expect(source.getDistance()).to.be(10);
});
});
});
describe('#setSource', function () {
it('removes the change listener from the old source', function () {
const source = new VectorSource();
const clusterSource = new Cluster({
source: source,
});
expect(source.hasListener(EventType.CHANGE)).to.be(true);
clusterSource.setSource(null);
expect(source.hasListener(EventType.CHANGE)).to.be(false);
});
it('properly removes the previous features', function () {
const source = new Cluster({
source: new VectorSource({
features: [new Feature(new Point([0, 0]))],
}),
});
const projection = getProjection('EPSG:3857');
const extent = [-1, -1, 1, 1];
source.loadFeatures(extent, 1, projection);
expect(source.features.length).to.be(1);
source.setSource(null);
expect(source.features.length).to.be(0);
});
});