[Zope-Checkins] CVS: ZODB3/Persistence/tests - test_ExtensionClass.py:1.1.2.2

Jim Fulton cvs-admin at zope.org
Mon Nov 3 11:57:15 EST 2003


Update of /cvs-repository/ZODB3/Persistence/tests
In directory cvs.zope.org:/tmp/cvs-serv25471/Persistence/tests

Modified Files:
      Tag: zodb33-devel-branch
	test_ExtensionClass.py 
Log Message:
Disabled tests of EC-specific behavior when _Persistence wasn't built.


=== ZODB3/Persistence/tests/test_ExtensionClass.py 1.1.2.1 => 1.1.2.2 ===
--- ZODB3/Persistence/tests/test_ExtensionClass.py:1.1.2.1	Mon Nov  3 11:20:00 2003
+++ ZODB3/Persistence/tests/test_ExtensionClass.py	Mon Nov  3 11:57:14 2003
@@ -13,134 +13,225 @@
 ##############################################################################
 """Test ExtensionClass support in Persistence.Persistent
 
->>> from ExtensionClass import Base
-
-- Support for a class initialiser:
-
-  >>> class C(Persistent):
-  ...   def __class_init__(self):
-  ...      print 'class init called'
-  ...      print self.__name__
-  ...   def bar(self):
-  ...      return 'bar called'
-  class init called
-  C
-  >>> c = C()
-  >>> int(c.__class__ is C)
-  1
-  >>> int(c.__class__ is type(c))
-  1
-
-- Provide an inheritedAttribute method for looking up attributes in
-  base classes:
-
-  >>> class C2(C):
-  ...   def bar(*a):
-  ...      return C2.inheritedAttribute('bar')(*a), 42
-  class init called
-  C2
-  >>> o = C2()
-  >>> o.bar()
-  ('bar called', 42)
-
-  This is for compatability with old code. New code should use super
-  instead.   
-
-The base class, Base, exists mainly to support the __of__ protocol.
-The __of__ protocol is similar to __get__ except that __of__ is called
-when an implementor is retrieved from an instance as well as from a
-class:
-
->>> class O(Base):
-...   def __of__(*a):
-...      return a
- 
->>> o1 = O()
->>> o2 = O()
->>> C.o1 = o1
->>> c.o2 = o2
->>> c.o1 == (o1, c)
-1
->>> C.o1 == o1
-1
->>> int(c.o2 == (o2, c))
-1
-
-We accomplish this by making a class that implements __of__ a
-descriptor and treating all descriptor ExtensionClasses this way. That
-is, if an extension class is a descriptor, it's __get__ method will be
-called even when it is retrieved from an instance.
-
->>> class O(Base):
-...   def __get__(*a):
-...      return a
-... 
->>> o1 = O()
->>> o2 = O()
->>> C.o1 = o1
->>> c.o2 = o2
->>> int(c.o1 == (o1, c, type(c)))
-1
->>> int(C.o1 == (o1, None, type(c)))
-1
->>> int(c.o2 == (o2, c, type(c)))
-1
-
 $Id$
 """
 
 from Persistence import Persistent
 import pickle
 
+try:
+    import Persistent._Persistence
+except ImportError:
+    pass
+else:
+
+    def test_basic():
+        """
+
+        >>> from ExtensionClass import Base
+
+        - Support for a class initialiser:
+
+          >>> class C(Persistent):
+          ...   def __class_init__(self):
+          ...      print 'class init called'
+          ...      print self.__name__
+          ...   def bar(self):
+          ...      return 'bar called'
+          class init called
+          C
+          >>> c = C()
+          >>> int(c.__class__ is C)
+          1
+          >>> int(c.__class__ is type(c))
+          1
+
+        - Provide an inheritedAttribute method for looking up attributes in
+          base classes:
+
+          >>> class C2(C):
+          ...   def bar(*a):
+          ...      return C2.inheritedAttribute('bar')(*a), 42
+          class init called
+          C2
+          >>> o = C2()
+          >>> o.bar()
+          ('bar called', 42)
+
+          This is for compatability with old code. New code should use super
+          instead.   
+
+        The base class, Base, exists mainly to support the __of__ protocol.
+        The __of__ protocol is similar to __get__ except that __of__ is called
+        when an implementor is retrieved from an instance as well as from a
+        class:
+
+        >>> class O(Base):
+        ...   def __of__(*a):
+        ...      return a
+
+        >>> o1 = O()
+        >>> o2 = O()
+        >>> C.o1 = o1
+        >>> c.o2 = o2
+        >>> c.o1 == (o1, c)
+        1
+        >>> C.o1 == o1
+        1
+        >>> int(c.o2 == (o2, c))
+        1
+
+        We accomplish this by making a class that implements __of__ a
+        descriptor and treating all descriptor ExtensionClasses this way. That
+        is, if an extension class is a descriptor, it's __get__ method will be
+        called even when it is retrieved from an instance.
+
+        >>> class O(Base):
+        ...   def __get__(*a):
+        ...      return a
+        ... 
+        >>> o1 = O()
+        >>> o2 = O()
+        >>> C.o1 = o1
+        >>> c.o2 = o2
+        >>> int(c.o1 == (o1, c, type(c)))
+        1
+        >>> int(C.o1 == (o1, None, type(c)))
+        1
+        >>> int(c.o2 == (o2, c, type(c)))
+        1
+        """
+
+    def test_mixing():
+        """Test working with a classic class
+
+        >>> class Classic: 
+        ...   def x(self): 
+        ...     return 42
+
+        >>> class O(Persistent):
+        ...   def __of__(*a):
+        ...      return a
+
+        >>> class O2(Classic, O):
+        ...   def __of__(*a):
+        ...      return (O2.inheritedAttribute('__of__')(*a), 
+        ...              O2.inheritedAttribute('x')(a[0]))
+
+        >>> class C(Persistent):
+        ...   def __class_init__(self):
+        ...      print 'class init called'
+        ...      print self.__name__
+        ...   def bar(self):
+        ...      return 'bar called'
+        class init called
+        C
+
+        >>> c = C()
+        >>> o2 = O2()
+        >>> c.o2 = o2
+        >>> int(c.o2 == ((o2, c), 42))
+        1
+
+        Test working with a new style
+
+        >>> class Modern(object): 
+        ...   def x(self): 
+        ...     return 42
+
+        >>> class O2(Modern, O):
+        ...   def __of__(*a):
+        ...      return (O2.inheritedAttribute('__of__')(*a), 
+        ...              O2.inheritedAttribute('x')(a[0]))
+
+        >>> o2 = O2()
+        >>> c.o2 = o2
+        >>> int(c.o2 == ((o2, c), 42))
+        1
+
+        """
+
+    def proper_error_on_deleattr():
+        """
+        Florent Guillaume wrote:
+
+        ...
+
+        Excellent.
+        Will it also fix this particularity of ExtensionClass:
+
+
+        >>> class A(Persistent):
+        ...   def foo(self):
+        ...     self.gee
+        ...   def bar(self):
+        ...     del self.gee
+
+        >>> a=A()
+        >>> a.foo()
+        Traceback (most recent call last):
+        ...
+        AttributeError: gee
+
+        >>> a.bar()
+        Traceback (most recent call last):
+        ...
+        AttributeError: 'A' object has no attribute 'gee'
+
+        I.e., the fact that KeyError is raised whereas a normal class would
+        raise AttributeError.
+        """
+
+    def test__basicnew__():
+        """
+        >>> x = Simple.__basicnew__()
+        >>> x.__dict__
+        {}
+        """
+
+    def test_setattr_on_extension_type():
+        """
+        >>> for name in 'x', '_x', 'x_', '__x_y__', '___x__', '__x___', '_x_':
+        ...     setattr(Persistent, name, 1)
+        ...     print getattr(Persistent, name)
+        ...     delattr(Persistent, name)
+        ...     print getattr(Persistent, name, 0)
+        1
+        0
+        1
+        0
+        1
+        0
+        1
+        0
+        1
+        0
+        1
+        0
+        1
+        0
+
+        >>> Persistent.__foo__ = 1
+        Traceback (most recent call last):
+        ...
+        TypeError: can't set attributes of built-in/extension type """ \
+            """'Persistence.Persistent' if the attribute name begins """ \
+            """and ends with __ and contains only 4 _ characters
+
+        >>> Persistent.__foo__
+        Traceback (most recent call last):
+        ...
+        AttributeError: type object 'Persistence.Persistent' """ \
+            """has no attribute '__foo__'
+
+        >>> del Persistent.__foo__
+        Traceback (most recent call last):
+        ...
+        TypeError: can't set attributes of built-in/extension type """ \
+            """'Persistence.Persistent' if the attribute name begins """ \
+            """and ends with __ and contains only 4 _ characters
 
-def test_mixing():
-    """Test working with a classic class
-
-    >>> class Classic: 
-    ...   def x(self): 
-    ...     return 42
-
-    >>> class O(Persistent):
-    ...   def __of__(*a):
-    ...      return a
-
-    >>> class O2(Classic, O):
-    ...   def __of__(*a):
-    ...      return (O2.inheritedAttribute('__of__')(*a), 
-    ...              O2.inheritedAttribute('x')(a[0]))
-
-    >>> class C(Persistent):
-    ...   def __class_init__(self):
-    ...      print 'class init called'
-    ...      print self.__name__
-    ...   def bar(self):
-    ...      return 'bar called'
-    class init called
-    C
-
-    >>> c = C()
-    >>> o2 = O2()
-    >>> c.o2 = o2
-    >>> int(c.o2 == ((o2, c), 42))
-    1
-
-    Test working with a new style
-
-    >>> class Modern(object): 
-    ...   def x(self): 
-    ...     return 42
-
-    >>> class O2(Modern, O):
-    ...   def __of__(*a):
-    ...      return (O2.inheritedAttribute('__of__')(*a), 
-    ...              O2.inheritedAttribute('x')(a[0]))
-
-    >>> o2 = O2()
-    >>> c.o2 = o2
-    >>> int(c.o2 == ((o2, c), 42))
-    1
-
-    """
+        """
 
 def test_class_creation_under_stress():
     """
@@ -160,44 +251,6 @@
 
     """
 
-def proper_error_on_deleattr():
-    """
-    Florent Guillaume wrote:
-
-    ...
-
-    Excellent.
-    Will it also fix this particularity of ExtensionClass:
-    
-    
-    >>> class A(Persistent):
-    ...   def foo(self):
-    ...     self.gee
-    ...   def bar(self):
-    ...     del self.gee
-    
-    >>> a=A()
-    >>> a.foo()
-    Traceback (most recent call last):
-    ...
-    AttributeError: gee
-    
-    >>> a.bar()
-    Traceback (most recent call last):
-    ...
-    AttributeError: 'A' object has no attribute 'gee'
-    
-    I.e., the fact that KeyError is raised whereas a normal class would
-    raise AttributeError.
-    """
-
-def test__basicnew__():
-    """
-    >>> x = Simple.__basicnew__()
-    >>> x.__dict__
-    {}
-    """
-
 def print_dict(d):
     d = d.items()
     d.sort()
@@ -455,50 +508,6 @@
     1
     >>> pickle.loads(pickle.dumps(x, 2)) == x
     1
-
-    """
-    
-def test_setattr_on_extension_type():
-    """
-    >>> for name in 'x', '_x', 'x_', '__x_y__', '___x__', '__x___', '_x_':
-    ...     setattr(Persistent, name, 1)
-    ...     print getattr(Persistent, name)
-    ...     delattr(Persistent, name)
-    ...     print getattr(Persistent, name, 0)
-    1
-    0
-    1
-    0
-    1
-    0
-    1
-    0
-    1
-    0
-    1
-    0
-    1
-    0
-
-    >>> Persistent.__foo__ = 1
-    Traceback (most recent call last):
-    ...
-    TypeError: can't set attributes of built-in/extension type """ \
-        """'Persistence.Persistent' if the attribute name begins """ \
-        """and ends with __ and contains only 4 _ characters
-
-    >>> Persistent.__foo__
-    Traceback (most recent call last):
-    ...
-    AttributeError: type object 'Persistence.Persistent' """ \
-        """has no attribute '__foo__'
-
-    >>> del Persistent.__foo__
-    Traceback (most recent call last):
-    ...
-    TypeError: can't set attributes of built-in/extension type """ \
-        """'Persistence.Persistent' if the attribute name begins """ \
-        """and ends with __ and contains only 4 _ characters
 
     """
 




More information about the Zope-Checkins mailing list