1
0
mirror of https://github.com/gryf/fs-uae-wrapper.git synced 2025-12-19 04:20:23 +01:00

Added tests for wrapper module finctions

This commit is contained in:
2016-12-20 20:05:20 +01:00
parent 60b192403b
commit abff0fb62b
2 changed files with 100 additions and 8 deletions

View File

@@ -19,7 +19,7 @@ def get_wrapper_from_conf(conf):
with open(conf) as fobj: with open(conf) as fobj:
for line in fobj.readlines(): for line in fobj.readlines():
if WRAPPER_KEY in line and '=' in line: if WRAPPER_KEY in line and '=' in line:
key, val = parse_options(line) key, val = parse_option(line)
if key == WRAPPER_KEY: if key == WRAPPER_KEY:
break break
else: else:
@@ -28,7 +28,7 @@ def get_wrapper_from_conf(conf):
return val return val
def parse_options(string): def parse_option(string):
""" """
Return parsed option as an key/value tuple, where key is an stripped Return parsed option as an key/value tuple, where key is an stripped
from dash option name and the value is an value stripped of whitespace. from dash option name and the value is an value stripped of whitespace.
@@ -44,7 +44,8 @@ def parse_options(string):
val = val.strip() val = val.strip()
elif string.startswith('--'): elif string.startswith('--'):
key = string[2:].strip() key = string[2:].strip()
val = 1 # parameters are always as strings - parse them when need it later
val = '1'
return key, val return key, val
@@ -58,7 +59,7 @@ def parse_args():
fs_uae_options = [] fs_uae_options = []
wrapper_options = {} wrapper_options = {}
for parameter in sys.argv[1:]: for parameter in sys.argv[1:]:
key, val = parse_options(parameter) key, val = parse_option(parameter)
if key is not None and val is not None: if key is not None and val is not None:
if key == WRAPPER_KEY: if key == WRAPPER_KEY:
wrapper_options[key] = val wrapper_options[key] = val
@@ -98,16 +99,22 @@ def run():
if not config_file: if not config_file:
sys.stderr.write('Error: Configuration file not found\nSee --help' sys.stderr.write('Error: Configuration file not found\nSee --help'
' for usage\n') ' for usage\n')
sys.exit(10) sys.exit(1)
wrapper_module = wrapper_options.get(WRAPPER_KEY) wrapper_module = wrapper_options.get(WRAPPER_KEY)
if not wrapper_module: if not wrapper_module:
wrapper_module = get_wrapper_from_conf(wrapper_options) wrapper_module = get_wrapper_from_conf(config_file)
if not wrapper_module: if not wrapper_module:
wrapper = importlib.import_module('fs_uae_wrapper.plain') wrapper = importlib.import_module('fs_uae_wrapper.plain')
else: else:
wrapper = importlib.import_module('fs_uae_wrapper.' + wrapper_module) try:
wrapper = importlib.import_module('fs_uae_wrapper.' +
wrapper_module)
except ImportError:
sys.stderr.write("Error: provided wrapper module: `%s' doesn't"
"exists.\n" % wrapper_module)
sys.exit(2)
wrapper.run(config_file, fs_uae_options, wrapper_options) wrapper.run(config_file, fs_uae_options, wrapper_options)

View File

@@ -1,7 +1,13 @@
import os import os
from tempfile import mkstemp import sys
from tempfile import mkstemp, mkdtemp
from unittest import TestCase from unittest import TestCase
import shutil
try:
from unittest import mock
except ImportError:
import mock
from fs_uae_wrapper import wrapper from fs_uae_wrapper import wrapper
@@ -10,10 +16,17 @@ class TestWrapper(TestCase):
def setUp(self): def setUp(self):
fd, self.fname = mkstemp() fd, self.fname = mkstemp()
self.dirname = mkdtemp()
os.close(fd) os.close(fd)
self._argv = sys.argv[:]
sys.argv = ['fs-uae-wrapper']
self.curdir = os.path.abspath(os.curdir)
def tearDown(self): def tearDown(self):
os.chdir(self.curdir)
shutil.rmtree(self.dirname)
os.unlink(self.fname) os.unlink(self.fname)
sys.argv = self._argv[:]
def test_get_wrapper_from_conf_positive(self): def test_get_wrapper_from_conf_positive(self):
@@ -52,3 +65,75 @@ class TestWrapper(TestCase):
val = wrapper.get_wrapper_from_conf(self.fname) val = wrapper.get_wrapper_from_conf(self.fname)
self.assertEqual(val, result) self.assertEqual(val, result)
@mock.patch('fs_uae_wrapper.plain.run')
def test_run(self, mock_plain_run):
sys.argv.append('--help')
self.assertRaises(SystemExit, wrapper.run)
sys.argv.pop()
self.assertRaises(SystemExit, wrapper.run)
sys.argv.append('--fullscreen')
sys.argv.append('--fade_out_duration=0')
# will exit due to not found configuration
self.assertRaises(SystemExit, wrapper.run)
os.chdir(self.dirname)
with open('Config.fs-uae', 'w') as fobj:
fobj.write('\n')
wrapper.run()
mock_plain_run.called_once_with('Config.fs-uae',
['--fullscreen',
'--fade_out_duration=0'],
[])
# This will obviously fail for nonexistent module
sys.argv.append('--wrapper=dummy_wrapper')
self.assertRaises(SystemExit, wrapper.run)
def test_parse_option(self):
# commandline origin
self.assertEqual(wrapper.parse_option('--fullscreen'),
('fullscreen', '1'))
self.assertEqual(wrapper.parse_option('--fade_out_duration=0'),
('fade_out_duration', '0'))
# pass the wrong parameter to fs-uae
self.assertEqual(wrapper.parse_option('-typo=true'), ('-typo', 'true'))
# pass the wrong parameter to fs-uae again
self.assertEqual(wrapper.parse_option('typo=true'), ('typo', 'true'))
# We have no idea what to do with this - might be a conf file
self.assertEqual(wrapper.parse_option('this-is-odd'), (None, None))
def test_parse_args(self):
# Looking for configuration file... first, we have nothing
self.assertEqual(wrapper.parse_args(), (None, [], {}))
# still no luck - nonexistent file
sys.argv.append('there-is-no-config.fs-uae')
self.assertEqual(wrapper.parse_args(), (None, [], {}))
# lets make it
os.chdir(self.dirname)
with open('there-is-no-config.fs-uae', 'w') as fobj:
fobj.write('\n')
self.assertEqual(wrapper.parse_args(),
('there-is-no-config.fs-uae', [], {}))
# remove argument, try to find default one
sys.argv.pop()
self.assertListEqual(sys.argv, ['fs-uae-wrapper'])
with open('Config.fs-uae', 'w') as fobj:
fobj.write('\n')
self.assertEqual(wrapper.parse_args(), ('Config.fs-uae', [], {}))