Coverage for test_single_line_examples.py: 99%
264 statements
« prev ^ index » next coverage.py v7.2.7, created at 2024-02-27 14:21 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2024-02-27 14:21 +0000
1#-----------------------------------------------------------------------------------
2# System tests covering interlocking, automation and approach control functions
3# For the single line example (with single line block instruments)
4#
5# When run as 'main' it uses the following example schematic files:
6# "../configuration_examples/single_line_semaphore_example.sig"
7#
8#-----------------------------------------------------------------------------------
10from system_test_harness import *
11import test_object_edit_windows
13#-----------------------------------------------------------------------------------
15def run_initial_state_tests():
16 print("Initial state tests")
17 # Note that point 1 is 'reversed'
18 # Signals 1 and 6 have no valid route
19 assert_signals_route_MAIN(2,3,4,5)
20 assert_signals_route_LH1(7,8)
21 assert_signals_DANGER(1,2,3,5,6,7)
22 assert_signals_CAUTION(4,8)
23 assert_points_unlocked(1,2)
24 assert_signals_unlocked(7,3)
25 assert_signals_locked(1,2,4,5,6,8)
26 assert_sections_clear(1,2,3,4,5,6,7)
27 assert_signals_override_clear(1,2,3,4,5,6,7,8)
28 return()
30#-----------------------------------------------------------------------------------
32def run_interlocking_tests():
33 print("Interlocking tests")
34 # Test the default route
35 assert_points_unlocked(1,2)
36 assert_signals_unlocked(7,3)
37 assert_signals_locked(1,2,4,5,6,8)
38 # Block instrument interlocking #1
39 set_instrument_clear(2)
40 assert_signals_unlocked(2,3,7)
41 assert_signals_locked(1,4,5,6,8)
42 # Point interlocking with signals (LH)
43 set_signals_off(2)
44 assert_points_locked(2)
45 assert_points_unlocked(1)
46 set_signals_on(2)
47 assert_points_unlocked(1,2)
48 set_signals_off(3)
49 assert_points_locked(2)
50 assert_points_unlocked(1)
51 assert_signals_unlocked(4)
52 set_signals_on(3)
53 assert_points_unlocked(1,2)
54 assert_signals_locked(4)
55 # Block instrument interlocking #1
56 set_instrument_blocked(2)
57 set_instrument_clear(1)
58 assert_signals_unlocked(5,3,7)
59 assert_signals_locked(1,2,4,6,8)
60 # Point interlocking with signals (RH)
61 set_signals_off(5)
62 assert_points_locked(1)
63 assert_points_unlocked(2)
64 set_signals_on(5)
65 assert_points_unlocked(1,2)
66 set_signals_off(7)
67 assert_points_locked(1)
68 assert_points_unlocked(2)
69 assert_signals_unlocked(8)
70 set_signals_on(7)
71 assert_points_unlocked(1,2)
72 assert_signals_locked(8)
73 # Block instrument interlocking
74 set_instrument_blocked(1)
75 assert_signals_unlocked(3,7)
76 assert_signals_locked(1,2,4,5,6,8)
77 # Change the points
78 set_fpls_off(2)
79 assert_signals_unlocked(7)
80 assert_signals_locked(1,2,3,4,5,6,8)
81 set_fpls_off(1)
82 assert_signals_locked(1,2,3,4,5,6,7,8)
83 assert_points_unlocked(1,2)
84 set_points_switched(1,2)
85 set_fpls_on(1,2)
86 assert_signals_unlocked(3,7)
87 assert_signals_locked(1,2,4,5,6,8)
88 # Block instrument interlocking
89 set_instrument_clear(1)
90 assert_signals_unlocked(3,7,6)
91 assert_signals_locked(1,2,5,4,8)
92 # Point interlocking with signals (LH)
93 set_signals_off(1)
94 assert_points_locked(2)
95 assert_points_unlocked(1)
96 set_signals_on(1)
97 assert_points_unlocked(1,2)
98 set_signals_off(3)
99 assert_points_locked(2)
100 assert_points_unlocked(1)
101 assert_signals_unlocked(4)
102 set_signals_on(3)
103 assert_points_unlocked(1,2)
104 assert_signals_locked(4)
105 # Point interlocking with signals (RH)
106 set_signals_off(6)
107 assert_points_locked(1)
108 assert_points_unlocked(2)
109 set_signals_on(6)
110 assert_points_unlocked(1,2)
111 set_signals_off(7)
112 assert_points_locked(1)
113 assert_points_unlocked(2)
114 assert_signals_unlocked(8)
115 set_signals_on(7)
116 assert_points_unlocked(1,2)
117 assert_signals_locked(8)
118 # Block instrument interlocking
119 set_instrument_blocked(1)
120 assert_signals_unlocked(3,7)
121 assert_signals_locked(1,2,4,5,6,8)
122 # Change the points
123 set_fpls_off(2)
124 assert_signals_unlocked(7)
125 assert_signals_locked(1,2,3,4,5,6,8)
126 set_fpls_off(1)
127 assert_signals_locked(1,2,3,4,5,6,7,8)
128 assert_points_unlocked(1,2)
129 set_points_normal(1,2)
130 set_fpls_on(1,2)
131 assert_signals_unlocked(3,7)
132 assert_signals_locked(1,2,4,5,6,8)
133 return()
135#-----------------------------------------------------------------------------------
137def run_signal_route_tests():
138 print("Signal Route tests")
139 # Note that point 1 is 'reversed'
140 # Signals 1 and 6 have no valid route
141 assert_signals_route_MAIN(2,3,4,5)
142 assert_signals_route_LH1(7,8)
143 # Change point 2
144 set_fpls_off(2)
145 set_points_switched(2)
146 set_fpls_on(2)
147 # Signals 2 and 6 have no valid route
148 assert_signals_route_MAIN(1,5)
149 assert_signals_route_RH1(3,4)
150 assert_signals_route_LH1(7,8)
151 # Change point 1
152 set_fpls_off(1)
153 set_points_switched(1)
154 set_fpls_on(1)
155 # Signals 2 and 5 have no valid route
156 assert_signals_route_MAIN(1,6,7,8)
157 assert_signals_route_RH1(3,4)
158 # Revert to normal
159 set_fpls_off(1,2)
160 set_points_normal(1,2)
161 set_fpls_on(1,2)
162 assert_signals_route_MAIN(2,3,4,5)
163 assert_signals_route_LH1(7,8)
164 return()
166def run_signal_override_tests():
167 print("Signal Override Tests")
168 # test the default state
169 assert_signals_override_clear(1,2,3,4,5,6,7,8)
170 set_sections_occupied(2)
171 assert_signals_override_set(3)
172 assert_signals_override_clear(1,2,4,5,6,7,8)
173 set_sections_clear(2)
174 assert_signals_override_clear(1,2,3,4,5,6,7,8)
175 set_sections_occupied(3)
176 assert_signals_override_set(2,4)
177 assert_signals_override_clear(1,3,5,6,7,8)
178 set_sections_clear(3)
179 assert_signals_override_clear(1,2,3,4,5,6,7,8)
180 set_sections_occupied(5)
181 assert_signals_override_set(8,5)
182 assert_signals_override_clear(1,2,3,4,6,7)
183 set_sections_clear(5)
184 assert_signals_override_clear(1,2,3,4,5,6,7,8)
185 set_sections_occupied(6)
186 assert_signals_override_set(7)
187 assert_signals_override_clear(1,2,3,4,5,6,8)
188 set_sections_clear(6)
189 assert_signals_override_clear(1,2,3,4,5,6,7,8)
190 # Change the points and test the other routes
191 set_fpls_off(1,2)
192 set_points_switched(1,2)
193 set_fpls_on(1,2)
194 # test the LH side
195 assert_signals_override_clear(1,2,3,4,5,6,7,8)
196 set_sections_occupied(1)
197 assert_signals_override_set(3)
198 assert_signals_override_clear(1,2,4,5,6,7,8)
199 set_sections_clear(1)
200 assert_signals_override_clear(1,2,3,4,5,6,7,8)
201 set_sections_occupied(3)
202 assert_signals_override_set(1,4)
203 assert_signals_override_clear(2,3,5,6,7,8)
204 set_sections_clear(3)
205 assert_signals_override_clear(1,2,3,4,5,6,7,8)
206 # test the RH side
207 assert_signals_override_clear(1,2,3,4,5,6,7,8)
208 set_sections_occupied(7)
209 assert_signals_override_set(7)
210 assert_signals_override_clear(1,2,3,4,5,6,8)
211 set_sections_clear(7)
212 assert_signals_override_clear(1,2,3,4,5,6,7,8)
213 set_sections_occupied(5)
214 assert_signals_override_set(6,8)
215 assert_signals_override_clear(1,2,3,4,5,7)
216 set_sections_clear(5)
217 assert_signals_override_clear(1,2,3,4,5,6,7,8)
218 # Reset the points
219 set_fpls_off(1,2)
220 set_points_normal(1,2)
221 set_fpls_on(1,2)
222 return()
224#-----------------------------------------------------------------------------------
226def run_shunting_tests(delay:float=0.0):
227 print("shunting Tests")
228 # Set up a train to traverse the layout
229 set_sections_occupied(2)
230 sleep(delay)
231 # Clear the signals for the route
232 set_signals_off(7)
233 sleep(delay)
234 set_signals_off(8)
235 sleep(delay)
236 set_instrument_clear(2)
237 sleep(delay)
238 set_signals_off(2)
239 sleep(delay)
240 # Start the train off
241 trigger_signals_passed(2,3)
242 assert_sections_clear(2)
243 assert_sections_occupied(3)
244 # set the block instrument to occupied and return signals to danger
245 sleep(delay)
246 set_instrument_occupied(2)
247 sleep(delay)
248 set_signals_on(2)
249 # progress the train
250 sleep(delay)
251 assert_sections_occupied(3)
252 trigger_signals_passed(4)
253 assert_sections_clear(3)
254 assert_sections_occupied(4)
255 sleep(delay)
256 trigger_signals_passed(8)
257 assert_sections_clear(4)
258 assert_sections_occupied(5)
259 sleep(delay)
260 trigger_signals_passed(7,5)
261 assert_sections_clear(5)
262 assert_sections_occupied(6)
263 # set the block instrument to blocked
264 sleep(delay)
265 set_instrument_blocked(2)
266 sleep(delay)
267 set_signals_on(7,8)
268 # Now send the train back the way it came
269 # But onto the other platform
270 sleep(delay)
271 set_fpls_off(2)
272 set_points_switched(2)
273 set_fpls_on(2)
274 # Clear the route (only the home this time)
275 sleep(delay)
276 set_signals_off(3)
277 sleep(delay)
278 set_instrument_clear(1)
279 sleep(delay)
280 set_signals_off(5)
281 sleep(delay)
282 # Start the train off
283 trigger_signals_passed(5,7)
284 assert_sections_clear(6)
285 assert_sections_occupied(5)
286 # set the block instrument to occupied and return signals to danger
287 sleep(delay)
288 set_instrument_occupied(1)
289 set_signals_on(5)
290 # progress the train
291 sleep(delay)
292 trigger_signals_passed(8)
293 assert_sections_clear(5)
294 assert_sections_occupied(4)
295 sleep(delay)
296 trigger_signals_passed(4)
297 assert_sections_clear(4)
298 assert_sections_occupied(3)
299 sleep(delay)
300 trigger_signals_passed(3,1)
301 assert_sections_clear(3)
302 assert_sections_occupied(1)
303 # set the block instrument to blocked
304 sleep(delay)
305 set_instrument_blocked(1)
306 sleep(delay)
307 set_signals_on(3)
308 # Return everything to normal
309 set_fpls_off(2)
310 set_points_normal(2)
311 set_fpls_on(2)
312 return()
314#-----------------------------------------------------------------------------------
316def run_all_single_line_example_tests(delay:float=0.0, shutdown:bool=False):
317 initialise_test_harness(filename="../configuration_examples/single_line_semaphore_example.sig")
318 # Edit/save all schematic objects to give confidence that editing doesn't break the layout configuration
319 set_edit_mode()
320 test_object_edit_windows.test_all_object_edit_windows(delay)
321 set_run_mode()
322 reset_layout()
323 run_initial_state_tests()
324 run_interlocking_tests()
325 run_signal_route_tests()
326 run_signal_override_tests()
327 run_shunting_tests(delay)
328 if shutdown: report_results()
330if __name__ == "__main__": 330 ↛ 331line 330 didn't jump to line 331, because the condition on line 330 was never true
331 start_application(lambda:run_all_single_line_example_tests(delay=0.0, shutdown=True))
333######################################################################################################