test_latex.py
116 lines
| 4.0 KiB
| text/x-python
|
PythonLexer
Thomas Kluyver
|
r16744 | """Tests for Latex exporter""" | ||
Jonathan Frederic
|
r11480 | |||
Thomas Kluyver
|
r16744 | # Copyright (c) IPython Development Team. | ||
Jonathan Frederic
|
r11480 | # Distributed under the terms of the Modified BSD License. | ||
Thomas Kluyver
|
r16744 | import os.path | ||
import textwrap | ||||
Jessica B. Hamrick
|
r18344 | import re | ||
Jonathan Frederic
|
r11480 | |||
from .base import ExportersTestsBase | ||||
from ..latex import LatexExporter | ||||
Thomas Kluyver
|
r16744 | from IPython.nbformat import current | ||
Paul Ivanov
|
r11714 | from IPython.testing.decorators import onlyif_cmds_exist | ||
Thomas Kluyver
|
r16744 | from IPython.utils.tempdir import TemporaryDirectory | ||
Jonathan Frederic
|
r11480 | |||
Jonathan Frederic
|
r11494 | class TestLatexExporter(ExportersTestsBase): | ||
Jonathan Frederic
|
r11480 | """Contains test functions for latex.py""" | ||
MinRK
|
r13665 | exporter_class = LatexExporter | ||
should_include_raw = ['latex'] | ||||
Jonathan Frederic
|
r11480 | def test_constructor(self): | ||
""" | ||||
Can a LatexExporter be constructed? | ||||
""" | ||||
LatexExporter() | ||||
Paul Ivanov
|
r11714 | @onlyif_cmds_exist('pandoc') | ||
Jonathan Frederic
|
r11480 | def test_export(self): | ||
""" | ||||
Can a LatexExporter export something? | ||||
""" | ||||
(output, resources) = LatexExporter().from_filename(self._get_notebook()) | ||||
Paul Ivanov
|
r11714 | assert len(output) > 0 | ||
Jonathan Frederic
|
r11738 | |||
Jonathan Frederic
|
r11749 | @onlyif_cmds_exist('pandoc') | ||
Jonathan Frederic
|
r11740 | def test_export_book(self): | ||
Jonathan Frederic
|
r11738 | """ | ||
Jonathan Frederic
|
r12737 | Can a LatexExporter export using 'report' template? | ||
Jonathan Frederic
|
r11738 | """ | ||
Jonathan Frederic
|
r12737 | (output, resources) = LatexExporter(template_file='report').from_filename(self._get_notebook()) | ||
Jonathan Frederic
|
r11738 | assert len(output) > 0 | ||
Jonathan Frederic
|
r11749 | @onlyif_cmds_exist('pandoc') | ||
Jonathan Frederic
|
r11738 | def test_export_basic(self): | ||
""" | ||||
Jonathan Frederic
|
r12730 | Can a LatexExporter export using 'article' template? | ||
Jonathan Frederic
|
r11738 | """ | ||
Jonathan Frederic
|
r12730 | (output, resources) = LatexExporter(template_file='article').from_filename(self._get_notebook()) | ||
Jonathan Frederic
|
r11738 | assert len(output) > 0 | ||
Jonathan Frederic
|
r11749 | @onlyif_cmds_exist('pandoc') | ||
Jonathan Frederic
|
r11740 | def test_export_article(self): | ||
Jonathan Frederic
|
r11738 | """ | ||
Jonathan Frederic
|
r11745 | Can a LatexExporter export using 'article' template? | ||
Jonathan Frederic
|
r11738 | """ | ||
MinRK
|
r11852 | (output, resources) = LatexExporter(template_file='article').from_filename(self._get_notebook()) | ||
Thomas Kluyver
|
r16744 | assert len(output) > 0 | ||
@onlyif_cmds_exist('pandoc') | ||||
def test_very_long_cells(self): | ||||
""" | ||||
Torture test that long cells do not cause issues | ||||
""" | ||||
lorem_ipsum_text = textwrap.dedent("""\ | ||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec | ||||
dignissim, ipsum non facilisis tempus, dui felis tincidunt metus, | ||||
nec pulvinar neque odio eget risus. Nulla nisi lectus, cursus | ||||
suscipit interdum at, ultrices sit amet orci. Mauris facilisis | ||||
imperdiet elit, vitae scelerisque ipsum dignissim non. Integer | ||||
consequat malesuada neque sit amet pulvinar. Curabitur pretium | ||||
ut turpis eget aliquet. Maecenas sagittis lacus sed lectus | ||||
volutpat, eu adipiscing purus pulvinar. Maecenas consequat | ||||
luctus urna, eget cursus quam mollis a. Aliquam vitae ornare | ||||
erat, non hendrerit urna. Sed eu diam nec massa egestas pharetra | ||||
at nec tellus. Fusce feugiat lacus quis urna sollicitudin volutpat. | ||||
Quisque at sapien non nibh feugiat tempus ac ultricies purus. | ||||
""") | ||||
lorem_ipsum_text = lorem_ipsum_text.replace("\n"," ") + "\n\n" | ||||
large_lorem_ipsum_text = "".join([lorem_ipsum_text]*3000) | ||||
notebook_name = "lorem_ipsum_long.ipynb" | ||||
nb = current.new_notebook( | ||||
MinRK
|
r18580 | cells=[ | ||
current.new_markdown_cell(source=large_lorem_ipsum_text) | ||||
Thomas Kluyver
|
r16744 | ] | ||
) | ||||
with TemporaryDirectory() as td: | ||||
nbfile = os.path.join(td, notebook_name) | ||||
with open(nbfile, 'w') as f: | ||||
current.write(nb, f, 'ipynb') | ||||
(output, resources) = LatexExporter(template_file='article').from_filename(nbfile) | ||||
assert len(output) > 0 | ||||
Jessica B. Hamrick
|
r18344 | |||
@onlyif_cmds_exist('pandoc') | ||||
def test_prompt_number_color(self): | ||||
""" | ||||
Does LatexExporter properly format input and output prompts in color? | ||||
""" | ||||
Jessica B. Hamrick
|
r18347 | (output, resources) = LatexExporter().from_filename( | ||
self._get_notebook(nb_name="prompt_numbers.ipynb")) | ||||
Jessica B. Hamrick
|
r18344 | in_regex = r"In \[\{\\color\{incolor\}(.*)\}\]:" | ||
out_regex = r"Out\[\{\\color\{outcolor\}(.*)\}\]:" | ||||
Jessica B. Hamrick
|
r18349 | ins = ["2", "10", " ", " ", "*", "0"] | ||
outs = ["10"] | ||||
Jessica B. Hamrick
|
r18344 | |||
assert re.findall(in_regex, output) == ins | ||||
assert re.findall(out_regex, output) == outs | ||||