mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 00:15:32 +00:00
This changes the shebang at the top of the file to allow use Python from a virtual environment instead of hard-coding the path. This might not be strictly necessary, but reduces confusion and doesn't hurt.
137 lines
5.6 KiB
Python
137 lines
5.6 KiB
Python
#!/usr/bin/env python3
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from keyman_config import KeymanComUrl, __tier__
|
|
from keyman_config.handle_install import download_and_install_package
|
|
|
|
|
|
class HandleInstallTests(unittest.TestCase):
|
|
|
|
@patch('keyman_config.handle_install.is_zipfile')
|
|
@patch('keyman_config.handle_install._install_package')
|
|
def test_downloadAndInstallPackage_file(self, installPackageMethod, mockIsZipfile):
|
|
# Setup
|
|
mockIsZipfile.return_value = True
|
|
|
|
# Execute
|
|
download_and_install_package('/tmp/keyboard/sil_euro_latin.kmp')
|
|
|
|
# Verify
|
|
installPackageMethod.assert_called_with('/tmp/keyboard/sil_euro_latin.kmp', '')
|
|
|
|
@patch('keyman_config.handle_install.is_zipfile')
|
|
@patch('keyman_config.handle_install._install_package')
|
|
def test_downloadAndInstallPackage_fileUrl(self, installPackageMethod, mockIsZipfile):
|
|
# Setup
|
|
mockIsZipfile.return_value = True
|
|
|
|
# Execute
|
|
download_and_install_package('file:///tmp/keyboard/sil_euro_latin.kmp')
|
|
|
|
# Verify
|
|
installPackageMethod.assert_called_with('/tmp/keyboard/sil_euro_latin.kmp', '')
|
|
|
|
@patch('keyman_config.handle_install.is_zipfile')
|
|
@patch('keyman_config.handle_install._install_package')
|
|
def test_downloadAndInstallPackage_fileUrlWithBcp47(self, installPackageMethod,
|
|
mockIsZipfile):
|
|
# Setup
|
|
mockIsZipfile.return_value = True
|
|
|
|
# Execute
|
|
download_and_install_package('file:///tmp/keyboard/sil_euro_latin.kmp?bcp47=dyo')
|
|
|
|
# Verify
|
|
installPackageMethod.assert_called_with('/tmp/keyboard/sil_euro_latin.kmp', 'dyo')
|
|
|
|
@patch('keyman_config.handle_install.is_zipfile')
|
|
@patch('keyman_config.handle_install._install_package')
|
|
def test_downloadAndInstallPackage_fileUrlWithBcp47AndVersion(self, installPackageMethod,
|
|
mockIsZipfile):
|
|
# Setup
|
|
mockIsZipfile.return_value = True
|
|
|
|
# Execute
|
|
download_and_install_package('file:///tmp/keyboard/sil_euro_latin.kmp?bcp47=dyo&version=1')
|
|
|
|
# Verify
|
|
installPackageMethod.assert_called_with('/tmp/keyboard/sil_euro_latin.kmp', 'dyo')
|
|
|
|
@patch('keyman_config.handle_install.is_zipfile')
|
|
@patch('keyman_config.handle_install._install_package')
|
|
def test_downloadAndInstallPackage_InvalidUrl(self, installPackageMethod, mockIsZipfile):
|
|
# Setup
|
|
mockIsZipfile.return_value = True
|
|
|
|
# Execute
|
|
download_and_install_package('http://localhost/keyboard/sil_euro_latin.kmp')
|
|
|
|
# Verify
|
|
installPackageMethod.assert_not_called()
|
|
|
|
@patch('keyman_config.handle_install.is_zipfile')
|
|
@patch('keyman_config.handle_install._install_package')
|
|
@patch('keyman_config.get_kmp.download_kmp_file')
|
|
def test_downloadAndInstallPackage_invalidUrl(self, downloadKmpFileMethod,
|
|
installPackageMethod, mockIsZipfile):
|
|
for url in ['foo://download/keyboard/sil_euro_latin', 'keyman://keyboard/sil_euro_latin',
|
|
'keyman://download/sil_euro_latin', 'keyman://download/keyboard/']:
|
|
with self.subTest(url=url):
|
|
# Setup
|
|
mockIsZipfile.return_value = True
|
|
|
|
# Execute
|
|
download_and_install_package(url)
|
|
|
|
# Verify
|
|
downloadKmpFileMethod.assert_not_called()
|
|
installPackageMethod.assert_not_called()
|
|
|
|
@patch('keyman_config.handle_install.is_zipfile')
|
|
@patch('keyman_config.handle_install._install_package')
|
|
@patch('keyman_config.get_kmp.keyman_cache_dir')
|
|
@patch('keyman_config.handle_install.download_kmp_file')
|
|
def test_downloadAndInstallPackage_keymanUrl(self, downloadKmpFileMethod,
|
|
keymanCacheDirMethod, installPackageMethod,
|
|
mockIsZipfile):
|
|
# Setup
|
|
mockPackagePath = '/tmp/sil_euro_latin'
|
|
keymanCacheDirMethod.return_value = '/tmp'
|
|
downloadKmpFileMethod.return_value = mockPackagePath
|
|
mockIsZipfile.return_value = True
|
|
|
|
# Execute
|
|
download_and_install_package('keyman://download/keyboard/sil_euro_latin')
|
|
|
|
# Verify
|
|
downloadKmpFileMethod.assert_called_with(
|
|
KeymanComUrl + '/go/package/download/sil_euro_latin?platform=linux&tier=' + __tier__,
|
|
mockPackagePath)
|
|
installPackageMethod.assert_called_with(mockPackagePath, '')
|
|
|
|
@patch('keyman_config.handle_install.is_zipfile')
|
|
@patch('keyman_config.handle_install._install_package')
|
|
@patch('keyman_config.get_kmp.keyman_cache_dir')
|
|
@patch('keyman_config.handle_install.download_kmp_file')
|
|
def test_downloadAndInstallPackage_keymanUrlWithBcp47(self, downloadKmpFileMethod,
|
|
keymanCacheDirMethod,
|
|
installPackageMethod, mockIsZipfile):
|
|
# Setup
|
|
mockPackagePath = '/tmp/sil_euro_latin'
|
|
keymanCacheDirMethod.return_value = '/tmp'
|
|
downloadKmpFileMethod.return_value = mockPackagePath
|
|
mockIsZipfile.return_value = True
|
|
|
|
# Execute
|
|
download_and_install_package('keyman://download/keyboard/sil_euro_latin?bcp47=de')
|
|
|
|
# Verify
|
|
downloadKmpFileMethod.assert_called_with(
|
|
KeymanComUrl + '/go/package/download/sil_euro_latin?platform=linux&tier=' + __tier__,
|
|
mockPackagePath)
|
|
installPackageMethod.assert_called_with(mockPackagePath, 'de')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|