Issue #17767: test_locale now works with unittest test discovery.
Original patch by Zachary Ware.
This commit is contained in:
commit
cb478b72a3
|
@ -1,52 +1,50 @@
|
||||||
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
|
|
||||||
|
|
||||||
def get_enUS_locale():
|
|
||||||
global enUS_locale
|
|
||||||
if sys.platform == 'darwin':
|
|
||||||
import os
|
|
||||||
tlocs = ("en_US.UTF-8", "en_US.ISO8859-1", "en_US")
|
|
||||||
if int(os.uname().release.split('.')[0]) < 10:
|
|
||||||
# The locale test work fine on OSX 10.6, I (ronaldoussoren)
|
|
||||||
# haven't had time yet to verify if tests work on OSX 10.5
|
|
||||||
# (10.4 is known to be bad)
|
|
||||||
raise unittest.SkipTest("Locale support on MacOSX is minimal")
|
|
||||||
elif sys.platform.startswith("win"):
|
|
||||||
tlocs = ("En", "English")
|
|
||||||
else:
|
|
||||||
tlocs = ("en_US.UTF-8", "en_US.ISO8859-1", "en_US.US-ASCII", "en_US")
|
|
||||||
oldlocale = locale.setlocale(locale.LC_NUMERIC)
|
|
||||||
for tloc in tlocs:
|
|
||||||
try:
|
|
||||||
locale.setlocale(locale.LC_NUMERIC, tloc)
|
|
||||||
except locale.Error:
|
|
||||||
continue
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
raise unittest.SkipTest(
|
|
||||||
"Test locale not supported (tried %s)" % (', '.join(tlocs)))
|
|
||||||
enUS_locale = tloc
|
|
||||||
locale.setlocale(locale.LC_NUMERIC, oldlocale)
|
|
||||||
|
|
||||||
|
|
||||||
class BaseLocalizedTest(unittest.TestCase):
|
class BaseLocalizedTest(unittest.TestCase):
|
||||||
#
|
#
|
||||||
# Base class for tests using a real locale
|
# Base class for tests using a real locale
|
||||||
#
|
#
|
||||||
|
|
||||||
def setUp(self):
|
@classmethod
|
||||||
self.oldlocale = locale.setlocale(self.locale_type)
|
def setUpClass(cls):
|
||||||
locale.setlocale(self.locale_type, enUS_locale)
|
if sys.platform == 'darwin':
|
||||||
if verbose:
|
import os
|
||||||
print("testing with \"%s\"..." % enUS_locale, end=' ')
|
tlocs = ("en_US.UTF-8", "en_US.ISO8859-1", "en_US")
|
||||||
|
if int(os.uname().release.split('.')[0]) < 10:
|
||||||
|
# The locale test work fine on OSX 10.6, I (ronaldoussoren)
|
||||||
|
# haven't had time yet to verify if tests work on OSX 10.5
|
||||||
|
# (10.4 is known to be bad)
|
||||||
|
raise unittest.SkipTest("Locale support on MacOSX is minimal")
|
||||||
|
elif sys.platform.startswith("win"):
|
||||||
|
tlocs = ("En", "English")
|
||||||
|
else:
|
||||||
|
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:
|
||||||
|
locale.setlocale(locale.LC_NUMERIC, tloc)
|
||||||
|
except locale.Error:
|
||||||
|
continue
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
raise unittest.SkipTest("Test locale not supported "
|
||||||
|
"(tried %s)" % (', '.join(tlocs)))
|
||||||
|
cls.enUS_locale = tloc
|
||||||
|
finally:
|
||||||
|
locale.setlocale(locale.LC_NUMERIC, oldlocale)
|
||||||
|
|
||||||
def tearDown(self):
|
def setUp(self):
|
||||||
locale.setlocale(self.locale_type, self.oldlocale)
|
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 %r..." % self.enUS_locale, end=' ', flush=True)
|
||||||
|
|
||||||
|
|
||||||
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()
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue