Mini Shell
# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.
"""
Tests for warning suppression features of Trial.
"""
import unittest as pyunit
from twisted.python.reflect import namedAny
from twisted.trial import unittest
from twisted.trial.test import suppression
class SuppressionMixin:
"""
Tests for the warning suppression features of
L{twisted.trial.unittest.SynchronousTestCase}.
"""
def runTests(self, suite):
suite.run(pyunit.TestResult())
def _load(self, cls, methodName):
"""
Return a new L{unittest.TestSuite} with a single test method in it.
@param cls: A L{TestCase} subclass defining a test method.
@param methodName: The name of the test method from C{cls}.
"""
return pyunit.TestSuite([cls(methodName)])
def _assertWarnings(self, warnings, which):
"""
Assert that a certain number of warnings with certain messages were
emitted in a certain order.
@param warnings: A list of emitted warnings, as returned by
C{flushWarnings}.
@param which: A list of strings giving warning messages that should
appear in C{warnings}.
@raise self.failureException: If the warning messages given by C{which}
do not match the messages in the warning information in C{warnings},
or if they do not appear in the same order.
"""
self.assertEqual([warning["message"] for warning in warnings], which)
def test_setUpSuppression(self):
"""
Suppressions defined by the test method being run are applied to any
warnings emitted while running the C{setUp} fixture.
"""
self.runTests(self._load(self.TestSetUpSuppression, "testSuppressMethod"))
warningsShown = self.flushWarnings([self.TestSetUpSuppression._emit])
self._assertWarnings(
warningsShown,
[
suppression.CLASS_WARNING_MSG,
suppression.MODULE_WARNING_MSG,
suppression.CLASS_WARNING_MSG,
suppression.MODULE_WARNING_MSG,
],
)
def test_tearDownSuppression(self):
"""
Suppressions defined by the test method being run are applied to any
warnings emitted while running the C{tearDown} fixture.
"""
self.runTests(self._load(self.TestTearDownSuppression, "testSuppressMethod"))
warningsShown = self.flushWarnings([self.TestTearDownSuppression._emit])
self._assertWarnings(
warningsShown,
[
suppression.CLASS_WARNING_MSG,
suppression.MODULE_WARNING_MSG,
suppression.CLASS_WARNING_MSG,
suppression.MODULE_WARNING_MSG,
],
)
def test_suppressMethod(self):
"""
A suppression set on a test method prevents warnings emitted by that
test method which the suppression matches from being emitted.
"""
self.runTests(self._load(self.TestSuppression, "testSuppressMethod"))
warningsShown = self.flushWarnings([self.TestSuppression._emit])
self._assertWarnings(
warningsShown,
[suppression.CLASS_WARNING_MSG, suppression.MODULE_WARNING_MSG],
)
def test_suppressClass(self):
"""
A suppression set on a L{SynchronousTestCase} subclass prevents warnings
emitted by any test methods defined on that class which match the
suppression from being emitted.
"""
self.runTests(self._load(self.TestSuppression, "testSuppressClass"))
warningsShown = self.flushWarnings([self.TestSuppression._emit])
self.assertEqual(warningsShown[0]["message"], suppression.METHOD_WARNING_MSG)
self.assertEqual(warningsShown[1]["message"], suppression.MODULE_WARNING_MSG)
self.assertEqual(len(warningsShown), 2)
def test_suppressModule(self):
"""
A suppression set on a module prevents warnings emitted by any test
mewthods defined in that module which match the suppression from being
emitted.
"""
self.runTests(self._load(self.TestSuppression2, "testSuppressModule"))
warningsShown = self.flushWarnings([self.TestSuppression._emit])
self.assertEqual(warningsShown[0]["message"], suppression.METHOD_WARNING_MSG)
self.assertEqual(warningsShown[1]["message"], suppression.CLASS_WARNING_MSG)
self.assertEqual(len(warningsShown), 2)
def test_overrideSuppressClass(self):
"""
The suppression set on a test method completely overrides a suppression
with wider scope; if it does not match a warning emitted by that test
method, the warning is emitted, even if a wider suppression matches.
"""
self.runTests(self._load(self.TestSuppression, "testOverrideSuppressClass"))
warningsShown = self.flushWarnings([self.TestSuppression._emit])
self.assertEqual(warningsShown[0]["message"], suppression.METHOD_WARNING_MSG)
self.assertEqual(warningsShown[1]["message"], suppression.CLASS_WARNING_MSG)
self.assertEqual(warningsShown[2]["message"], suppression.MODULE_WARNING_MSG)
self.assertEqual(len(warningsShown), 3)
class SynchronousSuppressionTests(SuppressionMixin, unittest.SynchronousTestCase):
"""
@see: L{twisted.trial.test.test_tests}
"""
TestSetUpSuppression = namedAny(
"twisted.trial.test.suppression.SynchronousTestSetUpSuppression"
)
TestTearDownSuppression = namedAny(
"twisted.trial.test.suppression.SynchronousTestTearDownSuppression"
)
TestSuppression = namedAny(
"twisted.trial.test.suppression.SynchronousTestSuppression"
)
TestSuppression2 = namedAny(
"twisted.trial.test.suppression.SynchronousTestSuppression2"
)
Zerion Mini Shell 1.0