Files
av-tools/tests/unit/engine-lifecycle.test.ts

46 lines
1.4 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest';
import { DeferredResourceLifecycle } from '../../src/ffmpeg/engine-lifecycle';
describe('singleton engine lifecycle', () => {
it('cancels deferred disposal when StrictMode immediately reacquires', () => {
const dispose = vi.fn();
const deferred: Array<() => void> = [];
const lifecycle = new DeferredResourceLifecycle({ dispose }, (callback) =>
deferred.push(callback)
);
const releaseFirstMount = lifecycle.acquire();
releaseFirstMount();
const releaseStrictModeRemount = lifecycle.acquire();
deferred.shift()?.();
expect(dispose).not.toHaveBeenCalled();
expect(lifecycle.leaseCount).toBe(1);
releaseStrictModeRemount();
deferred.shift()?.();
expect(dispose).toHaveBeenCalledOnce();
expect(lifecycle.leaseCount).toBe(0);
});
it('disposes only after the last lease and ignores duplicate releases', () => {
const dispose = vi.fn();
const deferred: Array<() => void> = [];
const lifecycle = new DeferredResourceLifecycle({ dispose }, (callback) =>
deferred.push(callback)
);
const releaseOne = lifecycle.acquire();
const releaseTwo = lifecycle.acquire();
releaseOne();
releaseOne();
expect(deferred).toHaveLength(0);
expect(lifecycle.leaseCount).toBe(1);
releaseTwo();
expect(deferred).toHaveLength(1);
deferred[0]?.();
expect(dispose).toHaveBeenCalledOnce();
});
});