File: test_final.py

package info (click to toggle)
python-overrides 7.7.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 244 kB
  • sloc: python: 1,661; sh: 5; makefile: 2
file content (164 lines) | stat: -rw-r--r-- 4,161 bytes parent folder | download
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
import unittest
from overrides import override, final
import test_somefinalpackage


class SuperClass(object):
    def some_method(self):
        """Super Class Docs"""
        return "super"

    @final
    def some_finalized_method(self):
        return "super_final"

    @final
    class SomeFinalClass:
        pass


class SubClass(SuperClass):
    @override
    def some_method(self):
        return "sub"

    @final
    def another_finalized(self):
        return "sub_final"


class Sub2(test_somefinalpackage.SomeClass, SuperClass):
    @override
    def somewhat_fun_method(self):
        return "foo"

    @override
    def some_method(self):
        pass


class FinalTests(unittest.TestCase):
    def test_final_passes_simple(self):
        sub = SubClass()
        self.assertEqual(sub.some_method(), "sub")
        self.assertEqual(sub.some_method.__doc__, "Super Class Docs")
        self.assertEqual(sub.some_finalized_method(), "super_final")

    def test_final_passes_for_superclass_in_another_package(self):
        sub2 = Sub2()
        self.assertEqual(sub2.somewhat_fun_method(), "foo")
        self.assertEqual(sub2.somewhat_fun_method.__doc__, "LULZ")
        self.assertEqual(sub2.some_finalized_method(), "super_final")
        self.assertEqual(sub2.somewhat_finalized_method(), "some_final")

    def test_final_fails_simple(self):
        try:

            class SubClassFail(SuperClass):
                @override
                def some_method(self):
                    return "subfail"

                @override
                def some_finalized_method(self):
                    pass

            raise RuntimeError("Should not go here")
        except TypeError:
            pass

    def test_final_fails_inner_class(self):
        try:

            class SubClassFail(SuperClass):
                @override
                class SomeFinalClass:
                    pass

            raise RuntimeError("Should not go here")
        except TypeError:
            pass

    def test_final_fails_another_package(self):
        try:

            class Sub2Fail(test_somefinalpackage.SomeClass, SuperClass):
                @override
                def somewhat_fun_method(self):
                    return "foo"

                @override
                def some_method(self):
                    pass

                @override
                def some_finalized_method(self):
                    pass

            raise RuntimeError("Should not go here")
        except TypeError:
            pass

    def test_final_fails_deep(self):
        try:

            class Sub3Fail(test_somefinalpackage.SomeClass, SubClass):
                @override
                def somewhat_fun_method(self):
                    return "foo"

                @override
                def some_method(self):
                    pass

                @override
                def some_finalized_method(self):
                    pass

            raise RuntimeError("Should not go here")
        except TypeError:
            pass

    def test_final_fails_in_middle(self):
        try:

            class Sub4Fail(test_somefinalpackage.SomeClass, SubClass):
                @override
                def somewhat_fun_method(self):
                    return "foo"

                @override
                def some_method(self):
                    pass

                @override
                def another_finalized(self):
                    pass

            raise RuntimeError("Should not go here")
        except TypeError:
            pass

    def test_final_fails_from_another_package(self):
        try:

            class Sub5Fail(test_somefinalpackage.SomeClass, SubClass):
                @override
                def somewhat_fun_method(self):
                    return "foo"

                @override
                def some_method(self):
                    pass

                @override
                def some_finalized_method(self):
                    pass

            raise RuntimeError("Should not go here")
        except TypeError:
            pass


if __name__ == "__main__":
    unittest.main()