def test_schema_only_settings(self): handler = SettingsHandler() with self.override_default_settings(SimpleWidget): handler.bind(SimpleWidget) # fast_save should not update defaults widget = SimpleWidget() handler.fast_save(widget, 'schema_only_setting', 5) self.assertEqual(handler.known_settings['schema_only_setting'].default, None) handler.fast_save(widget, 'component.schema_only_setting', 5) self.assertEqual( handler.known_settings['component.schema_only_setting'].default, "only") # update_defaults should not update defaults widget.schema_only_setting = 5 handler.update_defaults(widget) self.assertEqual(handler.known_settings['schema_only_setting'].default, None) widget.component.schema_only_setting = 5 self.assertEqual( handler.known_settings['component.schema_only_setting'].default, "only") # pack_data should pack setting widget.schema_only_setting = 5 widget.component.schema_only_setting = 5 data = handler.pack_data(widget) self.assertEqual(data['schema_only_setting'], 5) self.assertEqual(data['component']['schema_only_setting'], 5)
def test_pack_settings_stores_version(self): handler = SettingsHandler() handler.bind(SimpleWidget) widget = SimpleWidget() settings = handler.pack_data(widget) self.assertIn(VERSION_KEY, settings)
def test_about_pack_settings_signal(self): handler = SettingsHandler() handler.bind(SimpleWidget) widget = SimpleWidget() handler.initialize(widget) fn = Mock() widget.settingsAboutToBePacked.connect(fn) handler.pack_data(widget) self.assertEqual(1, fn.call_count) handler.update_defaults(widget) self.assertEqual(2, fn.call_count)
def test_initialize_copies_mutables(self): handler = SettingsHandler() handler.bind(SimpleWidget) handler.defaults = dict(list_setting=[]) widget = SimpleWidget() handler.initialize(widget) widget2 = SimpleWidget() handler.initialize(widget2) self.assertNotEqual(id(widget.list_setting), id(widget2.list_setting))
def test_fast_save(self): handler = SettingsHandler() with self.override_default_settings(SimpleWidget): handler.bind(SimpleWidget) widget = SimpleWidget() handler.fast_save(widget, 'component.int_setting', 5) self.assertEqual( handler.known_settings['component.int_setting'].default, 5) self.assertEqual(Component.int_setting.default, 42) handler.fast_save(widget, 'non_setting', 4)
def test_initialize_migrates_settings(self): handler = SettingsHandler() with self.override_default_settings(SimpleWidget): handler.bind(SimpleWidget) widget = SimpleWidget() migrate_settings = Mock() with patch.object(SimpleWidget, "migrate_settings", migrate_settings): # Old settings without version settings = {"value": 5} handler.initialize(widget, settings) migrate_settings.assert_called_with(settings, 0) migrate_settings.reset_mock() # Settings with version settings_with_version = dict(settings) settings_with_version[VERSION_KEY] = 1 handler.initialize(widget, settings_with_version) migrate_settings.assert_called_with(settings, 1)
def test_fast_save_siblings_spill(self): handler_mk1 = SettingsHandler() with override_default_settings(SimpleWidgetMk1): handler_mk1.bind(SimpleWidgetMk1) widget_mk1 = SimpleWidgetMk1() handler_mk1.fast_save(widget_mk1, "setting", -1) handler_mk1.fast_save(widget_mk1, "component.int_setting", 1) self.assertEqual( handler_mk1.known_settings['setting'].default, -1) self.assertEqual( handler_mk1.known_settings['component.int_setting'].default, 1) handler_mk1.initialize(widget_mk1, data=None) handler_mk1.provider.providers["component"].initialize( widget_mk1.component, data=None) self.assertEqual(widget_mk1.setting, -1) self.assertEqual(widget_mk1.component.int_setting, 1) handler_mk2 = SettingsHandler() with override_default_settings(SimpleWidgetMk2): handler_mk2.bind(SimpleWidgetMk2) widget_mk2 = SimpleWidgetMk2() handler_mk2.initialize(widget_mk2, data=None) handler_mk2.provider.providers["component"].initialize( widget_mk2.component, data=None) self.assertEqual(widget_mk2.setting, 42, "spils defaults into sibling classes") self.assertEqual(Component.int_setting.default, 42) self.assertEqual(widget_mk2.component.int_setting, 42, "spils defaults into sibling classes")