Skip to content

Commit 8b6d43f

Browse files
authored
Merge pull request #92 from Automattic/fix/tests
test: properly handle DisposableStore bugs in tests
2 parents 532fb66 + 60752e5 commit 8b6d43f

File tree

3 files changed

+27
-20
lines changed

3 files changed

+27
-20
lines changed

src/resources.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@ function doFreeResource(resource: Resource): void {
2323
resource.disposables.forEach((disposable) => disposable.dispose());
2424
resource.emitter.removeAllListeners();
2525
resource.watcher.dispose();
26-
// See https://github.com/microsoft/vscode/issues/232559
27-
if (process.env.NODE_ENV !== 'test') {
28-
resource.outputChannel.dispose();
29-
}
26+
resource.outputChannel.dispose();
3027
}
3128

3229
export function freeResource(path: string): void {

src/test/suite/resources.test.ts

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ import { basename, join } from 'node:path';
33
import { EventEmitter } from 'node:events';
44
import { RelativePattern, Uri, window, workspace } from 'vscode';
55
import { Resource, addResource, freeAllResources, freeResource, getFilenames, getResource } from '../../resources';
6+
import { waitForOutputWindow } from './utils';
67

7-
function createResource(filename: string): Resource {
8+
async function createResource(filename: string): Promise<Resource> {
9+
const promise = waitForOutputWindow(`extension-output-`);
810
const outputChannel = window.createOutputChannel(filename, 'log');
911
const watcher = workspace.createFileSystemWatcher(
1012
new RelativePattern(Uri.file(filename), basename(filename)),
@@ -14,6 +16,8 @@ function createResource(filename: string): Resource {
1416
);
1517
const emitter = new EventEmitter();
1618

19+
outputChannel.show(true);
20+
await promise;
1721
return { outputChannel, watcher, emitter, disposables: [] };
1822
}
1923

@@ -22,9 +26,9 @@ suite('Resources', function () {
2226
freeAllResources();
2327
});
2428

25-
test('addResource', function () {
29+
test('addResource', async function () {
2630
const filename = __filename;
27-
const r = createResource(filename);
31+
const r = await createResource(filename);
2832

2933
const added = addResource(filename, r);
3034
equal(added, true);
@@ -33,11 +37,11 @@ suite('Resources', function () {
3337
deepEqual(resource, r);
3438
});
3539

36-
test('freeResource', function () {
40+
test('freeResource', async function () {
3741
let resource;
3842
const filename = __filename;
3943

40-
const added = addResource(filename, createResource(filename));
44+
const added = addResource(filename, await createResource(filename));
4145
equal(added, true);
4246

4347
resource = getResource(filename);
@@ -49,15 +53,15 @@ suite('Resources', function () {
4953
equal(resource, undefined);
5054
});
5155

52-
test('freeAllResources', function () {
56+
test('freeAllResources', async function () {
5357
let resource;
5458
let added;
5559
const filename1 = __filename;
5660
const filename2 = join(__dirname, 'index.js');
5761

58-
added = addResource(filename1, createResource(filename1));
62+
added = addResource(filename1, await createResource(filename1));
5963
equal(added, true);
60-
added = addResource(filename2, createResource(filename2));
64+
added = addResource(filename2, await createResource(filename2));
6165
equal(added, true);
6266

6367
resource = getResource(filename1);
@@ -73,14 +77,14 @@ suite('Resources', function () {
7377
equal(resource, undefined);
7478
});
7579

76-
test('getFilenames', function () {
80+
test('getFilenames', async function () {
7781
let added;
7882
const filename1 = __filename;
7983
const filename2 = join(__dirname, 'index.js');
8084

81-
added = addResource(filename1, createResource(filename1));
85+
added = addResource(filename1, await createResource(filename1));
8286
equal(added, true);
83-
added = addResource(filename2, createResource(filename2));
87+
added = addResource(filename2, await createResource(filename2));
8488
equal(added, true);
8589

8690
const expected = [filename1, filename2];

src/test/suite/watchfilecommand.test.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ const waitForVisibleRangesChange = (editor: TextEditor): Promise<void> =>
2121

2222
const promisifiedWrite = (stream: WriteStream, data: string | Buffer): Promise<void> => new Promise((resolve) => stream.end(data, resolve));
2323
const nextTick = (): Promise<void> => new Promise((resolve) => process.nextTick(resolve));
24-
const delay = async (): Promise<void> => {
25-
await setTimeout(platform() === 'win32' ? 1000 : 50);
26-
};
24+
const delay = (): Promise<unknown> => setTimeout(platform() === 'win32' ? 1000 : 50);
2725

2826
suite('WatchFileCommand', function () {
2927
let tmpDir: string;
@@ -164,8 +162,16 @@ suite('WatchFileCommand', function () {
164162
test('reuse existing output channel', async function () {
165163
const filename = __filename;
166164

167-
await commands.executeCommand('logwatcher.watchFile', filename);
168-
await commands.executeCommand('logwatcher.watchFile', filename);
165+
const [_, emitter1] = await Promise.all([
166+
waitForOutputWindow(`extension-output-`),
167+
commands.executeCommand<EventEmitter>('logwatcher.watchFile', filename),
168+
]);
169+
170+
const emitter2 = await commands.executeCommand<EventEmitter>('logwatcher.watchFile', filename);
171+
172+
equal(emitter1 === emitter2, true);
173+
notEqual(emitter1, null);
174+
notEqual(emitter2, null);
169175

170176
const expected = [filename];
171177
const actual = getFilenames();

0 commit comments

Comments
 (0)