[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