spiegel-keyman/linux/keyman-config/tests/test_package_install_completion.py
Eberhard Beilharz 89a253b1ca
feat(linux): Enhance tab completion in km-package-install
This change adds tab completion for the bcp-47 parameter in
km-package-install.

Fixes #5361
2023-01-11 12:28:12 +01:00

60 lines
2.4 KiB
Python

#!/usr/bin/python3
import os
import tempfile
import unittest
from unittest.mock import patch, ANY
from importlib.machinery import SourceFileLoader
from importlib.util import module_from_spec, spec_from_loader
class PackageInstallCompletionTests(unittest.TestCase):
def setUp(self):
patcher1 = patch('keyman_config.install_kmp.extract_kmp')
self.mockExtractKmp = patcher1.start()
self.addCleanup(patcher1.stop)
patcher2 = patch('keyman_config.kmpmetadata.get_metadata')
self.mockGetMetadata = patcher2.start()
self.addCleanup(patcher2.stop)
loader = SourceFileLoader('km_package_install', os.path.join(os.path.dirname(
os.path.abspath(__file__)), '../km-package-install'))
spec = spec_from_loader(loader.name, loader)
if spec:
self.mod = module_from_spec(spec)
loader.exec_module(self.mod)
self.tempDir = tempfile.TemporaryDirectory()
os.environ["XDG_CACHE_HOME"] = self.tempDir.name
self.cacheDir = os.path.join(self.tempDir.name, 'keyman')
os.makedirs(self.cacheDir)
def _list_languages_for_keyboard_impl(self, packageId):
return self.mod._list_languages_for_keyboard_impl(packageId, 'someDir')
def test_PackageCompletionNoLanguage(self):
open(os.path.join(self.cacheDir, 'foo'), 'w')
self.mockGetMetadata.return_value = (None, None, None, [{}], None)
result = self._list_languages_for_keyboard_impl('foo')
self.assertEqual(result, "")
def test_PackageCompletionOneLanguage(self):
open(os.path.join(self.cacheDir, 'khmer_angkor'), 'w')
self.mockGetMetadata.return_value = (
None, None, None,
[{'languages': [{'name': 'Central Khmer (Khmer, Cambodia)', 'id': 'km'}]}],
None)
result = self._list_languages_for_keyboard_impl('khmer_angkor')
self.assertEqual(result, "km")
def test_PackageCompletionMultipleLanguages(self):
open(os.path.join(self.cacheDir, 'sil_euro_latin'), 'w')
self.mockGetMetadata.return_value = (
None, None, None,
[{'languages': [
{'name': 'English', 'id': 'en'},
{'name': 'French', 'id': 'fr'},
{'name': 'German', 'id': 'de'}]}],
None)
result = self._list_languages_for_keyboard_impl('sil_euro_latin')
self.assertEqual(result, 'en\nfr\nde')