From 36fe31c99e5da33b608afec5ace4689442046693 Mon Sep 17 00:00:00 2001 From: gryf Date: Tue, 27 Dec 2016 20:02:12 +0100 Subject: [PATCH] Refactoring wrapper --- fs_uae_wrapper/wrapper.py | 46 ++++++++------------------------------- tests/test_wrapper.py | 44 +++++++++++-------------------------- 2 files changed, 22 insertions(+), 68 deletions(-) diff --git a/fs_uae_wrapper/wrapper.py b/fs_uae_wrapper/wrapper.py index 4318339..a1f53b0 100644 --- a/fs_uae_wrapper/wrapper.py +++ b/fs_uae_wrapper/wrapper.py @@ -11,51 +11,24 @@ from fs_uae_wrapper import utils from fs_uae_wrapper import WRAPPER_KEY -def parse_option(string): - """ - 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. - """ - key = val = None - - if '=' in string: - key, val = string.split('=', 1) - if key.startswith('--'): - key = key[2:].strip() - else: - key = key.strip() - val = val.strip() - elif string.startswith('--'): - key = string[2:].strip() - # parameters are always as strings - parse them when need it later - val = '1' - - return key, val - - def parse_args(): """ Look out for config file and for config options which would be blindly passed to fs-uae. """ fs_conf = None - fs_uae_options = [] - wrapper_options = {} + options = utils.CmdOption() for parameter in sys.argv[1:]: - key, val = parse_option(parameter) - if key is not None and val is not None: - if WRAPPER_KEY in key: - wrapper_options[key] = val - else: - fs_uae_options.append(parameter) - else: + try: + options.add(parameter) + except AttributeError: if os.path.exists(parameter): fs_conf = parameter if fs_conf is None and os.path.exists('Config.fs-uae'): fs_conf = 'Config.fs-uae' - return fs_conf, fs_uae_options, wrapper_options + return fs_conf, options def usage(): @@ -73,9 +46,9 @@ def usage(): def run(): """run wrapper module""" - config_file, fs_uae_options, wrapper_options = parse_args() + config_file, cmd_options = parse_args() - if '--help' in fs_uae_options: + if 'help' in cmd_options: usage() sys.exit(0) @@ -90,7 +63,7 @@ def run(): sys.stderr.write('Error: Configuration file have syntax issues\n') sys.exit(2) - wrapper_module = wrapper_options.get(WRAPPER_KEY) + wrapper_module = cmd_options.get(WRAPPER_KEY) if not wrapper_module: wrapper_module = configuration.get(WRAPPER_KEY) @@ -105,8 +78,7 @@ def run(): "exists.\n" % wrapper_module) sys.exit(3) - if not wrapper.run(config_file, fs_uae_options, wrapper_options, - configuration): + if not wrapper.run(config_file, cmd_options, configuration): sys.exit(4) diff --git a/tests/test_wrapper.py b/tests/test_wrapper.py index d8db4fd..42b099e 100644 --- a/tests/test_wrapper.py +++ b/tests/test_wrapper.py @@ -64,32 +64,14 @@ class TestWrapper(TestCase): 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, [], {})) + 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, [], {})) + self.assertEqual(wrapper.parse_args(), (None, {})) # lets make it os.chdir(self.dirname) @@ -97,7 +79,7 @@ class TestWrapper(TestCase): fobj.write('\n') self.assertEqual(wrapper.parse_args(), - ('there-is-no-config.fs-uae', [], {})) + ('there-is-no-config.fs-uae', {})) # remove argument, try to find default one sys.argv.pop() @@ -106,7 +88,7 @@ class TestWrapper(TestCase): with open('Config.fs-uae', 'w') as fobj: fobj.write('\n') - self.assertEqual(wrapper.parse_args(), ('Config.fs-uae', [], {})) + self.assertEqual(wrapper.parse_args(), ('Config.fs-uae', {})) # add --wrapper-foo and --wrapper-bar options sys.argv.extend(['--wrapper=plain', '--wrapper_foo=1', @@ -118,12 +100,11 @@ class TestWrapper(TestCase): with open('Config.fs-uae', 'w') as fobj: fobj.write('\n') - conf, fsopts, wrapopts = wrapper.parse_args() + conf, fsopts = wrapper.parse_args() self.assertEqual(conf, 'Config.fs-uae') - self.assertListEqual(fsopts, []) - self.assertDictEqual(wrapopts, {'wrapper': 'plain', - 'wrapper_foo': '1', - 'wrapper_bar': 'false'}) + self.assertDictEqual(fsopts, {'wrapper': 'plain', + 'wrapper_foo': '1', + 'wrapper_bar': 'false'}) # mix wrapper* params in commandline and config sys.argv = ['fs-uae-wrapper', @@ -134,8 +115,9 @@ class TestWrapper(TestCase): with open('Config.fs-uae', 'w') as fobj: fobj.write('[conf]\nwrapper = cd32\nwrapper_foo = /some/path\n') - conf, fsopts, wrapopts = wrapper.parse_args() + conf, fsopts = wrapper.parse_args() self.assertEqual(conf, 'Config.fs-uae') - self.assertListEqual(fsopts, ['--fullscreen', '--fast_memory=4096']) - self.assertDictEqual(wrapopts, {'wrapper': 'plain', - 'wrapper_bar': 'false'}) + self.assertDictEqual(fsopts, {'wrapper': 'plain', + 'wrapper_bar': 'false', + 'fullscreen': '1', + 'fast_memory': '4096'})