diff --git a/IPython/nbconvert/preprocessors/tests/expected/Clear Output.ipynb b/IPython/nbconvert/preprocessors/tests/expected/Clear Output.ipynb new file mode 100644 index 0000000..ef5d5cf --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/expected/Clear Output.ipynb @@ -0,0 +1,46 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from IPython.display import clear_output" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i in range(10):\n", + " clear_output()\n", + " print i" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "9\n" + ] + } + ], + "prompt_number": 2 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/expected/Factorials.ipynb b/IPython/nbconvert/preprocessors/tests/expected/Factorials.ipynb new file mode 100644 index 0000000..4db6b65 --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/expected/Factorials.ipynb @@ -0,0 +1,55 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "i, j = 1, 1" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for m in range(10):\n", + " i, j = j, i + j\n", + " print j" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "2\n", + "3\n", + "5\n", + "8\n", + "13\n", + "21\n", + "34\n", + "55\n", + "89\n", + "144\n" + ] + } + ], + "prompt_number": 2 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/expected/HelloWorld.ipynb b/IPython/nbconvert/preprocessors/tests/expected/HelloWorld.ipynb new file mode 100644 index 0000000..67ea274 --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/expected/HelloWorld.ipynb @@ -0,0 +1,33 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print \"Hello World\"" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Hello World\n" + ] + } + ], + "prompt_number": 1 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/expected/Inline Image.ipynb b/IPython/nbconvert/preprocessors/tests/expected/Inline Image.ipynb new file mode 100644 index 0000000..c3527e1 --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/expected/Inline Image.ipynb @@ -0,0 +1,36 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from IPython.display import Image" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "Image('../input/python.png');" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/expected/SVG.ipynb b/IPython/nbconvert/preprocessors/tests/expected/SVG.ipynb new file mode 100644 index 0000000..4c9e40a --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/expected/SVG.ipynb @@ -0,0 +1,53 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from IPython.display import SVG" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "SVG(data='''\n", + "\n", + " \n", + "''')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 2, + "svg": [ + "\n", + " \n", + "" + ], + "text": [ + "" + ] + } + ], + "prompt_number": 2 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/expected/Skip Exceptions.ipynb b/IPython/nbconvert/preprocessors/tests/expected/Skip Exceptions.ipynb new file mode 100644 index 0000000..1cae18d --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/expected/Skip Exceptions.ipynb @@ -0,0 +1,55 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "1 / 0" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "ZeroDivisionError", + "evalue": "integer division or modulo by zero", + "output_type": "pyerr", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;36m1\u001b[0m \u001b[1;33m/\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mZeroDivisionError\u001b[0m: integer division or modulo by zero" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'ok'" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "ok\n" + ] + } + ], + "prompt_number": 2 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/expected/Unicode.ipynb b/IPython/nbconvert/preprocessors/tests/expected/Unicode.ipynb new file mode 100644 index 0000000..3fd4818 --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/expected/Unicode.ipynb @@ -0,0 +1,33 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print '\u2603'" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\u2603\n" + ] + } + ], + "prompt_number": 1 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/input/Clear Output.ipynb b/IPython/nbconvert/preprocessors/tests/input/Clear Output.ipynb new file mode 100644 index 0000000..3920cb2 --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/input/Clear Output.ipynb @@ -0,0 +1,36 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from IPython.display import clear_output" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i in range(10):\n", + " clear_output()\n", + " print i" + ], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/input/Factorials.ipynb b/IPython/nbconvert/preprocessors/tests/input/Factorials.ipynb new file mode 100644 index 0000000..1736948 --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/input/Factorials.ipynb @@ -0,0 +1,36 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "i, j = 1, 1" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for m in range(10):\n", + " i, j = j, i + j\n", + " print j" + ], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/input/HelloWorld.ipynb b/IPython/nbconvert/preprocessors/tests/input/HelloWorld.ipynb new file mode 100644 index 0000000..2edf785 --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/input/HelloWorld.ipynb @@ -0,0 +1,24 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print \"Hello World\"" + ], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/input/Inline Image.ipynb b/IPython/nbconvert/preprocessors/tests/input/Inline Image.ipynb new file mode 100644 index 0000000..68b6884 --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/input/Inline Image.ipynb @@ -0,0 +1,34 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from IPython.display import Image" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "Image('../input/python.png');" + ], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/input/SVG.ipynb b/IPython/nbconvert/preprocessors/tests/input/SVG.ipynb new file mode 100644 index 0000000..35ea9c8 --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/input/SVG.ipynb @@ -0,0 +1,37 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from IPython.display import SVG" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "SVG(data='''\n", + "\n", + " \n", + "''')" + ], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/input/Skip Exceptions.ipynb b/IPython/nbconvert/preprocessors/tests/input/Skip Exceptions.ipynb new file mode 100644 index 0000000..1cae18d --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/input/Skip Exceptions.ipynb @@ -0,0 +1,55 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "1 / 0" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "ZeroDivisionError", + "evalue": "integer division or modulo by zero", + "output_type": "pyerr", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;36m1\u001b[0m \u001b[1;33m/\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mZeroDivisionError\u001b[0m: integer division or modulo by zero" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'ok'" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "ok\n" + ] + } + ], + "prompt_number": 2 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/input/Unicode.ipynb b/IPython/nbconvert/preprocessors/tests/input/Unicode.ipynb new file mode 100644 index 0000000..178f502 --- /dev/null +++ b/IPython/nbconvert/preprocessors/tests/input/Unicode.ipynb @@ -0,0 +1,24 @@ +{ + "metadata": { + "name": "" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print '\u2603'" + ], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/IPython/nbconvert/preprocessors/tests/input/python.png b/IPython/nbconvert/preprocessors/tests/input/python.png new file mode 100644 index 0000000000000000000000000000000000000000..c56d4c022a7130beed2ee67d7fff7274aff5de1e GIT binary patch literal 8758 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 literal 0 Hc$@', cell['text']) + return cell + + + def assert_notebooks_equal(self, expected, actual): + expected_cells = expected['worksheets'][0]['cells'] + actual_cells = actual['worksheets'][0]['cells'] + assert len(expected_cells) == len(actual_cells) + + # TODO: what does this code do? + for expected_out, actual_out in zip(expected_cells, actual_cells): + for k in set(expected_out).union(actual_out): + if k == 'outputs': + self.assertEquals(len(expected_out[k]), len(actual_out[k])) + for e, a in zip(expected_out[k], actual_out[k]): + assert self.prepare_cell(e) == self.prepare_cell(a) + def build_preprocessor(self): """Make an instance of a preprocessor""" @@ -30,16 +54,25 @@ class TestExecute(PreprocessorTestsBase): preprocessor.enabled = True return preprocessor + def test_constructor(self): """Can a ExecutePreprocessor be constructed?""" self.build_preprocessor() - def test_correct_output(self): - """Test that ExecutePreprocessor evaluates a cell to the right thing""" - nb = self.build_notebook() - res = self.build_resources() - nb.worksheets[0].cells[0].input = "print 'hi!'" - preprocessor = self.build_preprocessor() - nb, res = preprocessor(nb, res) - expected_outputs = [{'output_type': 'stream', 'stream': 'stdout', 'text': 'hi!\n'}] - assert nb.worksheets[0].cells[0].outputs == expected_outputs + + def test_run_notebooks(self): + """Runs a series of test notebooks and compares them to their actual output""" + current_dir = os.path.dirname(__file__) + input_files = os.listdir(os.path.join(current_dir, 'input')) + for filename in input_files: + if not filename.endswith(".ipynb"): + continue + with open(os.path.join(current_dir, 'input', filename)) as f: + input_nb = nbformat.read(f, 'ipynb') + with open(os.path.join(current_dir, 'expected', filename)) as f: + expected_nb = nbformat.read(f, 'ipynb') + res = self.build_resources() + preprocessor = self.build_preprocessor() + output_nb, _ = preprocessor(input_nb, res) + self.assert_notebooks_equal(output_nb, expected_nb) +