[Checkins] SVN: zope.deprecation/trunk/ merge svn+ssh://svn.zope.org/repos/main/zope.deprecation/branches/chrism-unittesting

Chris McDonough chrism at plope.com
Mon Sep 5 05:43:54 EST 2011


Log message for revision 122727:
  merge svn+ssh://svn.zope.org/repos/main/zope.deprecation/branches/chrism-unittesting

Changed:
  _U  zope.deprecation/trunk/
  U   zope.deprecation/trunk/CHANGES.txt
  U   zope.deprecation/trunk/README.txt
  U   zope.deprecation/trunk/setup.py
  _U  zope.deprecation/trunk/src/zope/
  D   zope.deprecation/trunk/src/zope/deprecation/README.txt
  U   zope.deprecation/trunk/src/zope/deprecation/deprecation.py
  A   zope.deprecation/trunk/src/zope/deprecation/fixture.py
  U   zope.deprecation/trunk/src/zope/deprecation/tests.py
  A   zope.deprecation/trunk/tox.ini

-=-

Property changes on: zope.deprecation/trunk
___________________________________________________________________
Modified: svn:ignore
   - bin
build
dist
lib
develop-eggs
eggs
parts
.installed.cfg

   + bin
build
dist
lib
develop-eggs
eggs
parts
.installed.cfg
.tox


Modified: zope.deprecation/trunk/CHANGES.txt
===================================================================
--- zope.deprecation/trunk/CHANGES.txt	2011-09-05 08:44:29 UTC (rev 122726)
+++ zope.deprecation/trunk/CHANGES.txt	2011-09-05 10:43:53 UTC (rev 122727)
@@ -2,12 +2,14 @@
 CHANGES
 =======
 
-3.4.2 (unreleased)
-------------------
+3.5 (unreleased)
+----------------
 
-- Nothing changed yet.
+- Replaced doctesting with unit testing.
 
+- Python 3 compatibility.
 
+
 3.4.1 (2011-06-07)
 ------------------
 

Modified: zope.deprecation/trunk/README.txt
===================================================================
--- zope.deprecation/trunk/README.txt	2011-09-05 08:44:29 UTC (rev 122726)
+++ zope.deprecation/trunk/README.txt	2011-09-05 10:43:53 UTC (rev 122727)
@@ -1,2 +1,362 @@
 This package provides a simple function called ``deprecated(names, reason)`` to
 mark deprecated modules, classes, functions, methods and properties.
+
+.. contents::
+
+===============
+Deprecation API
+===============
+
+Deprecating objects inside a module
+-----------------------------------
+
+Let's start with a demonstration of deprecating any name inside a module. To
+demonstrate the functionality, I have placed the following code inside the
+``tests.py`` file of this package::
+
+  from zope.deprecation import deprecated
+  demo1 = 1
+  deprecated('demo1', 'demo1 is no more.')
+
+  demo2 = 2
+  deprecated('demo2', 'demo2 is no more.')
+
+  demo3 = 3
+  deprecated('demo3', 'demo3 is no more.')
+
+The first argument to the ``deprecated()`` function is a list of names that
+should be declared deprecated. If the first argument is a string, it is
+interpreted as one name. The second argument is the reason the particular name
+has been deprecated. It is good practice to also list the version in which the
+name will be removed completely.
+
+Let's now see how the deprecation warnings are displayed.
+
+  >>> from zope.deprecation import tests
+  >>> tests.demo1
+  From tests.py's showwarning():
+  ...README.txt:1: DeprecationWarning: demo1: demo1 is no more.
+  ...
+  1
+
+  >>> import zope.deprecation.tests
+  >>> zope.deprecation.tests.demo2
+  From tests.py's showwarning():
+  ...README.txt:1: DeprecationWarning: demo2: demo2 is no more.
+  ...
+  2
+
+You can see that merely importing the affected module or one of its parents
+does not cause a deprecation warning. Only when we try to access the name in
+the module, we get a deprecation warning. On the other hand, if we import the
+name directly, the deprecation warning will be raised immediately.
+
+  >>> from zope.deprecation.tests import demo3
+  From tests.py's showwarning():
+  ...README.txt:1: DeprecationWarning: demo3: demo3 is no more.
+  ...
+
+Deprecation can also happen inside a function.  When we first access
+``demo4``, it can be accessed without problems, then we call a
+function that sets the deprecation message and we get the message upon
+the next access:
+
+  >>> tests.demo4
+  4
+  >>> tests.deprecatedemo4()
+  >>> tests.demo4
+  From tests.py's showwarning():
+  ...README.txt:1: DeprecationWarning: demo4: demo4 is no more.
+  ...
+  4
+
+Deprecating methods and properties
+----------------------------------
+
+New let's see how properties and methods can be deprecated. We are going to
+use the same function as before, except that this time, we do not pass in names
+as first argument, but the method or attribute itself. The function then
+returns a wrapper that sends out a deprecation warning when the attribute or
+method is accessed.
+
+  >>> from zope.deprecation import deprecation
+  >>> class MyComponent(object):
+  ...     foo = property(lambda self: 1)
+  ...     foo = deprecation.deprecated(foo, 'foo is no more.')
+  ...
+  ...     bar = 2
+  ...
+  ...     def blah(self):
+  ...         return 3
+  ...     blah = deprecation.deprecated(blah, 'blah() is no more.')
+  ...
+  ...     def splat(self):
+  ...         return 4
+  ...
+  ...     @deprecation.deprecate("clap() is no more.")
+  ...     def clap(self):
+  ...         return 5
+
+And here is the result:
+
+  >>> my = MyComponent()
+  >>> my.foo
+  From tests.py's showwarning():
+  ...README.txt:1: DeprecationWarning: foo is no more.
+  ...
+  1
+  >>> my.bar
+  2
+  >>> my.blah()
+  From tests.py's showwarning():
+  ...README.txt:1: DeprecationWarning: blah() is no more.
+  ...
+  3
+  >>> my.splat()
+  4
+  >>> my.clap()
+  From tests.py's showwarning():
+  ...README.txt:1: DeprecationWarning: clap() is no more.
+  ...
+  5
+
+Deprecating modules
+-------------------
+
+It is also possible to deprecate whole modules.  This is useful when
+creating module aliases for backward compatibility.  Let's imagine,
+the ``zope.deprecation`` module used to be called ``zope.wanda`` and
+we'd like to retain backward compatibility:
+
+  >>> import zope.deprecation
+  >>> import sys
+  >>> sys.modules['zope.wanda'] = deprecation.deprecated(
+  ...     zope.deprecation, 'A module called Wanda is now zope.deprecation.')
+
+Now we can import ``wanda``, but when accessing things from it, we get
+our deprecation message as expected:
+
+  >>> from zope.wanda import deprecated
+  From tests.py's showwarning():
+  ...README.txt:1: DeprecationWarning: A module called Wanda is now zope.deprecation.
+  ...
+
+Before we move on, we should clean up:
+
+  >>> del deprecated
+  >>> del sys.modules['zope.wanda']
+
+Moving modules
+--------------
+
+When a module is moved, you often want to support importing from the
+old location for a while, generating a deprecation warning when
+someone uses the old location.  This can be done using the moved
+function.
+
+To see how this works, we'll use a helper function to create two fake
+modules in the zope.deprecation package.  First will create a module
+in the "old" location that used the moved function to indicate the a
+module on the new location should be used:
+
+  >>> create_module(old_location=
+  ... '''
+  ... import zope.deprecation
+  ... zope.deprecation.moved('zope.deprecation.new_location', 'version 2')
+  ... ''')
+  
+and we define the module in the new location:
+
+  >>> create_module(new_location=
+  ... '''\
+  ... print "new module imported"
+  ... x = 42
+  ... ''')
+
+Now, if we import the old location, we'll see the output of importing
+the old location:
+
+  >>> import zope.deprecation.old_location
+  ... # doctest: +NORMALIZE_WHITESPACE
+  From tests.py's showwarning():
+  ...zope/deprecation/README.txt:1: 
+  DeprecationWarning: zope.deprecation.old_location has moved to 
+  zope.deprecation.new_location.
+  Import of zope.deprecation.old_location will become unsupported
+  in version 2
+    ===============
+  new module imported
+
+  >>> zope.deprecation.old_location.x
+  42
+
+Moving packages
+---------------
+
+When moving packages, you need to leave placeholders for each 
+module.  Let's look at an example:
+
+  >>> create_module({
+  ... 'new_package.__init__': '''\
+  ... print __name__, 'imported'
+  ... x=0
+  ... ''',
+  ... 'new_package.m1': '''\
+  ... print __name__, 'imported'
+  ... x=1
+  ... ''',
+  ... 'new_package.m2': '''\
+  ... print __name__, 'imported'
+  ... def x():
+  ...     pass
+  ... ''',
+  ... 'new_package.m3': '''\
+  ... print __name__, 'imported'
+  ... x=3
+  ... ''',
+  ... 'old_package.__init__': '''\
+  ... import zope.deprecation
+  ... zope.deprecation.moved('zope.deprecation.new_package', 'version 2')
+  ... ''',
+  ... 'old_package.m1': '''\
+  ... import zope.deprecation
+  ... zope.deprecation.moved('zope.deprecation.new_package.m1', 'version 2')
+  ... ''',
+  ... 'old_package.m2': '''\
+  ... import zope.deprecation
+  ... zope.deprecation.moved('zope.deprecation.new_package.m2', 'version 2')
+  ... ''',
+  ... })
+
+
+
+Now, if we import the old modules, we'll get warnings:
+
+  >>> import zope.deprecation.old_package
+  ... # doctest: +NORMALIZE_WHITESPACE
+  From tests.py's showwarning():
+  ...zope/deprecation/README.txt:1: DeprecationWarning:
+  zope.deprecation.old_package has moved to zope.deprecation.new_package.
+  Import of zope.deprecation.old_package will become unsupported in version 2
+    ===============
+  zope.deprecation.new_package imported
+
+  >>> zope.deprecation.old_package.x
+  0
+
+  >>> import zope.deprecation.old_package.m1
+  ... # doctest: +NORMALIZE_WHITESPACE
+  From tests.py's showwarning():
+  ...zope/deprecation/README.txt:1: DeprecationWarning:
+  zope.deprecation.old_package.m1 has moved to zope.deprecation.new_package.m1.
+  Import of zope.deprecation.old_package.m1 will become unsupported in
+  version 2
+    ===============
+  zope.deprecation.new_package.m1 imported
+
+  >>> zope.deprecation.old_package.m1.x
+  1
+
+  >>> import zope.deprecation.old_package.m2
+  ... # doctest: +NORMALIZE_WHITESPACE
+  From tests.py's showwarning():
+  ...zope/deprecation/README.txt:1: DeprecationWarning:
+  zope.deprecation.old_package.m2 has moved to zope.deprecation.new_package.m2.
+  Import of zope.deprecation.old_package.m2 will become unsupported in
+  version 2
+    ===============
+  zope.deprecation.new_package.m2 imported
+
+  >>> zope.deprecation.old_package.m2.x is zope.deprecation.new_package.m2.x
+  True
+
+  >>> (zope.deprecation.old_package.m2.x.func_globals
+  ...  is zope.deprecation.new_package.m2.__dict__)
+  True
+
+  >>> zope.deprecation.old_package.m2.x.__module__
+  'zope.deprecation.new_package.m2'
+
+We'll get an error if we try to import m3, because we didn't create a
+placeholder for it:
+
+  >>> import  zope.deprecation.old_package.m3
+  Traceback (most recent call last):
+  ...
+  ImportError: No module named m3
+
+
+
+Temporarily turning off deprecation warnings
+--------------------------------------------
+
+In some cases it is desireable to turn off the deprecation warnings for a
+short time. To support such a feature, the ``zope.deprecation`` package
+provides an attribute called ``__show__``. One can ask for its status by
+calling it:
+
+  >>> from zope.deprecation import __show__
+  >>> __show__()
+  True
+
+  >>> class Foo(object):
+  ...     bar = property(lambda self: 1)
+  ...     bar = deprecation.deprecated(bar, 'bar is no more.')
+  ...     blah = property(lambda self: 1)
+  ...     blah = deprecation.deprecated(blah, 'blah is no more.')
+  >>> foo = Foo()
+
+  >>> foo.bar
+  From tests.py's showwarning():
+  ...README.txt:1: DeprecationWarning: bar is no more.
+  ...
+  1
+
+You can turn off the depraction warnings using
+
+  >>> __show__.off()
+  >>> __show__()
+  False
+
+  >>> foo.blah
+  1
+
+Now, you can also nest several turn-offs, so that calling ``off()`` multiple
+times is meaningful:
+
+  >>> __show__.stack
+  [False]
+
+  >>> __show__.off()
+  >>> __show__.stack
+  [False, False]
+
+  >>> __show__.on()
+  >>> __show__.stack
+  [False]
+  >>> __show__()
+  False
+
+  >>> __show__.on()
+  >>> __show__.stack
+  []
+  >>> __show__()
+  True
+
+You can also reset ``__show__`` to ``True``:
+
+  >>> __show__.off()
+  >>> __show__.off()
+  >>> __show__()
+  False
+
+  >>> __show__.reset()
+  >>> __show__()
+  True
+
+Finally, you cannot call ``on()`` without having called ``off()`` before:
+
+  >>> __show__.on()
+  Traceback (most recent call last):
+  ...
+  IndexError: pop from empty list

Modified: zope.deprecation/trunk/setup.py
===================================================================
--- zope.deprecation/trunk/setup.py	2011-09-05 08:44:29 UTC (rev 122726)
+++ zope.deprecation/trunk/setup.py	2011-09-05 10:43:53 UTC (rev 122727)
@@ -27,7 +27,7 @@
 
 setup(
     name='zope.deprecation',
-    version='3.4.2dev',
+    version='3.5dev',
     url='http://pypi.python.org/pypi/zope.deprecation',
     license='ZPL 2.1',
     description='Zope Deprecation Infrastructure',
@@ -36,12 +36,13 @@
     long_description=(
         read('README.txt')
         + '\n\n' +
-        '.. contents::\n'
-        + '\n\n' +
-        read('src', 'zope', 'deprecation', 'README.txt')
-        + '\n\n' +
         read('CHANGES.txt')
         ),
+    classifiers=[
+        "Intended Audience :: Developers",
+        "Programming Language :: Python",
+        "Programming Language :: Python :: 3",
+        ],
     package_dir = {'': 'src'},
     packages=find_packages('src'),
     namespace_packages=['zope',],
@@ -49,4 +50,5 @@
     extras_require = dict(test=['zope.testing']),
     include_package_data = True,
     zip_safe = False,
+    test_suite='zope.deprecation',
     )


Property changes on: zope.deprecation/trunk/src/zope
___________________________________________________________________
Added: svn:ignore
   + __pycache__


Deleted: zope.deprecation/trunk/src/zope/deprecation/README.txt
===================================================================
--- zope.deprecation/trunk/src/zope/deprecation/README.txt	2011-09-05 08:44:29 UTC (rev 122726)
+++ zope.deprecation/trunk/src/zope/deprecation/README.txt	2011-09-05 10:43:53 UTC (rev 122727)
@@ -1,357 +0,0 @@
-===============
-Deprecation API
-===============
-
-Deprecating objects inside a module
------------------------------------
-
-Let's start with a demonstration of deprecating any name inside a module. To
-demonstrate the functionality, I have placed the following code inside the
-``tests.py`` file of this package::
-
-  from zope.deprecation import deprecated
-  demo1 = 1
-  deprecated('demo1', 'demo1 is no more.')
-
-  demo2 = 2
-  deprecated('demo2', 'demo2 is no more.')
-
-  demo3 = 3
-  deprecated('demo3', 'demo3 is no more.')
-
-The first argument to the ``deprecated()`` function is a list of names that
-should be declared deprecated. If the first argument is a string, it is
-interpreted as one name. The second argument is the reason the particular name
-has been deprecated. It is good practice to also list the version in which the
-name will be removed completely.
-
-Let's now see how the deprecation warnings are displayed.
-
-  >>> from zope.deprecation import tests
-  >>> tests.demo1
-  From tests.py's showwarning():
-  ...README.txt:1: DeprecationWarning: demo1: demo1 is no more.
-  ...
-  1
-
-  >>> import zope.deprecation.tests
-  >>> zope.deprecation.tests.demo2
-  From tests.py's showwarning():
-  ...README.txt:1: DeprecationWarning: demo2: demo2 is no more.
-  ...
-  2
-
-You can see that merely importing the affected module or one of its parents
-does not cause a deprecation warning. Only when we try to access the name in
-the module, we get a deprecation warning. On the other hand, if we import the
-name directly, the deprecation warning will be raised immediately.
-
-  >>> from zope.deprecation.tests import demo3
-  From tests.py's showwarning():
-  ...README.txt:1: DeprecationWarning: demo3: demo3 is no more.
-  ...
-
-Deprecation can also happen inside a function.  When we first access
-``demo4``, it can be accessed without problems, then we call a
-function that sets the deprecation message and we get the message upon
-the next access:
-
-  >>> tests.demo4
-  4
-  >>> tests.deprecatedemo4()
-  >>> tests.demo4
-  From tests.py's showwarning():
-  ...README.txt:1: DeprecationWarning: demo4: demo4 is no more.
-  ...
-  4
-
-Deprecating methods and properties
-----------------------------------
-
-New let's see how properties and methods can be deprecated. We are going to
-use the same function as before, except that this time, we do not pass in names
-as first argument, but the method or attribute itself. The function then
-returns a wrapper that sends out a deprecation warning when the attribute or
-method is accessed.
-
-  >>> from zope.deprecation import deprecation
-  >>> class MyComponent(object):
-  ...     foo = property(lambda self: 1)
-  ...     foo = deprecation.deprecated(foo, 'foo is no more.')
-  ...
-  ...     bar = 2
-  ...
-  ...     def blah(self):
-  ...         return 3
-  ...     blah = deprecation.deprecated(blah, 'blah() is no more.')
-  ...
-  ...     def splat(self):
-  ...         return 4
-  ...
-  ...     @deprecation.deprecate("clap() is no more.")
-  ...     def clap(self):
-  ...         return 5
-
-And here is the result:
-
-  >>> my = MyComponent()
-  >>> my.foo
-  From tests.py's showwarning():
-  ...README.txt:1: DeprecationWarning: foo is no more.
-  ...
-  1
-  >>> my.bar
-  2
-  >>> my.blah()
-  From tests.py's showwarning():
-  ...README.txt:1: DeprecationWarning: blah() is no more.
-  ...
-  3
-  >>> my.splat()
-  4
-  >>> my.clap()
-  From tests.py's showwarning():
-  ...README.txt:1: DeprecationWarning: clap() is no more.
-  ...
-  5
-
-Deprecating modules
--------------------
-
-It is also possible to deprecate whole modules.  This is useful when
-creating module aliases for backward compatibility.  Let's imagine,
-the ``zope.deprecation`` module used to be called ``zope.wanda`` and
-we'd like to retain backward compatibility:
-
-  >>> import zope.deprecation
-  >>> import sys
-  >>> sys.modules['zope.wanda'] = deprecation.deprecated(
-  ...     zope.deprecation, 'A module called Wanda is now zope.deprecation.')
-
-Now we can import ``wanda``, but when accessing things from it, we get
-our deprecation message as expected:
-
-  >>> from zope.wanda import deprecated
-  From tests.py's showwarning():
-  ...README.txt:1: DeprecationWarning: A module called Wanda is now zope.deprecation.
-  ...
-
-Before we move on, we should clean up:
-
-  >>> del deprecated
-  >>> del sys.modules['zope.wanda']
-
-Moving modules
---------------
-
-When a module is moved, you often want to support importing from the
-old location for a while, generating a deprecation warning when
-someone uses the old location.  This can be done using the moved
-function.
-
-To see how this works, we'll use a helper function to create two fake
-modules in the zope.deprecation package.  First will create a module
-in the "old" location that used the moved function to indicate the a
-module on the new location should be used:
-
-  >>> create_module(old_location=
-  ... '''
-  ... import zope.deprecation
-  ... zope.deprecation.moved('zope.deprecation.new_location', 'version 2')
-  ... ''')
-  
-and we define the module in the new location:
-
-  >>> create_module(new_location=
-  ... '''\
-  ... print "new module imported"
-  ... x = 42
-  ... ''')
-
-Now, if we import the old location, we'll see the output of importing
-the old location:
-
-  >>> import zope.deprecation.old_location
-  ... # doctest: +NORMALIZE_WHITESPACE
-  From tests.py's showwarning():
-  ...zope/deprecation/README.txt:1: 
-  DeprecationWarning: zope.deprecation.old_location has moved to 
-  zope.deprecation.new_location.
-  Import of zope.deprecation.old_location will become unsupported
-  in version 2
-    ===============
-  new module imported
-
-  >>> zope.deprecation.old_location.x
-  42
-
-Moving packages
----------------
-
-When moving packages, you need to leave placeholders for each 
-module.  Let's look at an example:
-
-  >>> create_module({
-  ... 'new_package.__init__': '''\
-  ... print __name__, 'imported'
-  ... x=0
-  ... ''',
-  ... 'new_package.m1': '''\
-  ... print __name__, 'imported'
-  ... x=1
-  ... ''',
-  ... 'new_package.m2': '''\
-  ... print __name__, 'imported'
-  ... def x():
-  ...     pass
-  ... ''',
-  ... 'new_package.m3': '''\
-  ... print __name__, 'imported'
-  ... x=3
-  ... ''',
-  ... 'old_package.__init__': '''\
-  ... import zope.deprecation
-  ... zope.deprecation.moved('zope.deprecation.new_package', 'version 2')
-  ... ''',
-  ... 'old_package.m1': '''\
-  ... import zope.deprecation
-  ... zope.deprecation.moved('zope.deprecation.new_package.m1', 'version 2')
-  ... ''',
-  ... 'old_package.m2': '''\
-  ... import zope.deprecation
-  ... zope.deprecation.moved('zope.deprecation.new_package.m2', 'version 2')
-  ... ''',
-  ... })
-
-
-
-Now, if we import the old modules, we'll get warnings:
-
-  >>> import zope.deprecation.old_package
-  ... # doctest: +NORMALIZE_WHITESPACE
-  From tests.py's showwarning():
-  ...zope/deprecation/README.txt:1: DeprecationWarning:
-  zope.deprecation.old_package has moved to zope.deprecation.new_package.
-  Import of zope.deprecation.old_package will become unsupported in version 2
-    ===============
-  zope.deprecation.new_package imported
-
-  >>> zope.deprecation.old_package.x
-  0
-
-  >>> import zope.deprecation.old_package.m1
-  ... # doctest: +NORMALIZE_WHITESPACE
-  From tests.py's showwarning():
-  ...zope/deprecation/README.txt:1: DeprecationWarning:
-  zope.deprecation.old_package.m1 has moved to zope.deprecation.new_package.m1.
-  Import of zope.deprecation.old_package.m1 will become unsupported in
-  version 2
-    ===============
-  zope.deprecation.new_package.m1 imported
-
-  >>> zope.deprecation.old_package.m1.x
-  1
-
-  >>> import zope.deprecation.old_package.m2
-  ... # doctest: +NORMALIZE_WHITESPACE
-  From tests.py's showwarning():
-  ...zope/deprecation/README.txt:1: DeprecationWarning:
-  zope.deprecation.old_package.m2 has moved to zope.deprecation.new_package.m2.
-  Import of zope.deprecation.old_package.m2 will become unsupported in
-  version 2
-    ===============
-  zope.deprecation.new_package.m2 imported
-
-  >>> zope.deprecation.old_package.m2.x is zope.deprecation.new_package.m2.x
-  True
-
-  >>> (zope.deprecation.old_package.m2.x.func_globals
-  ...  is zope.deprecation.new_package.m2.__dict__)
-  True
-
-  >>> zope.deprecation.old_package.m2.x.__module__
-  'zope.deprecation.new_package.m2'
-
-We'll get an error if we try to import m3, because we didn't create a
-placeholder for it:
-
-  >>> import  zope.deprecation.old_package.m3
-  Traceback (most recent call last):
-  ...
-  ImportError: No module named m3
-
-
-
-Temporarily turning off deprecation warnings
---------------------------------------------
-
-In some cases it is desireable to turn off the deprecation warnings for a
-short time. To support such a feature, the ``zope.deprecation`` package
-provides an attribute called ``__show__``. One can ask for its status by
-calling it:
-
-  >>> from zope.deprecation import __show__
-  >>> __show__()
-  True
-
-  >>> class Foo(object):
-  ...     bar = property(lambda self: 1)
-  ...     bar = deprecation.deprecated(bar, 'bar is no more.')
-  ...     blah = property(lambda self: 1)
-  ...     blah = deprecation.deprecated(blah, 'blah is no more.')
-  >>> foo = Foo()
-
-  >>> foo.bar
-  From tests.py's showwarning():
-  ...README.txt:1: DeprecationWarning: bar is no more.
-  ...
-  1
-
-You can turn off the depraction warnings using
-
-  >>> __show__.off()
-  >>> __show__()
-  False
-
-  >>> foo.blah
-  1
-
-Now, you can also nest several turn-offs, so that calling ``off()`` multiple
-times is meaningful:
-
-  >>> __show__.stack
-  [False]
-
-  >>> __show__.off()
-  >>> __show__.stack
-  [False, False]
-
-  >>> __show__.on()
-  >>> __show__.stack
-  [False]
-  >>> __show__()
-  False
-
-  >>> __show__.on()
-  >>> __show__.stack
-  []
-  >>> __show__()
-  True
-
-You can also reset ``__show__`` to ``True``:
-
-  >>> __show__.off()
-  >>> __show__.off()
-  >>> __show__()
-  False
-
-  >>> __show__.reset()
-  >>> __show__()
-  True
-
-Finally, you cannot call ``on()`` without having called ``off()`` before:
-
-  >>> __show__.on()
-  Traceback (most recent call last):
-  ...
-  IndexError: pop from empty list

Modified: zope.deprecation/trunk/src/zope/deprecation/deprecation.py
===================================================================
--- zope.deprecation/trunk/src/zope/deprecation/deprecation.py	2011-09-05 08:44:29 UTC (rev 122726)
+++ zope.deprecation/trunk/src/zope/deprecation/deprecation.py	2011-09-05 10:43:53 UTC (rev 122727)
@@ -21,6 +21,13 @@
 import types
 import warnings
 
+PY3 = sys.version_info[0] == 3
+
+if PY3:
+    str_and_sequence_types = (str, list, tuple)
+else:
+    str_and_sequence_types = (basestring, list, tuple)
+
 class ShowSwitch(object):
     """Simple stack-based switch."""
 
@@ -153,14 +160,13 @@
 
     return deprecated_method
 
-
 def deprecated(specifier, message):
     """Deprecate the given names."""
 
     # A string specifier (or list of strings) means we're called
     # top-level in a module and are to deprecate things inside this
     # module
-    if isinstance(specifier, (str, unicode, list, tuple)):
+    if isinstance(specifier, str_and_sequence_types):
         globals = sys._getframe(1).f_globals
         modname = globals['__name__']
 
@@ -208,7 +214,7 @@
     tomod = sys.modules[old]
     tomod.__doc__ = message
 
-    for name, v in fromdict.iteritems():
+    for name, v in fromdict.items():
         if name not in tomod.__dict__:
             setattr(tomod, name, v)
 

Copied: zope.deprecation/trunk/src/zope/deprecation/fixture.py (from rev 122726, zope.deprecation/branches/chrism-unittesting/src/zope/deprecation/fixture.py)
===================================================================
--- zope.deprecation/trunk/src/zope/deprecation/fixture.py	                        (rev 0)
+++ zope.deprecation/trunk/src/zope/deprecation/fixture.py	2011-09-05 10:43:53 UTC (rev 122727)
@@ -0,0 +1,3 @@
+# used by tests
+
+abc = 1

Modified: zope.deprecation/trunk/src/zope/deprecation/tests.py
===================================================================
--- zope.deprecation/trunk/src/zope/deprecation/tests.py	2011-09-05 08:44:29 UTC (rev 122726)
+++ zope.deprecation/trunk/src/zope/deprecation/tests.py	2011-09-05 10:43:53 UTC (rev 122727)
@@ -1,118 +1,493 @@
-##############################################################################
-#
-# Copyright (c) 2001, 2002 Zope Foundation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.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.
-#
-##############################################################################
-"""Tests for zope.deprecation
-"""
-
-import doctest
-from zope.testing import renormalizing
-import os
-import re
-import shutil
 import sys
-import tempfile
+import types
 import unittest
-import warnings
-import zope.deprecation
 
-# Used in doctests
-from deprecation import deprecated
-demo1 = 1
-deprecated('demo1', 'demo1 is no more.')
+class TestShowSwitch(unittest.TestCase):
+    def _makeOne(self):
+        from zope.deprecation import ShowSwitch
+        return ShowSwitch()
 
-demo2 = 2
-deprecated('demo2', 'demo2 is no more.')
+    def test_on(self):
+        switch = self._makeOne()
+        switch.stack.append(False)
+        switch.on()
+        self.assertEqual(switch.stack, [])
 
-demo3 = 3
-deprecated('demo3', 'demo3 is no more.')
+    def test_off(self):
+        switch = self._makeOne()
+        switch.off()
+        self.assertEqual(switch.stack, [False])
+        
+    def test_reset(self):
+        switch = self._makeOne()
+        switch.stack.append(False)
+        switch.reset()
+        self.assertEqual(switch.stack, [])
+            
+    def test_call_true(self):
+        switch = self._makeOne()
+        self.assertEqual(switch(), True)
 
-demo4 = 4
-def deprecatedemo4():
-    """Demonstrate that deprecate() also works in a local scope."""
-    deprecated('demo4', 'demo4 is no more.')
+    def test_call_false(self):
+        switch = self._makeOne()
+        switch.stack.append(False)
+        self.assertEqual(switch(), False)
 
-def warn(message, category=None, stacklevel=1):
-    print "From tests.py's showwarning():"
+    def test_repr_on(self):
+        switch = self._makeOne()
+        self.assertEqual(repr(switch), '<ShowSwitch on>')
+        
+    def test_repr_off(self):
+        switch = self._makeOne()
+        switch.stack.append(False)
+        self.assertEqual(repr(switch), '<ShowSwitch off>')
 
-    frame = sys._getframe(stacklevel)
-    path = frame.f_globals['__file__']
-    file = open(path)
-    if path.endswith('.pyc') or path.endswith('.pyo'):
-        path = path[:-1]
+    def test___show__global(self):
+        from zope.deprecation import __show__
+        self.assertEqual(self._makeOne().__class__, __show__.__class__)
 
-    lineno = frame.f_lineno
-    for i in range(lineno):
-        line = file.readline()
+class WarningsSetupBase(object):
+    def setUp(self):
+        from zope.deprecation import deprecation
+        self.oldwarnings = deprecation.warnings
+        self.oldshow = deprecation.__show__
+        self.warnings = DummyWarningsModule()
+        self.show = DummyShow()
+        deprecation.warnings = self.warnings
+        deprecation.__show__ = self.show
 
-    print "%s:%s: %s: %s\n  %s" % (
-        path,
-        frame.f_lineno,
-        category.__name__,
-        message,
-        line.strip(),
-        )
+    def tearDown(self):
+        from zope.deprecation import deprecation
+        deprecation.warnings = self.oldwarnings
+        deprecation.__show__ = self.oldshow
 
+class TestDeprecationProxy(WarningsSetupBase, unittest.TestCase):
+    def _getTargetClass(self):
+        from zope.deprecation.deprecation import DeprecationProxy
+        return DeprecationProxy
+        
+    def _makeOne(self, module):
+        cls = self._getTargetClass()
+        return cls(module)
 
-def setUpCreateModule(test):
-    d = test.globs['tmp_d'] = tempfile.mkdtemp('deprecation')
+    def test_deprecate_and__getattribute__string(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests)
+        proxy.deprecate('ClassFixture', 'hello')
+        self.assertEqual(proxy.ClassFixture, ClassFixture)
+        self.assertEqual(
+            self.warnings.w,
+            [('ClassFixture: hello', DeprecationWarning, 2)])
 
-    def create_module(modules=(), **kw):
-        modules = dict(modules)
-        modules.update(kw)
-        for name, src in modules.iteritems():
-            pname = name.split('.')
-            if pname[-1] == '__init__':
-                os.mkdir(os.path.join(d, *pname[:-1]))
-                name = '.'.join(pname[:-1])
-            open(os.path.join(d, *pname)+'.py', 'w').write(src)
-            test.globs['created_modules'].append(name)
+    def test_deprecate_and__getattribute__sequence(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests)
+        proxy.deprecate(('ClassFixture', 'ClassFixture2'), 'hello')
+        self.assertEqual(proxy.ClassFixture, ClassFixture)
+        self.assertEqual(proxy.ClassFixture2, ClassFixture2)
+        self.assertEqual(
+            self.warnings.w,
+            [('ClassFixture: hello', DeprecationWarning, 2),
+             ('ClassFixture2: hello', DeprecationWarning, 2)]
+            )
+    def test_deprecate_and__getattribute__noshow(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests)
+        proxy.deprecate('ClassFixture', 'hello')
+        self.show.on = False
+        self.assertEqual(proxy.ClassFixture, ClassFixture)
+        self.assertEqual(
+            self.warnings.w, [])
 
-    test.globs['created_modules'] = []
-    test.globs['create_module'] = create_module
+    def test___getattribute____class__(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests)
+        self.assertEqual(proxy.__class__, types.ModuleType)
 
-    zope.deprecation.__path__.append(d)
+    def test___getattribute___deprecate(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests)
+        self.assertEqual(type(proxy.deprecate), types.MethodType)
 
-def tearDownCreateModule(test):
-    zope.deprecation.__path__.pop()
-    shutil.rmtree(test.globs['tmp_d'])
-    for name in test.globs['created_modules']:
-        sys.modules.pop(name, None)
+    def test___getattribute__missing(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests)
+        self.assertRaises(AttributeError, getattr, proxy, 'wontbethere')
 
-def setUp(test):
-    test.globs['saved_warn'] = warnings.warn
-    warnings.warn = warn
-    setUpCreateModule(test)
+    def test___setattr__owned(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests)
+        proxy._DeprecationProxy__deprecated = {'foo':'bar'}
+        self.assertEqual(proxy._DeprecationProxy__deprecated, {'foo':'bar'})
 
-def tearDown(test):
-    tearDownCreateModule(test)
-    warnings.warn = test.globs['saved_warn']
-    del object.__getattribute__(sys.modules['zope.deprecation.tests'],
-                                '_DeprecationProxy__deprecated')['demo4']
+    def test___setattr__notowned(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests)
+        try:
+            proxy.foo = 'bar'
+            self.assertEqual(tests.foo, 'bar')
+        finally:
+            del tests.foo
 
-def test_suite():
-    checker = renormalizing.RENormalizing([
-        (re.compile('\\\\'), '/'),   # convert Windows paths to Unix paths
-        ])
-    testfile = os.path.join(os.path.dirname(__file__), 'README.txt')
+    def test___delattr__owned(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests)
+        del proxy._DeprecationProxy__deprecated
+        self.assertRaises(AttributeError, getattr, proxy,
+                          '_DeprecationProxy__deprecated')
 
-    return unittest.TestSuite((
-        doctest.DocFileSuite('README.txt',
-                             setUp=setUp, tearDown=tearDown,
-                             optionflags=doctest.ELLIPSIS,
-                             checker=checker,
-                             globs={'__file__': testfile}, # py2.4 compat
-                             ),
-        ))
+    def test___delattr__notowned(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests)
+        tests.foo = 'bar'
+        del proxy.foo
+        self.assertRaises(AttributeError, getattr, tests, 'foo')
 
-if __name__ == "__main__":
-    unittest.main(defaultTest='test_suite')
+class TestDeprecatedModule(WarningsSetupBase, unittest.TestCase):
+    def _getTargetClass(self):
+        from zope.deprecation.deprecation import DeprecatedModule
+        return DeprecatedModule
+        
+    def _makeOne(self, module, msg):
+        cls = self._getTargetClass()
+        return cls(module, msg)
+
+    def test___getattribute____class__(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests, 'hello')
+        self.assertEqual(proxy.__class__, types.ModuleType)
+
+    def test___getattribute____owned__(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests, 'hello')
+        self.assertEqual(proxy._DeprecatedModule__msg, 'hello')
+
+    def test___getattribute___deprecated(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests, 'hello')
+        self.assertEqual(proxy.ClassFixture, ClassFixture)
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)]
+            )
+
+    def test___getattribute__missing(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests, 'hello')
+        self.assertRaises(AttributeError, getattr, proxy, 'wontbethere')
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)]
+            )
+
+    def test___getattribute___noshow(self):
+        tests = _getTestsModule()
+        self.show.on = False
+        proxy = self._makeOne(tests, 'hello')
+        self.assertEqual(proxy.ClassFixture, ClassFixture)
+        self.assertEqual(
+            self.warnings.w, [])
+
+    def test___setattr__owned(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests, 'hello')
+        proxy._DeprecatedModule__msg = 'foo'
+        self.assertEqual(proxy._DeprecatedModule__msg, 'foo')
+
+    def test___setattr__notowned(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests, 'hello')
+        try:
+            proxy.foo = 'bar'
+            self.assertEqual(tests.foo, 'bar')
+        finally:
+            del tests.foo
+
+    def test___delattr__owned(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests, 'hello')
+        del proxy._DeprecatedModule__msg
+        self.assertRaises(AttributeError, getattr, proxy,
+                          '_DeprecatedModule__msg')
+
+    def test___delattr__notowned(self):
+        tests = _getTestsModule()
+        proxy = self._makeOne(tests, 'hello')
+        tests.foo = 'bar'
+        del proxy.foo
+        self.assertRaises(AttributeError, getattr, tests, 'foo')
+
+class TestDeprecatedGetProperty(WarningsSetupBase, unittest.TestCase):
+    def _getTargetClass(self):
+        from zope.deprecation.deprecation import DeprecatedGetProperty
+        return DeprecatedGetProperty
+        
+    def _makeOne(self, prop, msg):
+        cls = self._getTargetClass()
+        return cls(prop, msg)
+
+    def test___get__(self):
+        prop = DummyProperty()
+        proxy = self._makeOne(prop, 'hello')
+        self.assertEqual(proxy.__get__('inst', 'cls'), None)
+        self.assertEqual(prop.inst, 'inst')
+        self.assertEqual(prop.cls, 'cls')
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)]
+            )
+
+    def test___get__noshow(self):
+        prop = DummyProperty()
+        self.show.on = False
+        proxy = self._makeOne(prop, 'hello')
+        self.assertEqual(proxy.__get__('inst', 'cls'), None)
+        self.assertEqual(prop.inst, 'inst')
+        self.assertEqual(prop.cls, 'cls')
+        self.assertEqual(self.warnings.w, [])
+
+class TestDeprecatedGetSetProperty(TestDeprecatedGetProperty):
+    def _getTargetClass(self):
+        from zope.deprecation.deprecation import DeprecatedGetSetProperty
+        return DeprecatedGetSetProperty
+        
+    def test___set__(self):
+        prop = DummyProperty()
+        proxy = self._makeOne(prop, 'hello')
+        self.assertEqual(proxy.__set__('inst', 'prop'), None)
+        self.assertEqual(prop.inst, 'inst')
+        self.assertEqual(prop.prop, 'prop')
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)]
+            )
+
+    def test___set__noshow(self):
+        prop = DummyProperty()
+        self.show.on = False
+        proxy = self._makeOne(prop, 'hello')
+        self.assertEqual(proxy.__set__('inst', 'prop'), None)
+        self.assertEqual(prop.inst, 'inst')
+        self.assertEqual(prop.prop, 'prop')
+        self.assertEqual(self.warnings.w, [])
+
+class TestDeprecatedSetGetDeleteProperty(TestDeprecatedGetSetProperty):
+    def _getTargetClass(self):
+        from zope.deprecation.deprecation import DeprecatedGetSetDeleteProperty
+        return DeprecatedGetSetDeleteProperty
+        
+    def test___delete__(self):
+        prop = DummyProperty()
+        proxy = self._makeOne(prop, 'hello')
+        self.assertEqual(proxy.__delete__('inst'), None)
+        self.assertEqual(prop.inst, 'inst')
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)]
+            )
+
+    def test___delete__noshow(self):
+        prop = DummyProperty()
+        proxy = self._makeOne(prop, 'hello')
+        self.assertEqual(proxy.__delete__('inst'), None)
+        self.assertEqual(prop.inst, 'inst')
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)]
+            )
+
+class TestDeprecatedMethod(WarningsSetupBase, unittest.TestCase):
+    def _callFUT(self, method, message):
+        from zope.deprecation.deprecation import DeprecatedMethod
+        return DeprecatedMethod(method, message)
+
+    def fixture(self, a, b, c=1):
+        return 'fixture'
+
+    def test_it(self):
+        result = self._callFUT(self.fixture, 'hello')
+        self.assertEqual(result('a', 'b', c=2), 'fixture')
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)]
+            )
+
+    def test_it_noshow(self):
+        result = self._callFUT(self.fixture, 'hello')
+        self.show.on = False
+        self.assertEqual(result('a', 'b', c=2), 'fixture')
+        self.assertEqual(self.warnings.w, [])
+
+class Test_deprecated(WarningsSetupBase, unittest.TestCase):
+    def setUp(self):
+        super(Test_deprecated, self).setUp()
+        self.mod = _getTestsModule()
+
+    def tearDown(self):
+        super(Test_deprecated, self).tearDown()
+        sys.modules['zope.deprecation.tests'] = self.mod
+
+    def _callFUT(self, spec, message):
+        from zope.deprecation.deprecation import deprecated
+        return deprecated(spec, message)
+
+    def test_string_specifier(self):
+        self._callFUT('ClassFixture', 'hello')
+        mod = _getTestsModule()
+        self.assertNotEqual(mod, self.mod)
+        self.assertEqual(mod.ClassFixture, ClassFixture)
+        self.assertEqual(
+            self.warnings.w,
+            [('ClassFixture: hello', DeprecationWarning, 2)])
+
+    def test_string_specifier_sys_modules_already_mutated(self):
+        from zope.deprecation.deprecation import DeprecationProxy
+        mod = _getTestsModule()
+        new = sys.modules['zope.deprecation.tests'] = DeprecationProxy(mod)
+        self._callFUT('ClassFixture', 'hello')
+        self.assertEqual(new.ClassFixture, ClassFixture)
+        self.assertEqual(
+            self.warnings.w,
+            [('ClassFixture: hello', DeprecationWarning, 2)])
+
+    def test_function_specifier(self):
+        result = self._callFUT(functionfixture, 'hello')
+        self.assertNotEqual(result, functionfixture)
+        self.assertEqual(self.warnings.w, [])
+        result(self)
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)])
+        
+    def test_module_specifier(self):
+        mod = _getTestsModule()
+        result = self._callFUT(mod, 'hello')
+        self.assertEqual(self.warnings.w, [])
+        self.assertEqual(result.ClassFixture, ClassFixture)
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)])
+
+    def test_getproperty_specifier(self):
+        prop = DummyGetProperty()
+        result = self._callFUT(prop, 'hello')
+        self.assertEqual(self.warnings.w, [])
+        self.assertEqual(result.__get__('inst', 'cls'), None)
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)])
+        
+    def test_getsetproperty_specifier(self):
+        prop = DummyGetSetProperty()
+        result = self._callFUT(prop, 'hello')
+        self.assertEqual(self.warnings.w, [])
+        self.assertEqual(result.__set__('inst', 'prop'), None)
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)])
+
+    def test_getsetdeleteproperty_specifier(self):
+        prop = DummyGetSetDeleteProperty()
+        result = self._callFUT(prop, 'hello')
+        self.assertEqual(self.warnings.w, [])
+        self.assertEqual(result.__delete__('inst'), None)
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)])
+
+class Test_deprecate(WarningsSetupBase, unittest.TestCase):
+    def _getTargetClass(self):
+        from zope.deprecation.deprecation import deprecate
+        return deprecate
+        
+    def _makeOne(self, msg):
+        cls = self._getTargetClass()
+        return cls(msg)
+
+    def fixture(self):
+        return 'fixture'
+
+    def test___call__(self):
+        proxy = self._makeOne('hello')
+        result = proxy(functionfixture)
+        self.assertEqual(result(self), None)
+        self.assertEqual(
+            self.warnings.w,
+            [('hello', DeprecationWarning, 2)])
+
+class Test_moved(WarningsSetupBase, unittest.TestCase):
+    def setUp(self):
+        super(Test_moved, self).setUp()
+
+    def tearDown(self):
+        super(Test_moved, self).tearDown()
+        del _getTestsModule().__dict__['abc'] 
+
+    def _callFUT(self, to_location, unsupported_in):
+        from zope.deprecation.deprecation import moved
+        return moved(to_location, unsupported_in)
+
+    def test_unsupported_None(self):
+        self._callFUT('zope.deprecation.fixture', None)
+        self.assertEqual(
+            self.warnings.w,
+             [('zope.deprecation.tests has moved to zope.deprecation.fixture.',
+               DeprecationWarning, 3)])
+
+    def test_unsupported_not_None(self):
+        self._callFUT('zope.deprecation.fixture', '1.3')
+        self.assertEqual(
+            self.warnings.w,
+            [('zope.deprecation.tests has moved to zope.deprecation.fixture. '
+              'Import of zope.deprecation.tests will become unsupported in 1.3',
+              DeprecationWarning, 3)])
+
+class Test_import_aliases(unittest.TestCase):
+    def test_it(self):
+        for name in ('deprecated', 'deprecate', 'moved', 'ShowSwitch',
+                     '__show__'):
+            real = getattr(sys.modules['zope.deprecation.deprecation'], name)
+            alias = getattr(sys.modules['zope.deprecation'], name)
+            self.assertEqual(real, alias, (real, alias))
+        
+class DummyWarningsModule(object):
+    def __init__(self):
+        self.w = []
+
+    def warn(self, msg, type, stacklevel):
+        self.w.append((msg, type, stacklevel))
+
+class DummyGetProperty(object):
+    def __get__(self, inst, cls):
+        self.inst = inst
+        self.cls = cls
+
+class DummyGetSetProperty(DummyGetProperty):
+    def __set__(self, inst, prop):
+        self.inst = inst
+        self.prop = prop
+
+class DummyGetSetDeleteProperty(DummyGetSetProperty):
+    def __delete__(self, inst):
+        self.inst = inst
+
+DummyProperty = DummyGetSetDeleteProperty
+
+def _getTestsModule():
+    __import__('zope.deprecation.tests')
+    return sys.modules['zope.deprecation.tests']
+
+class DummyShow(object):
+    def __init__(self):
+        self.on = True
+
+    def __call__(self):
+        if self.on:
+            return True
+        return False
+
+class ClassFixture(object): pass
+
+class ClassFixture2(object): pass
+
+def functionfixture(self): pass

Copied: zope.deprecation/trunk/tox.ini (from rev 122726, zope.deprecation/branches/chrism-unittesting/tox.ini)
===================================================================
--- zope.deprecation/trunk/tox.ini	                        (rev 0)
+++ zope.deprecation/trunk/tox.ini	2011-09-05 10:43:53 UTC (rev 122727)
@@ -0,0 +1,14 @@
+[tox]
+envlist = 
+    py25,py26,py27,py32,jython,pypy
+
+[testenv]
+commands = 
+    python setup.py test -q
+deps =
+    virtualenv
+
+[jython]
+commands =
+    jython setup.py test -q
+



More information about the checkins mailing list