8
|
1 PATH = 0
|
|
2 VALUE = 1
|
|
3 MINIMUM = 2
|
|
4 MAXIMUM = 3
|
|
5
|
|
6
|
|
7 class MockSettingsItem(object):
|
|
8 def __init__(self, parent, path):
|
|
9 self._parent = parent
|
|
10 self.path = path
|
|
11
|
|
12 def get_value(self):
|
|
13 setting = 'addSetting'+self.path
|
|
14 if setting in self._parent._settings:
|
|
15 return self._parent[setting]
|
|
16 return None
|
|
17
|
|
18 def set_value(self, value):
|
|
19 self._parent['addSetting'+self.path] = value
|
|
20
|
|
21 @property
|
|
22 def exists(self):
|
|
23 return 'addSetting'+self.path in self._parent._settings
|
|
24
|
|
25 # Simulates the SettingsSevice object without using the D-Bus (intended for unit tests). Values passed to
|
|
26 # __setitem__ (or the [] operator) will be stored in memory for later retrieval by __getitem__.
|
|
27 class MockSettingsDevice(object):
|
|
28 def __init__(self, supported_settings, event_callback, name='com.victronenergy.settings', timeout=0):
|
|
29 self._dbus_name = name
|
|
30 self._settings = supported_settings
|
|
31 self._event_callback = event_callback
|
|
32
|
|
33 def addSetting(self, path, value, _min, _max, silent=False, callback=None):
|
|
34 # Persist in our settings stash so the settings is available through
|
|
35 # the mock item
|
|
36 self._settings['addSetting'+path] = [path, value, _min, _max, silent]
|
|
37 return MockSettingsItem(self, path)
|
|
38
|
|
39 def get_short_name(self, path):
|
|
40 for k,v in self._settings.items():
|
|
41 if v[PATH] == path:
|
|
42 return k
|
|
43 return None
|
|
44
|
|
45 def __getitem__(self, setting):
|
|
46 return self._settings[setting][VALUE]
|
|
47
|
|
48 def __setitem__(self, setting, new_value):
|
|
49 s = self._settings.get(setting, None)
|
|
50 if s is None:
|
|
51 raise Exception('setting not found')
|
|
52 old_value = s[VALUE]
|
|
53 if old_value == new_value:
|
|
54 return
|
|
55 s[VALUE] = new_value
|
|
56 if self._event_callback is not None:
|
|
57 self._event_callback(setting, old_value, new_value)
|