Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/client/testing/testController/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,13 @@ export class PythonTestController implements ITestController, IExtensionSingleAc
workspaces.forEach((workspace) => {
this.activateLegacyWorkspace(workspace);
});
this.disposables.push(
this.workspaceService.onDidChangeWorkspaceFolders((evt) => {
evt.added.forEach((workspace) => {
this.activateLegacyWorkspace(workspace);
});
}),
);
Comment thread
eleanorjboyd marked this conversation as resolved.
}

/**
Expand Down
32 changes: 30 additions & 2 deletions src/test/testing/testController/controller.unit.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ suite('PythonTestController', () => {
sandbox.restore();
});

function createController(options?: { unittestEnabled?: boolean; interpreter?: any }): any {
function createController(options?: { unittestEnabled?: boolean; interpreter?: any; workspaceService?: any }): any {
const unittestEnabled = options?.unittestEnabled ?? false;
const interpreter =
options?.interpreter ??
Expand All @@ -57,7 +57,7 @@ suite('PythonTestController', () => {
sysPrefix: '/usr',
} as any);

const workspaceService = ({ workspaceFolders: [] } as unknown) as any;
const workspaceService = options?.workspaceService ?? (({ workspaceFolders: [] } as unknown) as any);
const configSettings = ({
getSettings: sandbox.stub().returns({
testing: {
Expand Down Expand Up @@ -223,6 +223,34 @@ suite('PythonTestController', () => {
assert.strictEqual(projects[0].projectUri.toString(), workspaceUri.toString());
});

test('Tests can be discovered in workspace folder added after the extension has been activated', async () => {
const addedFolder = vscode.Uri.file('/addedFolder');
const addedWf: vscode.WorkspaceFolder = { uri: addedFolder } as any;
const onDidChangeWorkspaceFolders = new vscode.EventEmitter<vscode.WorkspaceFoldersChangeEvent>();
const fakeDiscoveryAdapter = sandbox.stub().resolves(undefined);
Comment thread
vaclavHala marked this conversation as resolved.
sandbox.stub(projectUtils, 'createTestAdapters').returns({
discoveryAdapter: { discoverTests: fakeDiscoveryAdapter },
} as any);

const controller: PythonTestController = createController({
unittestEnabled: true,
workspaceService: {
workspaceFolders: [],
onDidChangeWorkspaceFolders: onDidChangeWorkspaceFolders.event,
getWorkspaceFolder: (uri: vscode.Uri) => (uri === addedFolder ? addedWf : undefined),
},
});
await controller.activate();

onDidChangeWorkspaceFolders.fire({
added: [addedWf],
removed: [],
});

await controller.refreshTestData(addedFolder, { forceRefresh: true });
assert.strictEqual(fakeDiscoveryAdapter.calledWith(addedFolder), true);
});

test('filters Python projects to workspace and creates adapters for each', async () => {
const workspaceUri: Uri = vscode.Uri.file('/workspace/root');

Expand Down