summaryrefslogtreecommitdiff
path: root/test/base/test_warnings.py
blob: ee286a7bc9edab7af7b60f01cb5419a8fce49266 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
from sqlalchemy import testing
from sqlalchemy.exc import SADeprecationWarning
from sqlalchemy.testing import eq_
from sqlalchemy.testing import expect_deprecated
from sqlalchemy.testing import fixtures
from sqlalchemy.util.deprecations import _decorate_cls_with_warning
from sqlalchemy.util.deprecations import warn_deprecated_limited
from sqlalchemy.util.langhelpers import _hash_limit_string


class WarnDeprecatedLimitedTest(fixtures.TestBase):
    __backend__ = False

    def test_warn_deprecated_limited_text(self):
        with expect_deprecated("foo has been deprecated"):
            warn_deprecated_limited(
                "%s has been deprecated [%d]", ("foo", 1), "1.3"
            )

    def test_warn_deprecated_limited_cap(self):
        """warn_deprecated_limited() and warn_limited() use
        _hash_limit_string

        actually just verifying that _hash_limit_string works as expected
        """
        occurrences = 500
        cap = 10

        printouts = set()
        messages = set()
        for i in range(occurrences):
            message = _hash_limit_string(
                "this is a unique message: %d", cap, (i,)
            )
            printouts.add(str(message))
            messages.add(message)

        eq_(len(printouts), occurrences)
        eq_(len(messages), cap)


class ClsWarningTest(fixtures.TestBase):
    @testing.fixture
    def dep_cls_fixture(self):
        class Connectable:
            """a docstring"""

            some_member = "foo"

        Connectable = _decorate_cls_with_warning(
            Connectable,
            None,
            SADeprecationWarning,
            "a message",
            "2.0",
            "another message",
        )

        return Connectable

    def test_dep_inspectable(self, dep_cls_fixture):
        """test #8115"""

        import inspect

        class PlainClass:
            some_member = "bar"

        pc_keys = dict(inspect.getmembers(PlainClass()))
        insp_keys = dict(inspect.getmembers(dep_cls_fixture()))

        assert set(insp_keys).intersection(
            (
                "__class__",
                "__doc__",
                "__eq__",
                "__dict__",
                "__weakref__",
                "some_member",
            )
        )
        eq_(set(pc_keys), set(insp_keys))