Path: blob/main/src/vs/workbench/contrib/notebook/test/browser/cellDnd.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 { performCellDropEdits } from '../../browser/view/cellParts/cellDnd.js';6import { CellKind } from '../../common/notebookCommon.js';7import { withTestNotebook } from './testNotebookEditor.js';8import assert from 'assert';9import { ICellRange } from '../../common/notebookRange.js';10import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';1112interface IBeginningState {13startOrder: string[];14selections: ICellRange[];15focus: number;16}1718interface IDragAction {19dragIdx: number;20dragOverIdx: number;21direction: 'above' | 'below';22}2324interface IEndState {25endOrder: string[];26selection: ICellRange;27focus: number;28}2930async function testCellDnd(beginning: IBeginningState, dragAction: IDragAction, end: IEndState) {31await withTestNotebook(32beginning.startOrder.map(text => [text, 'plaintext', CellKind.Code, []]),33(editor, viewModel) => {34editor.setSelections(beginning.selections);35editor.setFocus({ start: beginning.focus, end: beginning.focus + 1 });36performCellDropEdits(editor, viewModel.cellAt(dragAction.dragIdx)!, dragAction.direction, viewModel.cellAt(dragAction.dragOverIdx)!);3738for (const i in end.endOrder) {39assert.equal(viewModel.viewCells[i].getText(), end.endOrder[i]);40}4142assert.equal(editor.getSelections().length, 1);43assert.deepStrictEqual(editor.getSelections()[0], end.selection);44assert.deepStrictEqual(editor.getFocus(), { start: end.focus, end: end.focus + 1 });45});46}4748suite('cellDND', () => {49ensureNoDisposablesAreLeakedInTestSuite();5051test('drag 1 cell', async () => {52await testCellDnd(53{54startOrder: ['0', '1', '2', '3'],55selections: [{ start: 0, end: 1 }],56focus: 057},58{59dragIdx: 0,60dragOverIdx: 1,61direction: 'below'62},63{64endOrder: ['1', '0', '2', '3'],65selection: { start: 1, end: 2 },66focus: 167}68);69});7071test('drag multiple contiguous cells down', async () => {72await testCellDnd(73{74startOrder: ['0', '1', '2', '3'],75selections: [{ start: 1, end: 3 }],76focus: 177},78{79dragIdx: 1,80dragOverIdx: 3,81direction: 'below'82},83{84endOrder: ['0', '3', '1', '2'],85selection: { start: 2, end: 4 },86focus: 287}88);89});9091test('drag multiple contiguous cells up', async () => {92await testCellDnd(93{94startOrder: ['0', '1', '2', '3'],95selections: [{ start: 2, end: 4 }],96focus: 297},98{99dragIdx: 3,100dragOverIdx: 0,101direction: 'above'102},103{104endOrder: ['2', '3', '0', '1'],105selection: { start: 0, end: 2 },106focus: 0107}108);109});110111test('drag ranges down', async () => {112await testCellDnd(113{114startOrder: ['0', '1', '2', '3'],115selections: [{ start: 0, end: 1 }, { start: 2, end: 3 }],116focus: 0117},118{119dragIdx: 0,120dragOverIdx: 3,121direction: 'below'122},123{124endOrder: ['1', '3', '0', '2'],125selection: { start: 2, end: 4 },126focus: 2127}128);129});130131test('drag ranges up', async () => {132await testCellDnd(133{134startOrder: ['0', '1', '2', '3'],135selections: [{ start: 1, end: 2 }, { start: 3, end: 4 }],136focus: 1137},138{139dragIdx: 1,140dragOverIdx: 0,141direction: 'above'142},143{144endOrder: ['1', '3', '0', '2'],145selection: { start: 0, end: 2 },146focus: 0147}148);149});150151test('drag ranges between ranges', async () => {152await testCellDnd(153{154startOrder: ['0', '1', '2', '3'],155selections: [{ start: 0, end: 1 }, { start: 3, end: 4 }],156focus: 0157},158{159dragIdx: 0,160dragOverIdx: 1,161direction: 'below'162},163{164endOrder: ['1', '0', '3', '2'],165selection: { start: 1, end: 3 },166focus: 1167}168);169});170171test('drag ranges just above a range', async () => {172await testCellDnd(173{174startOrder: ['0', '1', '2', '3'],175selections: [{ start: 1, end: 2 }, { start: 3, end: 4 }],176focus: 1177},178{179dragIdx: 1,180dragOverIdx: 1,181direction: 'above'182},183{184endOrder: ['0', '1', '3', '2'],185selection: { start: 1, end: 3 },186focus: 1187}188);189});190191test('drag ranges inside a range', async () => {192await testCellDnd(193{194startOrder: ['0', '1', '2', '3'],195selections: [{ start: 0, end: 2 }, { start: 3, end: 4 }],196focus: 0197},198{199dragIdx: 0,200dragOverIdx: 0,201direction: 'below'202},203{204endOrder: ['0', '1', '3', '2'],205selection: { start: 0, end: 3 },206focus: 0207}208);209});210211test('dragged cell is not focused or selected', async () => {212await testCellDnd(213{214startOrder: ['0', '1', '2', '3'],215selections: [{ start: 1, end: 2 }],216focus: 1217},218{219dragIdx: 2,220dragOverIdx: 3,221direction: 'below'222},223{224endOrder: ['0', '1', '3', '2'],225selection: { start: 3, end: 4 },226focus: 3227}228);229});230});231232233