testNotebookEditor.ts 8.2 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';
R
rebornix 已提交
12
import { INotebookEditor, NotebookLayoutInfo, ICellViewModel, ICellRange, INotebookEditorMouseEvent } 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';
R
rebornix 已提交
23
import { IDisposable } from 'vs/base/common/lifecycle';
24

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

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

export class TestNotebookEditor implements INotebookEditor {

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

51
	constructor(
R
rebornix 已提交
52
	) { }
R
rebornix 已提交
53 54 55 56 57 58
	onMouseUp(listener: (e: INotebookEditorMouseEvent) => void): IDisposable {
		throw new Error('Method not implemented.');
	}
	onMouseDown(listener: (e: INotebookEditorMouseEvent) => void): IDisposable {
		throw new Error('Method not implemented.');
	}
R
rebornix 已提交
59 60 61 62 63

	setHiddenAreas(_ranges: ICellRange[]): boolean {
		throw new Error('Method not implemented.');
	}

R
rebornix 已提交
64 65 66
	getInnerWebview(): Webview | undefined {
		throw new Error('Method not implemented.');
	}
67

68 69 70 71 72 73 74 75 76 77 78 79
	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.');
	}

80 81 82 83
	executeNotebookCell(cell: ICellViewModel): Promise<void> {
		throw new Error('Method not implemented.');
	}

84 85 86 87 88 89
	isNotebookEditor = true;

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

90 91 92 93
	setCellSelection(cell: CellViewModel, selection: Range): void {
		throw new Error('Method not implemented.');
	}

R
rebornix 已提交
94 95 96
	selectElement(cell: CellViewModel): void {
		throw new Error('Method not implemented.');
	}
R
rebornix 已提交
97

98 99 100 101 102 103 104 105
	moveCellDown(cell: CellViewModel): void {
		throw new Error('Method not implemented.');
	}

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

106 107 108 109
	moveCell(cell: ICellViewModel, relativeToCell: ICellViewModel, direction: 'above' | 'below'): Promise<void> {
		throw new Error('Method not implemented.');
	}

110
	setSelection(cell: CellViewModel, selection: Range): void {
R
rebornix 已提交
111 112
		throw new Error('Method not implemented.');
	}
R
rebornix 已提交
113 114 115 116 117 118 119 120 121
	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.');
	}
122

R
rebornix 已提交
123 124
	revealLineInView(cell: CellViewModel, line: number): void {
		throw new Error('Method not implemented.');
R
rebornix 已提交
125 126 127
	}
	getLayoutInfo(): NotebookLayoutInfo {
		throw new Error('Method not implemented.');
R
rebornix 已提交
128 129 130 131 132 133
	}
	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 已提交
134 135 136 137 138 139 140 141 142 143
	}
	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 已提交
144
	revealInView(cell: CellViewModel): void {
R
rebornix 已提交
145 146
		throw new Error('Method not implemented.');
	}
R
rebornix 已提交
147
	revealInCenter(cell: CellViewModel): void {
R
rebornix 已提交
148 149
		throw new Error('Method not implemented.');
	}
R
rebornix 已提交
150
	revealInCenterIfOutsideViewport(cell: CellViewModel): void {
R
rebornix 已提交
151
		throw new Error('Method not implemented.');
152
	}
R
rebornix 已提交
153 154
	async insertNotebookCell(cell: CellViewModel, type: CellKind, direction: 'above' | 'below'): Promise<CellViewModel> {
		throw new Error('Method not implemented.');
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
	}
	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 已提交
172
	async layoutNotebookCell(cell: CellViewModel, height: number): Promise<void> {
173
		// throw new Error('Method not implemented.');
R
rebornix 已提交
174
		return;
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
	}
	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 已提交
193 194 195 196

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

R
rebornix 已提交
199 200 201 202
// 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);
// }
203

204
export function withTestNotebook(instantiationService: IInstantiationService, blukEditService: IBulkEditService, undoRedoService: IUndoRedoService, cells: [string[], string, CellKind, IOutput[], NotebookCellMetadata][], callback: (editor: TestNotebookEditor, viewModel: NotebookViewModel) => void) {
205
	const viewType = 'notebook';
R
rebornix 已提交
206
	const editor = new TestNotebookEditor();
207
	const notebook = new NotebookTextModel(0, viewType, URI.parse('test'));
208
	notebook.cells = cells.map((cell, index) => {
209
		return new NotebookCellTextModel(notebook.uri, index, cell[0], cell[1], cell[2], cell[3], cell[4]);
210 211
	});
	const model = new NotebookEditorModel(notebook);
R
rebornix 已提交
212
	const eventDispatcher = new NotebookEventDispatcher();
213
	const viewModel = new NotebookViewModel(viewType, model, eventDispatcher, null, instantiationService, blukEditService, undoRedoService);
214 215 216 217 218 219

	callback(editor, viewModel);

	viewModel.dispose();
	return;
}