Example #1
0
    def test_available_languages(self):
        '''available_languages()'''

        # create a fake locales -a
        fake_locale = os.path.join(self.workdir, 'locale')
        with open(fake_locale, 'w') as f:
            f.write('''#!/bin/sh
cat <<EOF
aa_ER@saaho
de_DE.UTF-8
en_AU.UTF-8
en_US.UTF-8
es_AR.UTF-8
pt_PT.UTF-8
pt_BR
ru_RU.UTF-8
zh_CN.GB18030
zh_TW.UTF-8
EOF
''')
        os.chmod(fake_locale, 0o755)
        os.environ['PATH'] = '%s:%s' % (self.workdir, os.getenv('PATH', ''))

        ls = LanguageSupport(self.apt_cache, self.pkg_depends)
        available = ls.available_languages()
        self.assertEqual(
            available,
            set([
                'aa', 'de', 'en', 'en_AU', 'en_US', 'es', 'es_AR', 'pt',
                'pt_BR', 'pt_PT', 'ru', 'zh_CN', 'zh_TW'
            ]))
    def test_available_languages(self):
        '''available_languages()'''

        # create a fake locales -a
        fake_locale = os.path.join(self.workdir, 'locale')
        with open(fake_locale, 'w') as f:
            f.write('''#!/bin/sh
cat <<EOF
aa_ER@saaho
de_DE.UTF-8
en_AU.UTF-8
en_US.UTF-8
es_AR.UTF-8
pt_PT.UTF-8
pt_BR
ru_RU.UTF-8
zh_CN.GB18030
zh_TW.UTF-8
EOF
''')
        os.chmod(fake_locale, 0o755)
        os.environ['PATH'] = '%s:%s' % (self.workdir, os.getenv('PATH', ''))

        ls = LanguageSupport(self.apt_cache, self.pkg_depends)
        available = ls.available_languages()
        self.assertEqual(available, set(['aa', 'de', 'en', 'en_AU', 'en_US',
            'es', 'es_AR', 'pt', 'pt_BR', 'pt_PT', 'ru', 'zh_CN', 'zh_TW']))
    def test_available_languages_system(self):
        '''available_languages() for system-installed locales'''

        # we cannot assume much here, just check that it works and does not
        # crash.
        ls = LanguageSupport(self.apt_cache, self.pkg_depends)
        available = ls.available_languages()
        self.assertGreater(len(available), 0)
Example #4
0
    def test_available_languages_system(self):
        '''available_languages() for system-installed locales'''

        # we cannot assume much here, just check that it works and does not
        # crash.
        ls = LanguageSupport(self.apt_cache, self.pkg_depends)
        available = ls.available_languages()
        self.assertGreater(len(available), 0)
Example #5
0
    def test_by_package_and_locale_unknown(self):
        '''by_package_and_locale() for unknown locales/triggers'''

        ls = LanguageSupport(self.apt_cache, self.pkg_depends)

        result = ls.by_package_and_locale('unknown_pkg', 'de_DE.UTF-8', True)
        self.assertEqual(result, [])
        result = ls.by_package_and_locale('firefox', 'bo_GUS', True)
        self.assertEqual(result, [])
    def test_by_package_and_locale_unknown(self):
        '''by_package_and_locale() for unknown locales/triggers'''

        ls = LanguageSupport(self.apt_cache, self.pkg_depends)

        result = ls.by_package_and_locale('unknown_pkg', 'de_DE.UTF-8', True)
        self.assertEqual(result, [])
        result = ls.by_package_and_locale('firefox', 'bo_GUS', True)
        self.assertEqual(result, [])
    def test_countries_for_lang(self):
        '''_countries_for_lang()'''

        self.assertEqual(LanguageSupport._countries_for_lang('yue'), set(['hk']))
        # Serbia has @ variants
        self.assertEqual(LanguageSupport._countries_for_lang('sr'), set(['rs', 'me']))
        self.assertEqual(LanguageSupport._countries_for_lang('de'), 
                set(['at', 'be', 'ch', 'de', 'li', 'lu']))
        en = LanguageSupport._countries_for_lang('en')
        self.assertTrue('us' in en)
        self.assertTrue('gb' in en)
        self.assertTrue('sg' in en)
Example #8
0
    def test_countries_for_lang(self):
        '''_countries_for_lang()'''

        self.assertEqual(LanguageSupport._countries_for_lang('yue'),
                         set(['hk']))
        # Serbia has @ variants
        self.assertEqual(LanguageSupport._countries_for_lang('sr'),
                         set(['rs', 'me']))
        self.assertEqual(LanguageSupport._countries_for_lang('de'),
                         set(['at', 'be', 'ch', 'de', 'li', 'lu']))
        en = LanguageSupport._countries_for_lang('en')
        self.assertTrue('us' in en)
        self.assertTrue('gb' in en)
        self.assertTrue('sg' in en)
Example #9
0
    def test_by_package_and_locale_generic(self):
        '''by_package_and_locale() for generic support'''

        ls = LanguageSupport(self.apt_cache, self.pkg_depends)

        result = ls.by_package_and_locale('', 'en_GB.UTF-8', True)
        self._check_valid_pkgs(result)
        self.assertTrue('language-pack-en' in result)
        self.assertTrue('wbritish' in result)

        # language code only
        result = ls.by_package_and_locale('', 'de', True)
        self._check_valid_pkgs(result)
        self.assertTrue('language-pack-de' in result)
        self.assertTrue('wngerman' in result)
    def test_by_package_and_locale_generic(self):
        '''by_package_and_locale() for generic support'''

        ls = LanguageSupport(self.apt_cache, self.pkg_depends)

        result = ls.by_package_and_locale('', 'en_GB.UTF-8', True)
        self._check_valid_pkgs(result)
        self.assertTrue('language-pack-en' in result)
        self.assertTrue('wbritish' in result)

        # language code only
        result = ls.by_package_and_locale('', 'de', True)
        self._check_valid_pkgs(result)
        self.assertTrue('language-pack-de' in result)
        self.assertTrue('wngerman' in result)
Example #11
0
    def test_parse_pkg_depends_local(self):
        '''Parse pkg_depends file in source tree'''

        ls = LanguageSupport(self.apt_cache, self.pkg_depends)
        self.assertGreater(len(ls.pkg_depends), 5)
        self.assertTrue('de' in ls.pkg_depends[''])
        self.assertTrue('' in ls.pkg_depends['firefox'])
        self.assertTrue('tr' in ls.pkg_depends['firefox'][''])
        self.assertTrue('wa' in ls.pkg_depends['']['de'])
    def test_performance_of_missing(self):
        '''missing() performance for current system'''

        iterations = 20

        r_start = resource.getrusage(resource.RUSAGE_SELF)
        ls = LanguageSupport(self.apt_cache, self.pkg_depends)
        r_init = resource.getrusage(resource.RUSAGE_SELF)
        ls.missing(True)
        r_first = resource.getrusage(resource.RUSAGE_SELF)
        for i in range(iterations):
            ls.missing(True)
        r_iter = resource.getrusage(resource.RUSAGE_SELF)

        init = (r_init.ru_utime + r_init.ru_stime -
            r_start.ru_utime - r_start.ru_stime) * 1000000
        first = (r_first.ru_utime + r_first.ru_stime -
            r_init.ru_utime - r_init.ru_stime) * 1000000
        avg = (r_iter.ru_utime + r_iter.ru_stime -
            r_first.ru_utime - r_first.ru_stime) * 1000000/iterations
        sys.stderr.write('[%iμs init, %iμs first, %iμs avg] ' % (int(init+.5), int(first+.5), int(avg+.5)))
    def test_by_package_and_locale_trigger(self):
        '''by_package_and_locale() for a trigger package'''

        ls = LanguageSupport(self.apt_cache, self.pkg_depends)

        result = ls.by_package_and_locale('libreoffice-common', 'es_ES.UTF-8', True)
        self._check_valid_pkgs(result)
        # implicit locale suffix
        self.assertTrue('libreoffice-l10n-es' in result)
        self.assertTrue('libreoffice-help-es' in result)
        # explicit entry for that language
        self.assertTrue('myspell-es' in result)

        # language only
        result = ls.by_package_and_locale('libreoffice-common', 'de', True)
        self._check_valid_pkgs(result)
        self.assertTrue('libreoffice-l10n-de' in result)
        self.assertTrue('libreoffice-help-de' in result)

        # Chinese special case
        result = ls.by_package_and_locale('firefox', 'zh_CN.UTF-8', True)
        self._check_valid_pkgs(result)
        self.assertTrue('firefox-locale-zh-hans' in result)
        # no generic packages
        self.assertFalse('language-pack-zh-hans' in result)

        result = ls.by_package_and_locale('libreoffice-common', 'zh_CN.UTF-8', True)
        self._check_valid_pkgs(result)
        self.assertTrue('libreoffice-l10n-zh-cn' in result)
        self.assertTrue('libreoffice-help-zh-cn' in result)

        # without locale suffix
        result = ls.by_package_and_locale('chromium-browser', 'dv_MV', True)
        self._check_valid_pkgs(result)
        self.assertTrue('chromium-browser-l10n' in result)
    def test_langcode_from_locale(self):
        '''_langcode_from_locale()'''

        self.assertEqual(LanguageSupport._langcode_from_locale('de'), 'de')
        self.assertEqual(LanguageSupport._langcode_from_locale('de_DE.UTF-8'), 'de')
        self.assertEqual(LanguageSupport._langcode_from_locale('en_GB'), 'en')
        self.assertEqual(LanguageSupport._langcode_from_locale('be_BY@latin'), 'be')
        self.assertEqual(LanguageSupport._langcode_from_locale('zh_CN.UTF-8'), 'zh-hans')
        self.assertEqual(LanguageSupport._langcode_from_locale('zh_TW'), 'zh-hant')
Example #15
0
    def test_langcode_from_locale(self):
        '''_langcode_from_locale()'''

        self.assertEqual(LanguageSupport._langcode_from_locale('de'), 'de')
        self.assertEqual(LanguageSupport._langcode_from_locale('de_DE.UTF-8'),
                         'de')
        self.assertEqual(LanguageSupport._langcode_from_locale('en_GB'), 'en')
        self.assertEqual(LanguageSupport._langcode_from_locale('be_BY@latin'),
                         'be')
        self.assertEqual(LanguageSupport._langcode_from_locale('zh_CN.UTF-8'),
                         'zh-hans')
        self.assertEqual(LanguageSupport._langcode_from_locale('zh_TW'),
                         'zh-hant')
Example #16
0
    def _fake_apt_language_support(self, installed, available):
        '''Return a LanguageSupport object with a fake apt_cache.'''
        class FakeCache(dict):
            def get_changes(self):
                result = []
                for pkg in self.values():
                    if pkg.marked_install:
                        result.append(pkg)
                return result

        class Pkg:
            def __init__(self, name, installed):
                self.name = name
                self.installed = installed
                self.marked_install = False
                self.marked_install_from_user = False

            def __str__(self):
                if self.installed:
                    return '%s (installed)' % self.name
                else:
                    return '%s (available)' % self.name

            def __repr__(self):
                if self.installed:
                    return 'Pkg("%s", True)' % self.name
                else:
                    return 'Pkg("%s", False)' % self.name

            def mark_install(self, from_user=True):
                self.marked_install = True
                self.marked_install_from_user = from_user

        cache = FakeCache()
        for p in available:
            cache[p] = Pkg(p, False)
        for p in installed:
            cache[p] = Pkg(p, True)

        return LanguageSupport(cache, self.pkg_depends)
Example #17
0
    def test_by_package_and_locale_trigger(self):
        '''by_package_and_locale() for a trigger package'''

        ls = LanguageSupport(self.apt_cache, self.pkg_depends)

        result = ls.by_package_and_locale('libreoffice-common', 'es_ES.UTF-8',
                                          True)
        self._check_valid_pkgs(result)
        # implicit locale suffix
        self.assertTrue('libreoffice-l10n-es' in result)
        self.assertTrue('libreoffice-help-es' in result)
        # explicit entry for that language
        self.assertTrue('myspell-es' in result)

        # language only
        result = ls.by_package_and_locale('libreoffice-common', 'de', True)
        self._check_valid_pkgs(result)
        self.assertTrue('libreoffice-l10n-de' in result)
        self.assertTrue('libreoffice-help-de' in result)

        # Chinese special case
        result = ls.by_package_and_locale('firefox', 'zh_CN.UTF-8', True)
        self._check_valid_pkgs(result)
        self.assertTrue('firefox-locale-zh-hans' in result)
        # no generic packages
        self.assertFalse('language-pack-zh-hans' in result)

        result = ls.by_package_and_locale('libreoffice-common', 'zh_CN.UTF-8',
                                          True)
        self._check_valid_pkgs(result)
        self.assertTrue('libreoffice-l10n-zh-cn' in result)
        self.assertTrue('libreoffice-help-zh-cn' in result)

        # without locale suffix
        result = ls.by_package_and_locale('chromium-browser', 'dv_MV', True)
        self._check_valid_pkgs(result)
        self.assertTrue('chromium-browser-l10n' in result)
Example #18
0
    def test_performance_of_missing(self):
        '''missing() performance for current system'''

        iterations = 20

        r_start = resource.getrusage(resource.RUSAGE_SELF)
        ls = LanguageSupport(self.apt_cache, self.pkg_depends)
        r_init = resource.getrusage(resource.RUSAGE_SELF)
        ls.missing(True)
        r_first = resource.getrusage(resource.RUSAGE_SELF)
        for i in range(iterations):
            ls.missing(True)
        r_iter = resource.getrusage(resource.RUSAGE_SELF)

        init = (r_init.ru_utime + r_init.ru_stime - r_start.ru_utime -
                r_start.ru_stime) * 1000000
        first = (r_first.ru_utime + r_first.ru_stime - r_init.ru_utime -
                 r_init.ru_stime) * 1000000
        avg = (r_iter.ru_utime + r_iter.ru_stime - r_first.ru_utime -
               r_first.ru_stime) * 1000000 / iterations
        sys.stderr.write('[%iμs init, %iμs first, %iμs avg] ' %
                         (int(init + .5), int(first + .5), int(avg + .5)))
Example #19
0
    def test_parse_pkg_depends_system(self):
        '''Parse system-installed pkg_depends file'''

        ls = LanguageSupport(self.apt_cache)
        self.assertGreater(len(ls.pkg_depends), 5)