Code cleanup and test html math output options.
[docutils.git] / test / test_writers / test_html4css1_misc.py
blobb0f32a3519cc2e6e7d4f93b0c3fc8144cd9ae2e2
1 #! /usr/bin/env python
2 # coding: utf-8
4 # $Id$
5 # Authors: Lea Wiemann, Dmitry Shachnev, Günter Milde
6 # Maintainer: docutils-develop@lists.sourceforge.net
7 # Copyright: This module has been placed in the public domain.
9 """
10 Miscellaneous HTML writer tests.
11 """
13 from __init__ import DocutilsTestSupport
14 from docutils import core
15 from docutils._compat import b
17 class EncodingTestCase(DocutilsTestSupport.StandardTestCase):
19 def test_xmlcharrefreplace(self):
20 # Test that xmlcharrefreplace is the default output encoding
21 # error handler.
22 settings_overrides={
23 'output_encoding': 'latin1',
24 'stylesheet': '',
25 '_disable_config': True,}
26 result = core.publish_string(
27 u'EUR = \u20ac', writer_name='html4css1',
28 settings_overrides=settings_overrides)
29 # Encoding a euro sign with latin1 doesn't work, so the
30 # xmlcharrefreplace handler is used.
31 self.assertIn(b('EUR = €'), result)
33 class MathTestCase(DocutilsTestSupport.StandardTestCase):
35 """Attention: This class tests the current implementation of maths support
36 which is open to change in future Docutils releases. """
38 settings_overrides={'_disable_config': True,}
39 mathjax_script = '<script type="text/javascript" src="%s">'
40 default_mathjax_url = ('http://cdn.mathjax.org/mathjax/latest/MathJax.js'
41 '?config=TeX-AMS-MML_HTMLorMML')
42 custom_mathjax_url = ('file:///usr/share/javascript/mathjax/MathJax.js'
43 '?config=TeX-AMS-MML_HTMLorMML')
44 data = ':math:`42`'
46 def test_math_output_default(self):
47 # Currently MathJax with default URL. Likely to change to HTML!
48 mysettings = self.settings_overrides
49 head = core.publish_parts(self.data, writer_name='html4css1',
50 settings_overrides=mysettings)['head']
51 self.assertIn(self.mathjax_script % self.default_mathjax_url, head)
53 def test_math_output_mathjax(self):
54 # Explicitly specifying math_output=MathJax, case insensitively
55 # use default MathJax URL
56 mysettings = self.settings_overrides.copy()
57 mysettings.update({'math_output': 'MathJax'})
58 head = core.publish_parts(self.data, writer_name='html4css1',
59 settings_overrides=mysettings)['head']
60 self.assertIn(self.mathjax_script % self.default_mathjax_url, head)
62 def test_math_output_mathjax_custom(self):
63 # Customizing MathJax URL
64 mysettings = self.settings_overrides.copy()
65 mysettings.update({'math_output':
66 'mathjax %s' % self.custom_mathjax_url})
67 head = core.publish_parts(self.data, writer_name='html4css1',
68 settings_overrides=mysettings)['head']
69 self.assertIn(self.mathjax_script % self.custom_mathjax_url, head)
71 def test_math_output_html(self):
72 # There should be no MathJax script when math_output is not MathJax
73 mysettings = self.settings_overrides.copy()
74 mysettings.update({'math_output': 'HTML'})
75 head = core.publish_parts(self.data, writer_name='html4css1',
76 settings_overrides=mysettings)['head']
77 self.assertNotIn('MathJax.js', head)
79 def test_math_output_mathjax_no_math(self):
80 mysettings = self.settings_overrides.copy()
81 mysettings.update({'math_output': 'MathJax'})
82 # There should be no math script when text does not contain math
83 head = core.publish_parts('No math.', writer_name='html4css1')['head']
84 self.assertNotIn('MathJax', head)
87 if __name__ == '__main__':
88 import unittest
89 unittest.main()