@krassowski/jupyterlab-lsp
Version:
Language Server Protocol integration for JupyterLab
112 lines • 5.53 kB
JavaScript
import { expect } from 'chai';
import { extract_code, get_the_only_pair, get_the_only_virtual, wrap_in_python_lines } from '../../extractors/testutils';
import { BrowserConsole } from '../../virtual/console';
import { VirtualDocument } from '../../virtual/document';
import { foreign_code_extractors } from './extractors';
describe('IPython rpy2 extractors', () => {
let document;
function extract(code) {
return extract_code(document, code);
}
beforeEach(() => {
document = new VirtualDocument({
language: 'python',
path: 'test.ipynb',
overrides_registry: {},
foreign_code_extractors: foreign_code_extractors,
standalone: false,
file_extension: 'py',
has_lsp_supported_file: false,
console: new BrowserConsole()
});
});
afterEach(() => {
document.clear();
});
describe('%R line magic', () => {
it('should not extract parts of non-code commands', () => {
let code = wrap_in_python_lines('%Rdevice svg');
let { cell_code_kept, foreign_document_map } = extract(code);
expect(cell_code_kept).to.equal(code);
expect(foreign_document_map.size).to.equal(0);
});
it('correctly gives ranges in source', () => {
let code = '%R ggplot()';
let { foreign_document_map } = extract(code);
let { range } = get_the_only_pair(foreign_document_map);
expect(range.start.line).to.be.equal(0);
// note: the space before ggplot() should NOT be included in the range
expect(range.start.column).to.be.equal(3);
expect(range.end.line).to.be.equal(0);
expect(range.end.column).to.be.equal(3 + 8);
});
it('correctly gives ranges in source when wrapped in lines', () => {
let code = wrap_in_python_lines('%R ggplot()');
let { foreign_document_map } = extract(code);
let { range } = get_the_only_pair(foreign_document_map);
expect(range.start.line).to.be.equal(1);
expect(range.start.column).to.be.equal(3);
expect(range.end.line).to.be.equal(1);
expect(range.end.column).to.be.equal(3 + 8);
});
it('extracts simple commands', () => {
let code = wrap_in_python_lines('%R ggplot()');
let { cell_code_kept, foreign_document_map } = extract(code);
// should not be removed, but left for the static analysis (using magic overrides)
expect(cell_code_kept).to.equal(code);
let r_document = get_the_only_virtual(foreign_document_map);
expect(r_document.language).to.equal('r');
expect(r_document.value).to.equal('ggplot()\n');
});
it('parses input (into a dummy data frame)', () => {
let code = wrap_in_python_lines('%R -i df ggplot(df)');
let { foreign_document_map } = extract(code);
let r_document = get_the_only_virtual(foreign_document_map);
expect(r_document.language).to.equal('r');
expect(r_document.value).to.equal('df <- data.frame(); ggplot(df)\n');
});
it('parses input when no code is given', () => {
let code = '%R -i df';
let { foreign_document_map } = extract(code);
let r_document = get_the_only_virtual(foreign_document_map);
expect(r_document.value).to.equal('df <- data.frame();\n');
});
it('parses multiple inputs (into dummy data frames)', () => {
let code = wrap_in_python_lines('%R -i df -i x ggplot(df)');
let { virtual_document: r_document } = get_the_only_pair(extract(code).foreign_document_map);
expect(r_document.value).to.equal('df <- data.frame(); x <- data.frame(); ggplot(df)\n');
});
it('parses inputs ignoring other arguments', () => {
let code = wrap_in_python_lines('%R -i df --width 300 -o x ggplot(df)');
let r_document = get_the_only_virtual(extract(code).foreign_document_map);
expect(r_document.value).to.equal('df <- data.frame(); ggplot(df)\n');
});
});
describe('%%R cell magic', () => {
it('extracts simple commands', () => {
let code = '%%R\nggplot()';
let { cell_code_kept, foreign_document_map } = extract(code);
expect(cell_code_kept).to.equal(code);
let r_document = get_the_only_virtual(foreign_document_map);
expect(r_document.language).to.equal('r');
expect(r_document.value).to.equal('ggplot()\n');
});
});
it('parses input (into a dummy data frame)', () => {
let code = '%%R -i df\nggplot(df)';
let { foreign_document_map } = extract(code);
let r_document = get_the_only_virtual(foreign_document_map);
expect(r_document.language).to.equal('r');
expect(r_document.value).to.equal('df <- data.frame(); ggplot(df)\n');
});
it('correctly gives ranges in source', () => {
let code = '%%R\nggplot()';
let { foreign_document_map } = extract(code);
let { range } = get_the_only_pair(foreign_document_map);
expect(range.start.line).to.be.equal(1);
expect(range.start.column).to.be.equal(0);
expect(range.end.line).to.be.equal(1);
expect(range.end.column).to.be.equal(8);
});
});
//# sourceMappingURL=extractors.spec.js.map