diff --git a/src/ol/DataTile.js b/src/ol/DataTile.js index ecd9fc6509..cc82621b0d 100644 --- a/src/ol/DataTile.js +++ b/src/ol/DataTile.js @@ -75,6 +75,9 @@ class DataTile extends Tile { * @api */ load() { + if (this.state !== TileState.IDLE && this.state !== TileState.ERROR) { + return; + } this.state = TileState.LOADING; this.changed(); diff --git a/test/browser/spec/ol/datatile.test.js b/test/browser/spec/ol/DataTile.test.js similarity index 71% rename from test/browser/spec/ol/datatile.test.js rename to test/browser/spec/ol/DataTile.test.js index 6ec7c2168c..76c696653e 100644 --- a/test/browser/spec/ol/datatile.test.js +++ b/test/browser/spec/ol/DataTile.test.js @@ -1,7 +1,8 @@ import DataTile from '../../../../src/ol/DataTile.js'; import TileState from '../../../../src/ol/TileState.js'; +import {listenOnce} from '../../../../src/ol/events.js'; -describe('ol.DataTile', function () { +describe('ol/DataTile', function () { /** @type {Promise { + listenOnce(tile, 'change', () => { expect(tile.getState()).to.be(TileState.LOADED); done(); - }, 16); + }); + }); + + it('reloads tiles in an error state', function (done) { + const tileCoord = [0, 0, 0]; + const tile = new DataTile({ + tileCoord: tileCoord, + loader: loader, + }); + tile.state = TileState.ERROR; + + tile.load(); + expect(tile.getState()).to.be(TileState.LOADING); + listenOnce(tile, 'change', () => { + expect(tile.getState()).to.be(TileState.LOADED); + done(); + }); }); }); });