-
Notifications
You must be signed in to change notification settings - Fork 34.7k
Description
Background
Changes in the order tests ran in caused spurious failures in a test that used ensureNoDisposablesAreLeakedInTestSuite
. This was almost certainly a result of leaky tests further up the chain, but it's very hard to figure out which test it is. We should seek to adopt ensureNoDisposablesAreLeakedInTestSuite
in the unit tests we own.
Adoption
ensureNoDisposablesAreLeakedInTestSuite
is a utility that ensures that disposables created in a test are disposed of. This is very useful to find leaks in code you own.
If you have a setup
and teardown
blocks, make sure the function is called before the former and after the latter, like so:
suite('myCoolTests', () => {
teardown(() => { /* ... */ });
ensureNoDisposablesAreLeakedInTestSuite();
setup(() => { /* ... */ });
// ...tests
});
- Else, simply call the function at the beginning of the
suite
:
suite('myCoolTests', () => {
ensureNoDisposablesAreLeakedInTestSuite();
// ...tests
});
The method also returns a store: DisposableStore
you can use for convenience to dispose instances within your tests, like so:
suite('myCoolTests', () => {
const store = ensureNoDisposablesAreLeakedInTestSuite();
test('MyEditorWorks', () => {
const editor = store.add(new CodeEditor());
// ...assertions
});
});
It will then emit an error in the "after each" step if there are any dangling disposables. The error shown will have a stacktrace to where the leaked disposable was created.
Sometimes, it will not be the specific disposable that wasn't disposed of, but the thing that created it. You will want to walk up the displayed stack to find where the leak is.
ensureNoDisposablesAreLeakedInTestSuite
. We can do a more efficient pass later as we uncomment the leak detector.
Ask
We have a lot of tests! Please spend some time in the next debt week adding this function call to your tests, prioritizing ones that do more complex setups such as those involving code editors. It's not expected that we'll get every test in the first pass, and we can start calling out individual tests in future items.
- @connor4312
- @anthonykim1
- @aeschli
- @aiday-mar
- @alexdima
- @amunger
- @andreamah
- @bhavyaus
- @bpasero
- @brettcannon
- @chrmarti
- @daviddossett
- @dbaeumer
- @deepak1556
- @DonJayamanne
- @eleanorjboyd
- @gregvanl
- @hediet
- @joaomoreno
- @joyceerhl
- @jrieken
- @justschen
- @karrtikr
- @karthiknadig
- @lramos15
- @lszomoru
- @meganrogge
- @MeghanKulkarni
- @mjbvz
- @paulacamargo25
- @rebornix
- @roblourens
- @rzhao271
- @sandy081
- @sbatten
- @stevencl
- @TylerLeonhardt
- @Tyriar
- @ulugbekna
- @Yoyokrazy
-
Owner: @bpasero
- src/vs/workbench/services/label/test/browser/label.test.ts
- src/vs/base/parts/ipc/test/browser/ipc.mp.test.ts
- src/vs/base/parts/ipc/test/electron-sandbox/ipc.mp.test.ts
- src/vs/base/test/common/stream.test.ts
- src/vs/editor/test/common/services/modelService.test.ts
- src/vs/platform/checksum/test/node/checksumService.test.ts
- src/vs/platform/configuration/test/common/configurationService.test.ts
- src/vs/platform/files/test/browser/fileService.test.ts
- src/vs/platform/state/test/node/state.test.ts
- src/vs/platform/storage/test/electron-main/storageMainService.test.ts
- src/vs/platform/storage/test/common/storageService.test.ts
- src/vs/platform/workspaces/test/electron-main/workspacesManagementMainService.test.ts
- src/vs/workbench/contrib/codeEditor/test/browser/saveParticipant.test.ts
- src/vs/workbench/contrib/files/test/browser/editorAutoSave.test.ts
- src/vs/workbench/contrib/files/test/browser/fileOnDiskProvider.test.ts
- src/vs/workbench/contrib/files/test/browser/textFileEditorTracker.test.ts
- src/vs/workbench/services/editor/test/browser/editorService.test.ts
- src/vs/workbench/services/editor/test/browser/editorsObserver.test.ts
- src/vs/workbench/services/editor/test/browser/editorGroupsService.test.ts
- src/vs/workbench/services/history/test/browser/historyService.test.ts
- src/vs/workbench/services/lifecycle/test/electron-sandbox/lifecycleService.test.ts
- src/vs/workbench/services/storage/test/browser/storageService.test.ts
- src/vs/workbench/services/textfile/test/browser/textEditorService.test.ts
- src/vs/workbench/services/textfile/test/electron-sandbox/nativeTextFileService.io.test.ts
- src/vs/workbench/services/textfile/test/browser/textFileEditorModelManager.test.ts
- src/vs/workbench/services/textfile/test/electron-sandbox/nativeTextFileService.test.ts
- src/vs/workbench/services/textmodelResolver/test/browser/textModelResolverService.test.ts
- src/vs/workbench/services/untitled/test/browser/untitledTextEditor.test.ts
- src/vs/workbench/services/workingCopy/test/browser/fileWorkingCopyManager.test.ts
- src/vs/workbench/services/workingCopy/test/browser/resourceWorkingCopy.test.ts
- src/vs/workbench/services/workingCopy/test/browser/storedFileWorkingCopyManager.test.ts
- src/vs/workbench/services/workingCopy/test/browser/untitledFileWorkingCopyManager.test.ts
- src/vs/workbench/services/workingCopy/test/browser/storedFileWorkingCopy.test.ts
- src/vs/workbench/services/workingCopy/test/browser/untitledFileWorkingCopy.test.ts
- src/vs/workbench/services/workingCopy/test/browser/untitledScratchpadWorkingCopy.test.ts
- src/vs/workbench/services/workingCopy/test/browser/workingCopyEditorService.test.ts
- src/vs/workbench/services/workingCopy/test/browser/workingCopyFileService.test.ts
- src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyBackupTracker.test.ts
- src/vs/workbench/services/workingCopy/test/common/workingCopyService.test.ts
- src/vs/workbench/services/workingCopy/test/browser/workingCopyBackupTracker.test.ts
- src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyHistoryService.test.ts
- src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyHistoryTracker.test.ts
- src/vs/workbench/test/browser/parts/editor/editor.test.ts
- src/vs/workbench/test/browser/parts/editor/editorDiffModel.test.ts
- src/vs/workbench/test/browser/parts/editor/editorGroupModel.test.ts
- src/vs/base/parts/ipc/test/common/ipc.test.ts
- src/vs/base/test/browser/actionbar.test.ts
- src/vs/base/test/common/async.test.ts
- src/vs/base/test/common/buffer.test.ts
- src/vs/base/test/common/cancellation.test.ts
- src/vs/editor/contrib/comment/test/browser/lineCommentCommand.test.ts
- src/vs/editor/contrib/linesOperations/test/browser/moveLinesCommand.test.ts
- src/vs/editor/test/browser/commands/shiftCommand.test.ts
- src/vs/editor/test/browser/config/editorConfiguration.test.ts
- src/vs/editor/test/browser/controller/cursor.test.ts
- src/vs/editor/test/common/model/editableTextModel.test.ts
- src/vs/editor/test/common/model/model.test.ts
- src/vs/editor/test/common/model/modelDecorations.test.ts
- src/vs/editor/test/common/model/textModel.test.ts
- src/vs/platform/files/test/common/watcher.test.ts
- src/vs/workbench/api/test/browser/extHostDocumentData.test.ts
- src/vs/workbench/contrib/files/test/browser/fileEditorInput.test.ts
- src/vs/workbench/services/progress/test/browser/progressIndicator.test.ts
- src/vs/workbench/services/textfile/test/browser/textFileEditorModel.test.ts
- src/vs/workbench/test/browser/part.test.ts
- src/vs/workbench/test/browser/parts/editor/diffEditorInput.test.ts
- src/vs/workbench/test/browser/parts/editor/editorInput.test.ts
- src/vs/workbench/test/browser/parts/editor/editorModel.test.ts
-
Owner: @joaomoreno
- src/vs/base/test/browser/ui/grid/grid.test.ts
- src/vs/base/test/browser/ui/grid/gridview.test.ts
- src/vs/base/test/browser/ui/list/listView.test.ts
- src/vs/base/test/browser/ui/splitview/splitview.test.ts
- src/vs/base/test/browser/ui/tree/asyncDataTree.test.ts
- src/vs/base/test/browser/ui/tree/dataTree.test.ts
- src/vs/base/test/browser/ui/tree/objectTree.test.ts
- src/vs/base/test/common/paging.test.ts
- src/vs/base/test/node/zip/zip.test.ts
-
Owner: @rebornix
- src/vs/workbench/contrib/notebook/test/browser/notebookKernelService.test.ts
- src/vs/base/test/browser/ui/list/listWidget.test.ts
- src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookKernelHistory.test.ts
- src/vs/workbench/services/keybinding/test/browser/browserKeyboardMapper.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookWorkbenchToolbar.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookStickyScroll.test.ts
- src/vs/workbench/contrib/notebook/test/browser/cellOperations.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookCellList.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookCommon.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookDiff.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookEditor.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookFolding.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookSelection.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookTextModel.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookViewModel.test.ts
-
Owner: @amunger
- src/vs/workbench/api/test/browser/extHostNotebookKernel.test.ts
- src/vs/workbench/api/test/browser/extHostNotebook.test.ts
- src/vs/workbench/contrib/notebook/test/browser/contrib/notebookOutline.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookEditorModel.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookServiceImpl.test.ts
- src/vs/workbench/contrib/notebook/test/browser/contrib/find.test.ts
- src/vs/workbench/contrib/notebook/test/browser/contrib/notebookClipboard.test.ts
- src/vs/workbench/contrib/notebook/test/browser/contrib/notebookUndoRedo.test.ts
-
Owner: @jrieken
- src/vs/editor/contrib/codeAction/test/browser/codeAction.test.ts
- src/vs/editor/contrib/codeAction/test/browser/codeActionModel.test.ts
- src/vs/editor/contrib/documentSymbols/test/browser/outlineModel.test.ts
- src/vs/editor/contrib/snippet/test/browser/snippetController2.test.ts
- src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts
- src/vs/editor/contrib/suggest/test/browser/wordDistance.test.ts
- src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts
- src/vs/editor/test/browser/services/openerService.test.ts
- src/vs/platform/commands/test/common/commands.test.ts
- src/vs/platform/actions/test/common/menuService.test.ts
- src/vs/platform/uriIdentity/test/common/uriIdentityService.test.ts
- src/vs/workbench/api/test/browser/extHostDiagnostics.test.ts
- src/vs/workbench/api/test/browser/extHostConfiguration.test.ts
- src/vs/workbench/api/test/browser/extHostApiCommands.test.ts
- src/vs/workbench/api/test/browser/extHostDocumentsAndEditors.test.ts
- src/vs/workbench/api/test/browser/extHostDecorations.test.ts
- src/vs/workbench/api/test/browser/extHostEditorTabs.test.ts
- src/vs/workbench/api/test/browser/extHostFileSystemEventService.test.ts
- src/vs/workbench/api/test/browser/extHostDocumentSaveParticipant.test.ts
- src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts
- src/vs/workbench/api/test/browser/mainThreadBulkEdits.test.ts
- src/vs/workbench/api/test/browser/mainThreadCommands.test.ts
- src/vs/workbench/api/test/browser/mainThreadDocumentContentProviders.test.ts
- src/vs/workbench/api/test/browser/mainThreadDiagnostics.test.ts
- src/vs/workbench/api/test/browser/mainThreadDocumentsAndEditors.test.ts
- src/vs/workbench/contrib/bulkEdit/test/browser/bulkEditPreview.test.ts
- src/vs/workbench/contrib/snippets/test/browser/snippetsService.test.ts
- src/vs/workbench/services/commands/test/common/commandService.test.ts
- src/vs/workbench/services/decorations/test/browser/decorationsService.test.ts
- src/vs/workbench/services/telemetry/test/node/commonProperties.test.ts
- src/vs/workbench/test/browser/parts/editor/breadcrumbModel.test.ts
- src/vs/editor/contrib/suggest/test/browser/suggestInlineCompletions.test.ts
- src/vs/workbench/contrib/chat/test/common/chatVariables.test.ts
- src/vs/platform/instantiation/test/common/instantiationService.test.ts
- src/vs/platform/markers/test/common/markerService.test.ts
-
Owner: @aeschli
-
Owner: @alexdima
- src/vs/editor/contrib/find/test/browser/findModel.test.ts
- src/vs/editor/contrib/semanticTokens/test/browser/documentSemanticTokens.test.ts
- src/vs/editor/contrib/snippet/test/browser/snippetController2.old.test.ts
- src/vs/editor/standalone/test/browser/monarch.test.ts
- src/vs/editor/standalone/test/browser/standaloneServices.test.ts
- src/vs/editor/test/browser/controller/textAreaInput.test.ts
- src/vs/editor/test/browser/viewModel/viewModelDecorations.test.ts
- src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts
- src/vs/editor/test/common/model/linesTextBuffer/linesTextBuffer.test.ts
- src/vs/editor/test/common/model/editableTextModelAuto.test.ts
- src/vs/editor/test/common/model/linesTextBuffer/linesTextBufferBuilder.test.ts
- src/vs/editor/test/common/modes/languageConfiguration.test.ts
- src/vs/editor/test/common/services/languageService.test.ts
- src/vs/platform/remote/test/electron-sandbox/remoteAuthorityResolverService.test.ts
- src/vs/workbench/api/test/browser/mainThreadEditors.test.ts
- src/vs/workbench/services/extensions/test/browser/extensionService.test.ts
- src/vs/workbench/services/extensions/test/common/extensionManifestPropertiesService.test.ts
- src/vs/workbench/services/extensions/test/common/rpcProtocol.test.ts
- src/vs/editor/test/common/model/tokensStore.test.ts
-
Owner: @hediet
-
Owner: @mjbvz
-
Owner: @aiday-mar
-
Owner: @sandy081
- src/vs/platform/userDataSync/test/common/keybindingsSync.test.ts
- src/vs/platform/userDataSync/test/common/settingsSync.test.ts
- src/vs/platform/userDataSync/test/common/snippetsSync.test.ts
- src/vs/platform/userDataSync/test/common/tasksSync.test.ts
- src/vs/platform/userDataSync/test/common/synchronizer.test.ts
- src/vs/platform/userDataSync/test/common/userDataProfilesManifestSync.test.ts
- src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsActions.test.ts
- src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsWorkbenchService.test.ts
- src/vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test.ts
- src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsViews.test.ts
- src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionRecommendationsService.test.tstest.ts
- src/vs/editor/test/common/services/textResourceConfigurationService.test.ts
- src/vs/platform/configuration/test/common/configurations.test.ts
- src/vs/platform/configuration/test/common/policyConfiguration.test.ts
- src/vs/platform/extensionManagement/test/common/extensionGalleryService.test.ts
- src/vs/platform/extensionManagement/test/common/extensionsProfileScannerService.test.ts
- src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts
- src/vs/platform/userDataProfile/test/common/userDataProfileService.test.ts
- src/vs/platform/userDataProfile/test/electron-main/userDataProfileMainService.test.ts
- src/vs/platform/userDataProfile/test/common/userDataProfileStorageService.test.ts
- src/vs/platform/userDataSync/test/common/globalStateSync.test.ts
- src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts
- src/vs/platform/userDataSync/test/common/keybindingsMerge.test.ts
- src/vs/platform/userDataSync/test/common/userDataAutoSyncService.test.ts
- src/vs/platform/userDataSync/test/common/userDataSyncService.test.ts
- src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts
- src/vs/workbench/services/configuration/test/browser/configuration.test.ts
- src/vs/workbench/services/extensions/test/browser/extensionStorageMigration.test.ts
- src/vs/workbench/services/keybinding/test/browser/keybindingEditing.test.ts
- src/vs/workbench/services/preferences/test/browser/keybindingsEditorModel.test.ts
- src/vs/workbench/services/views/test/browser/viewDescriptorService.test.ts
- src/vs/workbench/services/views/test/browser/viewContainerModel.test.ts
- src/vs/platform/extensionManagement/test/node/installGalleryExtensionTask.test.ts
- src/vs/workbench/services/configuration/test/browser/configurationService.test.ts
- src/vs/workbench/services/configuration/test/browser/configurationEditing.test.ts
-
Owner: @Tyriar
- src/vs/platform/backup/test/electron-main/backupMainService.test.ts
- src/vs/platform/terminal/test/common/requestStore.test.ts
- src/vs/workbench/contrib/terminal/test/browser/capabilities/partialCommandDetectionCapability.test.ts
- src/vs/workbench/contrib/terminal/test/browser/capabilities/commandDetectionCapability.test.tsts
- src/vs/workbench/contrib/terminal/test/browser/capabilities/terminalCapabilityStore.test.ts
- src/vs/workbench/contrib/terminal/test/browser/terminalConfigHelper.test.ts
- src/vs/workbench/contrib/terminal/test/browser/terminalInstanceService.test.ts
- src/vs/workbench/contrib/terminal/test/browser/terminalProcessManager.test.ts
- src/vs/workbench/contrib/terminal/test/browser/terminalStatusList.test.ts
- src/vs/workbench/contrib/terminal/test/browser/terminalService.test.ts
- src/vs/workbench/contrib/terminal/test/browser/xterm/shellIntegrationAddon.test.ts
- src/vs/workbench/contrib/terminal/test/browser/xterm/lineDataEventAddon.test.ts
- src/vs/workbench/contrib/terminal/test/browser/xterm/decorationAddon.test.ts
- src/vs/workbench/contrib/terminal/test/browser/xterm/xtermTerminal.test.ts
- src/vs/workbench/contrib/terminal/test/common/history.test.ts
- src/vs/workbench/contrib/terminal/test/common/environmentVariableService.test.ts
- src/vs/workbench/contrib/terminalContrib/links/test/browser/terminalLinkOpeners.test.ts
- src/vs/workbench/contrib/terminalContrib/links/test/browser/terminalLocalLinkDetector.test.ts
- src/vs/workbench/contrib/terminalContrib/links/test/browser/terminalLinkManager.test.ts
- src/vs/workbench/contrib/terminalContrib/links/test/browser/terminalWordLinkDetector.test.ts
- src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyBackupService.test.ts
-
Owner: @roblourens
- src/vs/platform/contextkey/test/browser/contextkey.test.ts
- src/vs/workbench/api/test/browser/mainThreadWorkspace.test.ts
- src/vs/workbench/api/test/node/extHostSearch.test.ts
- src/vs/workbench/contrib/chat/test/common/chatModel.test.ts
- src/vs/workbench/contrib/chat/test/common/chatService.test.ts
- src/vs/workbench/contrib/notebook/test/browser/cellDnd.test.ts
- src/vs/workbench/contrib/notebook/test/browser/contrib/contributedStatusBarItemController.test.tstest.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookExecutionStateService.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookExecutionService.test.ts
- src/vs/workbench/services/preferences/test/browser/preferencesService.test.ts
- src/vs/workbench/services/search/test/node/textSearchManager.test.ts
-
Owner: @TylerLeonhardt
-
Owner: @connor4312
- src/vs/workbench/api/test/browser/extHostTesting.test.ts
- src/vs/workbench/api/test/browser/mainThreadManagedSockets.test.ts
- src/vs/workbench/contrib/notebook/test/browser/notebookRendererMessagingService.test.ts
- src/vs/workbench/contrib/testing/test/browser/explorerProjections/hierarchalByLocation.test.tsts
- src/vs/workbench/contrib/testing/test/common/testExplorerFilterState.test.ts
- src/vs/workbench/contrib/terminalContrib/typeAhead/test/browser/terminalTypeAhead.test.ts
- src/vs/workbench/contrib/testing/test/browser/explorerProjections/hierarchalByName.test.ts
- src/vs/workbench/contrib/testing/test/common/testProfileService.test.ts
- src/vs/workbench/contrib/testing/test/common/testResultStorage.test.ts
- src/vs/workbench/contrib/testing/test/common/testResultService.test.ts
- src/vs/workbench/api/test/browser/mainThreadTreeViews.test.ts
-
Owner: @lramos15
- src/vs/workbench/contrib/files/test/browser/explorerView.test.ts
- src/vs/platform/telemetry/test/common/telemetryLogAppender.test.ts
- src/vs/workbench/api/test/browser/extHostTelemetry.test.ts
- src/vs/workbench/services/editor/test/browser/editorResolverService.test.ts
- src/vs/workbench/services/telemetry/test/browser/commonProperties.test.ts
-
Owner: @alexr00
-
Owner: @andreamah
- src/vs/workbench/contrib/search/test/browser/searchNotebookHelpers.test.ts
- src/vs/workbench/contrib/search/test/browser/searchActions.test.ts
- src/vs/workbench/contrib/search/test/browser/searchResult.test.ts
- src/vs/workbench/contrib/search/test/browser/searchModel.test.ts
- src/vs/workbench/contrib/search/test/browser/searchViewlet.test.ts
-
Owner: @meganrogge
- src/vs/workbench/contrib/tasks/test/browser/taskTerminalStatus.test.ts
- src/vs/workbench/contrib/terminal/test/browser/terminalInstance.test.ts
- src/vs/workbench/contrib/terminalContrib/quickFix/test/browser/quickFixAddon.test.ts
- src/vs/workbench/contrib/terminal/test/common/terminalDataBuffering.test.ts
- src/vs/workbench/contrib/terminalContrib/accessibility/test/browser/bufferContentTracker.test.tstest.ts
-
Owner: @lszomoru