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 locale
import sys
import codecs
enUS_locale = None
class BaseLocalizedTest(unittest.TestCase):
#
# Base class for tests using a real locale
#
def get_enUS_locale():
global enUS_locale
@classmethod
def setUpClass(cls):
if sys.platform == 'darwin':
import os
tlocs = ("en_US.UTF-8", "en_US.ISO8859-1", "en_US")
@ -19,7 +22,9 @@ def get_enUS_locale():
elif sys.platform.startswith("win"):
tlocs = ("En", "English")
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)
for tloc in tlocs:
try:
@ -28,25 +33,18 @@ def get_enUS_locale():
continue
break
else:
raise unittest.SkipTest(
"Test locale not supported (tried %s)" % (', '.join(tlocs)))
enUS_locale = tloc
raise unittest.SkipTest("Test locale not supported "
"(tried %s)" % (', '.join(tlocs)))
cls.enUS_locale = tloc
finally:
locale.setlocale(locale.LC_NUMERIC, oldlocale)
class BaseLocalizedTest(unittest.TestCase):
#
# Base class for tests using a real locale
#
def setUp(self):
self.oldlocale = locale.setlocale(self.locale_type)
locale.setlocale(self.locale_type, enUS_locale)
oldlocale = locale.setlocale(self.locale_type)
self.addCleanup(locale.setlocale, self.locale_type, oldlocale)
locale.setlocale(self.locale_type, self.enUS_locale)
if verbose:
print("testing with \"%s\"..." % enUS_locale, end=' ')
def tearDown(self):
locale.setlocale(self.locale_type, self.oldlocale)
print("testing with %r..." % self.enUS_locale, end=' ', flush=True)
class BaseCookedTest(unittest.TestCase):
@ -415,25 +413,5 @@ class TestMiscellaneous(unittest.TestCase):
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__':
test_main()
unittest.main()

View File

@ -529,6 +529,9 @@ Library
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
testsuite.