[Zope-Checkins] CVS: Zope3/lib/python/Interface/tests - testVisitImplements.py:1.1.2.1

Jim Fulton jim@zope.com
Mon, 17 Dec 2001 10:23:09 -0500


Update of /cvs-repository/Zope3/lib/python/Interface/tests
In directory cvs.zope.org:/tmp/cvs-serv28650/tests

Added Files:
      Tag: Zope-3x-branch
	testVisitImplements.py 
Log Message:
Fixed bug in code for iterating over implemented interfaces.

A common bug is to assign a module to an __implements__ 
attribute when one intended to assin a module variable.
The error message was not very helpful.

Changed code to raise a more informative error
and added tests.



=== Added File Zope3/lib/python/Interface/tests/testVisitImplements.py ===
##############################################################################
# Copyright (c) 2001 Zope Corporation and Contributors.  All Rights Reserved.
# 
# This software is subject to the provisions of the Zope Public License,
# Version 1.1 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS 
# FOR A PARTICULAR PURPOSE.
##############################################################################

import unittest, sys

from Interface.iclass import visitImplements
from Interface import Interface
from Interface.Exceptions import BadImplements

class I1(Interface): pass
class I2(Interface): pass
class I3(Interface): pass

class Test(unittest.TestCase):

    def testSimpleImplements(self):
        data=[]
        visitImplements(I1, None, data.append)
        self.assertEqual(data, [I1])

    def testSimpleBadImplements(self):
        data=[]
        self.assertRaises(BadImplements,
                          visitImplements, unittest, None, data.append)
        
    def testComplexImplements(self):
        data=[]
        visitImplements((I1, (I2, I3)), None, data.append)
        data = map(lambda i: i.__name__, data)
        self.assertEqual(data, ['I1', 'I2', 'I3'])

    def testComplexBadImplements(self):
        data=[]
        self.assertRaises(BadImplements,
                          visitImplements, (I1, (I2, unittest)),
                          None, data.append)


def test_suite():
    loader=unittest.TestLoader()
    return loader.loadTestsFromTestCase(Test)

if __name__=='__main__':
    unittest.TextTestRunner().run(test_suite())