mockcontext.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import expect = require('expect.js');
  4. import {
  5. IKernelId, IKernel, IKernelSpecIds, ISessionId, IContentsModel,
  6. IKernelLanguageInfo
  7. } from 'jupyter-js-services';
  8. import {
  9. MockKernel
  10. } from 'jupyter-js-services/lib/mockkernel';
  11. import {
  12. IDisposable
  13. } from 'phosphor-disposable';
  14. import {
  15. ISignal, Signal
  16. } from 'phosphor-signaling';
  17. import {
  18. Widget
  19. } from 'phosphor-widget';
  20. import {
  21. IDocumentContext, IDocumentModel
  22. } from '../../../lib/docregistry';
  23. /**
  24. * The default kernel spec ids.
  25. */
  26. const KERNELSPECS: IKernelSpecIds = {
  27. default: 'python',
  28. kernelspecs: {
  29. python: {
  30. name: 'python',
  31. spec: {
  32. language: 'python',
  33. argv: [],
  34. display_name: 'Python',
  35. env: {}
  36. },
  37. resources: {}
  38. },
  39. shell: {
  40. name: 'shell',
  41. spec: {
  42. language: 'shell',
  43. argv: [],
  44. display_name: 'Shell',
  45. env: {}
  46. },
  47. resources: {}
  48. }
  49. }
  50. };
  51. /**
  52. * The default language infos.
  53. */
  54. const LANGUAGE_INFOS: { [key: string]: IKernelLanguageInfo } = {
  55. python: {
  56. name: 'python',
  57. version: '1',
  58. mimetype: 'text/x-python',
  59. file_extension: '.py',
  60. pygments_lexer: 'python',
  61. codemirror_mode: 'python',
  62. nbconverter_exporter: ''
  63. },
  64. shell: {
  65. name: 'shell',
  66. version: '1',
  67. mimetype: 'text/x-sh',
  68. file_extension: '.sh',
  69. pygments_lexer: 'shell',
  70. codemirror_mode: 'shell',
  71. nbconverter_exporter: ''
  72. }
  73. };
  74. export
  75. class MockContext implements IDocumentContext {
  76. constructor(model: IDocumentModel) {
  77. this._model = model;
  78. }
  79. get kernelChanged(): ISignal<MockContext, IKernel> {
  80. return Private.kernelChangedSignal.bind(this);
  81. }
  82. get pathChanged(): ISignal<MockContext, string> {
  83. return Private.pathChangedSignal.bind(this);
  84. }
  85. get dirtyCleared(): ISignal<MockContext, void> {
  86. return Private.dirtyClearedSignal.bind(this);
  87. }
  88. get id(): string {
  89. return '';
  90. }
  91. get model(): IDocumentModel {
  92. return this._model;
  93. }
  94. get kernel(): IKernel {
  95. return this._kernel;
  96. }
  97. get path(): string {
  98. return '';
  99. }
  100. get contentsModel(): IContentsModel {
  101. return void 0;
  102. }
  103. get kernelspecs(): IKernelSpecIds {
  104. return KERNELSPECS;
  105. }
  106. get isDisposed(): boolean {
  107. return this._model === null;
  108. }
  109. dispose(): void {
  110. this._model.dispose();
  111. this._model = null;
  112. }
  113. changeKernel(options: IKernelId): Promise<IKernel> {
  114. this._kernel = new MockKernel(options);
  115. if (options.name) {
  116. let name = options.name;
  117. if (!LANGUAGE_INFOS[name]) {
  118. name = KERNELSPECS['default'];
  119. }
  120. let kernel = this._kernel as MockKernel;
  121. kernel.setKernelSpec(KERNELSPECS.kernelspecs[name].spec);
  122. kernel.setKernelInfo({
  123. protocol_version: '1',
  124. implementation: 'foo',
  125. implementation_version: '1',
  126. language_info: LANGUAGE_INFOS[name],
  127. banner: 'Hello',
  128. help_links: {}
  129. });
  130. }
  131. this.kernelChanged.emit(this._kernel);
  132. return Promise.resolve(this._kernel);
  133. }
  134. save(): Promise<void> {
  135. return Promise.resolve(void 0);
  136. }
  137. saveAs(path: string): Promise<void> {
  138. return Promise.resolve(void 0);
  139. }
  140. revert(): Promise<void> {
  141. return Promise.resolve(void 0);
  142. }
  143. listSessions(): Promise<ISessionId[]> {
  144. return Promise.resolve([] as ISessionId[]);
  145. }
  146. addSibling(widget: Widget): IDisposable {
  147. return void 0;
  148. }
  149. private _model: IDocumentModel = null;
  150. private _kernel: IKernel = null;
  151. }
  152. /**
  153. * A namespace for private data.
  154. */
  155. namespace Private {
  156. /**
  157. * A signal emitted when the kernel changes.
  158. */
  159. export
  160. const kernelChangedSignal = new Signal<MockContext, IKernel>();
  161. /**
  162. * A signal emitted when the path changes.
  163. */
  164. export
  165. const pathChangedSignal = new Signal<MockContext, string>();
  166. /**
  167. * A signal emitted when the model is saved or reverted.
  168. */
  169. export
  170. const dirtyClearedSignal = new Signal<MockContext, void>();
  171. }