UNPKG

8.54 kBJavaScriptView Raw
1// Copyright (c) Jupyter Development Team.
2// Distributed under the terms of the Modified BSD License.
3import { Clipboard, SessionContextDialogs } from '@jupyterlab/apputils';
4import { Cell, CodeCellModel } from '@jupyterlab/cells';
5import { CodeEditorWrapper } from '@jupyterlab/codeeditor';
6import { CodeMirrorEditorFactory, CodeMirrorMimeTypeService, EditorExtensionRegistry, EditorLanguageRegistry, ybinding } from '@jupyterlab/codemirror';
7import { Context } from '@jupyterlab/docregistry';
8import { DEFAULT_OUTPUTS as TEST_OUTPUTS, defaultRenderMime as testRenderMime } from '@jupyterlab/rendermime/lib/testutils';
9import { ServiceManager } from '@jupyterlab/services';
10import { ServiceManagerMock } from '@jupyterlab/services/lib/testutils';
11import { UUID } from '@lumino/coreutils';
12import * as defaultContent from './default.json';
13import { NotebookModel } from './model';
14import { NotebookModelFactory } from './modelfactory';
15import { NotebookPanel } from './panel';
16import { Notebook, StaticNotebook } from './widget';
17import { NotebookHistory } from './history';
18import { NotebookWidgetFactory } from './widgetfactory';
19export const DEFAULT_CONTENT = defaultContent;
20/**
21 * Create and initialize context for a notebook.
22 */
23export async function initNotebookContext(options = {}) {
24 var _a, _b, _c;
25 const factory = Private.notebookFactory;
26 const manager = options.manager || Private.getManager();
27 const path = options.path || UUID.uuid4() + '.ipynb';
28 console.debug('Initializing notebook context for', path, 'kernel:', options.startKernel);
29 const startKernel = options.startKernel === undefined ? false : options.startKernel;
30 await manager.ready;
31 const context = new Context({
32 sessionDialogs: new SessionContextDialogs(),
33 manager,
34 factory,
35 path,
36 kernelPreference: {
37 shouldStart: startKernel,
38 canStart: startKernel,
39 shutdownOnDispose: true,
40 name: (_a = manager.kernelspecs.specs) === null || _a === void 0 ? void 0 : _a.default
41 }
42 });
43 await context.initialize(true);
44 if (startKernel) {
45 await context.sessionContext.initialize();
46 await ((_c = (_b = context.sessionContext.session) === null || _b === void 0 ? void 0 : _b.kernel) === null || _c === void 0 ? void 0 : _c.info);
47 }
48 return context;
49}
50/**
51 * The default notebook content.
52 */
53export var NBTestUtils;
54(function (NBTestUtils) {
55 NBTestUtils.DEFAULT_OUTPUTS = TEST_OUTPUTS;
56 NBTestUtils.defaultEditorConfig = { ...StaticNotebook.defaultEditorConfig };
57 const editorServices = (function () {
58 const languages = new EditorLanguageRegistry();
59 EditorLanguageRegistry.getDefaultLanguages()
60 .filter(lang => ['Python'].includes(lang.name))
61 .forEach(lang => {
62 languages.addLanguage(lang);
63 });
64 const extensions = new EditorExtensionRegistry();
65 EditorExtensionRegistry.getDefaultExtensions()
66 .filter(ext => ['autoClosingBrackets'].includes(ext.name))
67 .forEach(ext => {
68 extensions.addExtension(ext);
69 });
70 extensions.addExtension({
71 name: 'binding',
72 factory: ({ model }) => EditorExtensionRegistry.createImmutableExtension(ybinding({ ytext: model.sharedModel.ysource }))
73 });
74 const factoryService = new CodeMirrorEditorFactory({
75 languages,
76 extensions
77 });
78 const mimeTypeService = new CodeMirrorMimeTypeService(languages);
79 return {
80 factoryService,
81 mimeTypeService
82 };
83 })();
84 NBTestUtils.editorFactory = editorServices.factoryService.newInlineEditor.bind(editorServices.factoryService);
85 NBTestUtils.mimeTypeService = editorServices.mimeTypeService;
86 /**
87 * Get a copy of the default rendermime instance.
88 */
89 function defaultRenderMime() {
90 return testRenderMime();
91 }
92 NBTestUtils.defaultRenderMime = defaultRenderMime;
93 NBTestUtils.clipboard = Clipboard.getInstance();
94 /**
95 * Create a base cell content factory.
96 */
97 function createBaseCellFactory() {
98 return new Cell.ContentFactory({ editorFactory: NBTestUtils.editorFactory });
99 }
100 NBTestUtils.createBaseCellFactory = createBaseCellFactory;
101 /**
102 * Create a new code cell content factory.
103 */
104 function createCodeCellFactory() {
105 return new Cell.ContentFactory({ editorFactory: NBTestUtils.editorFactory });
106 }
107 NBTestUtils.createCodeCellFactory = createCodeCellFactory;
108 /**
109 * Create a cell editor widget.
110 */
111 function createCellEditor(model) {
112 return new CodeEditorWrapper({
113 model: model !== null && model !== void 0 ? model : new CodeCellModel(),
114 factory: NBTestUtils.editorFactory
115 });
116 }
117 NBTestUtils.createCellEditor = createCellEditor;
118 /**
119 * Create a default notebook content factory.
120 */
121 function createNotebookFactory() {
122 return new Notebook.ContentFactory({ editorFactory: NBTestUtils.editorFactory });
123 }
124 NBTestUtils.createNotebookFactory = createNotebookFactory;
125 /**
126 * Create a default notebook panel content factory.
127 */
128 function createNotebookPanelFactory() {
129 return new NotebookPanel.ContentFactory({ editorFactory: NBTestUtils.editorFactory });
130 }
131 NBTestUtils.createNotebookPanelFactory = createNotebookPanelFactory;
132 /**
133 * Create a notebook widget.
134 */
135 function createNotebook(sessionContext) {
136 let history = sessionContext
137 ? {
138 kernelHistory: new NotebookHistory({ sessionContext: sessionContext })
139 }
140 : {};
141 return new Notebook({
142 rendermime: defaultRenderMime(),
143 contentFactory: createNotebookFactory(),
144 mimeTypeService: NBTestUtils.mimeTypeService,
145 notebookConfig: {
146 ...StaticNotebook.defaultNotebookConfig,
147 windowingMode: 'none'
148 },
149 ...history
150 });
151 }
152 NBTestUtils.createNotebook = createNotebook;
153 /**
154 * Create a notebook panel widget.
155 */
156 function createNotebookPanel(context) {
157 return new NotebookPanel({
158 content: createNotebook(context.sessionContext),
159 context
160 });
161 }
162 NBTestUtils.createNotebookPanel = createNotebookPanel;
163 /**
164 * Populate a notebook with default content.
165 */
166 function populateNotebook(notebook) {
167 const model = new NotebookModel();
168 model.fromJSON(DEFAULT_CONTENT);
169 notebook.model = model;
170 }
171 NBTestUtils.populateNotebook = populateNotebook;
172 function createNotebookWidgetFactory(toolbarFactory) {
173 return new NotebookWidgetFactory({
174 name: 'notebook',
175 fileTypes: ['notebook'],
176 rendermime: defaultRenderMime(),
177 toolbarFactory,
178 contentFactory: createNotebookPanelFactory(),
179 mimeTypeService: NBTestUtils.mimeTypeService,
180 editorConfig: NBTestUtils.defaultEditorConfig
181 });
182 }
183 NBTestUtils.createNotebookWidgetFactory = createNotebookWidgetFactory;
184 /**
185 * Create a context for a file.
186 */
187 async function createMockContext(startKernel = false) {
188 const path = UUID.uuid4() + '.txt';
189 const manager = new ServiceManagerMock();
190 const factory = new NotebookModelFactory({});
191 const context = new Context({
192 sessionDialogs: new SessionContextDialogs(),
193 manager,
194 factory,
195 path,
196 kernelPreference: {
197 shouldStart: startKernel,
198 canStart: startKernel,
199 autoStartDefault: startKernel
200 }
201 });
202 await context.initialize(true);
203 await context.sessionContext.initialize();
204 return context;
205 }
206 NBTestUtils.createMockContext = createMockContext;
207})(NBTestUtils || (NBTestUtils = {}));
208/**
209 * A namespace for private data.
210 */
211var Private;
212(function (Private) {
213 let manager;
214 Private.notebookFactory = new NotebookModelFactory();
215 /**
216 * Get or create the service manager singleton.
217 */
218 function getManager() {
219 if (!manager) {
220 manager = new ServiceManager({ standby: 'never' });
221 }
222 return manager;
223 }
224 Private.getManager = getManager;
225})(Private || (Private = {}));
226//# sourceMappingURL=testutils.js.map
\No newline at end of file