view babel/tests/core.py @ 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
line wrap: on
line source
# -*- coding: utf-8 -*-
#
# Copyright (C) 2007-2011 Edgewall Software
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://babel.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
# history and logs, available at http://babel.edgewall.org/log/.

import doctest
import os
import unittest

from babel import core
from babel.core import default_locale, Locale


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')
        self.assertEqual(u'English (United States)', locale.display_name)
        self.assertEqual(u'.', locale.number_symbols['decimal'])
    
    def test_repr(self):
        self.assertEqual("Locale('de', territory='DE')", 
                         repr(Locale('de', 'DE')))
        self.assertEqual("Locale('zh', territory='CN', script='Hans')", 
                         repr(Locale('zh', 'CN', script='Hans')))

    def test_locale_comparison(self):
        en_US = Locale('en', 'US')
        self.assertEqual(en_US, en_US)
        self.assertNotEqual(None, en_US)
        
        bad_en_US = Locale('en_US')
        self.assertNotEqual(en_US, bad_en_US)
    
    def test_can_return_default_locale(self):
        os.environ['LC_MESSAGES'] = 'fr_FR.UTF-8'
        self.assertEqual(Locale('fr', 'FR'), Locale.default('LC_MESSAGES'))
    

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
        # MacOS X 10.6 (#200)
        os.environ['LC_CTYPE'] = 'UTF-8'
        # must not throw an exception
        default_locale('LC_CTYPE')


def suite():
    suite = unittest.TestSuite()
    suite.addTest(doctest.DocTestSuite(core))
    suite.addTest(unittest.makeSuite(LocaleTest))
    suite.addTest(unittest.makeSuite(DefaultLocaleTest))
    return suite

if __name__ == '__main__':
    unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software