From: <mi...@us...> - 2010-03-18 22:12:33
|
Author: milde Date: 2010-03-18 23:12:22 +0100 (Thu, 18 Mar 2010) New Revision: 6268 Modified: trunk/docutils/test/test_functional.py trunk/docutils/test/test_parsers/test_rst/test_directives/include10.txt trunk/docutils/test/test_parsers/test_rst/test_directives/test_include.py trunk/docutils/test/test_parsers/test_rst/test_directives/test_raw.py trunk/docutils/test/test_readers/test_python/test_functions.py Log: Ensure test work as intended in all supported Python versions. Take care to prevent false positives caused by varying error messages or default behaviour. Extend test support to p3k. Fixes [2972615]. Modified: trunk/docutils/test/test_functional.py =================================================================== --- trunk/docutils/test/test_functional.py 2010-03-18 11:10:44 UTC (rev 6267) +++ trunk/docutils/test/test_functional.py 2010-03-18 22:12:22 UTC (rev 6268) @@ -157,6 +157,14 @@ # Get output (automatically written to the output/ directory # by publish_file): output = docutils.core.publish_file(**params) + # ensure output is unicode + output_encoding = params.get('output_encoding', 'utf-8') + if sys.version_info < (3,0): + try: + output = output.decode(output_encoding) + except UnicodeDecodeError: + # failsafe (default for latex2e writer) + output = output.decode('latin1', 'replace') # Get the expected output *after* writing the actual output. no_expected = self.no_expected_template % { 'exp': expected_path, 'out': params['destination_path']} @@ -164,20 +172,23 @@ f = open(expected_path, 'rb') expected = f.read() f.close() + try: + expected = expected.decode(output_encoding) + except UnicodeDecodeError: + expected = expected.decode('latin1', 'replace') + diff = self.expected_output_differs_template % { 'exp': expected_path, 'out': params['destination_path']} try: self.assertEquals(output, expected, diff) except AssertionError: - if hasattr(difflib, 'unified_diff'): - # Generate diff if unified_diff available: - diff = ''.join( - difflib.unified_diff(expected.decode('latin1').splitlines(1), - output.decode('latin1').splitlines(1), - expected_path, - params['destination_path'])) + diff = ''.join(difflib.unified_diff( + expected.splitlines(True), output.splitlines(True), + expected_path, params['destination_path'])) + if sys.version_info < (3,0): + diff = diff.encode('ascii', 'replace') print >>sys.stderr, '\n%s:' % (self,) - print >>sys.stderr, diff.encode('ascii', 'replace') + print >>sys.stderr, diff raise # Execute optional function containing extra tests: if '_test_more' in namespace: Modified: trunk/docutils/test/test_parsers/test_rst/test_directives/include10.txt =================================================================== --- trunk/docutils/test/test_parsers/test_rst/test_directives/include10.txt 2010-03-18 11:10:44 UTC (rev 6267) +++ trunk/docutils/test/test_parsers/test_rst/test_directives/include10.txt 2010-03-18 22:12:22 UTC (rev 6268) @@ -1,4 +1,4 @@ -.. |bad| unicode:: 0xFFFFFFFFF +.. |bad| unicode:: 0x11111111 hi ----- Modified: trunk/docutils/test/test_parsers/test_rst/test_directives/test_include.py =================================================================== --- trunk/docutils/test/test_parsers/test_rst/test_directives/test_include.py 2010-03-18 11:10:44 UTC (rev 6267) +++ trunk/docutils/test/test_parsers/test_rst/test_directives/test_include.py 2010-03-18 22:12:22 UTC (rev 6268) @@ -35,6 +35,12 @@ include_literal = os.path.join(mydir, 'include_literal.txt') utf_16_file = os.path.join(mydir, 'utf-16.csv') utf_16_file_rel = DocutilsTestSupport.utils.relative_path(None, utf_16_file) +utf_16_error_str = ("UnicodeDecodeError: 'ascii' codec can't decode byte 0xfe " + "in position 0: ordinal not in range(128)") +if sys.version_info < (3,0): + utf_16_error_str = ("UnicodeError: Unable to decode input data. " + "Tried the following encodings: 'ascii'.\n" + " (%s)" % utf_16_error_str) nonexistent = os.path.join(os.path.dirname(states.__file__), 'include', 'nonexistent') nonexistent_rel = DocutilsTestSupport.utils.relative_path( @@ -317,12 +323,11 @@ <system_message level="4" line="3" source="test data" type="SEVERE"> <paragraph> Problem with "include" directive: - UnicodeError: Unable to decode input data. Tried the following encodings: 'ascii'. - (UnicodeDecodeError: 'ascii' codec can't decode byte 0xfe in position 0: ordinal not in range(128)) + %s <literal_block xml:space="preserve"> .. include:: %s :encoding: ascii -""" % utf_16_file_rel], +""" % (utf_16_error_str, utf_16_file_rel)], # @@@ BUG with errors reported with incorrect "source" & "line": ["""\ Testing errors in included file: @@ -335,15 +340,15 @@ Testing errors in included file: <system_message level="3" line="1" source="%(source)s" type="ERROR"> <paragraph> - Invalid character code: 0xFFFFFFFFF - ValueError: unichr() arg not in range(0x110000) (wide Python build) + Invalid character code: 0x11111111 + %(unichr_exception)s <literal_block xml:space="preserve"> - unicode:: 0xFFFFFFFFF + unicode:: 0x11111111 <system_message level="2" line="1" source="%(source)s" type="WARNING"> <paragraph> Substitution definition "bad" empty or invalid. <literal_block xml:space="preserve"> - .. |bad| unicode:: 0xFFFFFFFFF + .. |bad| unicode:: 0x11111111 <section dupnames="hi" ids="hi"> <title> hi @@ -441,7 +446,7 @@ no bottom border """ % {'source': include10rel, 'nonexistent': nonexistent_rel, 'unichr_exception': - DocutilsTestSupport.exception_data(unichr, int("0xFFFFFFFFF", 16))[2] + DocutilsTestSupport.exception_data(unichr, int("11111111", 16))[2] }], ["""\ Include file with whitespace in the path: Modified: trunk/docutils/test/test_parsers/test_rst/test_directives/test_raw.py =================================================================== --- trunk/docutils/test/test_parsers/test_rst/test_directives/test_raw.py 2010-03-18 11:10:44 UTC (rev 6267) +++ trunk/docutils/test/test_parsers/test_rst/test_directives/test_raw.py 2010-03-18 22:12:22 UTC (rev 6268) @@ -22,6 +22,12 @@ raw1 = os.path.join(mydir, 'raw1.txt') utf_16_file = os.path.join(mydir, 'utf-16.csv') utf_16_file_rel = DocutilsTestSupport.utils.relative_path(None, utf_16_file) +utf_16_error_str = ("UnicodeDecodeError: 'ascii' codec can't decode byte 0xfe " + "in position 0: ordinal not in range(128)") +if sys.version_info < (3,0): + utf_16_error_str = ("UnicodeError: Unable to decode input data. " + "Tried the following encodings: 'ascii'.\n" + " (%s)" % utf_16_error_str) totest = {} @@ -115,13 +121,12 @@ <system_message level="4" line="3" source="test data" type="SEVERE"> <paragraph> Problem with "raw" directive: - UnicodeError: Unable to decode input data. Tried the following encodings: \'ascii\'. - (UnicodeDecodeError: 'ascii' codec can't decode byte 0xfe in position 0: ordinal not in range(128)) + %s <literal_block xml:space="preserve"> .. raw:: html :file: %s :encoding: ascii -""" % utf_16_file_rel], +""" % (utf_16_error_str, utf_16_file_rel)], [u"""\ .. raw:: html :encoding: utf-8 Modified: trunk/docutils/test/test_readers/test_python/test_functions.py =================================================================== --- trunk/docutils/test/test_readers/test_python/test_functions.py 2010-03-18 11:10:44 UTC (rev 6267) +++ trunk/docutils/test/test_readers/test_python/test_functions.py 2010-03-18 22:12:22 UTC (rev 6268) @@ -10,7 +10,10 @@ import unittest from __init__ import DocutilsTestSupport -from docutils.readers.python.moduleparser import trim_docstring +try: + from docutils.readers.python.moduleparser import trim_docstring +except ImportError: # `compiler` module dropped from py3k + pass class MiscTests(unittest.TestCase): |