import { describe, it } from '@ephox/bedrock-client';
import { assert } from 'chai';

import type Editor from 'tinymce/core/api/Editor';
import Delay from 'tinymce/core/api/util/Delay';

describe('browser.tinymce.core.util.DelayTest', () => {
  it('setEditorTimeout', (done) => {
    const fakeEditor = {} as Editor;

    Delay.setEditorTimeout(fakeEditor, () => {
      assert.ok(true, 'setEditorTimeout was executed.');
      done();
    });
  });

  it('setEditorTimeout (removed)', () => {
    const fakeEditor = { removed: true } as Editor;

    Delay.setEditorTimeout(fakeEditor, () => {
      throw new Error('Still executing setEditorTimeout.');
    });

    assert.ok(true, 'setEditorTimeout on removed instance.');
  });

  it('setEditorInterval', (done) => {
    let count = 0;
    const fakeEditor = {} as Editor;

    const id = Delay.setEditorInterval(fakeEditor, () => {
      if (++count === 2) {
        clearInterval(id);
        assert.equal(count, 2);
        done();
      } else if (count > 3) {
        throw new Error('Still executing setEditorInterval.');
      }
    });
  });

  it('setEditorInterval (removed)', () => {
    const fakeEditor = { removed: true } as Editor;

    Delay.setEditorInterval(fakeEditor, () => {
      throw new Error('Still executing setEditorInterval.');
    });

    assert.ok(true, 'setEditorTimeout on removed instance.');
  });
});
