import { describe, it } from 'node:test';
import { expect } from 'chai';
import { expectPromise } from '../expectPromise.ts';
import { withAsyncUsing } from '../withAsyncUsing.ts';
describe('withAsyncUsing', () => {
it('disposes resource at end of scope', async () => {
const events: Array<string> = [];
const resource = {
async [Symbol.asyncDispose]() {
await Promise.resolve();
events.push('dispose');
},
};
await withAsyncUsing(resource, async () => {
await Promise.resolve();
events.push('use');
});
expect(events).to.deep.equal(['use', 'dispose']);
});
it('disposes resource when callback throws', async () => {
const events: Array<string> = [];
const resource = {
async [Symbol.asyncDispose]() {
await Promise.resolve();
events.push('dispose');
},
};
await expectPromise(
withAsyncUsing(resource, async () => {
await Promise.resolve();
events.push('use');
throw new Error('boom');
}),
).toRejectWith('boom');
expect(events).to.deep.equal(['use', 'dispose']);
});
});