You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
8.6 KiB
206 lines
8.6 KiB
#! /usr/bin/env python |
|
# coding: utf-8 |
|
|
|
# $Id: test_html4css1_misc.py 8115 2017-06-16 20:50:47Z milde $ |
|
# Authors: Lea Wiemann, Dmitry Shachnev, Günter Milde |
|
# Maintainer: docutils-develop@lists.sourceforge.net |
|
# Copyright: This module has been placed in the public domain. |
|
|
|
""" |
|
Miscellaneous HTML writer tests. |
|
""" |
|
|
|
from __init__ import DocutilsTestSupport |
|
from docutils import core |
|
from docutils._compat import b |
|
import os |
|
|
|
class EncodingTestCase(DocutilsTestSupport.StandardTestCase): |
|
|
|
def test_xmlcharrefreplace(self): |
|
# Test that xmlcharrefreplace is the default output encoding |
|
# error handler. |
|
settings_overrides={ |
|
'output_encoding': 'latin1', |
|
'stylesheet': '', |
|
'_disable_config': True,} |
|
result = core.publish_string( |
|
u'EUR = \u20ac', writer_name='html4css1', |
|
settings_overrides=settings_overrides) |
|
# Encoding a euro sign with latin1 doesn't work, so the |
|
# xmlcharrefreplace handler is used. |
|
self.assertIn(b('EUR = €'), result) |
|
|
|
class MovingArgsTestCase(DocutilsTestSupport.StandardTestCase): |
|
|
|
settings_overrides={'stylesheet_path': '', |
|
# 'embed_stylesheet': False, |
|
'_disable_config': True, |
|
} |
|
|
|
def test_definition_list_item_classes(self): |
|
# Do not drop class arguments for the definition list item. |
|
# Pass them to to the term node instead. |
|
data = """\ |
|
first term: |
|
fist def |
|
|
|
.. class:: for the second item |
|
|
|
second term: |
|
second def |
|
""" |
|
result = core.publish_string(data, writer_name='html4css1', |
|
settings_overrides=self.settings_overrides) |
|
self.assertIn(b('<dt class="for the second item">second term:</dt>'), |
|
result) |
|
|
|
def test_definition_list_item_name(self): |
|
# Do not drop the "name" of the definition list item. |
|
# Pass it to to the term node instead. |
|
data = """\ |
|
first term: |
|
first def |
|
|
|
.. _second item: |
|
|
|
second term: |
|
second def |
|
""" |
|
result = core.publish_string(data, writer_name='html4css1', |
|
settings_overrides=self.settings_overrides) |
|
self.assertIn(b('<dt id="second-item">second term:</dt>'), |
|
result) |
|
|
|
|
|
class SettingsTestCase(DocutilsTestSupport.StandardTestCase): |
|
data = 'test' |
|
|
|
def test_default_stylesheet(self): |
|
# default style sheet, embedded |
|
mysettings = {'_disable_config': True,} |
|
styles = core.publish_parts(self.data, writer_name='html4css1', |
|
settings_overrides=mysettings)['stylesheet'] |
|
self.assertIn('Default cascading style sheet ' |
|
'for the HTML output of Docutils.', styles) |
|
|
|
def test_default_stylesheet_linked(self): |
|
# default style sheet, linked |
|
mysettings = {'_disable_config': True, |
|
'embed_stylesheet': False} |
|
styles = core.publish_parts(self.data, writer_name='html4css1', |
|
settings_overrides=mysettings)['stylesheet'] |
|
self.assertIn('docutils/writers/html4css1/html4css1.css', styles) |
|
|
|
def test_math_stylesheet_linked(self): |
|
# default + math style sheet, linked |
|
mysettings = {'_disable_config': True, |
|
'embed_stylesheet': False, |
|
'stylesheet_path': 'html4css1.css, math.css'} |
|
styles = core.publish_parts(self.data, writer_name='html4css1', |
|
settings_overrides=mysettings)['stylesheet'] |
|
self.assertIn('docutils/writers/html4css1/html4css1.css', styles) |
|
self.assertIn('docutils/writers/html5_polyglot/math.css', styles) |
|
|
|
def test_custom_stylesheet_linked(self): |
|
# default + custom style sheet, linked |
|
mysettings = {'_disable_config': True, |
|
'embed_stylesheet': False, |
|
'stylesheet_path': 'html4css1.css, ' |
|
'data/ham.css'} |
|
styles = core.publish_parts(self.data, writer_name='html4css1', |
|
settings_overrides=mysettings)['stylesheet'] |
|
self.assertIn('docutils/writers/html4css1/html4css1.css', styles) |
|
self.assertIn('href="data/ham.css"', styles) |
|
|
|
def test_custom_stylesheet_dir(self): |
|
mysettings = {'_disable_config': True, |
|
'embed_stylesheet': False, |
|
'stylesheet_dirs': ('../docutils/writers/html4css1/', |
|
'data'), |
|
'stylesheet_path': 'html4css1.css, ham.css'} |
|
styles = core.publish_parts(self.data, writer_name='html4css1', |
|
settings_overrides=mysettings)['stylesheet'] |
|
if os.path.isdir('../docutils/writers/html4css1/'): |
|
self.assertIn('docutils/writers/html4css1/html4css1.css', styles) |
|
self.assertIn('href="data/ham.css"', styles) |
|
|
|
def test_custom_stylesheet_dir_embedded(self): |
|
mysettings = {'_disable_config': True, |
|
'embed_stylesheet': True, |
|
'stylesheet_dirs': ('../docutils/writers/html4css1/', |
|
'data'), |
|
'stylesheet_path': 'ham.css'} |
|
styles = core.publish_parts(self.data, writer_name='html4css1', |
|
settings_overrides=mysettings)['stylesheet'] |
|
self.assertIn('dl.docutils dd {\n margin-bottom: 0.5em }', styles) |
|
|
|
class MathTestCase(DocutilsTestSupport.StandardTestCase): |
|
|
|
"""Attention: This class tests the current implementation of maths support |
|
which is open to change in future Docutils releases. """ |
|
|
|
mathjax_script = '<script type="text/javascript" src="%s">' |
|
default_mathjax_url = ('file:/usr/share/javascript/mathjax/MathJax.js' |
|
'?config=TeX-AMS_CHTML') |
|
custom_mathjax_url = ('/mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML') |
|
data = ':math:`42`' |
|
|
|
def test_math_output_default(self): |
|
# HTML with math.css stylesheet (since 0.11) |
|
mysettings = {'_disable_config': True,} |
|
styles = core.publish_parts(self.data, writer_name='html4css1', |
|
settings_overrides=mysettings)['stylesheet'] |
|
self.assertIn('convert LaTeX equations to HTML output.', styles) |
|
|
|
def test_math_output_mathjax(self): |
|
# Explicitly specifying math_output=MathJax, case insensitively |
|
# use default MathJax URL |
|
mysettings = {'_disable_config': True, |
|
'report_level': 3, |
|
'math_output': 'MathJax'} |
|
head = core.publish_parts(self.data, writer_name='html4css1', |
|
settings_overrides=mysettings)['head'] |
|
self.assertIn(self.mathjax_script % self.default_mathjax_url, head) |
|
|
|
def test_math_output_mathjax_custom(self): |
|
# Customizing MathJax URL |
|
mysettings = {'_disable_config': True, |
|
'math_output': |
|
'mathjax %s' % self.custom_mathjax_url} |
|
head = core.publish_parts(self.data, writer_name='html4css1', |
|
settings_overrides=mysettings)['head'] |
|
self.assertIn(self.mathjax_script % self.custom_mathjax_url, head) |
|
|
|
def test_math_output_html(self): |
|
mysettings = {'_disable_config': True, |
|
'math_output': 'HTML'} |
|
head = core.publish_parts(self.data, writer_name='html4css1', |
|
settings_overrides=mysettings)['head'] |
|
# There should be no MathJax script when math_output is not MathJax |
|
self.assertNotIn('MathJax.js', head) |
|
|
|
def test_math_output_html_stylesheet(self): |
|
mysettings = {'_disable_config': True, |
|
'math_output': 'HTML math.css,custom/style.css', |
|
'stylesheet_dirs': ('.', 'functional/input/data'), |
|
'embed_stylesheet': False} |
|
styles = core.publish_parts(self.data, writer_name='html4css1', |
|
settings_overrides=mysettings)['stylesheet'] |
|
self.assertEqual(u"""\ |
|
<link rel="stylesheet" href="functional/input/data/html4css1.css" type="text/css" /> |
|
<link rel="stylesheet" href="functional/input/data/math.css" type="text/css" /> |
|
<link rel="stylesheet" href="custom/style.css" type="text/css" /> |
|
""", styles) |
|
|
|
def test_math_output_mathjax_no_math(self): |
|
mysettings = {'_disable_config': True, |
|
'math_output': 'MathJax'} |
|
# There should be no math script when text does not contain math |
|
head = core.publish_parts('No math.', writer_name='html4css1')['head'] |
|
self.assertNotIn('MathJax', head) |
|
|
|
|
|
if __name__ == '__main__': |
|
import unittest |
|
unittest.main()
|
|
|