import sys import StringIO import optparse russian_text = u'\u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u0442\u0435\u043a\u0441\u0442' def test_unicode_error(): """OptionParser.error function doesn't work with unicode argument""" try: optparse.OptionParser().error(russian_text) except SystemExit: pass def test_translated_unicode_error_message(): """optparse doesn't work when its error messages are gettext-translated""" # to emulate gettext function def dummy_gettext(msg): if msg == 'no such option: %s': return russian_text + ' %s' return msg optparse._ = dummy_gettext try: optparse.OptionParser().parse_args(["--unknown"]) except SystemExit: pass def test_redirected_unicode_help(): """optparse fails running 'prog.py --help > out.txt' with unicode help""" # the following basically emulates 'prog.py --help > out.txt' dummy_stdout = StringIO.StringIO() old_stdout = sys.stdout sys.stdout = dummy_stdout try: optparse.OptionParser(usage=russian_text).parse_args(['--help']) except SystemExit: pass sys.stdout = old_stdout assert '?????' not in dummy_stdout.getvalue() #test_unicode_error() #test_translated_unicode_error_message() #test_redirected_unicode_help()