Files
vscode-codeql/extensions/ql-vscode/test/pure-tests/disposable-object.test.ts
Koen Vlaswinkel 0974700557 Convert pure tests to Jest
This converts all pure tests to Jest. This was done by first running
`npx jest-codemods` with the Mocha transformation, then manually fixing
any places where it hadn't automatically converted the correct thing
or had missed things (mostly Sinon).

This also sets up VSCode correctly for running Jest.
2022-11-22 10:39:21 +01:00

120 lines
3.5 KiB
TypeScript

import { DisposableObject } from "../../src/pure/disposable-object";
describe("DisposableObject and DisposeHandler", () => {
const disposable1 = {
dispose: jest.fn(),
};
const disposable2 = {
dispose: jest.fn(),
};
const disposable3 = {
dispose: jest.fn(),
};
const disposable4 = {
dispose: jest.fn(),
};
let disposableObject: any;
let nestedDisposableObject: any;
beforeEach(() => {
disposable1.dispose.mockClear();
disposable2.dispose.mockClear();
disposable3.dispose.mockClear();
disposable4.dispose.mockClear();
disposableObject = new MyDisposableObject();
nestedDisposableObject = new MyDisposableObject();
});
it("should dispose tracked and pushed objects", () => {
disposableObject.push(disposable1);
disposableObject.push(disposable2);
disposableObject.track(nestedDisposableObject);
nestedDisposableObject.track(disposable3);
disposableObject.dispose();
expect(disposable1.dispose).toBeCalled();
expect(disposable2.dispose).toBeCalled();
expect(disposable3.dispose).toBeCalled();
// pushed items must be called in reverse order
expect(disposable2.dispose.mock.invocationCallOrder[0]).toBeLessThan(
disposable1.dispose.mock.invocationCallOrder[0],
);
// now that disposableObject has been disposed, subsequent disposals are
// no-ops
disposable1.dispose.mockClear();
disposable2.dispose.mockClear();
disposable3.dispose.mockClear();
disposableObject.dispose();
expect(disposable1.dispose).not.toBeCalled();
expect(disposable2.dispose).not.toBeCalled();
expect(disposable3.dispose).not.toBeCalled();
});
it("should dispose and stop tracking objects", () => {
disposableObject.track(disposable1);
disposableObject.disposeAndStopTracking(disposable1);
expect(disposable1.dispose).toBeCalled();
disposable1.dispose.mockClear();
disposableObject.dispose();
expect(disposable1.dispose).not.toBeCalled();
});
it("should avoid disposing an object that is not tracked", () => {
disposableObject.push(disposable1);
disposableObject.disposeAndStopTracking(disposable1);
expect(disposable1.dispose).not.toBeCalled();
disposableObject.dispose();
expect(disposable1.dispose).toBeCalled();
});
it("ahould use a dispose handler", () => {
const handler = (d: any) =>
d === disposable1 || d === disposable3 || d === nestedDisposableObject
? d.dispose(handler)
: void 0;
disposableObject.push(disposable1);
disposableObject.push(disposable2);
disposableObject.track(nestedDisposableObject);
nestedDisposableObject.track(disposable3);
nestedDisposableObject.track(disposable4);
disposableObject.dispose(handler);
expect(disposable1.dispose).toBeCalled();
expect(disposable2.dispose).not.toBeCalled();
expect(disposable3.dispose).toBeCalled();
expect(disposable4.dispose).not.toBeCalled();
// now that disposableObject has been disposed, subsequent disposals are
// no-ops
disposable1.dispose.mockClear();
disposable2.dispose.mockClear();
disposable3.dispose.mockClear();
disposable4.dispose.mockClear();
disposableObject.dispose();
expect(disposable1.dispose).not.toBeCalled();
expect(disposable2.dispose).not.toBeCalled();
expect(disposable3.dispose).not.toBeCalled();
expect(disposable4.dispose).not.toBeCalled();
});
class MyDisposableObject extends DisposableObject {
constructor() {
super();
}
}
});