3f66492b创建于 2022年9月16日历史提交
import BaseEvent from '../../../../src/ol/events/Event.js';
import Layer from '../../../../src/ol/layer/Layer.js';
import Source from '../../../../src/ol/source/Source.js';
import expect from '../../expect.js';

function delay(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

describe('ol/layer/Layer.js', () => {
  describe('sourceready event', () => {
    it('is dispatched when the source is ready', (done) => {
      const source = new Source({state: 'loading'});
      const layer = new Layer({source: source});

      function handler(event) {
        expect(event).to.be.a(BaseEvent);
        expect(event.target).to.be(layer);
        done();
      }
      layer.on('sourceready', handler);

      source.setState('ready');
    });

    it('is dispatched even if the source is ready at construction', (done) => {
      const source = new Source({});
      const layer = new Layer({source: source});

      function handler(event) {
        expect(event).to.be.a(BaseEvent);
        expect(event.target).to.be(layer);
        done();
      }
      layer.on('sourceready', handler);
    });

    it('is not dispatched twice', async () => {
      const source = new Source({state: 'loading'});
      const layer = new Layer({source: source});

      let calls = 0;
      function handler(event) {
        calls += 1;
      }
      layer.on('sourceready', handler);

      layer.changed();
      await delay(5);

      source.setState('ready');
      await delay(5);

      source.changed();
      await delay(5);

      expect(calls).to.be(1);
    });

    it('is not dispatched after source is removed', async () => {
      const source = new Source({state: 'loading'});
      const layer = new Layer({source: source});

      let calls = 0;
      function handler(event) {
        calls += 1;
      }
      layer.on('sourceready', handler);

      layer.setSource(null);
      source.setState('ready');
      await delay(5);

      expect(calls).to.be(0);
    });

    it('is dispatched if source is added later', async () => {
      const layer = new Layer({});

      let calls = 0;
      function handler(event) {
        calls += 1;
      }
      layer.on('sourceready', handler);

      const source = new Source({state: 'ready'});
      layer.setSource(source);
      await delay(5);

      expect(calls).to.be(1);
    });

    it('is dispatched if new source is set', async () => {
      const layer = new Layer({source: new Source({})});

      let calls = 0;
      function handler(event) {
        calls += 1;
      }
      layer.on('sourceready', handler);

      await delay(5);
      expect(calls).to.be(1);

      const source = new Source({state: 'ready'});
      layer.setSource(source);
      await delay(5);

      expect(calls).to.be(2);
    });
  });
});