Metadata-Version: 1.0
Name: affinitic.verifyinterface
Version: 0.1
Summary: Verify interface contract for all implements/classImplements declaration
Home-page: http://hg.affinitic.be/affinitic.verifyinterface
Author: Affinitic
Author-email: jfroche@affinitic.be
License: GPL
Description: Introduction
        ============
        
        What's the use to declare an interface if your class doesn't implement correctly the interface ?
        
        Of course you should verify that in a test but if you don't want to write a test to check that all your code really implements the promised interfaces use this package.
        
        It's a simple patch that calls ``zope.interface.verify.verifyClass`` once you declare implementing an
        interface and print the BrokenImplementation or BrokenMethodImplementation as a warning (if any).
        
        Simple example in testrunner:
        -----------------------------
        
        By default the egg enable interface contract verification for ``zope.interface.implements`` and
        ``zope.interface.classImplements`` that are present in all your packages::
        
        >>> write('buildout.cfg',
        ... """
        ... [buildout]
        ... parts =
        ...     test
        ...
        ... [test]
        ... recipe = zc.recipe.testrunner
        ... eggs = affinitic.verifyinterface
        ...        zope.exceptions
        ... defaults = ['-m', 'module']
        ... """)
        
        >>> print system(buildout)
        Installing test.
        ...
        
        >>> from os.path import join
        >>> print system(join('bin', 'test')),
        <class 'affinitic.verifyinterface.tests.test_module1.Foo'> failed implementing <InterfaceClass affinitic.verifyinterface.tests.test_module1.IFoo>: An object has failed to implement interface <InterfaceClass affinitic.verifyinterface.tests.test_module1.IFoo>
        <BLANKLINE>
        The bla attribute was not provided.
        <BLANKLINE>
        <class 'affinitic.verifyinterface.tests.test_module2.Bar'> failed implementing <InterfaceClass affinitic.verifyinterface.tests.test_module2.IBar>: An object has failed to implement interface <InterfaceClass affinitic.verifyinterface.tests.test_module2.IBar>
        <BLANKLINE>
        The bla attribute was not provided.
        <BLANKLINE>
        Running zope.testing.testrunner.layer.UnitTests tests:
        Set up zope.testing.testrunner.layer.UnitTests in 0.000 seconds.
        Ran 2 tests with 0 failures and 0 errors in 0.000 seconds.
        Tearing down left over layers:
        Tear down zope.testing.testrunner.layer.UnitTests in 0.000 seconds.
        
        
        Limit verifications
        -------------------
        
        But you can limit the package where this verification needs to be done (sometimes you don't care that
        a package you depend on didn't implement correctly an interface).
        
        This is done by adding an environment variable ``verifyinterface`` where you specify what packages/modules (separated by \n as usual) you accept to verify interfaces.
        
        Here is a simple example where I only want to have warning for bad implementation of interfaces used by module1::
        
        >>> write('buildout.cfg',
        ... """
        ... [buildout]
        ... parts =
        ...     test
        ...
        ... [test]
        ... recipe = zc.recipe.testrunner
        ... eggs = affinitic.verifyinterface
        ...        zope.exceptions
        ... defaults = ['-m', 'module']
        ... environment = testenv
        ...
        ... [testenv]
        ... verifyinterface = affinitic.verifyinterface.tests.test_module1
        ... """)
        
        >>> print system(buildout)
        Uninstalling test.
        Installing test.
        ...
        
        >>> from os.path import join
        >>> print system(join('bin', 'test'))
        <class 'affinitic.verifyinterface.tests.test_module1.Foo'> failed implementing <InterfaceClass affinitic.verifyinterface.tests.test_module1.IFoo>: An object has failed to implement interface <InterfaceClass affinitic.verifyinterface.tests.test_module1.IFoo>
        <BLANKLINE>
        The bla attribute was not provided.
        <BLANKLINE>
        Running zope.testing.testrunner.layer.UnitTests tests:
        Set up zope.testing.testrunner.layer.UnitTests in 0.000 seconds.
        Ran 2 tests with 0 failures and 0 errors in 0.000 seconds.
        Tearing down left over layers:
        Tear down zope.testing.testrunner.layer.UnitTests in 0.000 seconds.
        
        Changelog
        =========
        
        0.1 (2009-12-18)
        ----------------
        
        * Initial release
        
        
Keywords: interface zope.interface
Platform: UNKNOWN
Classifier: Programming Language :: Python
Classifier: Topic :: Software Development :: Libraries :: Python Modules
