6 from StringIO import StringIO
7 from lib.simple_config import SimpleConfig
10 class Test_SimpleConfig(unittest.TestCase):
13 super(Test_SimpleConfig, self).setUp()
14 # make sure "read_user_config" and "user_dir" return a temporary directory.
15 self.electrum_dir = tempfile.mkdtemp()
16 # Do the same for the user dir to avoid overwriting the real configuration
17 # for development machines with electrum installed :)
18 self.user_dir = tempfile.mkdtemp()
20 self.options = {"electrum_path": self.electrum_dir}
21 self._saved_stdout = sys.stdout
22 self._stdout_buffer = StringIO()
23 sys.stdout = self._stdout_buffer
26 super(Test_SimpleConfig, self).tearDown()
27 # Remove the temporary directory after each test (to make sure we don't
28 # pollute /tmp for nothing.
29 shutil.rmtree(self.electrum_dir)
30 shutil.rmtree(self.user_dir)
32 # Restore the "real" stdout
33 sys.stdout = self._saved_stdout
35 def test_simple_config_command_line_overrides_everything(self):
36 """Options passed by command line override all other configuration
38 fake_read_system = lambda : {"electrum_path": "a"}
39 fake_read_user = lambda _: {"electrum_path": "b"}
40 read_user_dir = lambda : self.user_dir
41 config = SimpleConfig(options=self.options,
42 read_system_config_function=fake_read_system,
43 read_user_config_function=fake_read_user,
44 read_user_dir_function=read_user_dir)
45 self.assertEqual(self.options.get("electrum_path"),
46 config.get("electrum_path"))
48 def test_simple_config_system_config_overrides_user_config(self):
49 """Options passed in system config override user config."""
50 fake_read_system = lambda : {"electrum_path": self.electrum_dir}
51 fake_read_user = lambda _: {"electrum_path": "b"}
52 read_user_dir = lambda : self.user_dir
53 config = SimpleConfig(options=None,
54 read_system_config_function=fake_read_system,
55 read_user_config_function=fake_read_user,
56 read_user_dir_function=read_user_dir)
57 self.assertEqual(self.options.get("electrum_path"),
58 config.get("electrum_path"))
60 def test_simple_config_user_config_is_used_if_others_arent_specified(self):
61 """Options passed by command line override all other configuration
63 fake_read_system = lambda : {}
64 fake_read_user = lambda _: {"electrum_path": self.electrum_dir}
65 read_user_dir = lambda : self.user_dir
66 config = SimpleConfig(options=None,
67 read_system_config_function=fake_read_system,
68 read_user_config_function=fake_read_user,
69 read_user_dir_function=read_user_dir)
70 self.assertEqual(self.options.get("electrum_path"),
71 config.get("electrum_path"))
73 def test_cannot_set_options_passed_by_command_line(self):
74 fake_read_system = lambda : {}
75 fake_read_user = lambda _: {"electrum_path": "b"}
76 read_user_dir = lambda : self.user_dir
77 config = SimpleConfig(options=self.options,
78 read_system_config_function=fake_read_system,
79 read_user_config_function=fake_read_user,
80 read_user_dir_function=read_user_dir)
81 config.set_key("electrum_path", "c")
82 self.assertEqual(self.options.get("electrum_path"),
83 config.get("electrum_path"))
85 def test_cannot_set_options_from_system_config(self):
86 fake_read_system = lambda : {"electrum_path": self.electrum_dir}
87 fake_read_user = lambda _: {}
88 read_user_dir = lambda : self.user_dir
89 config = SimpleConfig(options={},
90 read_system_config_function=fake_read_system,
91 read_user_config_function=fake_read_user,
92 read_user_dir_function=read_user_dir)
93 config.set_key("electrum_path", "c")
94 self.assertEqual(self.options.get("electrum_path"),
95 config.get("electrum_path"))
97 def test_can_set_options_set_in_user_config(self):
98 another_path = tempfile.mkdtemp()
99 fake_read_system = lambda : {}
100 fake_read_user = lambda _: {"electrum_path": self.electrum_dir}
101 read_user_dir = lambda : self.user_dir
102 config = SimpleConfig(options={},
103 read_system_config_function=fake_read_system,
104 read_user_config_function=fake_read_user,
105 read_user_dir_function=read_user_dir)
106 config.set_key("electrum_path", another_path)
107 self.assertEqual(another_path, config.get("electrum_path"))