1
0
mirror of https://github.com/gryf/fs-uae-wrapper.git synced 2025-12-19 20:38:06 +01:00
Files
fs-uae-wrapper/tests/test_utils.py
gryf 19acb789b6 Added wrapper_archiver option
To give user a possibility to choose what archiver he can use another
options was introduced for cd32 and archive wrapper modules. This option
will indicate what archiver should be used for compressing the save
state directories.
2017-01-02 20:08:50 +01:00

244 lines
8.5 KiB
Python

import os
import sys
from tempfile import mkstemp, mkdtemp
from unittest import TestCase
import shutil
try:
from unittest import mock
except ImportError:
import mock
from fs_uae_wrapper import utils
class TestUtils(TestCase):
def setUp(self):
fd, self.fname = mkstemp()
self.dirname = mkdtemp()
os.close(fd)
self._argv = sys.argv[:]
sys.argv = ['fs-uae-wrapper']
self.curdir = os.path.abspath(os.curdir)
def tearDown(self):
os.chdir(self.curdir)
shutil.rmtree(self.dirname)
os.unlink(self.fname)
sys.argv = self._argv[:]
def test_get_config_options(self):
configs = ["[conf]\nwrapper=foo\n",
"[conf]\n wrapper =foo\n",
"[conf]\n wrapper = foo\n",
"[conf]\nwrapper = foo \n"]
for cfg in configs:
with open(self.fname, 'w') as fobj:
fobj.write(cfg)
val = utils.get_config_options(self.fname)
self.assertDictEqual(val, {'wrapper': 'foo'})
with open(self.fname, 'w') as fobj:
fobj.write("[conf]\nwraper=foo\n")
conf = utils.get_config_options(self.fname)
self.assertDictEqual(conf, {'wraper': 'foo'})
with open(self.fname, 'w') as fobj:
fobj.write("[conf]\nwrapper\n")
conf = utils.get_config_options(self.fname)
self.assertIsNone(conf)
with open(self.fname, 'w') as fobj:
fobj.write("[conf]\nfullscreen = 1\n")
conf = utils.get_config_options(self.fname)
self.assertDictEqual(conf, {'fullscreen': '1'})
with open(self.fname, 'w') as fobj:
fobj.write("[conf]\nwrapper= = = something went wrong\n")
conf = utils.get_config_options(self.fname)
self.assertDictEqual(conf, {'wrapper': '= = something went wrong'})
with open(self.fname, 'w') as fobj:
fobj.write("[conf]\nwrapper = = \n")
conf = utils.get_config_options(self.fname)
self.assertDictEqual(conf, {'wrapper': '='})
with open(self.fname, 'w') as fobj:
fobj.write("[conf]\nwrapper = \n")
conf = utils.get_config_options(self.fname)
self.assertDictEqual(conf, {'wrapper': ''})
@mock.patch('fs_uae_wrapper.path.which')
@mock.patch('fs_uae_wrapper.file_archive.Archive.extract')
@mock.patch('fs_uae_wrapper.file_archive.Archive.create')
@mock.patch('fs_uae_wrapper.message.Message.close')
@mock.patch('fs_uae_wrapper.message.Message.show')
def test_operate_archive(self, show, close, create, extract, which):
os.chdir(self.dirname)
which.return_value = None
# No config
self.assertFalse(utils.operate_archive('non-existend.7z', 'foo', ''))
# Archive type not known
with open('unsupported-archive.ace', 'w') as fobj:
fobj.write("\n")
self.assertFalse(utils.operate_archive('unsupported-archive.ace',
'foo', ''))
# archive is known, but extraction will fail - we have an empty
# archive and there is no guarantee, that 7z exists on system where
# test will run
which.return_value = '7z'
extract.return_value = True
with open('supported-archive.7z', 'w') as fobj:
fobj.write("\n")
self.assertTrue(utils.operate_archive('supported-archive.7z',
'extract', ''))
extract.assert_called_once()
extract.reset_mock()
self.assertTrue(utils.operate_archive('supported-archive.7z',
'extract', ''))
extract.assert_called_once()
os.unlink('supported-archive.7z')
self.assertTrue(utils.operate_archive('supported-archive.7z',
'create', 'test'))
create.assert_called_once()
show.assert_called_once()
def test_extract_archive(self):
os.chdir(self.dirname)
# No config
self.assertFalse(utils.extract_archive('non-existend.7z'))
# Archive type not known
with open('unsupported-archive.ace', 'w') as fobj:
fobj.write("\n")
self.assertFalse(utils.extract_archive('unsupported-archive.ace'))
# archive is known, but extraction will fail - we have an empty
# archive and there is no guarantee, that 7z exists on system where
# test will run
with open('supported-archive.7z', 'w') as fobj:
fobj.write("\n")
self.assertFalse(utils.extract_archive('supported-archive.7z'))
@mock.patch('fs_uae_wrapper.file_archive.Archive.create')
def test_create_archive(self, arch_create):
arch_create.return_value = True
os.chdir(self.dirname)
# No config
self.assertFalse(utils.extract_archive('non-existend.7z'))
# Archive type not known
with open('unsupported-archive.ace', 'w') as fobj:
fobj.write("\n")
self.assertFalse(utils.extract_archive('unsupported-archive.ace'))
# archive is known, but extraction will fail - we have an empty
# archive and there is no guarantee, that 7z exists on system where
# test will run
with open('supported-archive.7z', 'w') as fobj:
fobj.write("\n")
self.assertFalse(utils.extract_archive('supported-archive.7z'))
@mock.patch('fs_uae_wrapper.path.which')
@mock.patch('fs_uae_wrapper.file_archive.Archive.extract')
def test_extract_archive_positive(self, arch_extract, which):
arch_extract.return_value = True
which.return_value = '7z'
os.chdir(self.dirname)
# archive is known, and extraction should succeed
arch_name = 'archive.7z'
with open(arch_name, 'w') as fobj:
fobj.write("\n")
self.assertTrue(utils.extract_archive(arch_name))
arch_extract.assert_called_once_with(arch_name)
def test_merge_all_options(self):
conf = {'foo': '1', 'bar': 'zip'}
other = {'foo': '2', 'baz': '3'}
merged = utils.merge_all_options(conf, other)
self.assertDictEqual(merged, {'foo': '2', 'bar': 'zip', 'baz': '3'})
self.assertDictEqual(conf, {'foo': '1', 'bar': 'zip'})
self.assertDictEqual(other, {'foo': '2', 'baz': '3'})
class TestCmdOptions(TestCase):
def test_add(self):
cmd = utils.CmdOption()
# commandline origin
cmd.add('--fullscreen')
self.assertEqual(cmd['fullscreen'], '1')
cmd.add('--fade_out_duration=0')
self.assertEqual(cmd['fade_out_duration'], '0')
# pass the wrong parameter to fs-uae
self.assertRaises(AttributeError, cmd.add, '-typo=0')
# pass the wrong parameter to fs-uae again
self.assertRaises(AttributeError, cmd.add, 'typo=true')
# We have no idea what to do with this - might be a conf file
self.assertRaises(AttributeError, cmd.add, 'this-is-odd')
def test_list(self):
cmd = utils.CmdOption()
cmd.add('--fullscreen')
cmd.add('--fast_memory=4096')
self.assertDictEqual(cmd, {'fullscreen': '1', 'fast_memory': '4096'})
self.assertListEqual(sorted(cmd.list()),
['--fast_memory=4096', '--fullscreen'])
@mock.patch('os.getenv')
@mock.patch('os.path.expandvars')
@mock.patch('distutils.spawn.find_executable')
def test_interpolate_variables(self, find_exe, expandv, getenv):
itrpl = utils.interpolate_variables
string = 'foo = $CONFIG/../path/to/smth'
self.assertEqual(itrpl(string, '/home/user/Config.fs-uae'),
'foo = /home/user/../path/to/smth')
string = 'bar = $HOME'
expandv.return_value = '/home/user'
self.assertEqual(itrpl(string, '/home/user/Config.fs-uae'),
'bar = /home/user')
string = 'foo = $APP/$EXE'
find_exe.return_value = '/usr/bin/fs-uae'
self.assertEqual(itrpl(string, '/home/user/Config.fs-uae'),
'foo = /usr/bin/fs-uae//usr/bin/fs-uae')
string = 'docs = $DOCUMENTS'
getenv.return_value = '/home/user/Docs'
self.assertEqual(itrpl(string, '/home/user/Config.fs-uae'),
'docs = /home/user/Docs')
string = 'baz = $BASE'
self.assertEqual(itrpl(string, '/home/user/Config.fs-uae'),
'baz = $BASE')
self.assertEqual(itrpl(string, '/home/user/Config.fs-uae', 'base'),
'baz = base')