-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_comparative.py
107 lines (75 loc) · 3.31 KB
/
test_comparative.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
import unittest
import logging
from comparative import compare_by
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
class Clock:
def __init__(self, hours=0, minutes=0, seconds=0):
self.hour = hours
self.minute = minutes
self.second = seconds
def __repr__(self):
return ("Clock(h={0.hour:}, m={0.minute:02d}, "
"s={0.second:02d})").format(self)
def __str__(self):
return "{0.hour:02d}:{0.minute:02d}:{0.second:02d}".format(self)
@compare_by("hour", "minute", "second")
class ComparableClock(Clock):
pass
class TestDecoratorSetup(unittest.TestCase):
def setUp(self):
self.unwrapped = Clock(8,0)
self.wrapped = ComparableClock(8,1)
def test_decorator_returns_the_same_class(self):
if type(self.unwrapped) != type(self.unwrapped):
self.fail()
def test_raises_type_error_if_no_comparison_attribute(self):
with self.assertRaises(TypeError):
_ = compare_by()(Clock)
class TestComparisons(unittest.TestCase):
def setUp(self):
self.clock1 = ComparableClock(8, 0, 0)
self.clock2 = ComparableClock(8, 0, 1)
self.clock3 = ComparableClock(8, 1, 0)
self.clock1_dup = ComparableClock(8, 0, 0)
# Less than
def test_lt_returns_false_if_objs_are_equal(self):
self.assertFalse(self.clock1 < self.clock1_dup)
def test_lt_returns_false_if_object1_gt_object2(self):
self.assertFalse(self.clock3 < self.clock2)
self.assertFalse(self.clock2 < self.clock1)
def test_lt_returns_true_if_object1_lt_object2(self):
self.assertTrue(self.clock1 < self.clock2,
"{} should be less than {}".format(self.clock1, self.clock2))
# Less than or equal
def test_le_returns_false_if_object1_gt_object2(self):
self.assertFalse(self.clock3 <= self.clock2)
def test_le_returns_true_if_objects_are_equal(self):
self.assertTrue(self.clock1 <= self.clock1_dup)
def test_le_returns_true_if_objects_are_the_same(self):
self.assertTrue(self.clock1 <= self.clock1_dup)
def test_le_returns_true_if_object1_lt_object2(self):
self.assertTrue(self.clock1 <= self.clock3)
self.assertTrue(self.clock1 <= self.clock2)
self.assertTrue(self.clock2 <= self.clock3)
# Not Equal
def test_ne_returns_true_if_object1_gt_object2(self):
self.assertNotEqual(self.clock2, self.clock1)
def test_ne_returns_true_if_object1_lt_object2(self):
self.assertNotEqual(self.clock1, self.clock2)
def test_ne_returns_false_if_clocks_are_equal(self):
self.assertFalse(self.clock1 != self.clock1_dup)
# Equal
def test_eq_returns_true_if_clocks_are_equal(self):
self.assertEqual(self.clock1, self.clock1_dup,
msg="equal clocks did not compare as equal")
def test_eq_returns_false_if_object1_gt_object2(self):
self.assertNotEqual(self.clock3, self.clock2)
self.assertNotEqual(self.clock2, self.clock1)
self.assertNotEqual(self.clock3, self.clock1)
def test_eq_returns_false_if_object1_lt_object2(self):
self.assertNotEqual(self.clock1, self.clock3)
self.assertNotEqual(self.clock1, self.clock2)
self.assertNotEqual(self.clock2, self.clock3)
if __name__ == "__main__":
unittest.main()