From 5084d5566a427b177f3828e01b7c475e734e6e6c Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Wed, 27 Apr 2022 14:50:33 -0600 Subject: [PATCH] Test that data tiles can be loaded after error --- src/ol/DataTile.js | 34 +++++++++---------- .../ol/{datatile.test.js => DataTile.test.js} | 23 +++++++++++-- 2 files changed, 36 insertions(+), 21 deletions(-) rename test/browser/spec/ol/{datatile.test.js => DataTile.test.js} (71%) diff --git a/src/ol/DataTile.js b/src/ol/DataTile.js index a5a87dfdb5..cc82621b0d 100644 --- a/src/ol/DataTile.js +++ b/src/ol/DataTile.js @@ -75,26 +75,24 @@ class DataTile extends Tile { * @api */ load() { - if (this.state == TileState.ERROR) { - this.state = TileState.IDLE; + if (this.state !== TileState.IDLE && this.state !== TileState.ERROR) { + return; } - if (this.state == TileState.IDLE) { - this.state = TileState.LOADING; - this.changed(); + this.state = TileState.LOADING; + this.changed(); - const self = this; - this.loader_() - .then(function (data) { - self.data_ = data; - self.state = TileState.LOADED; - self.changed(); - }) - .catch(function (error) { - self.error_ = error; - self.state = TileState.ERROR; - self.changed(); - }); - } + const self = this; + this.loader_() + .then(function (data) { + self.data_ = data; + self.state = TileState.LOADED; + self.changed(); + }) + .catch(function (error) { + self.error_ = error; + self.state = TileState.ERROR; + self.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(); + }); }); }); });