Path: blob/main/src/vs/workbench/contrib/bulkEdit/test/browser/bulkCellEdits.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 { CancellationToken } from '../../../../../base/common/cancellation.js';7import { URI } from '../../../../../base/common/uri.js';8import { mockObject } from '../../../../../base/test/common/mock.js';9import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';10import { IProgress } from '../../../../../platform/progress/common/progress.js';11import { UndoRedoGroup, UndoRedoSource } from '../../../../../platform/undoRedo/common/undoRedo.js';12import { BulkCellEdits, ResourceNotebookCellEdit } from '../../browser/bulkCellEdits.js';13import { NotebookTextModel } from '../../../notebook/common/model/notebookTextModel.js';14import { CellEditType, CellUri, IResolvedNotebookEditorModel } from '../../../notebook/common/notebookCommon.js';15import { INotebookEditorModelResolverService } from '../../../notebook/common/notebookEditorModelResolverService.js';16import { TestEditorService } from '../../../../test/browser/workbenchTestServices.js';1718suite('BulkCellEdits', function () {19const store = ensureNoDisposablesAreLeakedInTestSuite();2021async function runTest(inputUri: URI, resolveUri: URI) {22const progress: IProgress<void> = { report: _ => { } };23const editorService = store.add(new TestEditorService());2425const notebook = mockObject<NotebookTextModel>()();26notebook.uri.returns(URI.file('/project/notebook.ipynb'));2728const notebookEditorModel = mockObject<IResolvedNotebookEditorModel>()({ notebook: notebook as any });29notebookEditorModel.isReadonly.returns(false);3031const notebookService = mockObject<INotebookEditorModelResolverService>()();32notebookService.resolve.returns({ object: notebookEditorModel, dispose: () => { } });3334const edits = [35new ResourceNotebookCellEdit(inputUri, { index: 0, count: 1, editType: CellEditType.Replace, cells: [] })36];37const bce = new BulkCellEdits(new UndoRedoGroup(), new UndoRedoSource(), progress, CancellationToken.None, edits, editorService, notebookService as any);38await bce.apply();3940const resolveArgs = notebookService.resolve.args[0];41assert.strictEqual(resolveArgs[0].toString(), resolveUri.toString());42}4344const notebookUri = URI.file('/foo/bar.ipynb');45test('works with notebook URI', async () => {46await runTest(notebookUri, notebookUri);47});4849test('maps cell URI to notebook URI', async () => {50await runTest(CellUri.generate(notebookUri, 5), notebookUri);51});5253test('throws for invalid cell URI', async () => {54const badCellUri = CellUri.generate(notebookUri, 5).with({ fragment: '' });55await assert.rejects(async () => await runTest(badCellUri, notebookUri));56});57});585960