diff options
Diffstat (limited to 'test/test_transforms/test_substitutions.py')
-rwxr-xr-x | test/test_transforms/test_substitutions.py | 353 |
1 files changed, 353 insertions, 0 deletions
diff --git a/test/test_transforms/test_substitutions.py b/test/test_transforms/test_substitutions.py new file mode 100755 index 000000000..196bec9a1 --- /dev/null +++ b/test/test_transforms/test_substitutions.py @@ -0,0 +1,353 @@ +#! /usr/bin/env python + +# Author: David Goodger +# Contact: goodger@users.sourceforge.net +# Revision: $Revision$ +# Date: $Date$ +# Copyright: This module has been placed in the public domain. + +""" +Tests for docutils.transforms.references.Substitutions. +""" + +from __init__ import DocutilsTestSupport +from docutils.transforms.references import Substitutions +from docutils.parsers.rst import Parser + + +def suite(): + parser = Parser() + s = DocutilsTestSupport.TransformTestSuite(parser) + s.generateTests(totest) + return s + +totest = {} + +totest['substitutions'] = ((Substitutions,), [ +["""\ +The |biohazard| symbol is deservedly scary-looking. + +.. |biohazard| image:: biohazard.png +""", +"""\ +<document source="test data"> + <paragraph> + The \n\ + <image alt="biohazard" uri="biohazard.png"> + symbol is deservedly scary-looking. + <substitution_definition names="biohazard"> + <image alt="biohazard" uri="biohazard.png"> +"""], +["""\ +Here's an |unknown| substitution. +""", +"""\ +<document source="test data"> + <paragraph> + Here's an \n\ + <problematic ids="id2" refid="id1"> + |unknown| + substitution. + <system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR"> + <paragraph> + Undefined substitution referenced: "unknown". +"""], +[u"""\ +Substitutions support case differences: + +.. |eacute| replace:: \u00E9 +.. |Eacute| replace:: \u00C9 + +|Eacute|\\t\\ |eacute|, and even |EACUTE|. +""", +u"""\ +<document source="test data"> + <paragraph> + Substitutions support case differences: + <substitution_definition names="eacute"> + \u00E9 + <substitution_definition names="Eacute"> + \u00C9 + <paragraph> + \u00C9 + t + \u00E9 + , and even \n\ + \u00C9 + . +"""], +[u"""\ +Indirect substitution definitions with multiple references: + +|substitute| my coke for gin +|substitute| you for my mum +at least I'll get my washing done + +.. |substitute| replace:: |replace| +.. |replace| replace:: swap +""", +u"""\ +<document source="test data"> + <paragraph> + Indirect substitution definitions with multiple references: + <paragraph> + swap + my coke for gin + swap + you for my mum + at least I'll get my washing done + <substitution_definition names="substitute"> + swap + <substitution_definition names="replace"> + swap +"""], +["""\ +.. |l| unicode:: U+00AB .. left chevron +.. |r| unicode:: U+00BB .. right chevron +.. |.| replace:: |l|\ ``.``\ |r| + +.. Delete either of the following lines, and there is no error. + +Regular expression |.| will match any character + +.. Note:: Note that |.| matches *exactly* one character +""", +u"""\ +<document source="test data"> + <substitution_definition names="l"> + \xab + <substitution_definition names="r"> + \xbb + <substitution_definition names="."> + \xab + <literal> + . + \xbb + <comment xml:space="preserve"> + Delete either of the following lines, and there is no error. + <paragraph> + Regular expression \n\ + \xab + <literal> + . + \xbb + will match any character + <note> + <paragraph> + Note that \n\ + \xab + <literal> + . + \xbb + matches \n\ + <emphasis> + exactly + one character +"""], +["""\ +.. |sub| replace:: |sub| +""", +"""\ +<document source="test data"> + <system_message level="3" line="1" names="sub" source="test data" type="ERROR"> + <paragraph> + Circular substitution definition detected: + <literal_block xml:space="preserve"> + .. |sub| replace:: |sub| +"""], +["""\ +.. |sub| replace:: |indirect1| +.. |indirect1| replace:: |indirect2| +.. |indirect2| replace:: |Sub| +""", +"""\ +<document source="test data"> + <system_message level="3" line="1" names="sub" source="test data" type="ERROR"> + <paragraph> + Circular substitution definition detected: + <literal_block xml:space="preserve"> + .. |sub| replace:: |indirect1| + <system_message level="3" line="2" names="indirect1" source="test data" type="ERROR"> + <paragraph> + Circular substitution definition detected: + <literal_block xml:space="preserve"> + .. |indirect1| replace:: |indirect2| + <system_message level="3" line="3" names="indirect2" source="test data" type="ERROR"> + <paragraph> + Circular substitution definition detected: + <literal_block xml:space="preserve"> + .. |indirect2| replace:: |Sub| +"""], +["""\ +.. |indirect1| replace:: |indirect2| +.. |indirect2| replace:: |Sub| +.. |sub| replace:: |indirect1| + +Use |sub| and |indirect1| and |sub| again (and |sub| one more time). +""", +"""\ +<document source="test data"> + <system_message level="3" line="1" names="indirect1" source="test data" type="ERROR"> + <paragraph> + Circular substitution definition detected: + <literal_block xml:space="preserve"> + .. |indirect1| replace:: |indirect2| + <system_message level="3" line="2" names="indirect2" source="test data" type="ERROR"> + <paragraph> + Circular substitution definition detected: + <literal_block xml:space="preserve"> + .. |indirect2| replace:: |Sub| + <system_message level="3" line="3" names="sub" source="test data" type="ERROR"> + <paragraph> + Circular substitution definition detected: + <literal_block xml:space="preserve"> + .. |sub| replace:: |indirect1| + <paragraph> + Use \n\ + <problematic ids="id8" refid="id7"> + and \n\ + <problematic ids="id2" refid="id1"> + |indirect1| + and \n\ + <problematic ids="id4" refid="id3"> + |sub| + again (and \n\ + <problematic ids="id6" refid="id5"> + |sub| + one more time). + <system_message backrefs="id2" ids="id1" level="3" line="5" source="test data" type="ERROR"> + <paragraph> + Circular substitution definition referenced: "indirect1". + <system_message backrefs="id4" ids="id3" level="3" line="5" source="test data" type="ERROR"> + <paragraph> + Circular substitution definition referenced: "sub". + <system_message backrefs="id6" ids="id5" level="3" line="5" source="test data" type="ERROR"> + <paragraph> + Circular substitution definition referenced: "sub". + <system_message backrefs="id8" ids="id7" level="3" source="test data" type="ERROR"> + <paragraph> + Circular substitution definition referenced: "Sub". +"""], +]) + +totest['unicode'] = ((Substitutions,), [ +["""\ +Insert an em-dash (|mdash|), a copyright symbol (|copy|), a non-breaking +space (|nbsp|), a backwards-not-equals (|bne|), and a captial omega (|Omega|). + +.. |mdash| unicode:: 0x02014 +.. |copy| unicode:: \\u00A9 +.. |nbsp| unicode::   +.. |bne| unicode:: U0003D U020E5 +.. |Omega| unicode:: U+003A9 +""", +u"""\ +<document source="test data"> + <paragraph> + Insert an em-dash ( + \u2014 + ), a copyright symbol ( + \u00a9 + ), a non-breaking + space ( + \u00a0 + ), a backwards-not-equals ( + = + \u20e5 + ), and a captial omega ( + \u03a9 + ). + <substitution_definition names="mdash"> + \u2014 + <substitution_definition names="copy"> + \u00a9 + <substitution_definition names="nbsp"> + \u00a0 + <substitution_definition names="bne"> + = + \u20e5 + <substitution_definition names="Omega"> + \u03a9 +"""], +[""" +Testing comments and extra text. + +Copyright |copy| 2003, |BogusMegaCorp (TM)|. + +.. |copy| unicode:: 0xA9 .. copyright sign +.. |BogusMegaCorp (TM)| unicode:: BogusMegaCorp U+2122 + .. with trademark sign +""", +u"""\ +<document source="test data"> + <paragraph> + Testing comments and extra text. + <paragraph> + Copyright \n\ + \u00a9 + 2003, \n\ + BogusMegaCorp + \u2122 + . + <substitution_definition names="copy"> + \u00a9 + <substitution_definition names="BogusMegaCorp\ (TM)"> + BogusMegaCorp + \u2122 +"""], +["""\ +Insert an em-dash |---| automatically trimming whitespace. +Some substitutions |TM| only need trimming on one side. + +.. |---| unicode:: U+02014 + :trim: +.. |TM| unicode:: U+02122 + :ltrim: +""", +u"""\ +<document source="test data"> + <paragraph> + Insert an em-dash + \u2014 + automatically trimming whitespace. + Some substitutions + \u2122 + only need trimming on one side. + <substitution_definition ltrim="1" names="---" rtrim="1"> + \u2014 + <substitution_definition ltrim="1" names="TM"> + \u2122 +"""], +["""\ +Substitution definition with an illegal element: + +.. |target| replace:: _`target` + +Make sure this substitution definition is not registered: |target| +""", +"""\ +<document source="test data"> + <paragraph> + Substitution definition with an illegal element: + <system_message level="3" line="3" source="test data" type="ERROR"> + <paragraph> + Substitution definition contains illegal element: + <literal_block xml:space="preserve"> + <target ids="target" names="target"> + target + <literal_block xml:space="preserve"> + .. |target| replace:: _`target` + <paragraph> + Make sure this substitution definition is not registered: \n\ + <problematic ids="id2" refid="id1"> + |target| + <system_message backrefs="id2" ids="id1" level="3" line="5" source="test data" type="ERROR"> + <paragraph> + Undefined substitution referenced: "target". +"""], +]) + + +if __name__ == '__main__': + import unittest + unittest.main(defaultTest='suite') |