-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtest_easy_property.py
149 lines (111 loc) · 3.56 KB
/
test_easy_property.py
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
import unittest
from easy_property import getter, setter, deleter, getter_setter, documenter
class EasyPropertyTest(unittest.TestCase):
"""Test for getter only"""
def test_getter(self):
class X:
def __init__(self, field):
self._field = field
@getter
def field(self):
"""this is the getter docstring"""
return self._field
def setfield():
x.field = 6
def delfield():
del x.field
x = X(5)
self.assertEqual(x.field, 5)
self.assertRaises(AttributeError, setfield)
self.assertRaises(AttributeError, delfield)
self.assertEqual(X.field.__doc__, "this is the getter docstring")
"""Test for setter only"""
def test_setter(self):
class X:
def __init__(self, field):
self._field = field
@setter
def field(self, field):
self._field = field
def getfield():
return x.field
x = X(5)
self.assertEqual(x._field, 5)
x.field = 6
self.assertEqual(x._field, 6)
self.assertRaises(AttributeError, getfield)
"""Test for all four decorators """
def test_all(self):
class X:
def __init__(self, field):
self._field = field
@getter
def field(self):
"""this is the getter docstring"""
return self._field
@setter
def field(self, field):
self._field = field
@deleter
def field(self):
pass
@documenter
def field(self):
return "this is the documenter docstring"
x = X(5)
self.assertEqual(x.field, 5)
x.field = 6
self.assertEqual(x.field, 6)
del x.field
self.assertEqual(X.field.__doc__, "this is the documenter docstring")
"""Test for all four decorators in reverse order """
def test_all_reversed(self):
class X:
def __init__(self, field):
self._field = field
@documenter
def field(self):
return "this is the documenter docstring"
@deleter
def field(self):
pass
@setter
def field(self, field):
self._field = field
@getter
def field(self):
"""this is the getter docstring"""
return self._field
x = X(5)
self.assertEqual(x.field, 5)
x.field = 6
self.assertEqual(x.field, 6)
del x.field
self.assertEqual(X.field.__doc__, "this is the documenter docstring")
"""Test for getter_setter"""
def test_getter_setter(self):
class X:
def __init__(self, field):
self._field = field
@getter_setter
def field(self, *value):
if value:
self._field = value[0]
return self._field
x = X(5)
self.assertEqual(x.field, 5)
x.field = 6
self.assertEqual(x.field, 6)
"""Tests for double defined decorator"""
def test_double(self):
def define():
class X:
@getter
def field(self):
pass
@getter
def field(self):
pass
self.assertRaises(AttributeError, define)
if __name__ == "__main__":
unittest.main(verbosity=2)