Add a map property to layers

This commit is contained in:
Tim Schaub
2021-11-12 17:11:26 -07:00
parent 080fe8ca67
commit 371bb85350
7 changed files with 446 additions and 24 deletions

View File

@@ -8,12 +8,15 @@ import ImageLayer from '../../../../src/ol/layer/Image.js';
import ImageState from '../../../../src/ol/ImageState.js';
import ImageStatic from '../../../../src/ol/source/ImageStatic.js';
import Interaction from '../../../../src/ol/interaction/Interaction.js';
import Layer from '../../../../src/ol/layer/Layer.js';
import LayerGroup from '../../../../src/ol/layer/Group.js';
import Map from '../../../../src/ol/Map.js';
import MapBrowserEvent from '../../../../src/ol/MapBrowserEvent.js';
import MapEvent from '../../../../src/ol/MapEvent.js';
import MouseWheelZoom from '../../../../src/ol/interaction/MouseWheelZoom.js';
import Overlay from '../../../../src/ol/Overlay.js';
import PinchZoom from '../../../../src/ol/interaction/PinchZoom.js';
import Property from '../../../../src/ol/layer/Property.js';
import Select from '../../../../src/ol/interaction/Select.js';
import TileLayer from '../../../../src/ol/layer/Tile.js';
import TileLayerRenderer from '../../../../src/ol/renderer/canvas/TileLayer.js';
@@ -166,6 +169,7 @@ describe('ol/Map', function () {
map.addLayer(layer);
expect(map.getLayers().item(0)).to.be(layer);
expect(layer.get(Property.MAP)).to.be(map);
});
it('throws if a layer is added twice', function () {
@@ -180,6 +184,55 @@ describe('ol/Map', function () {
});
});
describe('#removeLayer()', function () {
it('removes a layer from the map', function () {
const map = new Map({});
const layer = new TileLayer();
map.addLayer(layer);
expect(layer.get(Property.MAP)).to.be(map);
map.removeLayer(layer);
expect(layer.get(Property.MAP)).to.be(null);
});
it('removes a layer group from the map', function () {
const map = new Map({});
const layer = new TileLayer();
const group = new LayerGroup({layers: [layer]});
map.addLayer(group);
expect(layer.get(Property.MAP)).to.be(map);
map.removeLayer(group);
expect(layer.get(Property.MAP)).to.be(null);
});
});
describe('#setLayerGroup()', function () {
it('sets the layer group', function () {
const map = new Map({});
const layer = new Layer({});
const group = new LayerGroup({layers: [layer]});
map.setLayerGroup(group);
expect(map.getLayerGroup()).to.be(group);
expect(layer.get(Property.MAP)).to.be(map);
});
it('removes the map property from old layers', function () {
const oldLayer = new Layer({});
const map = new Map({layers: [oldLayer]});
expect(oldLayer.get(Property.MAP)).to.be(map);
const layer = new Layer({});
const group = new LayerGroup({layers: [layer]});
map.setLayerGroup(group);
expect(layer.get(Property.MAP)).to.be(map);
expect(oldLayer.get(Property.MAP)).to.be(null);
});
});
describe('#setLayers()', function () {
it('adds an array of layers to the map', function () {
const map = new Map({});
@@ -192,12 +245,21 @@ describe('ol/Map', function () {
expect(collection.getLength()).to.be(2);
expect(collection.item(0)).to.be(layer0);
expect(collection.item(1)).to.be(layer1);
expect(layer0.get(Property.MAP)).to.be(map);
expect(layer1.get(Property.MAP)).to.be(map);
});
it('clears any existing layers', function () {
const map = new Map({layers: [new TileLayer()]});
const oldLayer = new TileLayer();
const map = new Map({layers: [oldLayer]});
expect(oldLayer.get(Property.MAP)).to.be(map);
map.setLayers([new TileLayer(), new TileLayer()]);
const newLayer1 = new TileLayer();
const newLayer2 = new TileLayer();
map.setLayers([newLayer1, newLayer2]);
expect(newLayer1.get(Property.MAP)).to.be(map);
expect(newLayer2.get(Property.MAP)).to.be(map);
expect(oldLayer.get(Property.MAP)).to.be(null);
expect(map.getLayers().getLength()).to.be(2);
});