diff --git a/lutris/util/fileio.py b/lutris/util/fileio.py index f89f3939e..c9df58085 100644 --- a/lutris/util/fileio.py +++ b/lutris/util/fileio.py @@ -6,7 +6,7 @@ class EvilConfigParser(RawConfigParser): """ConfigParser with support for evil INIs using duplicate keys.""" def write(self, fp): for section in self._sections: - fp.write("[%s]\n" % section) + fp.write("[{}]\n".format(section).encode('utf-8')) for (key, value) in list(self._sections[section].items()): if key == "__name__": continue @@ -14,8 +14,8 @@ class EvilConfigParser(RawConfigParser): # Duplicated keys writing support inside key = "=".join((key, str(value).replace('\n', '\n%s=' % key))) - fp.write("%s\n" % (key)) - fp.write("\n") + fp.write("{}\n".format(key).encode('utf-8')) + fp.write("\n".encode('utf-8')) class MultiOrderedDict(OrderedDict): diff --git a/tests/test_utils.py b/tests/test_utils.py index 2f796fa67..12a83277e 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,8 +1,10 @@ +import os from collections import OrderedDict from unittest import TestCase from lutris.util import system from lutris.util import steam from lutris.util import strings +from lutris.util import fileio class TestFileUtils(TestCase): @@ -110,3 +112,19 @@ class TestVersionSort(TestCase): versions = strings.version_sort(versions, reverse=True) self.assertEqual(versions[0], '1.9') self.assertEqual(versions[3], '1.6') + + +class TestEvilConfigParser(TestCase): + def setUp(self): + self.config_path = os.path.join(os.path.dirname(__file__), 'test.ini') + + def tearDown(self): + if os.path.exists(self.config_path): + os.remove(self.config_path) + + def test_config_parse_can_write_to_disk(self): + parser = fileio.EvilConfigParser(dict_type=fileio.MultiOrderedDict) + parser.add_section('Test') + parser.set('Test', 'key', 'value') + with open(self.config_path, 'wb') as config: + parser.write(config)