[Python-checkins] r46861 - in python/trunk: Lib/optparse.py Lib/test/test_optparse.py Misc/NEWS

greg.ward python-checkins at python.org
Sun Jun 11 18:24:12 CEST 2006


Author: greg.ward
Date: Sun Jun 11 18:24:11 2006
New Revision: 46861
Modified:
 python/trunk/Lib/optparse.py
 python/trunk/Lib/test/test_optparse.py
 python/trunk/Misc/NEWS
Log:
Bug #1498146: fix optparse to handle Unicode strings in option help,
description, and epilog.
Modified: python/trunk/Lib/optparse.py
==============================================================================
--- python/trunk/Lib/optparse.py	(original)
+++ python/trunk/Lib/optparse.py	Sun Jun 11 18:24:11 2006
@@ -16,7 +16,7 @@
 # Python developers: please do not make changes to this file, since
 # it is automatically generated from the Optik source code.
 
-__version__ = "1.5.1"
+__version__ = "1.5.1+"
 
 __all__ = ['Option',
 'SUPPRESS_HELP',
@@ -75,8 +75,8 @@
 
 
 # This file was generated from:
-# Id: option_parser.py 509 2006年04月20日 00:58:24Z gward
-# Id: option.py 509 2006年04月20日 00:58:24Z gward
+# Id: option_parser.py 522 2006年06月11日 16:22:03Z gward
+# Id: option.py 522 2006年06月11日 16:22:03Z gward
 # Id: help.py 509 2006年04月20日 00:58:24Z gward
 # Id: errors.py 509 2006年04月20日 00:58:24Z gward
 
@@ -256,7 +256,7 @@
 text_width,
 initial_indent=indent,
 subsequent_indent=indent)
-
+ 
 def format_description(self, description):
 if description:
 return self._format_text(description) + "\n"
@@ -1214,7 +1214,7 @@
 """
 Declare that you are done with this OptionParser. This cleans up
 reference cycles so the OptionParser (and all objects referenced by
- it) can be garbage-collected promptly. After calling destroy(), the
+ it) can be garbage-collected promptly. After calling destroy(), the 
 OptionParser is unusable.
 """
 OptionContainer.destroy(self)
@@ -1629,6 +1629,10 @@
 result.append(self.format_epilog(formatter))
 return "".join(result)
 
+ # used by test suite
+ def _get_encoding(self, file):
+ return getattr(file, "encoding", sys.getdefaultencoding())
+
 def print_help(self, file=None):
 """print_help(file : file = stdout)
 
@@ -1637,7 +1641,8 @@
 """
 if file is None:
 file = sys.stdout
- file.write(self.format_help())
+ encoding = self._get_encoding(file)
+ file.write(self.format_help().encode(encoding, "replace"))
 
 # class OptionParser
 
Modified: python/trunk/Lib/test/test_optparse.py
==============================================================================
--- python/trunk/Lib/test/test_optparse.py	(original)
+++ python/trunk/Lib/test/test_optparse.py	Sun Jun 11 18:24:11 2006
@@ -15,7 +15,7 @@
 import types
 import unittest
 
-from cStringIO import StringIO
+from StringIO import StringIO
 from pprint import pprint
 from test import test_support
 
@@ -164,15 +164,23 @@
 expected_error=None):
 """Assert the parser prints the expected output on stdout."""
 save_stdout = sys.stdout
+ encoding = getattr(save_stdout, 'encoding', None)
 try:
 try:
 sys.stdout = StringIO()
+ if encoding:
+ sys.stdout.encoding = encoding
 self.parser.parse_args(cmdline_args)
 finally:
 output = sys.stdout.getvalue()
 sys.stdout = save_stdout
 
 except InterceptedError, err:
+ self.assert_(
+ type(output) is types.StringType,
+ "expected output to be an ordinary string, not %r"
+ % type(output))
+
 if output != expected_output:
 self.fail("expected: \n'''\n" + expected_output +
 "'''\nbut got \n'''\n" + output + "'''")
@@ -1456,6 +1464,10 @@
 return InterceptingOptionParser(option_list=options)
 
 def assertHelpEquals(self, expected_output):
+ if type(expected_output) is types.UnicodeType:
+ encoding = self.parser._get_encoding(sys.stdout)
+ expected_output = expected_output.encode(encoding, "replace")
+
 save_argv = sys.argv[:]
 try:
 # Make optparse believe bar.py is being executed.
@@ -1486,6 +1498,27 @@
 self.parser = self.make_parser(60)
 self.assertHelpEquals(_expected_help_short_lines)
 
+ def test_help_unicode(self):
+ self.parser = InterceptingOptionParser(usage=SUPPRESS_USAGE)
+ self.parser.add_option("-a", action="store_true", help=u"ol\u00E9!")
+ expect = u"""\
+Options:
+ -h, --help show this help message and exit
+ -a ol\u00E9!
+"""
+ self.assertHelpEquals(expect)
+
+ def test_help_unicode_description(self):
+ self.parser = InterceptingOptionParser(usage=SUPPRESS_USAGE,
+ description=u"ol\u00E9!")
+ expect = u"""\
+ol\u00E9!
+
+Options:
+ -h, --help show this help message and exit
+"""
+ self.assertHelpEquals(expect)
+
 def test_help_description_groups(self):
 self.parser.set_description(
 "This is the program description for %prog. %prog has "
Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Sun Jun 11 18:24:11 2006
@@ -145,6 +145,9 @@
 Library
 -------
 
+- Bug #1498146: fix optparse to handle Unicode strings in option help,
+ description, and epilog.
+
 - Bug #1366250: minor optparse documentation error.
 
 - Bug #1361643: fix textwrap.dedent() so it handles tabs appropriately;


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /