|
@@ -1,7 +1,6 @@
|
|
|
// Copyright (c) Jupyter Development Team.
|
|
|
-// Distributed under the terms of the Modified BSD License.
|
|
|
|
|
|
-import { expect } from 'chai';
|
|
|
+import 'jest';
|
|
|
|
|
|
import { Terminal as TerminalNS, TerminalManager } from '@jupyterlab/services';
|
|
|
|
|
@@ -9,9 +8,23 @@ import { Message, MessageLoop } from '@lumino/messaging';
|
|
|
|
|
|
import { Widget } from '@lumino/widgets';
|
|
|
|
|
|
-import { Terminal } from '@jupyterlab/terminal';
|
|
|
+import { Terminal } from '../src';
|
|
|
|
|
|
-import { framePromise, testEmission } from '@jupyterlab/testutils';
|
|
|
+import {
|
|
|
+ framePromise,
|
|
|
+ testEmission,
|
|
|
+ JupyterServer
|
|
|
+} from '@jupyterlab/testutils';
|
|
|
+
|
|
|
+const server = new JupyterServer();
|
|
|
+
|
|
|
+beforeAll(async () => {
|
|
|
+ await server.start();
|
|
|
+});
|
|
|
+
|
|
|
+afterAll(async () => {
|
|
|
+ await server.shutdown();
|
|
|
+});
|
|
|
|
|
|
class LogTerminal extends Terminal {
|
|
|
methods: string[] = [];
|
|
@@ -51,14 +64,15 @@ describe('terminal/index', () => {
|
|
|
describe('Terminal', () => {
|
|
|
let widget: LogTerminal;
|
|
|
let session: TerminalNS.ITerminalConnection;
|
|
|
- const manager = new TerminalManager();
|
|
|
+ let manager: TerminalManager;
|
|
|
|
|
|
- before(async () => {
|
|
|
+ beforeAll(async () => {
|
|
|
+ manager = new TerminalManager();
|
|
|
session = await manager.startNew();
|
|
|
});
|
|
|
|
|
|
beforeEach(() => {
|
|
|
- widget = new LogTerminal(session);
|
|
|
+ widget = new LogTerminal(session, { autoFit: false });
|
|
|
Widget.attach(widget, document.body);
|
|
|
return framePromise();
|
|
|
});
|
|
@@ -69,13 +83,13 @@ describe('terminal/index', () => {
|
|
|
|
|
|
describe('#constructor()', () => {
|
|
|
it('should create a terminal widget', () => {
|
|
|
- expect(widget).to.be.an.instanceof(Terminal);
|
|
|
+ expect(widget).toBeInstanceOf(Terminal);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('#session', () => {
|
|
|
it('should be the constructor value', () => {
|
|
|
- expect(widget.session).to.equal(session);
|
|
|
+ expect(widget.session).toBe(session);
|
|
|
});
|
|
|
|
|
|
it('should set the title when ready', async () => {
|
|
@@ -84,47 +98,47 @@ describe('terminal/index', () => {
|
|
|
find: (_, status) => status === 'connected'
|
|
|
});
|
|
|
}
|
|
|
- expect(widget.title.label).to.contain(session.name);
|
|
|
+ expect(widget.title.label).toContain(session.name);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('#fontSize', () => {
|
|
|
it('should be 13 by default', () => {
|
|
|
- expect(widget.getOption('fontSize')).to.equal(13);
|
|
|
+ expect(widget.getOption('fontSize')).toBe(13);
|
|
|
});
|
|
|
|
|
|
it('should trigger an update request', async () => {
|
|
|
widget.setOption('fontSize', 14);
|
|
|
- expect(widget.getOption('fontSize')).to.equal(14);
|
|
|
+ expect(widget.getOption('fontSize')).toBe(14);
|
|
|
await framePromise();
|
|
|
- expect(widget.methods).to.contain('onUpdateRequest');
|
|
|
+ expect(widget.methods).toContain('onUpdateRequest');
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('#scrollback', () => {
|
|
|
it('should be 1000 by default', () => {
|
|
|
- expect(widget.getOption('scrollback')).to.equal(1000);
|
|
|
+ expect(widget.getOption('scrollback')).toBe(1000);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('#theme', () => {
|
|
|
it('should be set to inherit by default', () => {
|
|
|
- expect(widget.getOption('theme')).to.equal('inherit');
|
|
|
+ expect(widget.getOption('theme')).toBe('inherit');
|
|
|
});
|
|
|
|
|
|
it('should be light if we change it', () => {
|
|
|
widget.setOption('theme', 'light');
|
|
|
- expect(widget.getOption('theme')).to.equal('light');
|
|
|
+ expect(widget.getOption('theme')).toBe('light');
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('#dispose()', () => {
|
|
|
it('should dispose of the resources used by the widget', () => {
|
|
|
- expect(widget.isDisposed).to.equal(false);
|
|
|
+ expect(widget.isDisposed).toBe(false);
|
|
|
widget.dispose();
|
|
|
- expect(widget.isDisposed).to.equal(true);
|
|
|
+ expect(widget.isDisposed).toBe(true);
|
|
|
widget.dispose();
|
|
|
- expect(widget.isDisposed).to.equal(true);
|
|
|
+ expect(widget.isDisposed).toBe(true);
|
|
|
});
|
|
|
});
|
|
|
|
|
@@ -137,7 +151,7 @@ describe('terminal/index', () => {
|
|
|
describe('#processMessage()', () => {
|
|
|
it('should handle fit requests', () => {
|
|
|
widget.processMessage(Widget.Msg.FitRequest);
|
|
|
- expect(widget.methods).to.contain('onFitRequest');
|
|
|
+ expect(widget.methods).toContain('onFitRequest');
|
|
|
});
|
|
|
});
|
|
|
|
|
@@ -146,7 +160,7 @@ describe('terminal/index', () => {
|
|
|
Widget.detach(widget);
|
|
|
Widget.attach(widget, document.body);
|
|
|
await framePromise();
|
|
|
- expect(widget.methods).to.contain('onUpdateRequest');
|
|
|
+ expect(widget.methods).toContain('onUpdateRequest');
|
|
|
});
|
|
|
});
|
|
|
|
|
@@ -159,7 +173,7 @@ describe('terminal/index', () => {
|
|
|
widget.methods = [];
|
|
|
widget.show();
|
|
|
await framePromise();
|
|
|
- expect(widget.methods).to.contain('onUpdateRequest');
|
|
|
+ expect(widget.methods).toContain('onUpdateRequest');
|
|
|
});
|
|
|
});
|
|
|
|
|
@@ -167,27 +181,28 @@ describe('terminal/index', () => {
|
|
|
it('should trigger an update request', async () => {
|
|
|
const msg = Widget.ResizeMessage.UnknownSize;
|
|
|
MessageLoop.sendMessage(widget, msg);
|
|
|
- expect(widget.methods).to.contain('onResize');
|
|
|
+ expect(widget.methods).toContain('onResize');
|
|
|
await framePromise();
|
|
|
- expect(widget.methods).to.contain('onUpdateRequest');
|
|
|
+ expect(widget.methods).toContain('onUpdateRequest');
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('#onUpdateRequest()', () => {
|
|
|
- it('should set the style of the terminal', () => {
|
|
|
+ it('should attach the terminal', () => {
|
|
|
Widget.detach(widget);
|
|
|
Widget.attach(widget, document.body);
|
|
|
MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
|
|
|
- expect(widget.methods).to.contain('onUpdateRequest');
|
|
|
- const style = window.getComputedStyle(widget.node);
|
|
|
- expect(style.backgroundColor).to.equal('rgba(0, 0, 0, 0)');
|
|
|
+ expect(widget.methods).toContain('onUpdateRequest');
|
|
|
+ expect(widget.node.firstElementChild!.classList).toContain(
|
|
|
+ 'jp-Terminal-body'
|
|
|
+ );
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('#onFitRequest', () => {
|
|
|
it('should send a resize request', () => {
|
|
|
MessageLoop.sendMessage(widget, Widget.Msg.FitRequest);
|
|
|
- expect(widget.methods).to.contain('onResize');
|
|
|
+ expect(widget.methods).toContain('onResize');
|
|
|
});
|
|
|
});
|
|
|
|
|
@@ -195,10 +210,10 @@ describe('terminal/index', () => {
|
|
|
it('should focus the terminal element', () => {
|
|
|
Widget.detach(widget);
|
|
|
Widget.attach(widget, document.body);
|
|
|
- expect(widget.node.contains(document.activeElement)).to.equal(false);
|
|
|
+ expect(widget.node.contains(document.activeElement)).toBe(false);
|
|
|
MessageLoop.sendMessage(widget, Widget.Msg.ActivateRequest);
|
|
|
- expect(widget.methods).to.contain('onActivateRequest');
|
|
|
- expect(widget.node.contains(document.activeElement)).to.equal(true);
|
|
|
+ expect(widget.methods).toContain('onActivateRequest');
|
|
|
+ expect(widget.node.contains(document.activeElement)).toBe(true);
|
|
|
});
|
|
|
});
|
|
|
});
|