"""Tests for RSTExporter""" # Copyright (c) IPython Development Team. # Distributed under the terms of the Modified BSD License. import io import pytest import re import nbformat from nbformat import v4 from .base import ExportersTestsBase from ..rst import RSTExporter from ...tests.utils import onlyif_cmds_exist class TestRSTExporter(ExportersTestsBase): """Tests for RSTExporter""" exporter_class = RSTExporter should_include_raw = ['rst'] def test_constructor(self): """ Can a RSTExporter be constructed? """ RSTExporter() @onlyif_cmds_exist('pandoc') def test_export(self): """ Can a RSTExporter export something? """ (output, resources) = RSTExporter().from_filename(self._get_notebook()) assert len(output) > 0 @onlyif_cmds_exist('pandoc') def test_empty_code_cell(self): """No empty code cells in rst""" nbname = self._get_notebook() with io.open(nbname, encoding='utf8') as f: nb = nbformat.read(f, 4) exporter = self.exporter_class() (output, resources) = exporter.from_notebook_node(nb) # add an empty code cell nb.cells.append( v4.new_code_cell(source="") ) (output2, resources) = exporter.from_notebook_node(nb) # adding an empty code cell shouldn't change output self.assertEqual(output.strip(), output2.strip()) @onlyif_cmds_exist('pandoc') def test_png_metadata(self): """ Does RSTExporter treat pngs with width/height metadata correctly? """ (output, resources) = RSTExporter().from_filename( self._get_notebook(nb_name="pngmetadata.ipynb")) assert len(output) > 0 check_for_png = re.compile( r'.. image::.*?\n\s+(.*?)\n\s*\n', re.DOTALL) result = check_for_png.search(output) assert result is not None attr_string = result.group(1) assert ':width:' in attr_string assert ':height:' in attr_string assert 'px' in attr_string