-
Notifications
You must be signed in to change notification settings - Fork 57
/
test_timer.py
61 lines (49 loc) · 2.08 KB
/
test_timer.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
# --------------------------------------------------------------------------- #
# test_timer.py #
# #
# Copyright © 2015-2020, Rajiv Bakulesh Shah, original author. #
# All rights reserved. #
# --------------------------------------------------------------------------- #
import time
from pottery import ContextTimer
from tests.base import TestCase
class ContextTimerTests(TestCase):
ACCURACY = 50 # in milliseconds
def setUp(self):
super().setUp()
self.timer = ContextTimer()
def _confirm_elapsed(self, expected):
got = round(self.timer.elapsed() / self.ACCURACY) * self.ACCURACY
assert got == expected, '{} != {}'.format(got, expected)
def test_start_stop_and_elapsed(self):
# timer hasn't been started
with self.assertRaises(RuntimeError):
self.timer.elapsed()
with self.assertRaises(RuntimeError):
self.timer.stop()
# timer has been started but not stopped
self.timer.start()
with self.assertRaises(RuntimeError):
self.timer.start()
time.sleep(0.1)
self._confirm_elapsed(1*100)
self.timer.stop()
# timer has been stopped
with self.assertRaises(RuntimeError):
self.timer.start()
time.sleep(0.1)
self._confirm_elapsed(1*100)
with self.assertRaises(RuntimeError):
self.timer.stop()
def test_context_manager(self):
with self.timer:
self._confirm_elapsed(0)
for iteration in range(1, 3):
with self.subTest(iteration=iteration):
time.sleep(0.1)
self._confirm_elapsed(iteration*100)
self._confirm_elapsed(iteration*100)
time.sleep(0.1)
self._confirm_elapsed(iteration*100)
with self.assertRaises(RuntimeError), self.timer: # pragma: no cover
...