Allow maps to be configured with a promise for view props

This commit is contained in:
Tim Schaub
2021-09-21 00:06:26 +00:00
parent 79a54e33bb
commit d5813deb08
9 changed files with 230 additions and 116 deletions
@@ -33,13 +33,73 @@ import {createXYZ} from '../../../../src/ol/tilegrid.js';
import {defaults as defaultInteractions} from '../../../../src/ol/interaction.js';
import {tile as tileStrategy} from '../../../../src/ol/loadingstrategy.js';
describe('ol.Map', function () {
describe('ol/Map', function () {
describe('constructor', function () {
it('creates a new map', function () {
const map = new Map({});
expect(map).to.be.a(Map);
});
it('accepts a promise for view options', (done) => {
let resolve;
const map = new Map({
view: new Promise((r) => {
resolve = r;
}),
});
expect(map.getView()).to.be.a(View);
expect(map.getView().isDef()).to.be(false);
map.once('change:view', () => {
const view = map.getView();
expect(view).to.be.a(View);
expect(view.isDef()).to.be(true);
expect(view.getCenter()).to.eql([1, 2]);
expect(view.getZoom()).to.be(3);
done();
});
resolve({
center: [1, 2],
zoom: 3,
});
});
it('allows the view to be set with a promise later after construction', (done) => {
const map = new Map({
view: new View({zoom: 1, center: [0, 0]}),
});
expect(map.getView()).to.be.a(View);
expect(map.getView().isDef()).to.be(true);
let resolve;
map.setView(
new Promise((r) => {
resolve = r;
})
);
expect(map.getView()).to.be.a(View);
expect(map.getView().isDef()).to.be(false);
map.once('change:view', () => {
const view = map.getView();
expect(view).to.be.a(View);
expect(view.isDef()).to.be(true);
expect(view.getCenter()).to.eql([1, 2]);
expect(view.getZoom()).to.be(3);
done();
});
resolve({
center: [1, 2],
zoom: 3,
});
});
it('creates a set of default interactions', function () {
const map = new Map({});
const interactions = map.getInteractions();
@@ -60,6 +60,18 @@ describe('ol/source/GeoTIFF', function () {
});
});
it('resolves view properties', function (done) {
source.getView().then((viewOptions) => {
const projection = viewOptions.projection;
expect(projection.getCode()).to.be('EPSG:4326');
expect(projection.getUnits()).to.be('degrees');
expect(viewOptions.extent).to.eql([-180, -90, 180, 90]);
expect(viewOptions.center).to.eql([0, 0]);
expect(viewOptions.resolutions).to.eql([0.703125]);
done();
});
});
it('loads tiles', function (done) {
source.on('change', () => {
const tile = source.getTile(0, 0, 0);