Issue #17767: test_locale now works with unittest test discovery.

Original patch by Zachary Ware.
This commit is contained in:
Serhiy Storchaka 2013-07-17 13:26:48 +03:00
commit cb478b72a3
2 changed files with 40 additions and 59 deletions

View File

@ -1,13 +1,16 @@
from test.support import run_unittest, verbose from test.support import verbose
import unittest import unittest
import locale import locale
import sys import sys
import codecs import codecs
enUS_locale = None class BaseLocalizedTest(unittest.TestCase):
#
# Base class for tests using a real locale
#
def get_enUS_locale(): @classmethod
global enUS_locale def setUpClass(cls):
if sys.platform == 'darwin': if sys.platform == 'darwin':
import os import os
tlocs = ("en_US.UTF-8", "en_US.ISO8859-1", "en_US") tlocs = ("en_US.UTF-8", "en_US.ISO8859-1", "en_US")
@ -19,7 +22,9 @@ def get_enUS_locale():
elif sys.platform.startswith("win"): elif sys.platform.startswith("win"):
tlocs = ("En", "English") tlocs = ("En", "English")
else: else:
tlocs = ("en_US.UTF-8", "en_US.ISO8859-1", "en_US.US-ASCII", "en_US") tlocs = ("en_US.UTF-8", "en_US.ISO8859-1",
"en_US.US-ASCII", "en_US")
try:
oldlocale = locale.setlocale(locale.LC_NUMERIC) oldlocale = locale.setlocale(locale.LC_NUMERIC)
for tloc in tlocs: for tloc in tlocs:
try: try:
@ -28,25 +33,18 @@ def get_enUS_locale():
continue continue
break break
else: else:
raise unittest.SkipTest( raise unittest.SkipTest("Test locale not supported "
"Test locale not supported (tried %s)" % (', '.join(tlocs))) "(tried %s)" % (', '.join(tlocs)))
enUS_locale = tloc cls.enUS_locale = tloc
finally:
locale.setlocale(locale.LC_NUMERIC, oldlocale) locale.setlocale(locale.LC_NUMERIC, oldlocale)
class BaseLocalizedTest(unittest.TestCase):
#
# Base class for tests using a real locale
#
def setUp(self): def setUp(self):
self.oldlocale = locale.setlocale(self.locale_type) oldlocale = locale.setlocale(self.locale_type)
locale.setlocale(self.locale_type, enUS_locale) self.addCleanup(locale.setlocale, self.locale_type, oldlocale)
locale.setlocale(self.locale_type, self.enUS_locale)
if verbose: if verbose:
print("testing with \"%s\"..." % enUS_locale, end=' ') print("testing with %r..." % self.enUS_locale, end=' ', flush=True)
def tearDown(self):
locale.setlocale(self.locale_type, self.oldlocale)
class BaseCookedTest(unittest.TestCase): class BaseCookedTest(unittest.TestCase):
@ -415,25 +413,5 @@ class TestMiscellaneous(unittest.TestCase):
locale.setlocale(locale.LC_ALL, (b'not', b'valid')) locale.setlocale(locale.LC_ALL, (b'not', b'valid'))
def test_main():
tests = [
TestMiscellaneous,
TestFormatPatternArg,
TestLocaleFormatString,
TestEnUSNumberFormatting,
TestCNumberFormatting,
TestFrFRNumberFormatting,
TestCollation
]
# SkipTest can't be raised inside unittests, handle it manually instead
try:
get_enUS_locale()
except unittest.SkipTest as e:
if verbose:
print("Some tests will be disabled: %s" % e)
else:
tests += [TestNumberFormatting, TestEnUSCollation]
run_unittest(*tests)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View File

@ -529,6 +529,9 @@ Library
Tests Tests
----- -----
- Issue #17767: test_locale now works with unittest test discovery.
Original patch by Zachary Ware.
- Issue #18375: Assume --randomize when --randseed is used for running the - Issue #18375: Assume --randomize when --randseed is used for running the
testsuite. testsuite.