1# (C) Copyright 2007-2019 Enthought, Inc., Austin, TX
2# All rights reserved.
3#
4# This software is provided without warranty under the terms of the BSD
5# license included in LICENSE.txt and may be redistributed only
6# under the conditions described in the aforementioned license.  The license
7# is also available online at http://www.enthought.com/licenses/BSD.txt
8# Thanks for using Enthought open source!
9""" A mutable, manually populated extension registry used for testing. """
10
11
12# Enthought library imports.
13from envisage.api import ExtensionRegistry, UnknownExtension
14
15
16class MutableExtensionRegistry(ExtensionRegistry):
17    """ A mutable, manually populated extension registry used for testing. """
18
19    ###########################################################################
20    # 'MutableExtensionRegistry' interface.
21    ###########################################################################
22
23    def add_extension(self, extension_point_id, extension):
24        """ Contribute an extension to an extension point. """
25
26        self.add_extensions(extension_point_id, [extension])
27
28        return
29
30    def add_extensions(self, extension_point_id, extensions):
31        """ Contribute a list of extensions to an extension point. """
32
33        self._check_extension_point(extension_point_id)
34
35        old   = self._get_extensions(extension_point_id)
36        index = len(old)
37        old.extend(extensions)
38
39        # Let any listeners know that the extensions have been added.
40        refs = self._get_listener_refs(extension_point_id)
41        self._call_listeners(refs, extension_point_id, extensions, [], index)
42
43        return
44
45    def remove_extension(self, extension_point_id, extension):
46        """ Remove a contribution from an extension point. """
47
48        self.remove_extensions(extension_point_id, [extension])
49
50        return
51
52    def remove_extensions(self, extension_point_id, extensions):
53        """ Remove a list of contributions from an extension point. """
54
55        for extension in extensions:
56            try:
57                self._get_extensions(extension_point_id).remove(extension)
58
59            except ValueError:
60                raise UnknownExtension(extension_point_id, extension)
61
62        # Let any listeners know that the extensions have been removed.
63        refs = self._get_listener_refs(extension_point_id)
64        self._call_listeners(refs, extension_point_id, [], extensions, None)
65
66        return
67
68#### EOF ######################################################################
69