Car: tests and solutions
makePythonTdd Car
the code in makePythonTdd.sh from Car
1#!/bin/bash 2uv init car 3cd car 4mkdir src 5mv main.py src/car.py 6mkdir tests 7touch tests/__init__.py 8 9echo "import unittest 10 11 12class TestCar(unittest.TestCase): 13 14 def test_failure(self): 15 self.assertFalse(True) 16 17 18# Exceptions seen 19# AssertionError 20" > tests/test_car.py 21 22echo "pytest" > requirements.txt 23echo "pytest-watcher" >> requirements.txt 24uv add --requirement requirements.txt 25uv run pytest-watcher . --now
the code in makePythonTdd.ps1 from Car
1uv init car 2cd car 3mkdir src 4Move-Item "main.py" "src/car.py" 5mkdir tests 6New-Item tests/__init__.py 7 8"import unittest 9 10 11class TestCar(unittest.TestCase): 12 13 def test_failure(self): 14 self.assertFalse(True) 15 16 17# Exceptions seen 18# AssertionError 19" | Out-File "tests/test_car.py" -Encoding UTF8 20 21"pytest" | Out-File requirements.txt -Encoding UTF8 22"pytest-watcher" >> requirements.txt 23uv add --requirement requirements.txt 24uv run pytest-watcher . --now
Car: tests
the code in car/tests/test_car.py from Car
1import src.car
2import unittest
3
4
5OFF = 'OFF'
6
7
8class TestCar(unittest.TestCase):
9
10 def test_brake_pressed_key_close_w_gear(self):
11 self.assertEqual(
12 src.car.starter(
13 key_is_close=True,
14 brake_is_pressed=True,
15 start_is_pushed=True,
16 in_park=True,
17 ),
18 'ON'
19 )
20
21 self.assertEqual(
22 src.car.starter(
23 key_is_close=True,
24 brake_is_pressed=True,
25 start_is_pushed=True,
26 in_park=False,
27 ),
28 OFF
29 )
30
31 self.assertEqual(
32 src.car.starter(
33 key_is_close=True,
34 brake_is_pressed=True,
35 start_is_pushed=False,
36 in_park=True,
37 ),
38 OFF
39 )
40
41 self.assertEqual(
42 src.car.starter(
43 key_is_close=True,
44 brake_is_pressed=True,
45 start_is_pushed=False,
46 in_park=False,
47 ),
48 OFF
49 )
50
51 def test_brake_not_pressed_key_close_w_gear(self):
52 self.assertEqual(
53 src.car.starter(
54 key_is_close=True,
55 brake_is_pressed=False,
56 start_is_pushed=True,
57 in_park=True,
58 ),
59 OFF
60 )
61
62 self.assertEqual(
63 src.car.starter(
64 key_is_close=True,
65 brake_is_pressed=False,
66 start_is_pushed=True,
67 in_park=False,
68 ),
69 OFF
70 )
71
72 self.assertEqual(
73 src.car.starter(
74 key_is_close=True,
75 brake_is_pressed=False,
76 start_is_pushed=False,
77 in_park=True,
78 ),
79 OFF
80 )
81
82 self.assertEqual(
83 src.car.starter(
84 key_is_close=True,
85 brake_is_pressed=False,
86 start_is_pushed=False,
87 in_park=False,
88 ),
89 OFF
90 )
91
92 def test_brake_pressed_key_far_w_gear(self):
93 self.assertEqual(
94 src.car.starter(
95 key_is_close=False,
96 brake_is_pressed=True,
97 start_is_pushed=True,
98 in_park=True,
99 ),
100 OFF
101 )
102
103 self.assertEqual(
104 src.car.starter(
105 key_is_close=False,
106 brake_is_pressed=True,
107 start_is_pushed=True,
108 in_park=False,
109 ),
110 OFF
111 )
112
113 self.assertEqual(
114 src.car.starter(
115 key_is_close=False,
116 brake_is_pressed=True,
117 start_is_pushed=False,
118 in_park=True,
119 ),
120 OFF
121 )
122
123 self.assertEqual(
124 src.car.starter(
125 key_is_close=False,
126 brake_is_pressed=True,
127 start_is_pushed=False,
128 in_park=False,
129 ),
130 OFF
131 )
132
133 def test_brake_not_pressed_key_far_w_gear(self):
134 self.assertEqual(
135 src.car.starter(
136 key_is_close=False,
137 brake_is_pressed=False,
138 start_is_pushed=True,
139 in_park=True,
140 ),
141 OFF
142 )
143
144 self.assertEqual(
145 src.car.starter(
146 key_is_close=False,
147 brake_is_pressed=False,
148 start_is_pushed=True,
149 in_park=False,
150 ),
151 OFF
152 )
153
154 self.assertEqual(
155 src.car.starter(
156 key_is_close=False,
157 brake_is_pressed=False,
158 start_is_pushed=False,
159 in_park=True,
160 ),
161 OFF
162 )
163
164 self.assertEqual(
165 src.car.starter(
166 key_is_close=False,
167 brake_is_pressed=False,
168 start_is_pushed=False,
169 in_park=False,
170 ),
171 OFF
172 )
173
174
175# Exceptions seen
176# AssertionError
177# NameError
178# AttributeError
179# TypeError
180# SyntaxError
Car: solution
the code in car/src/car.py from Car
1def starter(
2 key_is_close, start_is_pushed,
3 brake_is_pressed=False, in_park=False,
4 ):
5 if not (
6 key_is_close
7 and start_is_pushed
8 and brake_is_pressed
9 and in_park
10 ):
11 return 'OFF'
12
13 return 'ON'