Index: third_party/twisted_8_1/twisted/trial/test/test_assertions.py |
diff --git a/third_party/twisted_8_1/twisted/trial/test/test_assertions.py b/third_party/twisted_8_1/twisted/trial/test/test_assertions.py |
deleted file mode 100644 |
index 31cfa6afe6f3abfbec0a7456b25e8eaf4e88fa1c..0000000000000000000000000000000000000000 |
--- a/third_party/twisted_8_1/twisted/trial/test/test_assertions.py |
+++ /dev/null |
@@ -1,696 +0,0 @@ |
-# Copyright (c) 2001-2007 Twisted Matrix Laboratories. |
-# See LICENSE for details |
- |
-import StringIO, warnings |
-from pprint import pformat |
- |
-from twisted.python import reflect, failure |
-from twisted.python.deprecate import deprecated, getVersionString |
-from twisted.python.versions import Version |
-from twisted.python.util import dsu |
-from twisted.internet import defer |
-from twisted.trial import unittest, runner, reporter |
- |
- |
-class MockEquality(object): |
- def __init__(self, name): |
- self.name = name |
- |
- def __repr__(self): |
- return "MockEquality(%s)" % (self.name,) |
- |
- def __eq__(self, other): |
- if not hasattr(other, 'name'): |
- raise ValueError("%r not comparable to %r" % (other, self)) |
- return self.name[0] == other.name[0] |
- |
- |
-class TestAssertions(unittest.TestCase): |
- """Tests for TestCase's assertion methods. That is, failUnless*, |
- failIf*, assert*. |
- |
- This is pretty paranoid. Still, a certain paranoia is healthy if you |
- are testing a unit testing framework. |
- """ |
- |
- class FailingTest(unittest.TestCase): |
- def test_fails(self): |
- raise self.failureException() |
- |
- def testFail(self): |
- try: |
- self.fail("failed") |
- except self.failureException, e: |
- if not str(e) == 'failed': |
- raise self.failureException("Exception had msg %s instead of %s" |
- % str(e), 'failed') |
- else: |
- raise self.failureException("Call to self.fail() didn't fail test") |
- |
- def test_failingException_fails(self): |
- test = runner.TestLoader().loadClass(TestAssertions.FailingTest) |
- io = StringIO.StringIO() |
- result = reporter.TestResult() |
- test.run(result) |
- self.failIf(result.wasSuccessful()) |
- self.failUnlessEqual(result.errors, []) |
- self.failUnlessEqual(len(result.failures), 1) |
- |
- def test_failIf(self): |
- for notTrue in [0, 0.0, False, None, (), []]: |
- self.failIf(notTrue, "failed on %r" % (notTrue,)) |
- for true in [1, True, 'cat', [1,2], (3,4)]: |
- try: |
- self.failIf(true, "failed on %r" % (true,)) |
- except self.failureException, e: |
- self.failUnlessEqual(str(e), "failed on %r" % (true,)) |
- else: |
- self.fail("Call to failIf(%r) didn't fail" % (true,)) |
- |
- def test_failUnless(self): |
- for notTrue in [0, 0.0, False, None, (), []]: |
- try: |
- self.failUnless(notTrue, "failed on %r" % (notTrue,)) |
- except self.failureException, e: |
- self.failUnlessEqual(str(e), "failed on %r" % (notTrue,)) |
- else: |
- self.fail("Call to failUnless(%r) didn't fail" % (notTrue,)) |
- for true in [1, True, 'cat', [1,2], (3,4)]: |
- self.failUnless(true, "failed on %r" % (true,)) |
- |
- def _testEqualPair(self, first, second): |
- x = self.failUnlessEqual(first, second) |
- if x != first: |
- self.fail("failUnlessEqual should return first parameter") |
- |
- def _testUnequalPair(self, first, second): |
- try: |
- self.failUnlessEqual(first, second) |
- except self.failureException, e: |
- expected = 'not equal:\na = %s\nb = %s\n' % ( |
- pformat(first), pformat(second)) |
- if str(e) != expected: |
- self.fail("Expected: %r; Got: %s" % (expected, str(e))) |
- else: |
- self.fail("Call to failUnlessEqual(%r, %r) didn't fail" |
- % (first, second)) |
- |
- def test_failUnlessEqual_basic(self): |
- self._testEqualPair('cat', 'cat') |
- self._testUnequalPair('cat', 'dog') |
- self._testEqualPair([1], [1]) |
- self._testUnequalPair([1], 'orange') |
- |
- def test_failUnlessEqual_custom(self): |
- x = MockEquality('first') |
- y = MockEquality('second') |
- z = MockEquality('fecund') |
- self._testEqualPair(x, x) |
- self._testEqualPair(x, z) |
- self._testUnequalPair(x, y) |
- self._testUnequalPair(y, z) |
- |
- def test_failUnlessEqualMessage(self): |
- """ |
- When a message is passed to L{assertEqual}, it is included in the |
- error message. |
- """ |
- exception = self.assertRaises( |
- self.failureException, self.assertEqual, |
- 'foo', 'bar', 'message') |
- self.assertEqual( |
- str(exception), |
- "message\nnot equal:\na = 'foo'\nb = 'bar'\n") |
- |
- |
- def test_failUnlessEqualNoneMessage(self): |
- """ |
- If a message is specified as C{None}, it is not included in the error |
- message of L{assertEqual}. |
- """ |
- exception = self.assertRaises( |
- self.failureException, self.assertEqual, 'foo', 'bar', None) |
- self.assertEqual(str(exception), "not equal:\na = 'foo'\nb = 'bar'\n") |
- |
- |
- def test_failUnlessEqual_incomparable(self): |
- apple = MockEquality('apple') |
- orange = ['orange'] |
- try: |
- self.failUnlessEqual(apple, orange) |
- except self.failureException: |
- self.fail("Fail raised when ValueError ought to have been raised.") |
- except ValueError: |
- # good. error not swallowed |
- pass |
- else: |
- self.fail("Comparing %r and %r should have raised an exception" |
- % (apple, orange)) |
- |
- def _raiseError(self, error): |
- raise error |
- |
- def test_failUnlessRaises_expected(self): |
- x = self.failUnlessRaises(ValueError, self._raiseError, ValueError) |
- self.failUnless(isinstance(x, ValueError), |
- "Expect failUnlessRaises to return instance of raised " |
- "exception.") |
- |
- def test_failUnlessRaises_unexpected(self): |
- try: |
- self.failUnlessRaises(ValueError, self._raiseError, TypeError) |
- except TypeError: |
- self.fail("failUnlessRaises shouldn't re-raise unexpected " |
- "exceptions") |
- except self.failureException, e: |
- # what we expect |
- pass |
- else: |
- self.fail("Expected exception wasn't raised. Should have failed") |
- |
- def test_failUnlessRaises_noException(self): |
- try: |
- self.failUnlessRaises(ValueError, lambda : None) |
- except self.failureException, e: |
- self.failUnlessEqual(str(e), |
- 'ValueError not raised (None returned)') |
- else: |
- self.fail("Exception not raised. Should have failed") |
- |
- def test_failUnlessRaises_failureException(self): |
- x = self.failUnlessRaises(self.failureException, self._raiseError, |
- self.failureException) |
- self.failUnless(isinstance(x, self.failureException), |
- "Expected %r instance to be returned" |
- % (self.failureException,)) |
- try: |
- x = self.failUnlessRaises(self.failureException, self._raiseError, |
- ValueError) |
- except self.failureException, e: |
- # what we expect |
- pass |
- else: |
- self.fail("Should have raised exception") |
- |
- def test_failIfEqual_basic(self): |
- x, y, z = [1], [2], [1] |
- ret = self.failIfEqual(x, y) |
- self.failUnlessEqual(ret, x, |
- "failIfEqual should return first parameter") |
- self.failUnlessRaises(self.failureException, |
- self.failIfEqual, x, x) |
- self.failUnlessRaises(self.failureException, |
- self.failIfEqual, x, z) |
- |
- def test_failIfEqual_customEq(self): |
- x = MockEquality('first') |
- y = MockEquality('second') |
- z = MockEquality('fecund') |
- ret = self.failIfEqual(x, y) |
- self.failUnlessEqual(ret, x, |
- "failIfEqual should return first parameter") |
- self.failUnlessRaises(self.failureException, |
- self.failIfEqual, x, x) |
- # test when __ne__ is not defined |
- self.failIfEqual(x, z, "__ne__ not defined, so not equal") |
- |
- def test_failUnlessIdentical(self): |
- x, y, z = [1], [1], [2] |
- ret = self.failUnlessIdentical(x, x) |
- self.failUnlessEqual(ret, x, |
- 'failUnlessIdentical should return first ' |
- 'parameter') |
- self.failUnlessRaises(self.failureException, |
- self.failUnlessIdentical, x, y) |
- self.failUnlessRaises(self.failureException, |
- self.failUnlessIdentical, x, z) |
- |
- def test_failUnlessApproximates(self): |
- x, y, z = 1.0, 1.1, 1.2 |
- self.failUnlessApproximates(x, x, 0.2) |
- ret = self.failUnlessApproximates(x, y, 0.2) |
- self.failUnlessEqual(ret, x, "failUnlessApproximates should return " |
- "first parameter") |
- self.failUnlessRaises(self.failureException, |
- self.failUnlessApproximates, x, z, 0.1) |
- self.failUnlessRaises(self.failureException, |
- self.failUnlessApproximates, x, y, 0.1) |
- |
- def test_failUnlessAlmostEqual(self): |
- precision = 5 |
- x = 8.000001 |
- y = 8.00001 |
- z = 8.000002 |
- self.failUnlessAlmostEqual(x, x, precision) |
- ret = self.failUnlessAlmostEqual(x, z, precision) |
- self.failUnlessEqual(ret, x, "failUnlessAlmostEqual should return " |
- "first parameter (%r, %r)" % (ret, x)) |
- self.failUnlessRaises(self.failureException, |
- self.failUnlessAlmostEqual, x, y, precision) |
- |
- def test_failIfAlmostEqual(self): |
- precision = 5 |
- x = 8.000001 |
- y = 8.00001 |
- z = 8.000002 |
- ret = self.failIfAlmostEqual(x, y, precision) |
- self.failUnlessEqual(ret, x, "failIfAlmostEqual should return " |
- "first parameter (%r, %r)" % (ret, x)) |
- self.failUnlessRaises(self.failureException, |
- self.failIfAlmostEqual, x, x, precision) |
- self.failUnlessRaises(self.failureException, |
- self.failIfAlmostEqual, x, z, precision) |
- |
- def test_failUnlessSubstring(self): |
- x = "cat" |
- y = "the dog sat" |
- z = "the cat sat" |
- self.failUnlessSubstring(x, x) |
- ret = self.failUnlessSubstring(x, z) |
- self.failUnlessEqual(ret, x, 'should return first parameter') |
- self.failUnlessRaises(self.failureException, |
- self.failUnlessSubstring, x, y) |
- self.failUnlessRaises(self.failureException, |
- self.failUnlessSubstring, z, x) |
- |
- def test_failIfSubstring(self): |
- x = "cat" |
- y = "the dog sat" |
- z = "the cat sat" |
- self.failIfSubstring(z, x) |
- ret = self.failIfSubstring(x, y) |
- self.failUnlessEqual(ret, x, 'should return first parameter') |
- self.failUnlessRaises(self.failureException, |
- self.failIfSubstring, x, x) |
- self.failUnlessRaises(self.failureException, |
- self.failIfSubstring, x, z) |
- |
- def test_assertFailure(self): |
- d = defer.maybeDeferred(lambda: 1/0) |
- return self.assertFailure(d, ZeroDivisionError) |
- |
- def test_assertFailure_wrongException(self): |
- d = defer.maybeDeferred(lambda: 1/0) |
- self.assertFailure(d, OverflowError) |
- d.addCallbacks(lambda x: self.fail('Should have failed'), |
- lambda x: x.trap(self.failureException)) |
- return d |
- |
- def test_assertFailure_noException(self): |
- d = defer.succeed(None) |
- self.assertFailure(d, ZeroDivisionError) |
- d.addCallbacks(lambda x: self.fail('Should have failed'), |
- lambda x: x.trap(self.failureException)) |
- return d |
- |
- def test_assertFailure_moreInfo(self): |
- """In the case of assertFailure failing, check that we get lots of |
- information about the exception that was raised. |
- """ |
- try: |
- 1/0 |
- except ZeroDivisionError: |
- f = failure.Failure() |
- d = defer.fail(f) |
- d = self.assertFailure(d, RuntimeError) |
- d.addErrback(self._checkInfo, f) |
- return d |
- |
- def _checkInfo(self, assertionFailure, f): |
- assert assertionFailure.check(self.failureException) |
- output = assertionFailure.getErrorMessage() |
- self.assertIn(f.getErrorMessage(), output) |
- self.assertIn(f.getBriefTraceback(), output) |
- |
- def test_assertFailure_masked(self): |
- """A single wrong assertFailure should fail the whole test. |
- """ |
- class ExampleFailure(Exception): |
- pass |
- |
- class TC(unittest.TestCase): |
- failureException = ExampleFailure |
- def test_assertFailure(self): |
- d = defer.maybeDeferred(lambda: 1/0) |
- self.assertFailure(d, OverflowError) |
- self.assertFailure(d, ZeroDivisionError) |
- return d |
- |
- test = TC('test_assertFailure') |
- result = reporter.TestResult() |
- test.run(result) |
- self.assertEqual(1, len(result.failures)) |
- |
- |
- def test_assertWarns(self): |
- """ |
- Test basic assertWarns report. |
- """ |
- def deprecated(a): |
- warnings.warn("Woo deprecated", category=DeprecationWarning) |
- return a |
- r = self.assertWarns(DeprecationWarning, "Woo deprecated", __file__, |
- deprecated, 123) |
- self.assertEquals(r, 123) |
- |
- |
- def test_assertWarnsRegistryClean(self): |
- """ |
- Test that assertWarns cleans the warning registry, so the warning is |
- not swallowed the second time. |
- """ |
- def deprecated(a): |
- warnings.warn("Woo deprecated", category=DeprecationWarning) |
- return a |
- r1 = self.assertWarns(DeprecationWarning, "Woo deprecated", __file__, |
- deprecated, 123) |
- self.assertEquals(r1, 123) |
- # The warning should be raised again |
- r2 = self.assertWarns(DeprecationWarning, "Woo deprecated", __file__, |
- deprecated, 321) |
- self.assertEquals(r2, 321) |
- |
- |
- def test_assertWarnsError(self): |
- """ |
- Test assertWarns failure when no warning is generated. |
- """ |
- def normal(a): |
- return a |
- self.assertRaises(self.failureException, |
- self.assertWarns, DeprecationWarning, "Woo deprecated", __file__, |
- normal, 123) |
- |
- |
- def test_assertWarnsWrongCategory(self): |
- """ |
- Test assertWarns failure when the category is wrong. |
- """ |
- def deprecated(a): |
- warnings.warn("Foo deprecated", category=DeprecationWarning) |
- return a |
- self.assertRaises(self.failureException, |
- self.assertWarns, UserWarning, "Foo deprecated", __file__, |
- deprecated, 123) |
- |
- |
- def test_assertWarnsWrongMessage(self): |
- """ |
- Test assertWarns failure when the message is wrong. |
- """ |
- def deprecated(a): |
- warnings.warn("Foo deprecated", category=DeprecationWarning) |
- return a |
- self.assertRaises(self.failureException, |
- self.assertWarns, DeprecationWarning, "Bar deprecated", __file__, |
- deprecated, 123) |
- |
- |
- def test_assertWarnsOnClass(self): |
- """ |
- Test asserWarns works when creating a class instance. |
- """ |
- class Warn: |
- def __init__(self): |
- warnings.warn("Do not call me", category=RuntimeWarning) |
- r = self.assertWarns(RuntimeWarning, "Do not call me", __file__, |
- Warn) |
- self.assertTrue(isinstance(r, Warn)) |
- r = self.assertWarns(RuntimeWarning, "Do not call me", __file__, |
- Warn) |
- self.assertTrue(isinstance(r, Warn)) |
- |
- |
- def test_assertWarnsOnMethod(self): |
- """ |
- Test assertWarns works when used on an instance method. |
- """ |
- class Warn: |
- def deprecated(self, a): |
- warnings.warn("Bar deprecated", category=DeprecationWarning) |
- return a |
- w = Warn() |
- r = self.assertWarns(DeprecationWarning, "Bar deprecated", __file__, |
- w.deprecated, 321) |
- self.assertEquals(r, 321) |
- r = self.assertWarns(DeprecationWarning, "Bar deprecated", __file__, |
- w.deprecated, 321) |
- self.assertEquals(r, 321) |
- |
- |
- def test_assertWarnsOnCall(self): |
- """ |
- Test assertWarns works on instance with C{__call__} method. |
- """ |
- class Warn: |
- def __call__(self, a): |
- warnings.warn("Egg deprecated", category=DeprecationWarning) |
- return a |
- w = Warn() |
- r = self.assertWarns(DeprecationWarning, "Egg deprecated", __file__, |
- w, 321) |
- self.assertEquals(r, 321) |
- r = self.assertWarns(DeprecationWarning, "Egg deprecated", __file__, |
- w, 321) |
- self.assertEquals(r, 321) |
- |
- |
- def test_assertWarnsFilter(self): |
- """ |
- Test assertWarns on a warning filterd by default. |
- """ |
- def deprecated(a): |
- warnings.warn("Woo deprecated", category=PendingDeprecationWarning) |
- return a |
- r = self.assertWarns(PendingDeprecationWarning, "Woo deprecated", |
- __file__, deprecated, 123) |
- self.assertEquals(r, 123) |
- |
- |
- def test_assertWarnsMultipleWarnings(self): |
- """ |
- Check that assertWarns is able to handle multiple warnings produced by |
- the same function. |
- """ |
- i = [0] |
- def deprecated(a): |
- # the stacklevel is important here, because as the function is |
- # recursive, the warnings produced have a different stack, but we |
- # want to be sure that only the first warning is tested against |
- warnings.warn("Woo deprecated", |
- category=PendingDeprecationWarning, |
- stacklevel=2) |
- i[0] += 1 |
- if i[0] < 3: |
- return deprecated(a) |
- else: |
- return a |
- r = self.assertWarns(PendingDeprecationWarning, "Woo deprecated", |
- unittest.__file__, deprecated, 123) |
- self.assertEquals(r, 123) |
- |
- |
- def test_assertWarnsDifferentWarnings(self): |
- """ |
- For now, assertWarns is unable to handle multiple different warnings, |
- so it should raise an exception if it's the case. |
- """ |
- def deprecated(a): |
- warnings.warn("Woo deprecated", category=DeprecationWarning) |
- warnings.warn("Another one", category=PendingDeprecationWarning) |
- e = self.assertRaises(self.failureException, |
- self.assertWarns, DeprecationWarning, "Woo deprecated", |
- __file__, deprecated, 123) |
- self.assertEquals(str(e), "Can't handle different warnings") |
- |
- |
- def test_assertIsInstance(self): |
- """ |
- Test a true condition of assertIsInstance. |
- """ |
- A = type('A', (object,), {}) |
- a = A() |
- self.assertIsInstance(a, A) |
- |
- def test_assertIsInstanceMultipleClasses(self): |
- """ |
- Test a true condition of assertIsInstance with multiple classes. |
- """ |
- A = type('A', (object,), {}) |
- B = type('B', (object,), {}) |
- a = A() |
- self.assertIsInstance(a, (A, B)) |
- |
- def test_assertIsInstanceError(self): |
- """ |
- Test an error with assertIsInstance. |
- """ |
- A = type('A', (object,), {}) |
- B = type('B', (object,), {}) |
- a = A() |
- self.assertRaises(self.failureException, self.assertIsInstance, a, B) |
- |
- def test_assertIsInstanceErrorMultipleClasses(self): |
- """ |
- Test an error with assertIsInstance and multiple classes. |
- """ |
- A = type('A', (object,), {}) |
- B = type('B', (object,), {}) |
- C = type('C', (object,), {}) |
- a = A() |
- self.assertRaises(self.failureException, self.assertIsInstance, a, (B, C)) |
- |
- def test_assertNotIsInstance(self): |
- """ |
- Test a true condition of assertNotIsInstance. |
- """ |
- A = type('A', (object,), {}) |
- B = type('B', (object,), {}) |
- a = A() |
- self.assertNotIsInstance(a, B) |
- |
- def test_assertNotIsInstanceMultipleClasses(self): |
- """ |
- Test a true condition of assertNotIsInstance and multiple classes. |
- """ |
- A = type('A', (object,), {}) |
- B = type('B', (object,), {}) |
- C = type('C', (object,), {}) |
- a = A() |
- self.assertNotIsInstance(a, (B, C)) |
- |
- def test_assertNotIsInstanceError(self): |
- """ |
- Test an error with assertNotIsInstance. |
- """ |
- A = type('A', (object,), {}) |
- a = A() |
- self.assertRaises(self.failureException, self.assertNotIsInstance, a, A) |
- |
- def test_assertNotIsInstanceErrorMultipleClasses(self): |
- """ |
- Test an error with assertNotIsInstance and multiple classes. |
- """ |
- A = type('A', (object,), {}) |
- B = type('B', (object,), {}) |
- a = A() |
- self.assertRaises(self.failureException, self.assertNotIsInstance, a, (A, B)) |
- |
- |
- |
-class TestAssertionNames(unittest.TestCase): |
- """Tests for consistency of naming within TestCase assertion methods |
- """ |
- def _getAsserts(self): |
- dct = {} |
- reflect.accumulateMethods(self, dct, 'assert') |
- return [ dct[k] for k in dct if not k.startswith('Not') and k != '_' ] |
- |
- def _name(self, x): |
- return x.__name__ |
- |
- def test_failUnless_matches_assert(self): |
- asserts = self._getAsserts() |
- failUnlesses = reflect.prefixedMethods(self, 'failUnless') |
- self.failUnlessEqual(dsu(asserts, self._name), |
- dsu(failUnlesses, self._name)) |
- |
- def test_failIf_matches_assertNot(self): |
- asserts = reflect.prefixedMethods(unittest.TestCase, 'assertNot') |
- failIfs = reflect.prefixedMethods(unittest.TestCase, 'failIf') |
- self.failUnlessEqual(dsu(asserts, self._name), |
- dsu(failIfs, self._name)) |
- |
- def test_equalSpelling(self): |
- for name, value in vars(self).items(): |
- if not callable(value): |
- continue |
- if name.endswith('Equal'): |
- self.failUnless(hasattr(self, name+'s'), |
- "%s but no %ss" % (name, name)) |
- self.failUnlessEqual(value, getattr(self, name+'s')) |
- if name.endswith('Equals'): |
- self.failUnless(hasattr(self, name[:-1]), |
- "%s but no %s" % (name, name[:-1])) |
- self.failUnlessEqual(value, getattr(self, name[:-1])) |
- |
- |
-class TestCallDeprecated(unittest.TestCase): |
- """ |
- Test the L{TestCase.callDeprecated} method. |
- """ |
- |
- version = Version('Twisted', 8, 0, 0) |
- |
- def oldMethod(self, x): |
- """ |
- Deprecated method for testing. |
- """ |
- return x |
- oldMethod = deprecated(version)(oldMethod) |
- |
- |
- def test_callDeprecatedSuppressesWarning(self): |
- """ |
- callDeprecated calls a deprecated callable, suppressing the |
- deprecation warning. |
- """ |
- warningsShown = [] |
- def warnExplicit(*args): |
- warningsShown.append(args) |
- self.patch(warnings, 'warn_explicit', warnExplicit) |
- self.callDeprecated(self.version, self.oldMethod, 'foo') |
- self.assertEqual([], warningsShown, "No warnings should be shown") |
- |
- |
- def test_callDeprecatedCallsFunction(self): |
- """ |
- L{callDeprecated} actually calls the callable passed to it. |
- """ |
- result = self.callDeprecated(self.version, self.oldMethod, 'foo') |
- self.assertEqual('foo', result) |
- |
- |
- def test_failsWithoutDeprecation(self): |
- """ |
- callDeprecated raises a test failure if the callable is not |
- deprecated. |
- """ |
- def notDeprecated(): |
- pass |
- exception = self.assertRaises( |
- self.failureException, |
- self.callDeprecated, self.version, notDeprecated) |
- self.assertEqual( |
- "%r is not deprecated." % notDeprecated, str(exception)) |
- |
- |
- def test_failsWithIncorrectDeprecation(self): |
- """ |
- callDeprecated raises a test failure if the callable was deprecated |
- at a different version to the one expected. |
- """ |
- differentVersion = Version('Foo', 1, 2, 3) |
- exception = self.assertRaises( |
- self.failureException, |
- self.callDeprecated, |
- differentVersion, self.oldMethod, 'foo') |
- self.assertIn(getVersionString(self.version), str(exception)) |
- self.assertIn(getVersionString(differentVersion), str(exception)) |
- |
- |
- def test_nestedDeprecation(self): |
- """ |
- L{callDeprecated} ignores all deprecations apart from the first. |
- |
- Multiple warnings are generated when a deprecated function calls |
- another deprecated function. The first warning is the one generated by |
- the explicitly called function. That's the warning that we care about. |
- """ |
- differentVersion = Version('Foo', 1, 2, 3) |
- |
- def nestedDeprecation(*args): |
- return self.oldMethod(*args) |
- nestedDeprecation = deprecated(differentVersion)(nestedDeprecation) |
- |
- self.callDeprecated(differentVersion, nestedDeprecation, 24) |