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'