mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-06 00:45:32 +00:00
This change adds tab completion for the bcp-47 parameter in km-package-install. Fixes #5361
60 lines
2.4 KiB
Python
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')
|