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

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#----------------------------------------------------------------------------------- 

9 

10from system_test_harness import * 

11import test_object_edit_windows 

12 

13#----------------------------------------------------------------------------------- 

14 

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() 

29 

30#----------------------------------------------------------------------------------- 

31 

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() 

134 

135#----------------------------------------------------------------------------------- 

136 

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() 

165 

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() 

223 

224#----------------------------------------------------------------------------------- 

225 

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() 

313 

314#----------------------------------------------------------------------------------- 

315 

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() 

329 

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)) 

332 

333######################################################################################################