1
0
mirror of https://github.com/lutris/lutris synced 2024-07-05 16:38:42 +00:00

Fix WineRegistryKey to allow setting keys correctly

This commit is contained in:
Mathieu Comandon 2016-10-26 21:27:09 -07:00
parent a619602130
commit 2f582f3966
2 changed files with 14 additions and 11 deletions

View File

@ -201,15 +201,12 @@ class WineRegistryKey(object):
if line.startswith('#'):
self.add_meta(line)
elif line.startswith('"'):
elems = re.split(re.compile(r'(?<=[^\\]\")='), line, maxsplit=1)
if len(elems) != 2:
print(elems)
raise ValueError("Unable to split %s" % line)
key, value = elems
self.set_subkey(key, value)
key, value = re.split(re.compile(r'(?<=[^\\]\")='), line, maxsplit=1)
key = key[1:-1]
self.subkeys[key] = value
elif line.startswith('@'):
k, v = line.split('=', 1)
self.set_subkey('\"default\"', v)
self.subkeys['default'] = v
def add_to_last(self, line):
last_subkey = list(self.subkeys.keys())[-1]
@ -235,8 +232,9 @@ class WineRegistryKey(object):
if isinstance(value, int):
return "dword:{:08x}".format(value)
elif isinstance(value, str):
print(value)
return "\"{}\"\n".format(value)
return "\"{}\"".format(value)
else:
raise NotImplementedError("TODO")
def add_meta(self, meta_line):
if not meta_line.startswith('#'):
@ -257,7 +255,7 @@ class WineRegistryKey(object):
return self.metas.get(name)
def set_subkey(self, name, value):
self.subkeys[name[1:-1]] = value.strip()
self.subkeys[name] = self.render_value(value)
def get_subkey(self, name):
if name not in self.subkeys:
@ -268,4 +266,4 @@ class WineRegistryKey(object):
elif value.startswith('dword:'):
return int(value[6:], 16)
else:
raise ValueError("TODO: finish handling other types")
raise ValueError("Handle %s" % value)

View File

@ -63,6 +63,11 @@ class TestWineRegistry(TestCase):
content = system_reg.render()
self.assertEqual(content, original_content)
def test_can_set_value_to_existing_subkey(self):
self.assertEqual(self.registry.query('Control Panel/Desktop', 'DragWidth'), '4')
self.registry.set_value('Control Panel/Desktop', 'DragWidth', '8')
self.assertEqual(self.registry.query('Control Panel/Desktop', 'DragWidth'), '8')
class TestWineRegistryKey(TestCase):
def test_creation_by_key_def_parses(self):