From 5a92e63dbcd2d5333327577b71f2dc2c35c4d7b3 Mon Sep 17 00:00:00 2001 From: aamunger Date: Thu, 25 May 2023 14:21:09 -0700 Subject: [PATCH] test no veto when scratchpads should backup --- .../workingCopyBackupTracker.test.ts | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyBackupTracker.test.ts b/src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyBackupTracker.test.ts index e2398e4ae67..b8a7e58d6d1 100644 --- a/src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyBackupTracker.test.ts +++ b/src/vs/workbench/services/workingCopy/test/electron-sandbox/workingCopyBackupTracker.test.ts @@ -423,6 +423,49 @@ suite('WorkingCopyBackupTracker (native)', function () { await cleanup(); }); + test('onWillShutdown - scratchpads - no veto if backed up', async function () { + const { accessor, cleanup } = await createTracker(); + + class TestBackupWorkingCopy extends TestWorkingCopy { + + constructor(resource: URI) { + super(resource); + + accessor.workingCopyService.registerWorkingCopy(this); + } + + override capabilities = WorkingCopyCapabilities.Untitled | WorkingCopyCapabilities.Scratchpad; + + override isDirty(): boolean { + return false; + } + + override isModified(): boolean { + return true; + } + } + + accessor.filesConfigurationService.testOnFilesConfigurationChange({ files: { hotExit: HotExitConfiguration.ON_EXIT } }); + accessor.nativeHostService.windowCount = Promise.resolve(2); + // Set cancel to force a veto if hot exit does not trigger + accessor.fileDialogService.setConfirmResult(ConfirmResult.CANCEL); + + const resource = toResource.call(this, '/path/custom.txt'); + new TestBackupWorkingCopy(resource); + + const event = new TestBeforeShutdownEvent(); + event.reason = ShutdownReason.CLOSE; + accessor.lifecycleService.fireBeforeShutdown(event); + + const veto = await event.value; + assert.ok(!veto); + + const finalVeto = await event.finalValue?.(); + assert.ok(!finalVeto); // assert the tracker uses the internal finalVeto API + + await cleanup(); + }); + test('onWillShutdown - pending backup operations canceled and tracker suspended/resumsed', async function () { const { accessor, tracker, cleanup } = await createTracker();