Skip to content

Commit df011c0

Browse files
authored
clock: add test template (exercism#1895)
1 parent 9008e5c commit df011c0

2 files changed

Lines changed: 79 additions & 43 deletions

File tree

exercises/clock/.meta/template.j2

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{%- import "generator_macros.j2" as macros -%}
2+
{%- macro clock(obj) -%}
3+
Clock({{ obj["hour"] }}, {{ obj["minute"] }})
4+
{%- endmacro -%}
5+
import unittest
6+
7+
from {{ exercise | to_snake }} import Clock
8+
9+
{{ macros.canonical_ref(version) }}
10+
11+
class {{ exercise | camel_case }}Test(unittest.TestCase):
12+
{% for casegroup in cases -%}
13+
# {{ casegroup["description"].title() }}
14+
{% for case in casegroup["cases"] -%}
15+
{%- set input = case["input"] -%}
16+
{%- set prop = case["property"] -%}
17+
def test_{{ case["description"] | to_snake }}(self):
18+
self.assert
19+
{%- if prop == "equal" -%}
20+
{% if not case["expected"] %}Not{% endif %}Equal(
21+
{{- clock(input["clock1"]) }},
22+
{{- clock(input["clock2"]) }}
23+
{% else -%}
24+
Equal(str({{ clock(input) }}
25+
{%- if prop == "add" %} + {{ input["value"] }}
26+
{%- elif prop == "subtract" %} - {{ input["value"] }}
27+
{%- endif %}), "
28+
{{- case["expected"] }}"
29+
{%- endif %}
30+
)
31+
32+
{% endfor %}
33+
{%- endfor %}
34+
35+
{{ macros.footer(has_error_case) }}

exercises/clock/clock_test.py

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,121 +2,122 @@
22

33
from clock import Clock
44

5-
65
# Tests adapted from `problem-specifications//canonical-data.json` @ v2.4.0
76

7+
88
class ClockTest(unittest.TestCase):
9-
# Test creating a new clock with an initial time.
9+
# Create A New Clock With An Initial Time
1010
def test_on_the_hour(self):
11-
self.assertEqual(str(Clock(8, 0)), '08:00')
11+
self.assertEqual(str(Clock(8, 0)), "08:00")
1212

1313
def test_past_the_hour(self):
14-
self.assertEqual(str(Clock(11, 9)), '11:09')
14+
self.assertEqual(str(Clock(11, 9)), "11:09")
1515

1616
def test_midnight_is_zero_hours(self):
17-
self.assertEqual(str(Clock(24, 0)), '00:00')
17+
self.assertEqual(str(Clock(24, 0)), "00:00")
1818

1919
def test_hour_rolls_over(self):
20-
self.assertEqual(str(Clock(25, 0)), '01:00')
20+
self.assertEqual(str(Clock(25, 0)), "01:00")
2121

2222
def test_hour_rolls_over_continuously(self):
23-
self.assertEqual(str(Clock(100, 0)), '04:00')
23+
self.assertEqual(str(Clock(100, 0)), "04:00")
2424

2525
def test_sixty_minutes_is_next_hour(self):
26-
self.assertEqual(str(Clock(1, 60)), '02:00')
26+
self.assertEqual(str(Clock(1, 60)), "02:00")
2727

2828
def test_minutes_roll_over(self):
29-
self.assertEqual(str(Clock(0, 160)), '02:40')
29+
self.assertEqual(str(Clock(0, 160)), "02:40")
3030

3131
def test_minutes_roll_over_continuously(self):
32-
self.assertEqual(str(Clock(0, 1723)), '04:43')
32+
self.assertEqual(str(Clock(0, 1723)), "04:43")
3333

3434
def test_hour_and_minutes_roll_over(self):
35-
self.assertEqual(str(Clock(25, 160)), '03:40')
35+
self.assertEqual(str(Clock(25, 160)), "03:40")
3636

3737
def test_hour_and_minutes_roll_over_continuously(self):
38-
self.assertEqual(str(Clock(201, 3001)), '11:01')
38+
self.assertEqual(str(Clock(201, 3001)), "11:01")
3939

4040
def test_hour_and_minutes_roll_over_to_exactly_midnight(self):
41-
self.assertEqual(str(Clock(72, 8640)), '00:00')
41+
self.assertEqual(str(Clock(72, 8640)), "00:00")
4242

4343
def test_negative_hour(self):
44-
self.assertEqual(str(Clock(-1, 15)), '23:15')
44+
self.assertEqual(str(Clock(-1, 15)), "23:15")
4545

4646
def test_negative_hour_rolls_over(self):
47-
self.assertEqual(str(Clock(-25, 0)), '23:00')
47+
self.assertEqual(str(Clock(-25, 0)), "23:00")
4848

4949
def test_negative_hour_rolls_over_continuously(self):
50-
self.assertEqual(str(Clock(-91, 0)), '05:00')
50+
self.assertEqual(str(Clock(-91, 0)), "05:00")
5151

5252
def test_negative_minutes(self):
53-
self.assertEqual(str(Clock(1, -40)), '00:20')
53+
self.assertEqual(str(Clock(1, -40)), "00:20")
5454

5555
def test_negative_minutes_roll_over(self):
56-
self.assertEqual(str(Clock(1, -160)), '22:20')
56+
self.assertEqual(str(Clock(1, -160)), "22:20")
5757

5858
def test_negative_minutes_roll_over_continuously(self):
59-
self.assertEqual(str(Clock(1, -4820)), '16:40')
59+
self.assertEqual(str(Clock(1, -4820)), "16:40")
6060

6161
def test_negative_sixty_minutes_is_previous_hour(self):
62-
self.assertEqual(str(Clock(2, -60)), '01:00')
62+
self.assertEqual(str(Clock(2, -60)), "01:00")
6363

6464
def test_negative_hour_and_minutes_both_roll_over(self):
65-
self.assertEqual(str(Clock(-25, -160)), '20:20')
65+
self.assertEqual(str(Clock(-25, -160)), "20:20")
6666

6767
def test_negative_hour_and_minutes_both_roll_over_continuously(self):
68-
self.assertEqual(str(Clock(-121, -5810)), '22:10')
68+
self.assertEqual(str(Clock(-121, -5810)), "22:10")
6969

70-
# Test adding and subtracting minutes.
70+
# Add Minutes
7171
def test_add_minutes(self):
72-
self.assertEqual(str(Clock(10, 0) + 3), '10:03')
72+
self.assertEqual(str(Clock(10, 0) + 3), "10:03")
7373

7474
def test_add_no_minutes(self):
75-
self.assertEqual(str(Clock(6, 41) + 0), '06:41')
75+
self.assertEqual(str(Clock(6, 41) + 0), "06:41")
7676

7777
def test_add_to_next_hour(self):
78-
self.assertEqual(str(Clock(0, 45) + 40), '01:25')
78+
self.assertEqual(str(Clock(0, 45) + 40), "01:25")
7979

8080
def test_add_more_than_one_hour(self):
81-
self.assertEqual(str(Clock(10, 0) + 61), '11:01')
81+
self.assertEqual(str(Clock(10, 0) + 61), "11:01")
8282

8383
def test_add_more_than_two_hours_with_carry(self):
84-
self.assertEqual(str(Clock(0, 45) + 160), '03:25')
84+
self.assertEqual(str(Clock(0, 45) + 160), "03:25")
8585

8686
def test_add_across_midnight(self):
87-
self.assertEqual(str(Clock(23, 59) + 2), '00:01')
87+
self.assertEqual(str(Clock(23, 59) + 2), "00:01")
8888

89-
def test_add_more_than_one_day(self):
90-
self.assertEqual(str(Clock(5, 32) + 1500), '06:32')
89+
def test_add_more_than_one_day_1500_min_25_hrs(self):
90+
self.assertEqual(str(Clock(5, 32) + 1500), "06:32")
9191

9292
def test_add_more_than_two_days(self):
93-
self.assertEqual(str(Clock(1, 1) + 3500), '11:21')
93+
self.assertEqual(str(Clock(1, 1) + 3500), "11:21")
9494

95+
# Subtract Minutes
9596
def test_subtract_minutes(self):
96-
self.assertEqual(str(Clock(10, 3) - 3), '10:00')
97+
self.assertEqual(str(Clock(10, 3) - 3), "10:00")
9798

9899
def test_subtract_to_previous_hour(self):
99-
self.assertEqual(str(Clock(10, 3) - 30), '09:33')
100+
self.assertEqual(str(Clock(10, 3) - 30), "09:33")
100101

101102
def test_subtract_more_than_an_hour(self):
102-
self.assertEqual(str(Clock(10, 3) - 70), '08:53')
103+
self.assertEqual(str(Clock(10, 3) - 70), "08:53")
103104

104105
def test_subtract_across_midnight(self):
105-
self.assertEqual(str(Clock(0, 3) - 4), '23:59')
106+
self.assertEqual(str(Clock(0, 3) - 4), "23:59")
106107

107108
def test_subtract_more_than_two_hours(self):
108-
self.assertEqual(str(Clock(0, 0) - 160), '21:20')
109+
self.assertEqual(str(Clock(0, 0) - 160), "21:20")
109110

110111
def test_subtract_more_than_two_hours_with_borrow(self):
111-
self.assertEqual(str(Clock(6, 15) - 160), '03:35')
112+
self.assertEqual(str(Clock(6, 15) - 160), "03:35")
112113

113-
def test_subtract_more_than_one_day(self):
114-
self.assertEqual(str(Clock(5, 32) - 1500), '04:32')
114+
def test_subtract_more_than_one_day_1500_min_25_hrs(self):
115+
self.assertEqual(str(Clock(5, 32) - 1500), "04:32")
115116

116117
def test_subtract_more_than_two_days(self):
117-
self.assertEqual(str(Clock(2, 20) - 3000), '00:20')
118+
self.assertEqual(str(Clock(2, 20) - 3000), "00:20")
118119

119-
# Construct two separate clocks, set times, test if they are equal.
120+
# Compare Two Clocks For Equality
120121
def test_clocks_with_same_time(self):
121122
self.assertEqual(Clock(15, 37), Clock(15, 37))
122123

@@ -166,5 +167,5 @@ def test_full_clock_and_zeroed_clock(self):
166167
self.assertEqual(Clock(24, 0), Clock(0, 0))
167168

168169

169-
if __name__ == '__main__':
170+
if __name__ == "__main__":
170171
unittest.main()

0 commit comments

Comments
 (0)