changeset 592:e6b1efa9a255 trunk

fix Locale.default to return Locales with correct territory information
author fschwarz
date Thu, 09 Aug 2012 07:47:09 +0000
parents d1618dfaf114
children 99983baf1067
files babel/core.py babel/tests/core.py
diffstat 2 files changed, 31 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/babel/core.py
+++ b/babel/core.py
@@ -144,7 +144,7 @@
         ...     os.environ[name] = ''
         >>> os.environ['LANG'] = 'fr_FR.UTF-8'
         >>> Locale.default('LC_MESSAGES')
-        Locale('fr_FR')
+        Locale('fr', territory='FR')
 
         :param category: one of the ``LC_XXX`` environment variable names
         :param aliases: a dictionary of aliases for locale identifiers
@@ -153,7 +153,8 @@
         :rtype: `Locale`
         :see: `default_locale`
         """
-        return cls(default_locale(category, aliases=aliases))
+        locale_string = default_locale(category, aliases=aliases)
+        return cls.parse(locale_string)
 
     @classmethod
     def negotiate(cls, preferred, available, sep='_', aliases=LOCALE_ALIASES):
--- a/babel/tests/core.py
+++ b/babel/tests/core.py
@@ -19,7 +19,29 @@
 from babel.core import default_locale, Locale
 
 
-class LocaleTest(unittest.TestCase):
+class LocaleEnvironmentTestMixin(object):
+    
+    def setUp(self):
+        self._old_locale_settings = self.current_locale_settings()
+    
+    def tearDown(self):
+        self.reset_locale_settings(self._old_locale_settings)
+    
+    def current_locale_settings(self):
+        settings = {}
+        for name in ('LC_MESSAGES', 'LANGUAGE', 'LC_ALL', 'LC_CTYPE', 'LANG'):
+            settings[name] = os.environ.get(name)
+        return settings
+    
+    def reset_locale_settings(self, settings):
+        for name, value in settings.items():
+            if value is not None:
+                os.environ[name] = value
+            elif name in os.environ:
+                del os.environ[name]
+
+
+class LocaleTest(LocaleEnvironmentTestMixin, unittest.TestCase):
     
     def test_locale_provides_access_to_cldr_locale_data(self):
         locale = Locale('en', 'US')
@@ -40,24 +62,12 @@
         bad_en_US = Locale('en_US')
         self.assertNotEqual(en_US, bad_en_US)
     
-
-class DefaultLocaleTest(unittest.TestCase):
-    
-    def setUp(self):
-        self._old_locale_settings = self._current_locale_settings()
-    
-    def tearDown(self):
-        self._set_locale_settings(self._old_locale_settings)
+    def test_can_return_default_locale(self):
+        os.environ['LC_MESSAGES'] = 'fr_FR.UTF-8'
+        self.assertEqual(Locale('fr', 'FR'), Locale.default('LC_MESSAGES'))
     
-    def _current_locale_settings(self):
-        settings = {}
-        for name in ('LANGUAGE', 'LC_ALL', 'LC_CTYPE', 'LANG'):
-            settings[name] = os.environ[name]
-        return settings
-    
-    def _set_locale_settings(self, settings):
-        for name, value in settings.items():
-            os.environ[name] = value
+
+class DefaultLocaleTest(LocaleEnvironmentTestMixin, unittest.TestCase):
     
     def test_ignore_invalid_locales_in_lc_ctype(self):
         # This is a regression test specifically for a bad LC_CTYPE setting on
Copyright (C) 2012-2017 Edgewall Software