[Zope3-checkins] CVS: Zope3/src/zope/interface/tests - m1.py:1.1.2.1 m2.py:1.1.2.1 test_declarations.py:1.1.2.1 dummy.py:1.3.6.1 iadapter.py:1.2.18.1 test_interface.py:1.3.16.1

Jim Fulton jim@zope.com
Fri, 18 Apr 2003 22:46:51 -0400


Update of /cvs-repository/Zope3/src/zope/interface/tests
In directory cvs.zope.org:/tmp/cvs-serv13310/src/zope/interface/tests

Modified Files:
      Tag: interfacegeddon-branch
	dummy.py iadapter.py test_interface.py 
Added Files:
      Tag: interfacegeddon-branch
	m1.py m2.py test_declarations.py 
Log Message:
committing work in progress to interfacegeddon branch.



=== Added File Zope3/src/zope/interface/tests/m1.py ===
"""Test module that declares an interface
"""

from zope.interface import Interface, moduleProvides

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

moduleProvides(I1, I2)


=== Added File Zope3/src/zope/interface/tests/m2.py ===
"""Test module that doesn't declare an interface
"""


=== Added File Zope3/src/zope/interface/tests/test_declarations.py ===
##############################################################################
#
# Copyright (c) 2003 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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.
#
##############################################################################
"""Test the new API for making and checking interface declarations


$Id: test_declarations.py,v 1.1.2.1 2003/04/19 02:46:20 jim Exp $
"""

import unittest
from zope.interface import *
from zope.testing.doc import doctest
from zope.interface import Interface

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

class A:
    implements(I1)
class B:
    implements(I2)
class C(A, B):
    implements(I3)

class COnly(A, B):
    implementsOnly(I3)
    
class D(COnly):
    implements(I5)
    

class Test(unittest.TestCase):

    # Note that most of the tests are in the doc strings of the
    # declarations module.

    def test_doctest(self):
        doctest(self, declarations)

    def test_ObjectSpecification_Simple(self):
        c = C()
        directlyProvides(c, I4)
        spec = providedBy(c)
        sig = spec.__signature__
        expect = (c.__provides__.__signature__,
                  C.__dict__['__implements__'].__signature__,
                  A.__dict__['__implements__'].__signature__,
                  B.__dict__['__implements__'].__signature__,
                  )

    def test_ObjectSpecification_Simple_w_only(self):
        c = C()
        directlyProvides(c, I4)
        spec = providedBy(c)
        sig = spec.__signature__
        expect = (c.__provides__.__signature__,
                  C.__dict__['__implements__'].__signature__,
                  A.__dict__['__implements__'].__signature__,
                  B.__dict__['__implements__'].__signature__,
                  )



        c = COnly()
        directlyProvides(c, I4)
        spec = providedBy(c)
        sig = spec.__signature__
        expect = (c.__provides__.__signature__,
                  COnly.__dict__['__implements__'].__signature__,
                  A.__dict__['__implements__'].__signature__,
                  B.__dict__['__implements__'].__signature__,
                  )

    def test_backward_compat(self):

        class C1: __implements__ = I1
        class C2(C1): __implements__ = I2, I5
        class C3(C2): __implements__ = I3, C2.__implements__

        self.assert_(C3.__implements__.__class__ is tuple)

        self.assertEqual(
            [i.__name__ for i in providedBy(C3())],
            ['I3', 'I2', 'I5'],
            )

        class C4(C3):
            implements(I4)

        self.assertEqual(
            [i.__name__ for i in providedBy(C4())],
            ['I4', 'I3', 'I2', 'I5'],
            )

        self.assertEqual(
            [i.__name__ for i in C4.__implements__],
            ['I4', 'I3', 'I2', 'I5'],
            )

        # Note that C3.__implements__ should now be a sequence of interfaces
        self.assertEqual(
            [i.__name__ for i in C3.__implements__],
            ['I3', 'I2', 'I5'],
            )
        self.failIf(C3.__implements__.__class__ is tuple)

    def test_module(self):
        import zope.interface.tests.m1
        import zope.interface.tests.m2
        directlyProvides(zope.interface.tests.m2,
                         zope.interface.tests.m1.I1,
                         zope.interface.tests.m1.I2,
                         )
        self.assertEqual(list(providedBy(zope.interface.tests.m1)),
                         list(providedBy(zope.interface.tests.m2)),
                         )

    def test_builtins(self):
        classImplements(int, I1)
        class myint(int):
            implements(I2)

        x = 42
        self.assertEqual([i.__name__ for i in providedBy(x)],
                         ['I1'])

        x = myint(42)
        directlyProvides(x, I3)
        self.assertEqual([i.__name__ for i in providedBy(x)],
                         ['I3', 'I2', 'I1'])

        # cleanup
        from zope.interface.declarations import _implements_reg
        _implements_reg.clear()

        x = 42
        self.assertEqual([i.__name__ for i in providedBy(x)],
                         [])
        


def test_suite():
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(Test))
    return suite


if __name__ == '__main__':
    unittest.main()


=== Zope3/src/zope/interface/tests/dummy.py 1.3 => 1.3.6.1 ===
--- Zope3/src/zope/interface/tests/dummy.py:1.3	Thu Mar 13 13:49:15 2003
+++ Zope3/src/zope/interface/tests/dummy.py	Fri Apr 18 22:46:20 2003
@@ -12,8 +12,9 @@
 #
 ##############################################################################
 from zope.interface.tests.ifoo import IFoo
+from zope.interface import moduleProvides
 
-__implements__ = IFoo
+moduleProvides(IFoo)
 
 def bar(baz):
     pass


=== Zope3/src/zope/interface/tests/iadapter.py 1.2 => 1.2.18.1 ===
--- Zope3/src/zope/interface/tests/iadapter.py:1.2	Wed Dec 25 09:15:12 2002
+++ Zope3/src/zope/interface/tests/iadapter.py	Fri Apr 18 22:46:20 2003
@@ -19,7 +19,7 @@
 
 import unittest
 
-from zope.interface import Interface
+from zope.interface import Interface, directlyProvides
 
 class R1(Interface): pass
 class R12(Interface): pass
@@ -87,15 +87,11 @@
         c = C()
 
         for R in [R2, R3, R4, (R12, R2), (R12, R4)]:
-            c.__implements__ = R
+            directlyProvides(c, R)
             for P in [P1, P2, P3]:
                 self.assertEqual(registry.getForObject(c, P), 'R2 P3')
 
-        for R in [None, R1, R2, R3, R4, (R12, R2), (R12, R4)]:
-            c.__implements__ = R
-            self.assertEqual(registry.getForObject(c, None), None)
-
-        c.__implements__ = R1
+        directlyProvides(c, R1)
         for P in [P1, P2, P3]:
             self.assertEqual(registry.getForObject(c, P), 'any P3')
 
@@ -125,7 +121,7 @@
         c = C()
 
         for R in [R2, R3, R4, (R12, R2), (R12, R4)]:
-            c.__implements__ = R
+            directlyProvides(c, R)
             for P in [P1, P2, P3]:
                 self.assertEqual(
                     registry.getForObject(c, P,


=== Zope3/src/zope/interface/tests/test_interface.py 1.3 => 1.3.16.1 ===
--- Zope3/src/zope/interface/tests/test_interface.py:1.3	Sat Jan 25 00:13:47 2003
+++ Zope3/src/zope/interface/tests/test_interface.py	Fri Apr 18 22:46:20 2003
@@ -16,8 +16,8 @@
 import zope.interface
 from zope.interface.tests.unitfixtures import *  # hehehe
 from zope.interface.exceptions import BrokenImplementation
-from zope.interface.implements import instancesOfObjectImplements
-from zope.interface.implements import objectImplements
+from zope.interface import implementedBy
+from zope.interface import providedBy
 from zope.interface import Interface
 from zope.interface.interface import Attribute
 
@@ -41,18 +41,21 @@
         assert not I2.isImplementedByInstancesOf(A)
         assert I2.isImplementedByInstancesOf(B)
         assert not I2.isImplementedByInstancesOf(C)
-        assert not I2.isImplementedByInstancesOf(D)
+
+        # No longer after interfacegeddon
+        # assert not I2.isImplementedByInstancesOf(D)
+
         assert not I2.isImplementedByInstancesOf(E)
 
     def testUtil(self):
-        f = instancesOfObjectImplements
+        f = implementedBy
         assert IC in f(C)
         assert I1 in f(A)
         assert not I1 in f(C)
         assert I2 in f(B)
         assert not I2 in f(C)
 
-        f = objectImplements
+        f = providedBy
         assert IC in f(C())
         assert I1 in f(A())
         assert not I1 in f(C())
@@ -72,7 +75,10 @@
         assert not I2.isImplementedBy(A())
         assert I2.isImplementedBy(B())
         assert not I2.isImplementedBy(C())
-        assert not I2.isImplementedBy(D())
+
+        # Not after interface geddon
+        # assert not I2.isImplementedBy(D())
+
         assert not I2.isImplementedBy(E())
 
     def testDeferredClass(self):