0af11b064e
Symptom: Switching between layers with different attributions does not remove the attribution from the previously selected layer. Control.Attribution keeps track of its attributions with a counter for each text. The problem described in #4285 is that each time the layer is added to the map, the counter is increased by two. It's because Layer calls Control.Attribution.addAttribution() twice, once from addLayer() and the second time via the whenReady() callback _layerAdd(). This was not caught by the tests since the callback was never fired (missing map.setView() call). Fixes #4285
127 lines
3.9 KiB
JavaScript
127 lines
3.9 KiB
JavaScript
describe("Control.Attribution", function () {
|
|
|
|
var map, control, container;
|
|
|
|
beforeEach(function () {
|
|
map = L.map(document.createElement('div'));
|
|
control = new L.Control.Attribution({
|
|
prefix: 'prefix'
|
|
}).addTo(map);
|
|
map.setView([0, 0], 1);
|
|
container = control.getContainer();
|
|
});
|
|
|
|
function dummyLayer() {
|
|
var layer = new L.Layer();
|
|
layer.onAdd = function () { };
|
|
layer.onRemove = function () { };
|
|
return layer;
|
|
}
|
|
|
|
it("contains just prefix if no attributions added", function () {
|
|
expect(container.innerHTML).to.eql('prefix');
|
|
});
|
|
|
|
describe('#addAttribution', function () {
|
|
it('adds one attribution correctly', function () {
|
|
control.addAttribution('foo');
|
|
expect(container.innerHTML).to.eql('prefix | foo');
|
|
});
|
|
|
|
it('adds no duplicate attributions', function () {
|
|
control.addAttribution('foo');
|
|
control.addAttribution('foo');
|
|
expect(container.innerHTML).to.eql('prefix | foo');
|
|
});
|
|
|
|
it('adds several attributions listed with comma', function () {
|
|
control.addAttribution('foo');
|
|
control.addAttribution('bar');
|
|
expect(container.innerHTML).to.eql('prefix | foo, bar');
|
|
});
|
|
});
|
|
|
|
describe('#removeAttribution', function () {
|
|
it('removes attribution correctly', function () {
|
|
control.addAttribution('foo');
|
|
control.addAttribution('bar');
|
|
control.removeAttribution('foo');
|
|
expect(container.innerHTML).to.eql('prefix | bar');
|
|
});
|
|
it('does nothing if removing attribution that was not present', function () {
|
|
control.addAttribution('foo');
|
|
control.addAttribution('baz');
|
|
control.removeAttribution('bar');
|
|
control.removeAttribution('baz');
|
|
control.removeAttribution('baz');
|
|
control.removeAttribution('');
|
|
expect(container.innerHTML).to.eql('prefix | foo');
|
|
});
|
|
});
|
|
|
|
describe('#setPrefix', function () {
|
|
it('changes prefix', function () {
|
|
control.setPrefix('bla');
|
|
expect(container.innerHTML).to.eql('bla');
|
|
});
|
|
});
|
|
|
|
describe('control.attribution factory', function () {
|
|
it('creates Control.Attribution instance', function () {
|
|
var options = {prefix: 'prefix'};
|
|
expect(L.control.attribution(options)).to.eql(new L.Control.Attribution(options));
|
|
});
|
|
});
|
|
|
|
describe('on layer add/remove', function () {
|
|
it('changes text', function () {
|
|
var fooLayer = dummyLayer();
|
|
var barLayer = dummyLayer();
|
|
var bazLayer = dummyLayer();
|
|
fooLayer.getAttribution = function () { return 'foo'; };
|
|
barLayer.getAttribution = function () { return 'bar'; };
|
|
bazLayer.getAttribution = function () { return 'baz'; };
|
|
|
|
expect(container.innerHTML).to.eql('prefix');
|
|
map.addLayer(fooLayer);
|
|
expect(container.innerHTML).to.eql('prefix | foo');
|
|
map.addLayer(barLayer);
|
|
expect(container.innerHTML).to.eql('prefix | foo, bar');
|
|
map.addLayer(bazLayer);
|
|
expect(container.innerHTML).to.eql('prefix | foo, bar, baz');
|
|
|
|
map.removeLayer(fooLayer);
|
|
expect(container.innerHTML).to.eql('prefix | bar, baz');
|
|
map.removeLayer(barLayer);
|
|
expect(container.innerHTML).to.eql('prefix | baz');
|
|
map.removeLayer(bazLayer);
|
|
expect(container.innerHTML).to.eql('prefix');
|
|
});
|
|
|
|
it('keeps count of duplicated attributions', function () {
|
|
var fooLayer = dummyLayer();
|
|
var fo2Layer = dummyLayer();
|
|
var fo3Layer = dummyLayer();
|
|
fooLayer.getAttribution = function () { return 'foo'; };
|
|
fo2Layer.getAttribution = function () { return 'foo'; };
|
|
fo3Layer.getAttribution = function () { return 'foo'; };
|
|
|
|
expect(container.innerHTML).to.eql('prefix');
|
|
map.addLayer(fooLayer);
|
|
expect(container.innerHTML).to.eql('prefix | foo');
|
|
map.addLayer(fo2Layer);
|
|
expect(container.innerHTML).to.eql('prefix | foo');
|
|
map.addLayer(fo3Layer);
|
|
expect(container.innerHTML).to.eql('prefix | foo');
|
|
|
|
map.removeLayer(fooLayer);
|
|
expect(container.innerHTML).to.eql('prefix | foo');
|
|
map.removeLayer(fo2Layer);
|
|
expect(container.innerHTML).to.eql('prefix | foo');
|
|
map.removeLayer(fo3Layer);
|
|
expect(container.innerHTML).to.eql('prefix');
|
|
});
|
|
});
|
|
|
|
});
|