Path: blob/main/src/vs/workbench/api/test/browser/mainThreadBulkEdits.test.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { IWorkspaceTextEditDto } from '../../common/extHost.protocol.js';7import { mock } from '../../../../base/test/common/mock.js';8import { Event } from '../../../../base/common/event.js';9import { URI } from '../../../../base/common/uri.js';10import { FileSystemProviderCapabilities, IFileService } from '../../../../platform/files/common/files.js';11import { reviveWorkspaceEditDto } from '../../browser/mainThreadBulkEdits.js';12import { UriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentityService.js';13import { IWorkspaceTextEdit } from '../../../../editor/common/languages.js';14import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';1516suite('MainThreadBulkEdits', function () {1718ensureNoDisposablesAreLeakedInTestSuite();1920test('"Rename failed to apply edits" in monorepo with pnpm #158845', function () {212223const fileService = new class extends mock<IFileService>() {24override onDidChangeFileSystemProviderCapabilities = Event.None;25override onDidChangeFileSystemProviderRegistrations = Event.None;2627override hasProvider(uri: URI) {28return true;29}3031override hasCapability(resource: URI, capability: FileSystemProviderCapabilities): boolean {32// if (resource.scheme === 'case' && capability === FileSystemProviderCapabilities.PathCaseSensitive) {33// return false;34// }35// NO capabilities, esp not being case-sensitive36return false;37}38};3940const uriIdentityService = new UriIdentityService(fileService);4142const edits: IWorkspaceTextEditDto[] = [43{ resource: URI.from({ scheme: 'case', path: '/hello/WORLD/foo.txt' }), textEdit: { range: { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 }, text: 'sss' }, versionId: undefined },44{ resource: URI.from({ scheme: 'case', path: '/heLLO/world/fOO.txt' }), textEdit: { range: { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 }, text: 'sss' }, versionId: undefined },45{ resource: URI.from({ scheme: 'case', path: '/other/path.txt' }), textEdit: { range: { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 }, text: 'sss' }, versionId: undefined },46{ resource: URI.from({ scheme: 'foo', path: '/other/path.txt' }), textEdit: { range: { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 }, text: 'sss' }, versionId: undefined },47];484950const out = reviveWorkspaceEditDto({ edits }, uriIdentityService);5152assert.strictEqual((<IWorkspaceTextEdit>out.edits[0]).resource.path, '/hello/WORLD/foo.txt');53assert.strictEqual((<IWorkspaceTextEdit>out.edits[1]).resource.path, '/hello/WORLD/foo.txt'); // the FIRST occurrence defined the shape!54assert.strictEqual((<IWorkspaceTextEdit>out.edits[2]).resource.path, '/other/path.txt');55assert.strictEqual((<IWorkspaceTextEdit>out.edits[3]).resource.path, '/other/path.txt');5657uriIdentityService.dispose();5859});60});616263