Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
it('should call model change handler if model exists', () => {
const completer = new Completer({
editor: null,
model: new TestCompleterModel()
});
const handler = new TestCompletionHandler({ completer, connector });
const editor = createEditorWidget().editor;
const model = completer.model as TestCompleterModel;
handler.editor = editor;
expect(model.methods).to.not.contain('handleTextChange');
editor.model.value.text = 'bar';
editor.setCursorPosition({ line: 0, column: 2 });
// This signal is emitted (again) because the cursor position that
// a natural user would create need to be recreated here.
(editor.model.value.changed as any).emit({ type: 'set', value: 'bar' });
expect(model.methods).to.contain('handleTextChange');
});
it('should select the item above and not progress beyond first', () => {
let anchor = createEditorWidget();
let model = new CompleterModel();
let options: Completer.IOptions = {
editor: anchor.editor,
model
};
model.setOptions(['foo', 'bar', 'baz'], {
foo: 'instance',
bar: 'function'
});
Widget.attach(anchor, document.body);
let widget = new Completer(options);
Widget.attach(widget, document.body);
MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
let items = widget.node.querySelectorAll(`.${ITEM_CLASS}`);
expect(Array.from(items[0].classList)).to.contain(ACTIVE_CLASS);
expect(Array.from(items[1].classList)).to.not.contain(ACTIVE_CLASS);
expect(Array.from(items[2].classList)).to.not.contain(ACTIVE_CLASS);
simulate(anchor.node, 'keydown', { keyCode: 40 }); // Down
expect(Array.from(items[0].classList)).to.not.contain(ACTIVE_CLASS);
expect(Array.from(items[1].classList)).to.contain(ACTIVE_CLASS);
expect(Array.from(items[2].classList)).to.not.contain(ACTIVE_CLASS);
simulate(anchor.node, 'keydown', { keyCode: 40 }); // Down
expect(Array.from(items[0].classList)).to.not.contain(ACTIVE_CLASS);
expect(Array.from(items[1].classList)).to.not.contain(ACTIVE_CLASS);
it('should reset if keydown is outside anchor', () => {
let model = new CompleterModel();
let anchor = createEditorWidget();
let options: Completer.IOptions = {
editor: anchor.editor,
model
};
model.setOptions(['foo', 'bar'], {
foo: 'instance',
bar: 'function'
});
Widget.attach(anchor, document.body);
let widget = new Completer(options);
Widget.attach(widget, document.body);
MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
expect(widget.isHidden).to.equal(false);
expect(model.options).to.be.ok;
simulate(document.body, 'keydown', { keyCode: 70 }); // F
MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
expect(widget.isHidden).to.equal(true);
expect(model.options().next()).to.be.undefined;
widget.dispose();
anchor.dispose();
});
it('should hide widget if mouse down misses it', () => {
let anchor = createEditorWidget();
let model = new CompleterModel();
let options: Completer.IOptions = {
editor: anchor.editor,
model
};
let listener = (sender: any, selected: string) => {
// no op
};
model.setOptions(['foo', 'bar']);
Widget.attach(anchor, document.body);
let widget = new Completer(options);
widget.selected.connect(listener);
Widget.attach(widget, document.body);
MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
expect(widget.isHidden).to.equal(false);
simulate(anchor.node, 'mousedown');
MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
expect(widget.isHidden).to.equal(true);
widget.dispose();
anchor.dispose();
});
});
editor.setCursorPosition(position);
let request: Completer.ITextState = {
column: position.column,
lineHeight: editor.lineHeight,
charWidth: editor.charWidth,
line: position.line,
text: 'a'
};
model.original = request;
model.cursor = { start: text.length - 1, end: text.length };
model.setOptions(['abc', 'abd', 'abe', 'abi']);
let widget = new Completer({ model, editor: code.editor });
Widget.attach(widget, document.body);
MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
simulate(document.body, 'scroll');
// Because the scroll handling is asynchronous, this test uses a large
// timeout (500ms) to guarantee the scroll handling has finished.
await sleep(500);
let top = parseInt(window.getComputedStyle(widget.node).top, 10);
let bottom = Math.floor(coords.bottom);
expect(top + panel.node.scrollTop).to.equal(bottom);
widget.dispose();
code.dispose();
panel.dispose();
});
});
constructor(props: CompleterProps) {
super(props);
const editor =
this.props.notebookPanel.content.activeCell &&
this.props.notebookPanel.content.activeCell.editor;
const model = new CompleterModel();
this.completer = new Completer({ editor, model });
const connector = new KernelConnector({
session: this.props.notebookPanel.session
});
this.handler = new CompletionHandler({
completer: this.completer,
connector
});
// Set the handler's editor.
this.handler.editor = editor;
// Listen for active cell changes.
this.props.notebookPanel.content.activeCellChanged.connect(
(sender, cell) => {
this.handler.editor = cell && cell.editor;
}
canStartKernel: true,
rendermime,
contentFactory,
mimeTypeService: editorServices.mimeTypeService
});
docRegistry.addModelFactory(mFactory);
docRegistry.addWidgetFactory(wFactory);
let notebookPath = PageConfig.getOption('notebookPath');
let nbWidget = docManager.open(notebookPath) as NotebookPanel;
let palette = new CommandPalette({ commands });
const editor =
nbWidget.content.activeCell && nbWidget.content.activeCell.editor;
const model = new CompleterModel();
const completer = new Completer({ editor, model });
const connector = new KernelConnector({ session: nbWidget.session });
const handler = new CompletionHandler({ completer, connector });
// Set the handler's editor.
handler.editor = editor;
// Listen for active cell changes.
nbWidget.content.activeCellChanged.connect((sender, cell) => {
handler.editor = cell && cell.editor;
});
// Hide the widget when it first loads.
completer.hide();
let panel = new SplitPanel();
panel.id = 'main';
fileExtensions: ['.ipynb'],
defaultFor: ['.ipynb'],
preferKernel: true,
canStartKernel: true,
rendermime, contentFactory,
mimeTypeService: editorServices.mimeTypeService
});
docRegistry.addModelFactory(mFactory);
docRegistry.addWidgetFactory(wFactory);
let nbWidget = docManager.open(NOTEBOOK) as NotebookPanel;
let palette = new CommandPalette({ commands });
const editor = nbWidget.notebook.activeCell && nbWidget.notebook.activeCell.editor;
const model = new CompleterModel();
const completer = new Completer({ editor, model });
const handler = new CompletionHandler({ completer, session: nbWidget.session });
// Set the handler's editor.
handler.editor = editor;
// Listen for active cell changes.
nbWidget.notebook.activeCellChanged.connect((sender, cell) => {
handler.editor = cell && cell.editor;
});
// Hide the widget when it first loads.
completer.hide();
let panel = new SplitPanel();
panel.id = 'main';
panel.orientation = 'horizontal';
register: (
completable: ICompletionManager.ICompletable
): ICompletionManager.ICompletableAttributes => {
const { connector, editor, parent } = completable;
const model = new CompleterModel();
const completer = new Completer({ editor, model });
const handler = new CompletionHandler({ completer, connector });
const id = parent.id;
// Hide the widget when it first loads.
completer.hide();
// Associate the handler with the parent widget.
handlers[id] = handler;
// Set the handler's editor.
handler.editor = editor;
// Attach the completer widget.
Widget.attach(completer, document.body);
// Listen for parent disposal.
parent.disposed.connect(() => {
defaultFor: ['.ipynb'],
preferKernel: true,
canStartKernel: true,
rendermime, contentFactory,
mimeTypeService: editorServices.mimeTypeService
});
docRegistry.addModelFactory(mFactory);
docRegistry.addWidgetFactory(wFactory);
let nbWidget = docManager.open(NOTEBOOK) as NotebookPanel;
let palette = new CommandPalette({ commands });
const editor = nbWidget.notebook.activeCell && nbWidget.notebook.activeCell.editor;
const model = new CompleterModel();
const completer = new Completer({ editor, model });
const handler = new CompletionHandler({ completer, session: nbWidget.session });
// Set the handler's editor.
handler.editor = editor;
// Listen for active cell changes.
nbWidget.notebook.activeCellChanged.connect((sender, cell) => {
handler.editor = cell && cell.editor;
});
// Hide the widget when it first loads.
completer.hide();
let panel = new SplitPanel();
panel.id = 'main';
panel.orientation = 'horizontal';
panel.spacing = 0;