##// END OF EJS Templates
Merge pull request #3914 from jdfreder/trans_tests...
Brian E. Granger -
r12144:05c7b0a3 merge
parent child Browse files
Show More
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
@@ -0,0 +1,53 b''
1 """
2 Module with utility functions for transformer tests
3 """
4
5 #-----------------------------------------------------------------------------
6 # Copyright (c) 2013, the IPython Development Team.
7 #
8 # Distributed under the terms of the Modified BSD License.
9 #
10 # The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # Imports
15 #-----------------------------------------------------------------------------
16
17 from IPython.nbformat import current as nbformat
18
19 from ...tests.base import TestsBase
20 from ...exporters.exporter import ResourcesDict
21
22 #-----------------------------------------------------------------------------
23 # Class
24 #-----------------------------------------------------------------------------
25
26 class TransformerTestsBase(TestsBase):
27 """Contains test functions transformer tests"""
28
29
30 def build_notebook(self):
31 """Build a notebook in memory for use with transformer tests"""
32
33 outputs = [nbformat.new_output(output_type="stream", stream="stdout", output_text="a"),
34 nbformat.new_output(output_type="text", output_text="b"),
35 nbformat.new_output(output_type="stream", stream="stdout", output_text="c"),
36 nbformat.new_output(output_type="stream", stream="stdout", output_text="d"),
37 nbformat.new_output(output_type="stream", stream="stderr", output_text="e"),
38 nbformat.new_output(output_type="stream", stream="stderr", output_text="f"),
39 nbformat.new_output(output_type="png", output_png=b'Zw==')] #g
40
41 cells=[nbformat.new_code_cell(input="$ e $", prompt_number=1,outputs=outputs),
42 nbformat.new_text_cell('markdown', source="$ e $")]
43 worksheets = [nbformat.new_worksheet(name="worksheet1", cells=cells)]
44
45 return nbformat.new_notebook(name="notebook1", worksheets=worksheets)
46
47
48 def build_resources(self):
49 """Build an empty resources dictionary."""
50
51 res = ResourcesDict()
52 res['metadata'] = ResourcesDict()
53 return res No newline at end of file
@@ -0,0 +1,38 b''
1 """
2 Module with tests for the coalescestreams transformer
3 """
4
5 #-----------------------------------------------------------------------------
6 # Copyright (c) 2013, the IPython Development Team.
7 #
8 # Distributed under the terms of the Modified BSD License.
9 #
10 # The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # Imports
15 #-----------------------------------------------------------------------------
16
17 from .base import TransformerTestsBase
18 from ..coalescestreams import coalesce_streams
19
20
21 #-----------------------------------------------------------------------------
22 # Class
23 #-----------------------------------------------------------------------------
24
25 class TestCoalesceStreams(TransformerTestsBase):
26 """Contains test functions for coalescestreams.py"""
27
28 def test_coalesce_streams(self):
29 """coalesce_streams transformer output test"""
30 nb = self.build_notebook()
31 res = self.build_resources()
32 nb, res = coalesce_streams(nb, res)
33 outputs = nb.worksheets[0].cells[0].outputs
34 self.assertEqual(outputs[0].text, "a")
35 self.assertEqual(outputs[1].output_type, "text")
36 self.assertEqual(outputs[2].text, "cd")
37 self.assertEqual(outputs[3].text, "ef")
38 No newline at end of file
@@ -0,0 +1,47 b''
1 """
2 Module with tests for the csshtmlheader transformer
3 """
4
5 #-----------------------------------------------------------------------------
6 # Copyright (c) 2013, the IPython Development Team.
7 #
8 # Distributed under the terms of the Modified BSD License.
9 #
10 # The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # Imports
15 #-----------------------------------------------------------------------------
16
17 from .base import TransformerTestsBase
18 from ..csshtmlheader import CSSHTMLHeaderTransformer
19
20
21 #-----------------------------------------------------------------------------
22 # Class
23 #-----------------------------------------------------------------------------
24
25 class TestCSSHTMLHeader(TransformerTestsBase):
26 """Contains test functions for csshtmlheader.py"""
27
28
29 def build_transformer(self):
30 """Make an instance of a transformer"""
31 transformer = CSSHTMLHeaderTransformer()
32 transformer.enabled = True
33 return transformer
34
35
36 def test_constructor(self):
37 """Can a CSSHTMLHeaderTransformer be constructed?"""
38 self.build_transformer()
39
40
41 def test_output(self):
42 """Test the output of the CSSHTMLHeaderTransformer"""
43 nb = self.build_notebook()
44 res = self.build_resources()
45 transformer = self.build_transformer()
46 nb, res = transformer(nb, res)
47 assert 'css' in res['inlining'] No newline at end of file
@@ -0,0 +1,62 b''
1 """
2 Module with tests for the extractoutput transformer
3 """
4
5 #-----------------------------------------------------------------------------
6 # Copyright (c) 2013, the IPython Development Team.
7 #
8 # Distributed under the terms of the Modified BSD License.
9 #
10 # The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # Imports
15 #-----------------------------------------------------------------------------
16
17 from .base import TransformerTestsBase
18 from ..extractoutput import ExtractOutputTransformer
19
20
21 #-----------------------------------------------------------------------------
22 # Class
23 #-----------------------------------------------------------------------------
24
25 class TestExtractOutput(TransformerTestsBase):
26 """Contains test functions for extractoutput.py"""
27
28
29 def build_transformer(self):
30 """Make an instance of a transformer"""
31 transformer = ExtractOutputTransformer()
32 transformer.enabled = True
33 return transformer
34
35
36 def test_constructor(self):
37 """Can a ExtractOutputTransformer be constructed?"""
38 self.build_transformer()
39
40
41 def test_output(self):
42 """Test the output of the ExtractOutputTransformer"""
43 nb = self.build_notebook()
44 res = self.build_resources()
45 transformer = self.build_transformer()
46 nb, res = transformer(nb, res)
47
48 # Check if text was extracted.
49 assert 'text_filename' in nb.worksheets[0].cells[0].outputs[1]
50 text_filename = nb.worksheets[0].cells[0].outputs[1]['text_filename']
51
52 # Check if png was extracted.
53 assert 'png_filename' in nb.worksheets[0].cells[0].outputs[6]
54 png_filename = nb.worksheets[0].cells[0].outputs[6]['png_filename']
55
56 # Verify text output
57 assert text_filename in res['outputs']
58 self.assertEqual(res['outputs'][text_filename], b'b')
59
60 # Verify png output
61 assert png_filename in res['outputs']
62 self.assertEqual(res['outputs'][png_filename], b'g')
@@ -0,0 +1,51 b''
1 """
2 Module with tests for the latex transformer
3 """
4
5 #-----------------------------------------------------------------------------
6 # Copyright (c) 2013, the IPython Development Team.
7 #
8 # Distributed under the terms of the Modified BSD License.
9 #
10 # The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # Imports
15 #-----------------------------------------------------------------------------
16
17 from .base import TransformerTestsBase
18 from ..latex import LatexTransformer
19
20
21 #-----------------------------------------------------------------------------
22 # Class
23 #-----------------------------------------------------------------------------
24
25 class TestLatex(TransformerTestsBase):
26 """Contains test functions for latex.py"""
27
28
29 def build_transformer(self):
30 """Make an instance of a transformer"""
31 transformer = LatexTransformer()
32 transformer.enabled = True
33 return transformer
34
35 def test_constructor(self):
36 """Can a LatexTransformer be constructed?"""
37 self.build_transformer()
38
39
40 def test_output(self):
41 """Test the output of the LatexTransformer"""
42 nb = self.build_notebook()
43 res = self.build_resources()
44 transformer = self.build_transformer()
45 nb, res = transformer(nb, res)
46
47 # Make sure the code cell wasn't modified.
48 self.assertEqual(nb.worksheets[0].cells[0].input, '$ e $')
49
50 # Verify that the markdown cell was processed.
51 self.assertEqual(nb.worksheets[0].cells[1].source, '$e$')
@@ -0,0 +1,94 b''
1 """
2 Module with tests for the revealhelp transformer
3 """
4
5 #-----------------------------------------------------------------------------
6 # Copyright (c) 2013, the IPython Development Team.
7 #
8 # Distributed under the terms of the Modified BSD License.
9 #
10 # The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # Imports
15 #-----------------------------------------------------------------------------
16
17 from IPython.nbformat import current as nbformat
18
19 from .base import TransformerTestsBase
20 from ..revealhelp import RevealHelpTransformer
21
22
23 #-----------------------------------------------------------------------------
24 # Class
25 #-----------------------------------------------------------------------------
26
27 class Testrevealhelp(TransformerTestsBase):
28 """Contains test functions for revealhelp.py"""
29
30 def build_notebook(self):
31 """Build a reveal slides notebook in memory for use with tests.
32 Overrides base in TransformerTestsBase"""
33
34 outputs = [nbformat.new_output(output_type="stream", stream="stdout", output_text="a")]
35
36 slide_metadata = {'slideshow' : {'slide_type': 'slide'}}
37 subslide_metadata = {'slideshow' : {'slide_type': 'subslide'}}
38
39 cells=[nbformat.new_code_cell(input="", prompt_number=1, outputs=outputs),
40 nbformat.new_text_cell('markdown', source="", metadata=slide_metadata),
41 nbformat.new_code_cell(input="", prompt_number=2, outputs=outputs),
42 nbformat.new_text_cell('markdown', source="", metadata=slide_metadata),
43 nbformat.new_text_cell('markdown', source="", metadata=subslide_metadata)]
44 worksheets = [nbformat.new_worksheet(name="worksheet1", cells=cells)]
45
46 return nbformat.new_notebook(name="notebook1", worksheets=worksheets)
47
48
49 def build_transformer(self):
50 """Make an instance of a transformer"""
51 transformer = RevealHelpTransformer()
52 transformer.enabled = True
53 return transformer
54
55
56 def test_constructor(self):
57 """Can a RevealHelpTransformer be constructed?"""
58 self.build_transformer()
59
60
61 def test_reveal_attribute(self):
62 """Make sure the reveal url_prefix resources is set"""
63 nb = self.build_notebook()
64 res = self.build_resources()
65 transformer = self.build_transformer()
66 nb, res = transformer(nb, res)
67 assert 'reveal' in res
68 assert 'url_prefix' in res['reveal']
69
70
71 def test_reveal_output(self):
72 """Make sure that the reveal transformer """
73 nb = self.build_notebook()
74 res = self.build_resources()
75 transformer = self.build_transformer()
76 nb, res = transformer(nb, res)
77 cells = nb.worksheets[0].cells
78
79 # Make sure correct metadata tags are available on every cell.
80 for cell in cells:
81 assert 'slide_type' in cell.metadata
82 assert 'align_type' in cell.metadata
83
84 # Make sure slide end is only applied to the cells preceeding slide
85 # cells.
86 assert 'slide_helper' not in cells[1].metadata
87
88 # Verify 'slide-end'
89 assert 'slide_helper' in cells[0].metadata
90 self.assertEqual(cells[0].metadata['slide_helper'], 'slide_end')
91 assert 'slide_helper' in cells[2].metadata
92 self.assertEqual(cells[2].metadata['slide_helper'], 'slide_end')
93 assert 'slide_helper' in cells[3].metadata
94 self.assertEqual(cells[3].metadata['slide_helper'], 'subslide_end')
@@ -0,0 +1,57 b''
1 """
2 Module with tests for the sphinx transformer
3 """
4
5 #-----------------------------------------------------------------------------
6 # Copyright (c) 2013, the IPython Development Team.
7 #
8 # Distributed under the terms of the Modified BSD License.
9 #
10 # The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # Imports
15 #-----------------------------------------------------------------------------
16
17 from .base import TransformerTestsBase
18 from ..sphinx import SphinxTransformer
19
20
21 #-----------------------------------------------------------------------------
22 # Class
23 #-----------------------------------------------------------------------------
24
25 class TestSphinx(TransformerTestsBase):
26 """Contains test functions for sphinx.py"""
27
28
29 def build_transformer(self):
30 """Make an instance of a transformer"""
31 transformer = SphinxTransformer()
32 transformer.enabled = True
33 return transformer
34
35
36 def test_constructor(self):
37 """Can a SphinxTransformer be constructed?"""
38 self.build_transformer()
39
40
41 def test_resources(self):
42 """Make sure the SphinxTransformer adds the appropriate resources to the
43 resources dict."""
44 nb = self.build_notebook()
45 res = self.build_resources()
46 transformer = self.build_transformer()
47 nb, res = transformer(nb, res)
48 assert "author" in res['sphinx']
49 assert "version" in res['sphinx']
50 assert "release" in res['sphinx']
51 assert "date" in res['sphinx']
52 assert "chapterstyle" in res['sphinx']
53 assert "outputstyle" in res['sphinx']
54 assert "centeroutput" in res['sphinx']
55 assert "header" in res['sphinx']
56 assert "texinputs" in res['sphinx']
57 assert "pygment_definitions" in res['sphinx']
@@ -0,0 +1,90 b''
1 """
2 Module with tests for the svg2pdf transformer
3 """
4
5 #-----------------------------------------------------------------------------
6 # Copyright (c) 2013, the IPython Development Team.
7 #
8 # Distributed under the terms of the Modified BSD License.
9 #
10 # The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
12
13 #-----------------------------------------------------------------------------
14 # Imports
15 #-----------------------------------------------------------------------------
16
17 from IPython.testing import decorators as dec
18 from IPython.nbformat import current as nbformat
19
20 from .base import TransformerTestsBase
21 from ..svg2pdf import SVG2PDFTransformer
22
23
24 #-----------------------------------------------------------------------------
25 # Class
26 #-----------------------------------------------------------------------------
27
28 class Testsvg2pdf(TransformerTestsBase):
29 """Contains test functions for svg2pdf.py"""
30
31 simple_svg = """<?xml version="1.0" encoding="UTF-8" standalone="no"?>
32 <!-- Created with Inkscape (http://www.inkscape.org/) -->
33 <svg
34 xmlns:svg="http://www.w3.org/2000/svg"
35 xmlns="http://www.w3.org/2000/svg"
36 version="1.0"
37 x="0.00000000"
38 y="0.00000000"
39 width="500.00000"
40 height="500.00000"
41 id="svg2">
42 <defs
43 id="defs4" />
44 <g
45 id="layer1">
46 <rect
47 width="300.00000"
48 height="300.00000"
49 x="100.00000"
50 y="100.00000"
51 style="opacity:1.0000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:8.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.00000000;stroke-opacity:1.0000000"
52 id="rect5719" />
53 </g>
54 </svg>"""
55
56 def build_notebook(self):
57 """Build a reveal slides notebook in memory for use with tests.
58 Overrides base in TransformerTestsBase"""
59
60 outputs = [nbformat.new_output(output_type="svg", output_svg=self.simple_svg)]
61
62 slide_metadata = {'slideshow' : {'slide_type': 'slide'}}
63 subslide_metadata = {'slideshow' : {'slide_type': 'subslide'}}
64
65 cells=[nbformat.new_code_cell(input="", prompt_number=1, outputs=outputs)]
66 worksheets = [nbformat.new_worksheet(name="worksheet1", cells=cells)]
67
68 return nbformat.new_notebook(name="notebook1", worksheets=worksheets)
69
70
71 def build_transformer(self):
72 """Make an instance of a transformer"""
73 transformer = SVG2PDFTransformer()
74 transformer.enabled = True
75 return transformer
76
77
78 def test_constructor(self):
79 """Can a SVG2PDFTransformer be constructed?"""
80 self.build_transformer()
81
82
83 @dec.onlyif_cmds_exist('inkscape')
84 def test_output(self):
85 """Test the output of the SVG2PDFTransformer"""
86 nb = self.build_notebook()
87 res = self.build_resources()
88 transformer = self.build_transformer()
89 nb, res = transformer(nb, res)
90 assert 'svg' in nb.worksheets[0].cells[0].outputs[0]
@@ -53,7 +53,7 b' class TestExporter(ExportersTestsBase):'
53 exporter = self._make_exporter(config=config)
53 exporter = self._make_exporter(config=config)
54 (output, resources) = exporter.from_filename(self._get_notebook())
54 (output, resources) = exporter.from_filename(self._get_notebook())
55 assert resources is not None
55 assert resources is not None
56 assert 'outputs' in resources
56 assert isinstance(resources['outputs'], dict)
57 assert len(resources['outputs']) > 0
57 assert len(resources['outputs']) > 0
58
58
59
59
@@ -65,7 +65,6 b' class TestExporter(ExportersTestsBase):'
65 exporter = self._make_exporter(config=config)
65 exporter = self._make_exporter(config=config)
66 (output, resources) = exporter.from_filename(self._get_notebook())
66 (output, resources) = exporter.from_filename(self._get_notebook())
67 assert resources is not None
67 assert resources is not None
68 assert 'cheese' in resources
69 assert resources['cheese'] == 'real'
68 assert resources['cheese'] == 'real'
70
69
71
70
@@ -77,7 +76,6 b' class TestExporter(ExportersTestsBase):'
77 exporter = self._make_exporter(config=config)
76 exporter = self._make_exporter(config=config)
78 (output, resources) = exporter.from_filename(self._get_notebook())
77 (output, resources) = exporter.from_filename(self._get_notebook())
79 assert resources is not None
78 assert resources is not None
80 assert 'cheese' in resources
81 assert resources['cheese'] == 'real'
79 assert resources['cheese'] == 'real'
82
80
83
81
@@ -89,7 +87,6 b' class TestExporter(ExportersTestsBase):'
89 exporter = self._make_exporter(config=config)
87 exporter = self._make_exporter(config=config)
90 (output, resources) = exporter.from_filename(self._get_notebook())
88 (output, resources) = exporter.from_filename(self._get_notebook())
91 assert resources is not None
89 assert resources is not None
92 assert 'cheese' in resources
93 assert resources['cheese'] == 'real'
90 assert resources['cheese'] == 'real'
94
91
95
92
@@ -101,7 +98,6 b' class TestExporter(ExportersTestsBase):'
101 exporter.register_transformer(CheeseTransformer, enabled=True)
98 exporter.register_transformer(CheeseTransformer, enabled=True)
102 (output, resources) = exporter.from_filename(self._get_notebook())
99 (output, resources) = exporter.from_filename(self._get_notebook())
103 assert resources is not None
100 assert resources is not None
104 assert 'cheese' in resources
105 assert resources['cheese'] == 'real'
101 assert resources['cheese'] == 'real'
106
102
107
103
@@ -57,7 +57,7 b' class ExtractOutputTransformer(Transformer):'
57 output_files_dir = resources.get('output_files_dir', None)
57 output_files_dir = resources.get('output_files_dir', None)
58
58
59 #Make sure outputs key exists
59 #Make sure outputs key exists
60 if not 'outputs' in resources:
60 if not isinstance(resources['outputs'], dict):
61 resources['outputs'] = {}
61 resources['outputs'] = {}
62
62
63 #Loop through all of the outputs in the cell
63 #Loop through all of the outputs in the cell
@@ -65,11 +65,12 b' class ExtractOutputTransformer(Transformer):'
65
65
66 #Get the output in data formats that the template is interested in.
66 #Get the output in data formats that the template is interested in.
67 for out_type in self.display_data_priority:
67 for out_type in self.display_data_priority:
68 if out.hasattr(out_type):
68 if out.hasattr(out_type):
69 data = out[out_type]
69 data = out[out_type]
70
70
71 #Binary files are base64-encoded, SVG is already XML
71 #Binary files are base64-encoded, SVG is already XML
72 if out_type in ('png', 'jpg', 'jpeg', 'pdf'):
72 if out_type in ('png', 'jpg', 'jpeg', 'pdf'):
73
73 # data is b64-encoded as text (str, unicode)
74 # data is b64-encoded as text (str, unicode)
74 # decodestring only accepts bytes
75 # decodestring only accepts bytes
75 data = py3compat.cast_bytes(data)
76 data = py3compat.cast_bytes(data)
@@ -54,7 +54,7 b' class RevealHelpTransformer(Transformer):'
54 worksheet.cells[index - 1].metadata.slide_helper = 'subslide_end'
54 worksheet.cells[index - 1].metadata.slide_helper = 'subslide_end'
55
55
56
56
57 if 'reveal' not in resources:
57 if not isinstance(resources['reveal'], dict):
58 resources['reveal'] = {}
58 resources['reveal'] = {}
59 resources['reveal']['url_prefix'] = self.url_prefix
59 resources['reveal']['url_prefix'] = self.url_prefix
60
60
@@ -127,7 +127,7 b' class SphinxTransformer(Transformer):'
127 # TODO: Add versatile method of additional notebook metadata. Include
127 # TODO: Add versatile method of additional notebook metadata. Include
128 # handling of multiple files. For now use a temporay namespace,
128 # handling of multiple files. For now use a temporay namespace,
129 # '_draft' to signify that this needs to change.
129 # '_draft' to signify that this needs to change.
130 if not "sphinx" in resources:
130 if not isinstance(resources["sphinx"], dict):
131 resources["sphinx"] = {}
131 resources["sphinx"] = {}
132
132
133 if self.interactive:
133 if self.interactive:
@@ -33,7 +33,7 b' class DebugWriter(WriterBase):'
33 See base for more...
33 See base for more...
34 """
34 """
35
35
36 if 'outputs' in resources:
36 if isinstance(resources['outputs'], dict):
37 print("outputs extracted from %s" % notebook_name)
37 print("outputs extracted from %s" % notebook_name)
38 print('-' * 80)
38 print('-' * 80)
39 pprint(resources['outputs'], indent=2, width=70)
39 pprint(resources['outputs'], indent=2, width=70)
General Comments 0
You need to be logged in to leave comments. Login now