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()
|