]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
fix Locale.default to return Locales with correct territory information
authorFelix Schwarz <felix.schwarz@oss.schwarz.eu>
Thu, 9 Aug 2012 07:47:09 +0000 (07:47 +0000)
committerFelix Schwarz <felix.schwarz@oss.schwarz.eu>
Thu, 9 Aug 2012 07:47:09 +0000 (07:47 +0000)
babel/core.py
babel/tests/core.py

index c9608f7150b32ded4a52fe608d74a33c56519d36..0d1a751d65ae8d4247de29f14b992d7de12ad60d 100644 (file)
@@ -144,7 +144,7 @@ class Locale(object):
         ...     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 @@ class Locale(object):
         :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):
index 03083787117eca4ea49d829c3c06d352dd302a72..894387b98ee92790799d09f5c14a21909345d9f4 100644 (file)
@@ -19,7 +19,29 @@ from babel import core
 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 @@ class LocaleTest(unittest.TestCase):
         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