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

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

export class TestCell implements ICell {
	uri: URI;
	private _onDidChangeOutputs = new Emitter<NotebookCellOutputsSplice[]>();
	onDidChangeOutputs: Event<NotebookCellOutputsSplice[]> = this._onDidChangeOutputs.event;
27 28
	private _onDidChangeMetadata = new Emitter<NotebookCellMetadata>();
	onDidChangeMetadata: Event<NotebookCellMetadata> = this._onDidChangeMetadata.event;
29 30
	private _isDirty: boolean = false;
	private _outputs: IOutput[];
R
Rob Lourens 已提交
31 32 33 34 35

	get metadata(): NotebookCellMetadata {
		return { editable: true };
	}

36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
	get outputs(): IOutput[] {
		return this._outputs;
	}

	get isDirty() {
		return this._isDirty;
	}

	set isDirty(newState: boolean) {
		this._isDirty = newState;

	}

	constructor(
		public viewType: string,
		public handle: number,
		public source: string[],
		public language: string,
		public cellKind: CellKind,
		outputs: IOutput[]
	) {
		this._outputs = outputs;
J
Johannes Rieken 已提交
58
		this.uri = CellUri.generate(URI.parse('test:///fake/notebook'), handle);
59
	}
60 61
	contentChange(): void {
		// throw new Error('Method not implemented.');
62 63
	}

64
	resolveTextBufferFactory(): PieceTreeTextBufferFactory {
65 66 67 68 69 70
		throw new Error('Method not implemented.');
	}
}

export class TestNotebookEditor implements INotebookEditor {

R
rebornix 已提交
71 72 73 74
	get viewModel() {
		return undefined;
	}

75
	constructor(
R
rebornix 已提交
76
	) { }
77

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

82 83 84 85 86 87
	isNotebookEditor = true;

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

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

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

96 97 98 99 100 101 102 103 104
	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 已提交
105 106
		throw new Error('Method not implemented.');
	}
R
rebornix 已提交
107 108 109 110 111 112 113 114 115
	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.');
	}
116

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

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

R
rebornix 已提交
192 193 194 195
// 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);
// }
196

197
export function withTestNotebook(instantiationService: IInstantiationService, blukEditService: IBulkEditService, undoRedoService: IUndoRedoService, cells: [string[], string, CellKind, IOutput[], NotebookCellMetadata][], callback: (editor: TestNotebookEditor, viewModel: NotebookViewModel) => void) {
198
	const viewType = 'notebook';
R
rebornix 已提交
199
	const editor = new TestNotebookEditor();
200
	const notebook = new NotebookTextModel(0, viewType, URI.parse('test'));
201
	notebook.cells = cells.map((cell, index) => {
202
		return new NotebookCellTextModel(notebook.uri, index, cell[0], cell[1], cell[2], cell[3], cell[4]);
203 204
	});
	const model = new NotebookEditorModel(notebook);
R
rebornix 已提交
205
	const viewModel = new NotebookViewModel(viewType, model, instantiationService, blukEditService, undoRedoService);
206 207 208 209 210 211

	callback(editor, viewModel);

	viewModel.dispose();
	return;
}