text: # This file is dual licensed under the terms of the Apache License, Version
  # 2.0, and the BSD License. See the LICENSE file in the root of this repository
  # for complete details.
  
  from __future__ import absolute_import, division, print_function
  
  import sys
  import types
  import warnings
  
  from cryptography.utils import deprecated
  
  
  class TestDeprecated(object):
      def test_deprecated(self, monkeypatch):
          mod = types.ModuleType("TestDeprecated/test_deprecated")
          monkeypatch.setitem(sys.modules, mod.__name__, mod)
          mod.X = deprecated(
              value=1,
              module_name=mod.__name__,
              message="deprecated message text",
              warning_class=DeprecationWarning
          )
          mod.Y = deprecated(
              value=2,
              module_name=mod.__name__,
              message="more deprecated text",
              warning_class=PendingDeprecationWarning,
          )
          mod = sys.modules[mod.__name__]
          mod.Z = 3
  
          with warnings.catch_warnings(record=True) as log:
              warnings.simplefilter("always", PendingDeprecationWarning)
              warnings.simplefilter("always", DeprecationWarning)
              assert mod.X == 1
              assert mod.Y == 2
              assert mod.Z == 3
  
          [msg1, msg2] = log
          assert msg1.category is DeprecationWarning
          assert msg1.message.args == ("deprecated message text",)
  
          assert msg2.category is PendingDeprecationWarning
          assert msg2.message.args == ("more deprecated text",)
  
          assert "Y" in dir(mod)
  