testNotebookEditor.ts 7.6 KB
Newer Older
1 2 3 4 5 6 7
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import { URI } from 'vs/base/common/uri';
import { PieceTreeTextBufferFactory } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder';
R
rebornix 已提交
8
import { CellKind, IOutput, CellUri, NotebookCellMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
R
rebornix 已提交
9
import { NotebookViewModel, IModelDecorationsChangeAccessor, CellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel';
10 11
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { NotebookEditorModel } from 'vs/workbench/contrib/notebook/browser/notebookEditorInput';
12
import { INotebookEditor, NotebookLayoutInfo, ICellViewModel } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
13
import { IMouseWheelEvent } from 'vs/base/browser/mouseEvent';
R
rebornix 已提交
14
import { OutputRenderer } from 'vs/workbench/contrib/notebook/browser/view/output/outputRenderer';
15
import { BareFontInfo } from 'vs/editor/common/config/fontInfo';
R
rebornix 已提交
16
import { Range } from 'vs/editor/common/core/range';
R
rebornix 已提交
17 18
import { IBulkEditService } from 'vs/editor/browser/services/bulkEditService';
import { IUndoRedoService } from 'vs/platform/undoRedo/common/undoRedo';
19 20
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
R
rebornix 已提交
21
import { NotebookEventDispatcher } from 'vs/workbench/contrib/notebook/browser/viewModel/eventDispatcher';
R
rebornix 已提交
22
import { Webview } from 'vs/workbench/contrib/webview/browser/webview';
23

R
rebornix 已提交
24
export class TestCell extends NotebookCellTextModel {
25 26
	constructor(
		public viewType: string,
R
rebornix 已提交
27 28 29 30
		handle: number,
		source: string[],
		language: string,
		cellKind: CellKind,
31 32
		outputs: IOutput[]
	) {
R
rebornix 已提交
33
		super(CellUri.generate(URI.parse('test:///fake/notebook'), handle), handle, source, language, cellKind, outputs, undefined);
34
	}
35 36
	contentChange(): void {
		// throw new Error('Method not implemented.');
37 38
	}

39
	resolveTextBufferFactory(): PieceTreeTextBufferFactory {
40 41 42 43 44 45
		throw new Error('Method not implemented.');
	}
}

export class TestNotebookEditor implements INotebookEditor {

R
rebornix 已提交
46 47 48 49
	get viewModel() {
		return undefined;
	}

50
	constructor(
R
rebornix 已提交
51
	) { }
R
rebornix 已提交
52 53 54
	getInnerWebview(): Webview | undefined {
		throw new Error('Method not implemented.');
	}
55

56 57 58 59 60 61 62 63 64 65 66 67
	cancelNotebookCellExecution(cell: ICellViewModel): void {
		throw new Error('Method not implemented.');
	}

	executeNotebook(): Promise<void> {
		throw new Error('Method not implemented.');
	}

	cancelNotebookExecution(): void {
		throw new Error('Method not implemented.');
	}

68 69 70 71
	executeNotebookCell(cell: ICellViewModel): Promise<void> {
		throw new Error('Method not implemented.');
	}

72 73 74 75 76 77
	isNotebookEditor = true;

	postMessage(message: any): void {
		throw new Error('Method not implemented.');
	}

78 79 80 81
	setCellSelection(cell: CellViewModel, selection: Range): void {
		throw new Error('Method not implemented.');
	}

R
rebornix 已提交
82 83 84
	selectElement(cell: CellViewModel): void {
		throw new Error('Method not implemented.');
	}
R
rebornix 已提交
85

86 87 88 89 90 91 92 93 94
	moveCellDown(cell: CellViewModel): void {
		throw new Error('Method not implemented.');
	}

	moveCellUp(cell: CellViewModel): void {
		throw new Error('Method not implemented.');
	}

	setSelection(cell: CellViewModel, selection: Range): void {
R
rebornix 已提交
95 96
		throw new Error('Method not implemented.');
	}
R
rebornix 已提交
97 98 99 100 101 102 103 104 105
	revealRangeInView(cell: CellViewModel, range: Range): void {
		throw new Error('Method not implemented.');
	}
	revealRangeInCenter(cell: CellViewModel, range: Range): void {
		throw new Error('Method not implemented.');
	}
	revealRangeInCenterIfOutsideViewport(cell: CellViewModel, range: Range): void {
		throw new Error('Method not implemented.');
	}
106

R
rebornix 已提交
107 108
	revealLineInView(cell: CellViewModel, line: number): void {
		throw new Error('Method not implemented.');
R
rebornix 已提交
109 110 111
	}
	getLayoutInfo(): NotebookLayoutInfo {
		throw new Error('Method not implemented.');
R
rebornix 已提交
112 113 114 115 116 117
	}
	revealLineInCenterIfOutsideViewport(cell: CellViewModel, line: number): void {
		throw new Error('Method not implemented.');
	}
	revealLineInCenter(cell: CellViewModel, line: number): void {
		throw new Error('Method not implemented.');
R
rebornix 已提交
118 119 120 121 122 123 124 125 126 127
	}
	focus(): void {
		throw new Error('Method not implemented.');
	}
	showFind(): void {
		throw new Error('Method not implemented.');
	}
	hideFind(): void {
		throw new Error('Method not implemented.');
	}
R
rebornix 已提交
128
	revealInView(cell: CellViewModel): void {
R
rebornix 已提交
129 130
		throw new Error('Method not implemented.');
	}
R
rebornix 已提交
131
	revealInCenter(cell: CellViewModel): void {
R
rebornix 已提交
132 133
		throw new Error('Method not implemented.');
	}
R
rebornix 已提交
134
	revealInCenterIfOutsideViewport(cell: CellViewModel): void {
R
rebornix 已提交
135
		throw new Error('Method not implemented.');
136
	}
137
	async insertNotebookCell(cell: CellViewModel, type: CellKind, direction: 'above' | 'below'): Promise<void> {
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
		// throw new Error('Method not implemented.');
	}
	deleteNotebookCell(cell: CellViewModel): void {
		// throw new Error('Method not implemented.');
	}
	editNotebookCell(cell: CellViewModel): void {
		// throw new Error('Method not implemented.');
	}
	saveNotebookCell(cell: CellViewModel): void {
		// throw new Error('Method not implemented.');
	}
	focusNotebookCell(cell: CellViewModel, focusEditor: boolean): void {
		// throw new Error('Method not implemented.');
	}
	getActiveCell(): CellViewModel | undefined {
		// throw new Error('Method not implemented.');
		return;
	}
R
rebornix 已提交
156
	async layoutNotebookCell(cell: CellViewModel, height: number): Promise<void> {
157
		// throw new Error('Method not implemented.');
R
rebornix 已提交
158
		return;
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
	}
	createInset(cell: CellViewModel, output: IOutput, shadowContent: string, offset: number): void {
		// throw new Error('Method not implemented.');
	}
	removeInset(output: IOutput): void {
		// throw new Error('Method not implemented.');
	}
	triggerScroll(event: IMouseWheelEvent): void {
		// throw new Error('Method not implemented.');
	}
	getFontInfo(): BareFontInfo | undefined {
		return BareFontInfo.createFromRawSettings({
			fontFamily: 'Monaco',
		}, 1, true);
	}
	getOutputRenderer(): OutputRenderer {
		throw new Error('Method not implemented.');
	}
R
rebornix 已提交
177 178 179 180

	changeDecorations(callback: (changeAccessor: IModelDecorationsChangeAccessor) => any): any {
		throw new Error('Method not implemented.');
	}
181 182
}

R
rebornix 已提交
183 184 185 186
// export function createTestCellViewModel(instantiationService: IInstantiationService, viewType: string, notebookHandle: number, cellhandle: number, source: string[], language: string, cellKind: CellKind, outputs: IOutput[]) {
// 	const mockCell = new TestCell(viewType, cellhandle, source, language, cellKind, outputs);
// 	return createCellViewModel(instantiationService, viewType, notebookHandle, mockCell);
// }
187

188
export function withTestNotebook(instantiationService: IInstantiationService, blukEditService: IBulkEditService, undoRedoService: IUndoRedoService, cells: [string[], string, CellKind, IOutput[], NotebookCellMetadata][], callback: (editor: TestNotebookEditor, viewModel: NotebookViewModel) => void) {
189
	const viewType = 'notebook';
R
rebornix 已提交
190
	const editor = new TestNotebookEditor();
191
	const notebook = new NotebookTextModel(0, viewType, URI.parse('test'));
192
	notebook.cells = cells.map((cell, index) => {
193
		return new NotebookCellTextModel(notebook.uri, index, cell[0], cell[1], cell[2], cell[3], cell[4]);
194 195
	});
	const model = new NotebookEditorModel(notebook);
R
rebornix 已提交
196
	const eventDispatcher = new NotebookEventDispatcher();
197
	const viewModel = new NotebookViewModel(viewType, model, eventDispatcher, null, instantiationService, blukEditService, undoRedoService);
198 199 200 201 202 203

	callback(editor, viewModel);

	viewModel.dispose();
	return;
}