from nbconvert import converters, NbconvertApp from converters.rst import ConverterRST import nose.tools as nt import os import glob import tempfile import shutil from IPython.nbformat import current as nbformat class TestSimple(object): def setUp(self): """ Create a new temporary directory and copy the input file 'test.ipynb' there. """ self.fname = 'test.ipynb' self.basename = os.path.splitext(self.fname)[0] self.wrkdir = tempfile.mkdtemp() self.infile = os.path.join(self.wrkdir, self.fname) shutil.copy(os.path.join('tests', self.fname), self.infile) def tearDown(self): shutil.rmtree(self.wrkdir) def outfile_exists(self, fmt): extension = converters[fmt].extension print("==out to ==>>",os.path.join(self.wrkdir, self.basename + '.' + extension)) return os.path.exists(os.path.join(self.wrkdir, self.basename + '.' + extension)) def test_simple(self): c = ConverterRST(infile=self.infile) f = c.render() nt.assert_true(f.endswith('.rst'), 'changed file extension to rst') def run_main(self, fmt): """ Run the 'main' method to convert the input file to the given format and check that the expected output file exists. """ app = NbconvertApp.instance() app.initialize() app.extra_args = [self.infile] app.fmt = fmt app.start() app.run() nt.assert_true(self.outfile_exists(fmt)) def test_main(self): """ Test main entry point with all known formats. """ # Exclude reveal from this test because: # 1- AssertionError exception when there is not slideshow metadata. # 2- outfile_exists method can not find properly the html file. converters_copy = dict(converters) del converters_copy['reveal'] for fmt in converters_copy: yield self.run_main, fmt def test_render_heading(self): """ Unit test for cell type "heading" """ # Generate and test heading cells level 1-6 for level in xrange(1, 7): cell = { 'cell_type': 'heading', 'level': level, 'source': ['Test for heading type H{0}'.format(level)] } # Convert cell dictionaries to NotebookNode cell_nb = nbformat.NotebookNode(cell) # Make sure "source" attribute is uniconde not list. # For some reason, creating a NotebookNode manually like # this isn't converting source to a string like using # the create-from-file routine. if type(cell_nb.source) is list: cell_nb.source = '\n'.join(cell_nb.source) # Render to rst c = ConverterRST() rst_list = c.render_heading(cell_nb) # render should return a list nt.assert_true(isinstance(rst_list, list)) rst_str = "".join(rst_list) # Confirm rst content chk_str = "Test for heading type H{0}\n{1}\n".format( level, c.heading_level[level] * 24) nt.assert_equal(rst_str, chk_str)