Home Reference Source Test

test/specs/generic/utils/Timers.spec.js

describe('Timers', () => {
    /** @type {Timers} */
    let timers;
    
    beforeEach(() => {
        if (timers) timers.clearAll();
        timers = new Timers();
    });
    
    it('can set timeout', (done) => {
        let invoked = false;
        timers.setTimeout('done', () => {
            invoked = true;
            done();
        }, 10);
        expect(invoked).toBeFalsy();
    });
    
    it('can cancel timeout', (done) => {
        let invoked = false;
        timers.setTimeout('done', () => {
            invoked = true;
        }, 10);
        timers.clearTimeout('done');
        setTimeout(() => {
            expect(invoked).toBeFalsy();
            done();
        }, 50);
    });

    it('can set interval', (done) => {
        let count = 0;
        timers.setInterval('done', () => {
            count++;
            if (count > 3) {
                expect(count).toBe(4);
                timers.clearInterval('done');
                done();
            }
        }, 10);
        expect(count).toBe(0);
    });

    it('can cancel interval', (done) => {
        let count = 0;
        timers.setInterval('done', () => {
            count++;
            if (count > 3) {
                timers.clearInterval('done');
                setTimeout(() => {
                    expect(count).toBe(4);
                    done();
                }, 50);
            }
        }, 10);
        expect(count).toBe(0);
    });
});