From 5b73d1657bf22f5488bc03941f39f2c790dc4e89 Mon Sep 17 00:00:00 2001 From: yogeshwaran-c Date: Thu, 26 Mar 2026 06:28:38 +0530 Subject: [PATCH 1/2] fix: persist test coverage sort order across sessions The test coverage view's sort order was reset to 'Location' every time the view was reopened because it was stored only in an in-memory observable. Persist the sort order to workspace storage so it survives across sessions. Closes #249442 --- .../contrib/testing/browser/testCoverageView.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/vs/workbench/contrib/testing/browser/testCoverageView.ts b/src/vs/workbench/contrib/testing/browser/testCoverageView.ts index e19fc273fd5f4..13237a1e37d7c 100644 --- a/src/vs/workbench/contrib/testing/browser/testCoverageView.ts +++ b/src/vs/workbench/contrib/testing/browser/testCoverageView.ts @@ -39,6 +39,7 @@ import { IKeybindingService } from '../../../../platform/keybinding/common/keybi import { ILabelService } from '../../../../platform/label/common/label.js'; import { WorkbenchCompressibleObjectTree } from '../../../../platform/list/browser/listService.js'; import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js'; import { IQuickInputService, IQuickPickItem, QuickPickInput } from '../../../../platform/quickinput/common/quickInput.js'; import { IThemeService } from '../../../../platform/theme/common/themeService.js'; import { IResourceLabel, ResourceLabels } from '../../../browser/labels.js'; @@ -78,13 +79,23 @@ export class TestCoverageView extends ViewPane { @IThemeService themeService: IThemeService, @IHoverService hoverService: IHoverService, @ITestCoverageService private readonly coverageService: ITestCoverageService, + @IStorageService private readonly storageService: IStorageService, ) { super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, hoverService); + const storedOrder = this.storageService.getNumber('testing.coverageSortOrder', StorageScope.WORKSPACE); + if (storedOrder !== undefined && storedOrder in CoverageSortOrder) { + this.sortOrder.set(storedOrder, undefined); + } } protected override renderBody(container: HTMLElement): void { super.renderBody(container); + this._register(autorun(reader => { + const order = this.sortOrder.read(reader); + this.storageService.store('testing.coverageSortOrder', order, StorageScope.WORKSPACE, StorageTarget.MACHINE); + })); + const labels = this._register(this.instantiationService.createInstance(ResourceLabels, { onDidChangeVisibility: this.onDidChangeBodyVisibility })); this._register(autorun(reader => { From 41bed907e954bf9d06661e78affb5dfefb781034 Mon Sep 17 00:00:00 2001 From: yogeshwaran-c Date: Thu, 26 Mar 2026 06:32:11 +0530 Subject: [PATCH 2/2] fix: correct const enum validation in coverage sort persistence Use range comparison instead of 'in' operator for const enum check. --- src/vs/workbench/contrib/testing/browser/testCoverageView.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/testing/browser/testCoverageView.ts b/src/vs/workbench/contrib/testing/browser/testCoverageView.ts index 13237a1e37d7c..3dbd89389eb98 100644 --- a/src/vs/workbench/contrib/testing/browser/testCoverageView.ts +++ b/src/vs/workbench/contrib/testing/browser/testCoverageView.ts @@ -83,7 +83,7 @@ export class TestCoverageView extends ViewPane { ) { super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, hoverService); const storedOrder = this.storageService.getNumber('testing.coverageSortOrder', StorageScope.WORKSPACE); - if (storedOrder !== undefined && storedOrder in CoverageSortOrder) { + if (storedOrder !== undefined && storedOrder >= CoverageSortOrder.Coverage && storedOrder <= CoverageSortOrder.Name) { this.sortOrder.set(storedOrder, undefined); } }