[Checkins] SVN: zope.deprecation/branches/chrism-unittesting/ first cut

Chris McDonough chrism at plope.com
Sun Sep 4 17:42:02 EST 2011


Log message for revision 122720:
  first cut

Changed:
  _U  zope.deprecation/branches/chrism-unittesting/
  U   zope.deprecation/branches/chrism-unittesting/setup.py
  _U  zope.deprecation/branches/chrism-unittesting/src/zope/
  A   zope.deprecation/branches/chrism-unittesting/src/zope/deprecation/fixture.py
  U   zope.deprecation/branches/chrism-unittesting/src/zope/deprecation/tests.py
  A   zope.deprecation/branches/chrism-unittesting/tox.ini

-=-

Property changes on: zope.deprecation/branches/chrism-unittesting
___________________________________________________________________
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/branches/chrism-unittesting/setup.py
===================================================================
--- zope.deprecation/branches/chrism-unittesting/setup.py	2011-09-04 21:03:04 UTC (rev 122719)
+++ zope.deprecation/branches/chrism-unittesting/setup.py	2011-09-04 22:42:02 UTC (rev 122720)
@@ -49,4 +49,5 @@
     extras_require = dict(test=['zope.testing']),
     include_package_data = True,
     zip_safe = False,
+    test_suite='zope.deprecation',
     )


Property changes on: zope.deprecation/branches/chrism-unittesting/src/zope
___________________________________________________________________
Added: svn:ignore
   + __pycache__


Added: zope.deprecation/branches/chrism-unittesting/src/zope/deprecation/fixture.py
===================================================================
--- zope.deprecation/branches/chrism-unittesting/src/zope/deprecation/fixture.py	                        (rev 0)
+++ zope.deprecation/branches/chrism-unittesting/src/zope/deprecation/fixture.py	2011-09-04 22:42:02 UTC (rev 122720)
@@ -0,0 +1,3 @@
+# used by tests
+
+abc = 1

Modified: zope.deprecation/branches/chrism-unittesting/src/zope/deprecation/tests.py
===================================================================
--- zope.deprecation/branches/chrism-unittesting/src/zope/deprecation/tests.py	2011-09-04 21:03:04 UTC (rev 122719)
+++ zope.deprecation/branches/chrism-unittesting/src/zope/deprecation/tests.py	2011-09-04 22:42:02 UTC (rev 122720)
@@ -1,118 +1,485 @@
-##############################################################################
-#
-# 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 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

Added: zope.deprecation/branches/chrism-unittesting/tox.ini
===================================================================
--- zope.deprecation/branches/chrism-unittesting/tox.ini	                        (rev 0)
+++ zope.deprecation/branches/chrism-unittesting/tox.ini	2011-09-04 22:42:02 UTC (rev 122720)
@@ -0,0 +1,14 @@
+[tox]
+envlist = 
+    py25,py26,py27,py32,jython,pypy
+
+[testenv]
+commands = 
+    python setup.py test -q
+deps =
+    virtualenv
+
+# we separate coverage into its own testenv because a) "last run wins" wrt
+# cobertura jenkins reporting and b) pypy and jython can't handle any
+# combination of versions of coverage and nosexcover that i can find.
+



More information about the checkins mailing list