# -*- test-case-name: twisted.trial.test.test_tests -*-
# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.

"""
Test cases used to make sure that warning supression works at the module,
method, and class levels.
"""

import warnings

from twisted.trial import unittest, util



METHOD_WARNING_MSG = "method warning message"
CLASS_WARNING_MSG = "class warning message"
MODULE_WARNING_MSG = "module warning message"

class MethodWarning(Warning):
    pass

class ClassWarning(Warning):
    pass

class ModuleWarning(Warning):
    pass

class EmitMixin:
    def _emit(self):
        warnings.warn(METHOD_WARNING_MSG, MethodWarning)
        warnings.warn(CLASS_WARNING_MSG, ClassWarning)
        warnings.warn(MODULE_WARNING_MSG, ModuleWarning)


class TestSuppression(unittest.TestCase, EmitMixin):
    def testSuppressMethod(self):
        self._emit()
    testSuppressMethod.suppress = [util.suppress(message=METHOD_WARNING_MSG)]

    def testSuppressClass(self):
        self._emit()

    def testOverrideSuppressClass(self):
        self._emit()
    testOverrideSuppressClass.suppress = []

TestSuppression.suppress = [util.suppress(message=CLASS_WARNING_MSG)]


class TestSuppression2(unittest.TestCase, EmitMixin):
    def testSuppressModule(self):
        self._emit()

suppress = [util.suppress(message=MODULE_WARNING_MSG)]


