##// END OF EJS Templates
Added test files, and basic tests
Jonathan Frederic -
Show More
@@ -0,0 +1,6 b''
1 c = get_config()
2
3 #Export all the notebooks in the current directory to the sphinx_howto format.
4 c.NbConvertApp.notebooks = ['notebook1.ipynb']
5 c.NbConvertApp.export_format = 'python'
6
@@ -0,0 +1,149 b''
1 {
2 "metadata": {
3 "name": "notebook1"
4 },
5 "nbformat": 3,
6 "nbformat_minor": 0,
7 "worksheets": [
8 {
9 "cells": [
10 {
11 "cell_type": "heading",
12 "level": 1,
13 "metadata": {},
14 "source": [
15 "A simple SymPy example"
16 ]
17 },
18 {
19 "cell_type": "markdown",
20 "metadata": {},
21 "source": [
22 "First we import SymPy and initialize printing:"
23 ]
24 },
25 {
26 "cell_type": "code",
27 "collapsed": false,
28 "input": [
29 "from sympy import init_printing\n",
30 "from sympy import *\n",
31 " init_printing()"
32 ],
33 "language": "python",
34 "metadata": {},
35 "outputs": [],
36 "prompt_number": 2
37 },
38 {
39 "cell_type": "markdown",
40 "metadata": {},
41 "source": [
42 "Create a few symbols:"
43 ]
44 },
45 {
46 "cell_type": "code",
47 "collapsed": false,
48 "input": [
49 "x,y,z = symbols('x y z')"
50 ],
51 "language": "python",
52 "metadata": {},
53 "outputs": [],
54 "prompt_number": 4
55 },
56 {
57 "cell_type": "markdown",
58 "metadata": {},
59 "source": [
60 "Here is a basic expression:"
61 ]
62 },
63 {
64 "cell_type": "code",
65 "collapsed": false,
66 "input": [
67 "e = x**2 + 2.0*y + sin(z); e"
68 ],
69 "language": "python",
70 "metadata": {},
71 "outputs": [
72 {
73 "latex": [
74 "$$x^{2} + 2.0 y + \\sin{\\left (z \\right )}$$"
75 ],
76 "metadata": {},
77 "output_type": "pyout",
78 "png": "iVBORw0KGgoAAAANSUhEUgAAAKMAAAAZBAMAAACvE4OgAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAACz0lEQVRIDa1UTWjUQBT+ZpvdzW7TGlrxItjYSg/C6vbiDwjmoCgUpHioPYhdqig9\nFJYiPYmW4klB14NgFGnw4EHpj7UgUtTFXhSEBgVBxIOFggWVrrUqiMY3mZkkLNIK7oN575vvvfky\n8yYJIGzgkSlRrULKrivVSkvq6LbxtcaSjV3aSo0lgWyl5pK69V+SRlEsPxNTGYhhDrV3M2Ue2etc\nEDmuMmM+IjolrCuHXNoLoQDNSAXdzbjsfFVKTY1vCgFXFIxenG4cFSSzRewAPnN0FugXjPDr45MQ\nJwoKtitgXL9zT+CsJeIHYG+Z4H1gwhRU4G/FcAQbbYU3KdDo+0sCK8lRU0guA72uKqMYk9RehHxP\niDIu0NS2v90KGShJYi7T7tgvkrQ2vIT2XtRISWNra6lzGc8/PW3ji4PL7Vmge095YIX0iB71NCaZ\n5N3XyM0VCuNIyFNIyY3AMG/KDUvjn90DGmwq9wpIl5AyU5WsTYy0aJf6JFGB5An3Der5jExKHjNR\n4JKPge/EXqDBoOXpkxkmkJHFfAFRVhDIveWA0S57N2Me6yw+DSX1n1uCq3sIfCF2IcjNkjeWyKli\nginHubboOB4vSNAjyaiXE26ygrkyTfod55Lj3CTE+n2P73ImJpnk6wJJKjYJSwt3OQbNJu4icM5s\nKGGbzMuD70N6JSbJD44x7pLDyJrbkfiLpOEhYVMJSVEj83x5YFLyNrAzJsmvJ+uhLrieXvcJDshy\nHtQuD54c2IWWEnSXfUTDZJJfAjcpOW5imp9aHvw4ZZ4NDV4FGjw0tzadKgbFwinJUd//AT0P1tdW\nBtuRU39oKdk9ONQ163fM+nvu/s4D/FX30otdQIZGlSnJKpq6KUxKVqV1WxGHFIhishjhEO1Gi3r4\nkZCMg+hH1henV8EjmFoly1PTMs/Uadaox+FceY2STpmvt9co/Pe0Jvt1GvgDK/Osw/4jQ4wAAAAA\nSUVORK5CYII=\n",
79 "prompt_number": 6,
80 "text": [
81 " 2 \n",
82 "x + 2.0\u22c5y + sin(z)"
83 ]
84 }
85 ],
86 "prompt_number": 6
87 },
88 {
89 "cell_type": "code",
90 "collapsed": false,
91 "input": [
92 "diff(e, x)"
93 ],
94 "language": "python",
95 "metadata": {},
96 "outputs": [
97 {
98 "latex": [
99 "$$2 x$$"
100 ],
101 "metadata": {},
102 "output_type": "pyout",
103 "png": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAOBAMAAADd6iHDAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAAgElEQVQIHWNgVDJ2YICAMAb2H1BmKgPDTChzFgNDvgOEvT8AzgQKrA9gPZPYUwNk\ncXxnCGd4dWA1kMllwFDKUB9wEchUZmAIYNgMZDDwJIDIPyDiEgOjAAPLFwZWBhYFBh6BqzwfGI4y\nSJUXZXH8Zf7A+IBh////v1hzjh5/xwAAW80hUDE8HYkAAAAASUVORK5CYII=\n",
104 "prompt_number": 7,
105 "text": [
106 "2\u22c5x"
107 ]
108 }
109 ],
110 "prompt_number": 7
111 },
112 {
113 "cell_type": "code",
114 "collapsed": false,
115 "input": [
116 "integrate(e, z)"
117 ],
118 "language": "python",
119 "metadata": {},
120 "outputs": [
121 {
122 "latex": [
123 "$$x^{2} z + 2.0 y z - \\cos{\\left (z \\right )}$$"
124 ],
125 "metadata": {},
126 "output_type": "pyout",
127 "png": "iVBORw0KGgoAAAANSUhEUgAAALsAAAAZBAMAAACbakK8AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAADAklEQVRIDbVVS2gTURQ90/wmk0k6tCJCsR1SKShIsxE3CgNWBKUxq9qFmqFqShfF\nUKQrkaDiF0pcCKYgBBcuBLV+wIWKARe6kQ4UhNKKWdiF4KIptmA/xPvmzZuMxdYUzIPcd+655568\nvLlJAL6G32oOasQWNHz5Rvg6nrKh/mygfSzlX2ygPaBUGmov6//NXs1yq4sex2EPrsHemTd2snNg\ntkb+Cx1zBL6SqwxZLvQAKYHzKZaPY4fh4TeHd0S5Nox9OClItm/jiU9DrEwwVEawpiVis9VkimqX\nAOr4o2cCs/0BT2I5+FYJRhJbePQxgzcD7QLEqtV5gdnu2Icr3L45gcCyt74Z7neL4SLQ0nm4S+dM\nYCz1gSPHnhKZDWyHhcCCNKwjqaF/TkwGl0L6nClie/wc1D1xdoNsSLhT0IJkhi7Lzr22xb8keE/N\nPm0Sc9yEuhRUyuiG9HzvFNeImCyq39SriOhtQI7IV/TiTqE8glqwohjE0NJwiANxOZTdZoxtfzSa\nx2tI8DtHcKQoQFmV6f1XT2swibxFL+6k5EgenhBCqKLTPX3ULnaYdDlaTMcCSd8zuXTvBq2bJUJr\nlE4WgSV5ZRdBzLFgO6nzhJp1ltvrlB2HCoWxQuG+jTvt2GxBWUZaU2mMApZNuSHA3vJpCliRhqqs\nZtvbTrb9ZIk+i70Ut1OcnpgeKskTCFUwjaYy8Jhr3eiefq0HIfa7yC6HOwVyULRuNDn21JngbcL+\nE8A+MNnSxb+w59+Cj2tELJBbjEZr8SGwn0j2aLkTPdp08R2OcKV6fXB3ikPH3n8tM5WTfrETtZcw\ng3QWH0dH7nKNiMkszqo/EDafaHhJ5Bm6ee4UtdAabxnMcmUUl0SnYx+uVqs5XAGN9QGgdeCrASv0\n3TmCsJcOdhnozexD38goK9HXynEKr1OKDs9guhQD039kGySyIQpJAdbvJ9YTlPvyUl3/aLUf34G/\nuGxIyXpE37DoLbAHwJaU53t9MRCfrU8o/k4iRn36Lar8Wd5wAfgN4R6xelyy/ssAAAAASUVORK5C\nYII=\n",
128 "prompt_number": 8,
129 "text": [
130 " 2 \n",
131 "x \u22c5z + 2.0\u22c5y\u22c5z - cos(z)"
132 ]
133 }
134 ],
135 "prompt_number": 8
136 },
137 {
138 "cell_type": "code",
139 "collapsed": false,
140 "input": [],
141 "language": "python",
142 "metadata": {},
143 "outputs": []
144 }
145 ],
146 "metadata": {}
147 }
148 ]
149 } No newline at end of file
@@ -0,0 +1,177 b''
1 {
2 "metadata": {
3 "name": "notebook2"
4 },
5 "nbformat": 3,
6 "nbformat_minor": 0,
7 "worksheets": [
8 {
9 "cells": [
10 {
11 "cell_type": "heading",
12 "level": 1,
13 "metadata": {},
14 "source": [
15 "NumPy and Matplotlib examples"
16 ]
17 },
18 {
19 "cell_type": "markdown",
20 "metadata": {},
21 "source": [
22 "First import NumPy and Matplotlib:"
23 ]
24 },
25 {
26 "cell_type": "code",
27 "collapsed": false,
28 "input": [
29 "%pylab inline"
30 ],
31 "language": "python",
32 "metadata": {},
33 "outputs": [
34 {
35 "output_type": "stream",
36 "stream": "stdout",
37 "text": [
38 "\n",
39 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.kernel.zmq.pylab.backend_inline].\n",
40 "For more information, type 'help(pylab)'.\n"
41 ]
42 }
43 ],
44 "prompt_number": 1
45 },
46 {
47 "cell_type": "code",
48 "collapsed": false,
49 "input": [
50 "import numpy as np"
51 ],
52 "language": "python",
53 "metadata": {},
54 "outputs": [],
55 "prompt_number": 2
56 },
57 {
58 "cell_type": "markdown",
59 "metadata": {},
60 "source": [
61 "Now we show some very basic examples of how they can be used."
62 ]
63 },
64 {
65 "cell_type": "code",
66 "collapsed": false,
67 "input": [
68 "a = np.random.uniform(size=(100,100))"
69 ],
70 "language": "python",
71 "metadata": {},
72 "outputs": [],
73 "prompt_number": 6
74 },
75 {
76 "cell_type": "code",
77 "collapsed": false,
78 "input": [
79 "a.shape"
80 ],
81 "language": "python",
82 "metadata": {},
83 "outputs": [
84 {
85 "metadata": {},
86 "output_type": "pyout",
87 "prompt_number": 7,
88 "text": [
89 "(100, 100)"
90 ]
91 }
92 ],
93 "prompt_number": 7
94 },
95 {
96 "cell_type": "code",
97 "collapsed": false,
98 "input": [
99 "evs = np.linalg.eigvals(a)"
100 ],
101 "language": "python",
102 "metadata": {},
103 "outputs": [],
104 "prompt_number": 8
105 },
106 {
107 "cell_type": "code",
108 "collapsed": false,
109 "input": [
110 "evs.shape"
111 ],
112 "language": "python",
113 "metadata": {},
114 "outputs": [
115 {
116 "metadata": {},
117 "output_type": "pyout",
118 "prompt_number": 10,
119 "text": [
120 "(100,)"
121 ]
122 }
123 ],
124 "prompt_number": 10
125 },
126 {
127 "cell_type": "markdown",
128 "metadata": {},
129 "source": [
130 "Here is a cell that has both text and PNG output:"
131 ]
132 },
133 {
134 "cell_type": "code",
135 "collapsed": false,
136 "input": [
137 "hist(evs.real)"
138 ],
139 "language": "python",
140 "metadata": {},
141 "outputs": [
142 {
143 "metadata": {},
144 "output_type": "pyout",
145 "prompt_number": 14,
146 "text": [
147 "(array([95, 4, 0, 0, 0, 0, 0, 0, 0, 1]),\n",
148 " array([ -2.93566063, 2.35937011, 7.65440086, 12.9494316 ,\n",
149 " 18.24446235, 23.53949309, 28.83452384, 34.12955458,\n",
150 " 39.42458533, 44.71961607, 50.01464682]),\n",
151 " <a list of 10 Patch objects>)"
152 ]
153 },
154 {
155 "metadata": {},
156 "output_type": "display_data",
157 "png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAD9CAYAAAC2l2x5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEhdJREFUeJzt3X1olfX/x/HXtVbT8CZDmsK6KmrubEu3U2xnZOpxLBnG\nOqsIE7RoE3QRZkT/yEAjcIh/LIs6i/BEGSU1CkxT0+pkFp1zMmsxZ5uUTIXoxm95lmdlef3+8Nep\ndbtz7exs16fnAw7sXNs5n/c14nmurl3naDmO4wgAYJy8sR4AADA6CDwAGIrAA4ChCDwAGIrAA4Ch\nCDwAGOofA9/U1KTCwkLNnj07vS2ZTCoUCsm2bTU2NmpgYCD9vccee0zFxcUqKyvTgQMHRm9qAMC/\n+sfA33PPPdq9e/eQbeFwWLZtq6+vT0VFRero6JAkffXVV3ryySf15ptvKhwOa/Xq1aM3NQDgX/1j\n4OfNm6dp06YN2RaPx9Xc3KyCggI1NTUpFotJkmKxmOrr62XbthYsWCDHcZRMJkdvcgDAP8r4HHwi\nkZDP55Mk+Xw+xeNxSecDX1pamv65kpKS9PcAALmXn+kDMvlkA8uyhrUNAPDvMv1kmYyP4KuqqtTT\n0yNJ6unpUVVVlSQpEAjo8OHD6Z87cuRI+nt/NaRXb+vWrRvzGZh/7Odgfu/dvDy747j7yLCMAx8I\nBBSJRJRKpRSJRFRTUyNJqq6u1p49e9Tf369oNKq8vDxNnjzZ1VAAgJH7x8AvXbpUN9xwg3p7e3X5\n5ZfrmWeeUUtLi/r7+1VSUqKTJ09q1apVkqTCwkK1tLSotrZW9957rzZv3pyTHQAA/DXLcXvs73ZB\ny3L9vxvjQTQaVTAYHOsxXGP+scX8Y8fLs0vu2kngAcAD3LSTjyoAAEMReAAwFIEHAEMReAAwFIEH\nAEP9ZwM/Zcqlsixr1G9Tplw61rsK4D/qP3uZ5PnPxMnFHONjfwF4G5dJAgDSCDwAGIrAA4ChCDwA\nGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrA\nA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChXAf+6aef1g03\n3KDrr79ea9askSQlk0mFQiHZtq3GxkYNDAxkbVAAQGZcBf7UqVPasGGD9u7dq0Qiod7eXu3Zs0fh\ncFi2bauvr09FRUXq6OjI9rwAgGFyFfiJEyfKcRx9//33SqVSOnPmjC655BLF43E1NzeroKBATU1N\nisVi2Z4XADBMrgMfDod15ZVXasaMGZo7d64CgYASiYR8Pp8kyefzKR6PZ3VYAMDw5bt50Ndff62W\nlhYdPnxY06ZN0x133KEdO3bIcZxhPX79+vXpr4PBoILBoJsxAMBY0WhU0Wh0RM9hOcOt8u/s3LlT\nW7du1bZt2yRJ4XBYx44d09GjR9Xa2iq/36+DBw+qra1NnZ2dQxe0rGG/EIwmy7Ik5WKO8bG/ALzN\nTTtdnaKZN2+ePvzwQ506dUo//vijdu3apUWLFikQCCgSiSiVSikSiaimpsbN0wMAssBV4KdMmaLW\n1lbdeuutuvHGG1VRUaGFCxeqpaVF/f39Kikp0cmTJ7Vq1apszwsAGCZXp2hGtCCnaAAgYzk7RQMA\nGP8IPAAYisADgKEIPAAYisADgKEIPAAYisADgKEIPAAYisADgKEIPAAYisADgKEIPAAYisADgKEI\nPAAYisADgKEIPAAYisADgKEIPAAYisADgKEIPAAYisADgKEIPAAYisADgKEIPAAYisADgKEIPAAY\nisADgKEIPAAYisADgKEIPAAYisADgKEIPAAYisADgKEIPAAYisADgKEIPAAYynXgf/jhB919992a\nNWuWysrKFIvFlEwmFQqFZNu2GhsbNTAwkM1ZAQAZcB34devWybZtdXV1qaurSz6fT+FwWLZtq6+v\nT0VFRero6MjmrACADLgO/L59+7R27VpNmDBB+fn5mjp1quLxuJqbm1VQUKCmpibFYrFszgoAyICr\nwJ84cUKDg4NqaWlRIBDQxo0blUqllEgk5PP5JEk+n0/xeDyrwwIAhi/fzYMGBwfV29urTZs2qa6u\nTitXrtRLL70kx3GG9fj169envw4GgwoGg27GAABjRaNRRaPRET2H5Qy3yn9QWlqqnp4eSdKuXbv0\n3HPP6aefflJra6v8fr8OHjyotrY2dXZ2Dl3Qsob9QjCaLMuSlIs5xsf+AvA2N+10fQ6+uLhYsVhM\n586d086dO1VXV6dAIKBIJKJUKqVIJKKamhq3Tw8AGCHXR/C9vb266667NDg4qLq6Oj388MM6d+6c\nli1bpkOHDum6667T888/r0mTJg1dkCN4AMiYm3a6DrxbBB4AMpfTUzQAgPGNwAOAoQg8ABiKwAOA\n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\n",
158 "text": [
159 "<matplotlib.figure.Figure at 0x108c8f1d0>"
160 ]
161 }
162 ],
163 "prompt_number": 14
164 },
165 {
166 "cell_type": "code",
167 "collapsed": false,
168 "input": [],
169 "language": "python",
170 "metadata": {},
171 "outputs": []
172 }
173 ],
174 "metadata": {}
175 }
176 ]
177 } No newline at end of file
@@ -0,0 +1,6 b''
1 c = get_config()
2
3 #Export all the notebooks in the current directory to the sphinx_howto format.
4 c.NbConvertApp.notebooks = ['notebook2.ipynb']
5 c.NbConvertApp.export_format = 'python'
6
@@ -15,11 +15,50 b' Contains base test class for nbconvert'
15 #-----------------------------------------------------------------------------
15 #-----------------------------------------------------------------------------
16
16
17 import subprocess
17 import subprocess
18 import os
19 import glob
20 import shutil
21
22 import IPython
23 from IPython.utils.tempdir import TemporaryDirectory
18
24
19 #-----------------------------------------------------------------------------
25 #-----------------------------------------------------------------------------
20 # Classes and functions
26 # Classes and functions
21 #-----------------------------------------------------------------------------
27 #-----------------------------------------------------------------------------
22
28
29 class TemporaryWorkingDirectory(TemporaryDirectory):
30 """
31 Creates a temporary directory and sets the cwd to that directory.
32 Automatically reverts to previous cwd upon cleanup.
33 Usage example:
34
35 with TemporaryWorakingDirectory() as tmpdir:
36 ...
37 """
38
39 def __init__(self, **kw):
40 """
41 Constructor
42 """
43 super(TemporaryWorkingDirectory, self).__init__(**kw)
44
45 #Change cwd to new temp dir. Remember old cwd.
46 self.old_wd = os.getcwd()
47 os.chdir(self.name)
48
49
50 def cleanup(self):
51 """
52 Destructor
53 """
54
55 #Revert to old cwd.
56 os.chdir(self.old_wd)
57
58 #Cleanup
59 super(TemporaryWorkingDirectory, self).cleanup()
60
61
23 class TestsBase(object):
62 class TestsBase(object):
24 """Base tests class. Contains usefull fuzzy comparison and nbconvert
63 """Base tests class. Contains usefull fuzzy comparison and nbconvert
25 functions."""
64 functions."""
@@ -85,4 +124,37 b' class TestsBase(object):'
85 while search in text:
124 while search in text:
86 text = text.replace(search, replacement)
125 text = text.replace(search, replacement)
87 return text
126 return text
127
128
129 def create_temp_cwd(self, copy_filenames=None):
130 temp_dir = TemporaryWorkingDirectory()
131
132 #Copy the files if requested.
133 if not copy_filenames is None:
134 self.copy_files_to(copy_filenames)
135
136 #Return directory handler
137 return temp_dir
138
139
140 def copy_files_to(self, copy_filenames=None, destination=None):
141
142 #Copy test files into the destination directory.
143 if copy_filenames:
144 for pattern in copy_filenames:
145 for match in glob.glob(os.path.join(self._get_files_path(), pattern)):
146 if destination is None:
147 shutil.copyfile(match, os.path.basename(match))
148 else:
149 if not os.path.isdir(destination):
150 os.makedirs(destination)
151 shutil.copyfile(match, os.path.join(destination, os.path.basename(match)))
152
153
154 def _get_files_path(self):
155 return os.path.join(IPython.__path__[0], 'nbconvert', 'tests', 'files')
156
157
158 def call(self, parameters):
159 return subprocess.check_output(parameters)
88 No newline at end of file
160
@@ -13,16 +13,97 b' Contains tests for the nbconvertapp'
13 # Imports
13 # Imports
14 #-----------------------------------------------------------------------------
14 #-----------------------------------------------------------------------------
15
15
16 import os
16 from .base import TestsBase
17 from .base import TestsBase
17
18
18 #-----------------------------------------------------------------------------
19 #-----------------------------------------------------------------------------
19 # Classes and functions
20 # Classes and functions
20 #-----------------------------------------------------------------------------
21 #-----------------------------------------------------------------------------
21
22
22 class NbConvertAppTests(object):
23 class Test_NbConvertApp(TestsBase):
23 """Collection of NbConvertApp tests"""
24 """Collection of NbConvertApp tests"""
24
25
25 def test_a(self):
26
26 print('Success!')
27 def test_notebook_help(self):
27 assert True
28 """
28 No newline at end of file
29 Will help show if no notebooks are specified?
30 """
31 with self.create_temp_cwd():
32 assert "see '--help-all'" in self.call(['ipython', 'nbconvert'])
33
34
35 def test_glob(self):
36 """
37 Do search patterns work for notebook names?
38 """
39 with self.create_temp_cwd(['notebook*.ipynb']):
40 assert not 'error' in self.call(['ipython', 'nbconvert',
41 '--format="python"', '--notebooks=["*.ipynb"]']).lower()
42 assert os.path.isfile(os.path.join('nbconvert_build', 'notebook1.py'))
43 assert os.path.isfile(os.path.join('nbconvert_build', 'notebook2.py'))
44
45
46 def test_glob_subdir(self):
47 """
48 Do search patterns work for subdirectory notebook names?
49 """
50 with self.create_temp_cwd() as cwd:
51 self.copy_files_to(['notebook*.ipynb'], 'subdir/')
52 assert not 'error' in self.call(['ipython', 'nbconvert', '--format="python"',
53 '--notebooks=["%s"]' % os.path.join('subdir', '*.ipynb')]).lower()
54 assert os.path.isfile(os.path.join('nbconvert_build', 'notebook1.py'))
55 assert os.path.isfile(os.path.join('nbconvert_build', 'notebook2.py'))
56
57
58 def test_explicit(self):
59 """
60 Do explicit notebook names work?
61 """
62 with self.create_temp_cwd(['notebook*.ipynb']):
63 assert not 'error' in self.call(['ipython', 'nbconvert', '--format="python"',
64 '--notebooks=["notebook2.ipynb"]']).lower()
65 assert not os.path.isfile(os.path.join('nbconvert_build', 'notebook1.py'))
66 assert os.path.isfile(os.path.join('nbconvert_build', 'notebook2.py'))
67
68
69 def test_glob_explicit(self):
70 """
71 Can a search pattern be used along with matching explicit notebook names?
72 """
73 with self.create_temp_cwd(['notebook*.ipynb']):
74 assert not 'error' in self.call(['ipython', 'nbconvert', '--format="python"',
75 '--notebooks=["*.ipynb", "notebook1.ipynb", "notebook2.ipynb"]']).lower()
76 assert os.path.isfile(os.path.join('nbconvert_build', 'notebook1.py'))
77 assert os.path.isfile(os.path.join('nbconvert_build', 'notebook2.py'))
78
79
80 def test_explicit_glob(self):
81 """
82 Can explicit notebook names be used and then a matching search pattern?
83 """
84 with self.create_temp_cwd(['notebook*.ipynb']):
85 assert not 'error' in self.call(['ipython', 'nbconvert', '--format="python"',
86 '--notebooks=["notebook1.ipynb", "notebook2.ipynb", "*.ipynb"]']).lower()
87 assert os.path.isfile(os.path.join('nbconvert_build', 'notebook1.py'))
88 assert os.path.isfile(os.path.join('nbconvert_build', 'notebook2.py'))
89
90
91 def test_default_config(self):
92 """
93 Does the default config work?
94 """
95 with self.create_temp_cwd(['notebook*.ipynb', 'ipython_nbconvert_config.py']):
96 assert not 'error' in self.call(['ipython', 'nbconvert']).lower()
97 assert os.path.isfile(os.path.join('nbconvert_build', 'notebook1.py'))
98 assert not os.path.isfile(os.path.join('nbconvert_build', 'notebook2.py'))
99
100
101 def test_override_config(self):
102 """
103 Can the default config be overriden?
104 """
105 with self.create_temp_cwd(['notebook*.ipynb', 'ipython_nbconvert_config.py',
106 'override.py']):
107 assert not 'error' in self.call(['ipython', 'nbconvert', '--config="override.py"']).lower()
108 assert not os.path.isfile(os.path.join('nbconvert_build', 'notebook1.py'))
109 assert os.path.isfile(os.path.join('nbconvert_build', 'notebook2.py'))
General Comments 0
You need to be logged in to leave comments. Login now