@@ -5,15 +5,34 @@ class TimeOptionsManager(object):
55 def __init__ (self ):
66 self .minutes = 10
77 self .seconds = 0
8+ self .time_change_callbacks = []
89
910 def get_time_string (self ):
10- return "{0:0>2}:00 " .format (self .minutes , self .seconds )
11+ return "{0:0>2}:{1:0>2} " .format (self .minutes , self .seconds )
1112
12- def indement_minutes (self ):
13+ def increment_minutes (self ):
1314 self .minutes += 1
15+ self .fire_time_change_callbacks ()
1416
1517 def decriment_minutes (self ):
1618 self .minutes -= 1
19+ self .fire_time_change_callbacks ()
20+
21+ def increment_seconds (self ):
22+ self .seconds = (self .seconds + 15 ) % 60
23+ self .fire_time_change_callbacks ()
24+
25+ def decrement_seconds (self ):
26+ self .seconds = ((self .seconds + 60 ) - 15 ) % 60
27+ self .fire_time_change_callbacks ()
28+
29+ def subscribe_to_timechange (self , time_change_callback ):
30+ self .time_change_callbacks .append (time_change_callback )
31+
32+ def fire_time_change_callbacks (self ):
33+ for time_change_callback in self .time_change_callbacks :
34+ if time_change_callback :
35+ time_change_callback (self .get_time_string ())
1736
1837
1938class TestsTimeOptions (unittest .TestCase ):
@@ -24,7 +43,7 @@ def test_default_time_10_minutes(self):
2443
2544 def test_indement_minutes_once_is_11_minutes (self ):
2645 time_options_manager = TimeOptionsManager ()
27- time_options_manager .indement_minutes ()
46+ time_options_manager .increment_minutes ()
2847 result = time_options_manager .get_time_string ()
2948 self .assertEqual (result , "11:00" )
3049
@@ -34,6 +53,48 @@ def test_decriment_minutes_once_is_9_minutes(self):
3453 result = time_options_manager .get_time_string ()
3554 self .assertEqual (result , "09:00" )
3655
56+ def test_increment_seconds_once_is_10_minutes_15_seconds (self ):
57+ time_options_manager = TimeOptionsManager ()
58+ time_options_manager .increment_seconds ()
59+ result = time_options_manager .get_time_string ()
60+ self .assertEqual (result , "10:15" )
61+
62+ def test_increment_seconds_4_times_is_10_minutes (self ):
63+ time_options_manager = TimeOptionsManager ()
64+ time_options_manager .increment_seconds ()
65+ time_options_manager .increment_seconds ()
66+ time_options_manager .increment_seconds ()
67+ time_options_manager .increment_seconds ()
68+ result = time_options_manager .get_time_string ()
69+ self .assertEqual (result , "10:00" )
70+
71+ def test_decrement_seconds_once_is_10_minutes_45_seconds (self ):
72+ time_options_manager = TimeOptionsManager ()
73+ time_options_manager .decrement_seconds ()
74+ result = time_options_manager .get_time_string ()
75+ self .assertEqual (result , "10:45" )
76+
77+ def test_decrement_seconds_3_times_is_10_minutes_45_seconds (self ):
78+ time_options_manager = TimeOptionsManager ()
79+ time_options_manager .decrement_seconds ()
80+ time_options_manager .decrement_seconds ()
81+ time_options_manager .decrement_seconds ()
82+ result = time_options_manager .get_time_string ()
83+ self .assertEqual (result , "10:15" )
84+
85+ def test_subscribe_to_time_changes (self ):
86+ time_options_manager = TimeOptionsManager ()
87+ result = { "result" : "time" }
88+
89+ def time_change_callback (time ):
90+ result ["result" ] += " " + time
91+
92+ time_options_manager .subscribe_to_timechange (time_change_callback )
93+
94+ time_options_manager .increment_seconds ()
95+
96+ self .assertEqual (result ["result" ], "time 10:15" )
97+
3798
3899if __name__ == '__main__' :
39100 unittest .main ()
0 commit comments