Ejemplo n.º 1
0
    def test_register_interface(self):
        """
        Registering and deregistering attributes and functions exposed to the
        API
        
        Verifies:
            * only specified functions and attributes are added and removed
            * functions are added to all registered interfaces
            * name can be given as a param
            * functions can be replaced
        """
        manager = ModuleManager()
        api0 = TestAPI()
        api1 = TestAPI()
        module = Bar()

        manager.register_interface_module(api0)
        manager.register_interface_module(api1)

        interfaces = (
            (module, module.foo),
            (module, module.bar),
            (module, "xoo"),
            (module, "zoo"),
            (module, (module.foo, {"name": "foo2"})),
        )

        interface_names = ("foo", "bar", "xoo", "zoo")

        for interface in interfaces:
            manager.register_interface(*interface)

        for interface in interfaces:
            self.assert_(interface in manager._interfaces)

        for name in interface_names:
            self.assert_(name in api0._registered_interfaces)
            self.assert_(name in api1._registered_interfaces)

        for interface in interfaces:
            manager.deregister_interface(*interface)

        for interface in interfaces:
            self.assertFalse(interface in manager._interfaces)

        self.assertFalse(api0._interfaces)
        self.assertFalse(api1._interfaces)