mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
94 lines
2.7 KiB
TypeScript
94 lines
2.7 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.dev/license
|
|
*/
|
|
import {setTimeout as sleep} from 'node:timers/promises';
|
|
import {promisify} from 'node:util';
|
|
import {taskSymbol} from '../../lib/common/timers';
|
|
|
|
describe('node timer', () => {
|
|
it('util.promisify should work with setTimeout', (done: DoneFn) => {
|
|
const setTimeoutPromise = promisify(setTimeout);
|
|
setTimeoutPromise(50, 'value').then(
|
|
(value) => {
|
|
expect(value).toEqual('value');
|
|
done();
|
|
},
|
|
(error) => {
|
|
fail(`should not be here with error: ${error}.`);
|
|
},
|
|
);
|
|
});
|
|
|
|
it('util.promisify should work with setImmediate', (done: DoneFn) => {
|
|
const setImmediatePromise = promisify(setImmediate);
|
|
setImmediatePromise('value').then(
|
|
(value) => {
|
|
expect(value).toEqual('value');
|
|
done();
|
|
},
|
|
(error) => {
|
|
fail(`should not be here with error: ${error}.`);
|
|
},
|
|
);
|
|
});
|
|
|
|
it(`'Timeout.refresh' should restart the 'setTimeout' when it is not scheduled`, async () => {
|
|
const spy = jasmine.createSpy();
|
|
const timeout = setTimeout(spy, 100) as unknown as NodeJS.Timeout;
|
|
|
|
let iterations = 5;
|
|
for (let i = 1; i <= iterations; i++) {
|
|
timeout.refresh();
|
|
await sleep(150);
|
|
}
|
|
|
|
expect((timeout as any)[taskSymbol].runCount).toBe(iterations);
|
|
|
|
clearTimeout(timeout);
|
|
|
|
expect((timeout as any)[taskSymbol]).toBeNull();
|
|
expect(spy).toHaveBeenCalledTimes(iterations);
|
|
});
|
|
|
|
it(`'Timeout.refresh' restarts the 'setTimeout' when it is running`, async () => {
|
|
let timeout: NodeJS.Timeout;
|
|
const spy = jasmine.createSpy().and.callFake(() => timeout.refresh());
|
|
timeout = setTimeout(spy, 100) as unknown as NodeJS.Timeout;
|
|
|
|
await sleep(250);
|
|
|
|
expect((timeout as any)[taskSymbol].runCount).toBe(2);
|
|
|
|
clearTimeout(timeout);
|
|
|
|
expect((timeout as any)[taskSymbol]).toBeNull();
|
|
expect(spy).toHaveBeenCalledTimes(2);
|
|
});
|
|
|
|
it(`'Timeout.refresh' should restart the 'setInterval'`, async () => {
|
|
const spy = jasmine.createSpy();
|
|
const interval = setInterval(spy, 200) as unknown as NodeJS.Timeout;
|
|
|
|
// Restart the interval multiple times before the elapsed time.
|
|
for (let i = 1; i <= 4; i++) {
|
|
interval.refresh();
|
|
await sleep(100);
|
|
}
|
|
|
|
// Time did not elapse
|
|
expect((interval as any)[taskSymbol].runCount).toBe(0);
|
|
expect(spy).toHaveBeenCalledTimes(0);
|
|
|
|
await sleep(350);
|
|
expect((interval as any)[taskSymbol].runCount).toBe(2);
|
|
|
|
clearInterval(interval);
|
|
|
|
expect((interval as any)[taskSymbol]).toBeNull();
|
|
expect(spy).toHaveBeenCalledTimes(2);
|
|
});
|
|
});
|