Coverage for test_schematic_editor.py: 99%

843 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2024-02-27 14:21 +0000

1#----------------------------------------------------------------------------------- 

2# System tests for the schematic editor functions (in EDIT MODE ONLY) 

3# Basic schematic editing: 

4# Create individual objects 

5# Move selected objects (drag and drop with cursor) - snap to grid on/off 

6# Move selected objects (nudge with arrow keys) - snap to grid on/off 

7# Editing of Lines (Drag and drop line ends) - snap to grid on/off 

8# Select/de-select objects via mouse/keyboard 

9# Add/remove objects from current selection  

10# Select multiple objects via area selection 

11# Delete selected objects 

12# Rotate selected objects 

13# snap-to-grid of selected objects 

14# copy and paste selected objects 

15# cancel of move in progress 

16# cancel area selection in progress 

17# cancel line edit in progress 

18# Undo/Redo: 

19# The ability to move backwards and forwards through the undo/redo buffer 

20# Resetting of the undo/redo buffer following a new edit (i.e. cant re-do) 

21# Edit configuration of selected objects 

22# Basic tests to open the appropriate object configuration window (and then 

23# close the window) on 'edit object' (double click or object popup menu) 

24# 

25#----------------------------------------------------------------------------------- 

26 

27from system_test_harness import * 

28 

29#----------------------------------------------------------------------------------- 

30# This function tests the following schematic functions: 

31# Editing of objects (i.e. opening and closing the edit windows) 

32#----------------------------------------------------------------------------------- 

33 

34def run_object_edit_window_tests(delay:float=0.0): 

35 print("Object edit window tests - Test basic opening and closing of edit windows") 

36 # Add elements to the layout and move them to their initial positions 

37 l1 = create_line() 

38 sleep(delay) 

39 assert_objects_selected(l1) 

40 select_and_edit_single_object(l1) 

41 sleep(delay) 

42 delete_selected_objects() 

43 sleep(delay) 

44 tb1 = create_textbox() 

45 sleep(delay) 

46 assert_objects_selected(tb1) 

47 select_and_edit_single_object(tb1) 

48 sleep(delay) 

49 delete_selected_objects() 

50 sleep(delay) 

51 s1 = create_colour_light_signal() 

52 sleep(delay) 

53 assert_objects_selected(s1) 

54 select_and_edit_single_object(s1) 

55 sleep(delay) 

56 delete_selected_objects() 

57 sleep(delay) 

58 p1 = create_left_hand_point() 

59 sleep(delay) 

60 assert_objects_selected(p1) 

61 select_and_edit_single_object(p1) 

62 sleep(delay) 

63 delete_selected_objects() 

64 sleep(delay) 

65 t1 = create_track_section() 

66 sleep(delay) 

67 assert_objects_selected(t1) 

68 select_and_edit_single_object(t1) 

69 sleep(delay) 

70 delete_selected_objects() 

71 sleep(delay) 

72 i1 = create_block_instrument() 

73 sleep(delay) 

74 assert_objects_selected(i1) 

75 select_and_edit_single_object(i1) 

76 sleep(delay) 

77 delete_selected_objects() 

78 ts1 = create_track_sensor() 

79 sleep(delay) 

80 assert_objects_selected(ts1) 

81 select_and_edit_single_object(ts1) 

82 sleep(delay) 

83 delete_selected_objects() 

84 sleep(delay) 

85 

86#----------------------------------------------------------------------------------- 

87# This function tests the following schematic functions: 

88# Create individual objects 

89# Move selected objects (drag and drop with cursor) - snap to grid on/off 

90# Move selected objects (nudge with arrow keys) - snap to grid on/off 

91# Editing of Lines (Drag and drop line ends) - snap to grid on/off 

92# Select/de-select objects via mouse/keyboard 

93# Add/remove objects from current selection  

94# Select multiple objects via area selection 

95# Delete selected objects 

96# Rotate selected objects 

97# snap-to-grid of selected objects 

98# copy and paste selected objects 

99# cancel of move in progress 

100# cancel area selection in progress 

101# cancel line edit in progress 

102#----------------------------------------------------------------------------------- 

103 

104def run_basic_editor_tests(delay:float=0.0): 

105 

106 print("Basic schematic editor tests - create and move schematic objects (with snap-to-grid on)") 

107 # Add elements to the layout and move them to their initial positions 

108 # Note that some objects are moved 'off-grid' to test the snap-to-grid functionality 

109 tb1 = create_textbox() 

110 assert_objects_selected(tb1) 

111 sleep(delay) 

112 select_and_move_objects(tb1,410,30,delay=delay) 

113 sleep(delay) 

114 update_object_configuration(tb1,{"text":"Example Text Box"}) 

115 sleep(delay) 

116 s1 = create_colour_light_signal() 

117 assert_objects_selected(s1) 

118 assert_objects_deselected(tb1) 

119 sleep(delay) 

120 select_and_move_objects(s1,95,105,delay=delay) 

121 sleep(delay) 

122 s2 = create_semaphore_signal() 

123 assert_objects_selected(s2) 

124 assert_objects_deselected(s1) 

125 sleep(delay) 

126 select_and_move_objects(s2,260,90,delay=delay) 

127 sleep(delay) 

128 s3 = create_ground_position_signal() 

129 assert_objects_selected(s3) 

130 assert_objects_deselected(s2) 

131 sleep(delay) 

132 select_and_move_objects(s3,410,90,delay=delay) 

133 sleep(delay) 

134 s4 = create_ground_disc_signal() 

135 assert_objects_selected(s4) 

136 assert_objects_deselected(s3) 

137 sleep(delay) 

138 select_and_move_objects(s4,490,110,delay=delay) 

139 sleep(delay) 

140 p1 = create_left_hand_point() 

141 assert_objects_selected(p1) 

142 assert_objects_deselected(s4) 

143 sleep(delay) 

144 select_and_move_objects(p1,570,95,delay=delay) 

145 sleep(delay) 

146 p2 = create_right_hand_point() 

147 assert_objects_selected(p2) 

148 assert_objects_deselected(p1) 

149 sleep(delay) 

150 select_and_move_objects(p2,630,105,delay=delay) 

151 sleep(delay) 

152 t1 = create_track_section() 

153 assert_objects_selected(t1) 

154 assert_objects_deselected(p2) 

155 sleep(delay) 

156 select_and_move_objects(t1,710,95,delay=delay) 

157 sleep(delay) 

158 i1 = create_block_instrument() 

159 assert_objects_selected(i1) 

160 assert_objects_deselected(t1) 

161 sleep(delay) 

162 select_and_move_objects(i1,195,305,delay=delay) 

163 sleep(delay) 

164 ts1 = create_track_sensor() 

165 assert_objects_selected(ts1) 

166 assert_objects_deselected(i1) 

167 sleep(delay) 

168 select_and_move_objects(ts1,755,95,delay=delay) 

169 sleep(delay) 

170 l1 = create_line() 

171 assert_objects_selected(l1) 

172 assert_objects_deselected(i1) 

173 sleep(delay) 

174 update_object_configuration(l1,{"arrowtype":[1,1,1], "arrowends":1}) 

175 sleep(delay) 

176 select_and_move_objects(l1,200,150,delay=delay) 

177 sleep(delay) 

178 l2 = create_line() 

179 assert_objects_selected(l2) 

180 assert_objects_deselected(l1) 

181 sleep(delay) 

182 update_object_configuration(l2,{"arrowtype":[1,1,1], "arrowends":2}) 

183 select_and_move_objects(l2,500,150,delay=delay) 

184 sleep(delay) 

185 # Line2 will remain selected after the move 

186 assert_objects_selected(l2) 

187 assert_objects_deselected(tb1,s1,s2,s3,s4,p1,p2,t1,l1,i1) 

188 deselect_all_objects() 

189 assert_objects_deselected(tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1) 

190 sleep(delay) 

191 # Test initial moves have been successful 

192 assert_object_position(tb1,400,25) 

193 assert_object_position(s1,100,100) 

194 assert_object_position(s2,250,100) 

195 assert_object_position(s3,400,100) 

196 assert_object_position(s4,500,100) 

197 assert_object_position(p1,575,100) 

198 assert_object_position(p2,625,100) 

199 assert_object_position(t1,700,100) 

200 assert_object_position(i1,200,300) 

201 assert_object_position(ts1,750,100) 

202 assert_object_position(l1,175,150,225,150) 

203 assert_object_position(l2,475,150,525,150) 

204 

205 print("Basic schematic editor tests - Object selection/deselection tests - Left Click") 

206 assert_objects_deselected(tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1,ts1) 

207 select_single_object(tb1) 

208 sleep(delay) 

209 assert_objects_selected(tb1) 

210 assert_objects_deselected(s1,s2,s3,s4,p1,p2,t1,l1,l2,i1,ts1) 

211 select_single_object(s1) 

212 sleep(delay) 

213 assert_objects_selected(s1) 

214 assert_objects_deselected(tb1,s2,s3,s4,p1,p2,t1,l1,l2,i1,ts1) 

215 select_single_object(s2) 

216 sleep(delay) 

217 assert_objects_selected(s2) 

218 assert_objects_deselected(tb1,s1,s3,s4,p1,p2,t1,l1,l2,i1,ts1) 

219 select_single_object(s3) 

220 sleep(delay) 

221 assert_objects_selected(s3) 

222 assert_objects_deselected(tb1,s1,s2,s4,p1,p2,t1,l1,l2,i1,ts1) 

223 select_single_object(s4) 

224 sleep(delay) 

225 assert_objects_selected(s4) 

226 assert_objects_deselected(tb1,s1,s2,s3,p1,p2,t1,l1,l2,i1,ts1) 

227 select_single_object(p1) 

228 sleep(delay) 

229 assert_objects_selected(p1) 

230 assert_objects_deselected(tb1,s1,s2,s3,s4,p2,t1,l1,l2,i1,ts1) 

231 select_single_object(p2) 

232 sleep(delay) 

233 assert_objects_selected(p2) 

234 assert_objects_deselected(tb1,s1,s2,s3,s4,p1,t1,l1,l2,i1,ts1) 

235 select_single_object(t1) 

236 sleep(delay) 

237 assert_objects_selected(t1) 

238 assert_objects_deselected(tb1,s1,s2,s3,s4,p1,p2,l1,l2,i1,ts1) 

239 select_single_object(l1) 

240 sleep(delay) 

241 assert_objects_selected(l1) 

242 assert_objects_deselected(tb1,s1,s2,s3,s4,p1,p2,t1,l2,i1,ts1) 

243 select_single_object(l2) 

244 sleep(delay) 

245 assert_objects_selected(l2) 

246 assert_objects_deselected(tb1,s1,s2,s3,s4,p1,p2,t1,l1,i1,ts1) 

247 select_single_object(ts1) 

248 sleep(delay) 

249 assert_objects_selected(ts1) 

250 assert_objects_deselected(tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1) 

251 

252 print("Basic schematic editor tests - Object selection tests - Left Shift Click") 

253 assert_objects_selected(ts1) 

254 assert_objects_deselected(tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1) 

255 select_or_deselect_objects(l2) 

256 sleep(delay) 

257 assert_objects_selected(ts1,l2) 

258 assert_objects_deselected(tb1,s1,s2,s3,s4,p1,p2,t1,l1,i1) 

259 select_or_deselect_objects(l1) 

260 sleep(delay) 

261 assert_objects_selected(ts1,l1,l2) 

262 assert_objects_deselected(tb1,s1,s2,s3,s4,p1,p2,t1,i1) 

263 select_or_deselect_objects(s1) 

264 sleep(delay) 

265 assert_objects_selected(ts1,l1,l2,s1) 

266 assert_objects_deselected(tb1,s2,s3,s4,p1,p2,t1,i1) 

267 select_or_deselect_objects(s2) 

268 sleep(delay) 

269 assert_objects_selected(ts1,l1,l2,s1,s2) 

270 assert_objects_deselected(tb1,s3,s4,p1,p2,t1,i1) 

271 select_or_deselect_objects(s3) 

272 sleep(delay) 

273 assert_objects_selected(ts1,l1,l2,s1,s2,s3) 

274 assert_objects_deselected(tb1,s4,p1,p2,t1,i1) 

275 select_or_deselect_objects(s4) 

276 sleep(delay) 

277 assert_objects_selected(ts1,l1,l2,s1,s2,s3,s4) 

278 assert_objects_deselected(tb1,p1,p2,t1,i1) 

279 select_or_deselect_objects(p1) 

280 sleep(delay) 

281 assert_objects_selected(ts1,l1,l2,s1,s2,s3,s4,p1) 

282 assert_objects_deselected(tb1,p2,t1,i1) 

283 select_or_deselect_objects(p2) 

284 sleep(delay) 

285 assert_objects_selected(ts1,l1,l2,s1,s2,s3,s4,p1,p2) 

286 assert_objects_deselected(tb1,t1,i1) 

287 select_or_deselect_objects(t1) 

288 sleep(delay) 

289 assert_objects_selected(ts1,l1,l2,s1,s2,s3,s4,p1,p2,t1) 

290 assert_objects_deselected(tb1,i1) 

291 select_or_deselect_objects(i1) 

292 assert_objects_deselected(tb1) 

293 sleep(delay) 

294 assert_objects_selected(ts1,l1,l2,s1,s2,s3,s4,p1,p2,t1,i1) 

295 assert_objects_deselected(tb1) 

296 select_or_deselect_objects(tb1) 

297 sleep(delay) 

298 assert_objects_selected(ts1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1,tb1) 

299 

300 print("Basic schematic editor tests - Object deselection tests - Left Shift Click") 

301 assert_objects_selected(ts1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1,tb1) 

302 select_or_deselect_objects(s1) 

303 sleep(delay) 

304 assert_objects_selected(ts1,s2,s3,s4,p1,p2,t1,l1,l2,i1,tb1) 

305 assert_objects_deselected(s1) 

306 select_or_deselect_objects(s2) 

307 sleep(delay) 

308 assert_objects_selected(ts1,s3,s4,p1,p2,t1,l1,l2,i1,tb1) 

309 assert_objects_deselected(s1,s2) 

310 select_or_deselect_objects(s3) 

311 sleep(delay) 

312 assert_objects_selected(ts1,s4,p1,p2,t1,l1,l2,i1,tb1) 

313 assert_objects_deselected(s1,s2,s3) 

314 select_or_deselect_objects(s4) 

315 sleep(delay) 

316 assert_objects_selected(ts1,p1,p2,t1,l1,l2,i1,tb1) 

317 assert_objects_deselected(s1,s2,s3,s4) 

318 select_or_deselect_objects(p1) 

319 sleep(delay) 

320 assert_objects_selected(ts1,p2,t1,l1,l2,i1,tb1) 

321 assert_objects_deselected(s1,s2,s3,s4,p1) 

322 select_or_deselect_objects(p2) 

323 sleep(delay) 

324 assert_objects_selected(ts1,t1,l1,l2,i1,tb1) 

325 assert_objects_deselected(s1,s2,s3,s4,p1,p2) 

326 select_or_deselect_objects(t1) 

327 sleep(delay) 

328 assert_objects_selected(ts1,l1,l2,i1,tb1) 

329 assert_objects_deselected(s1,s2,s3,s4,p1,p2,t1) 

330 select_or_deselect_objects(l1) 

331 sleep(delay) 

332 assert_objects_selected(ts1,l2,i1,tb1) 

333 assert_objects_deselected(s1,s2,s3,s4,p1,p2,t1,l1) 

334 select_or_deselect_objects(l2) 

335 sleep(delay) 

336 assert_objects_selected(ts1,i1,tb1) 

337 assert_objects_deselected(s1,s2,s3,s4,p1,p2,t1,l1,l2) 

338 select_or_deselect_objects(i1) 

339 sleep(delay) 

340 assert_objects_selected(ts1,tb1) 

341 assert_objects_deselected(s1,s2,s3,s4,p1,p2,t1,l1,l2,i1) 

342 select_or_deselect_objects(tb1) 

343 sleep(delay) 

344 assert_objects_selected(ts1) 

345 assert_objects_deselected(s1,s2,s3,s4,p1,p2,t1,l1,l2,i1,tb1) 

346 select_or_deselect_objects(ts1) 

347 sleep(delay) 

348 assert_objects_deselected(ts1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1,tb1) 

349 

350 print("Basic schematic editor tests - Test cancel of Line edit in progress") 

351 select_single_object(l1) 

352 sleep(delay) 

353 select_and_move_line_end(l1,1,20,95,delay=delay,test_cancel=True) 

354 assert_object_position(l1,175,150,225,150) 

355 select_and_move_line_end(l1,2,555,105,delay=delay,test_cancel=True) 

356 assert_object_position(l1,175,150,225,150) 

357 sleep(delay) 

358 

359 print("Basic schematic editor tests - Line editing (with snap-to-grid off)") 

360 toggle_snap_to_grid() 

361 sleep(delay) 

362 select_single_object(l1) 

363 sleep(delay) 

364 select_and_move_line_end(l1,1,165,160,delay=delay) 

365 sleep(delay) 

366 select_and_move_line_end(l1,2,235,140,delay=delay) 

367 sleep(delay) 

368 assert_object_position(l1,165,160,235,140) 

369 

370 print("Basic schematic editor tests - Snap to grid of line ends (s-key)") 

371 snap_selected_objects_to_grid() 

372 sleep(delay) 

373 assert_object_position(l1,175,150,225,150) 

374 toggle_snap_to_grid() 

375 sleep(delay) 

376 

377 print("Basic schematic editor tests - Line editing (with snap-to-grid on)") 

378 select_single_object(l1) 

379 sleep(delay) 

380 select_and_move_line_end(l1,1,20,95,delay=delay) 

381 sleep(delay) 

382 select_and_move_line_end(l1,2,555,105,delay=delay) 

383 sleep(delay) 

384 select_single_object(l2) 

385 sleep(delay) 

386 select_and_move_line_end(l2,1,650,100,delay=delay) 

387 sleep(delay) 

388 select_and_move_line_end(l2,2,650,300,delay=delay) 

389 sleep(delay) 

390 select_and_move_line_end(l2,2,800,100,delay=delay) 

391 sleep(delay) 

392 assert_object_position(l1,25,100,550,100) 

393 assert_object_position(l2,650,100,800,100) 

394 

395 print("Basic schematic editor tests - Test cancel of Area selection in progress") 

396 select_area(10,10,850,200,delay=delay,test_cancel=True) 

397 sleep(delay) 

398 assert_objects_deselected(i1,tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2,ts1) 

399 

400 print("Basic schematic editor tests - Area selection and move of selected objects (snap-to-grid on)") 

401 select_area(10,10,850,200,delay=delay) 

402 sleep(delay) 

403 assert_objects_selected(ts1,tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2) 

404 assert_objects_deselected(i1) 

405 # Test move of selected objects (+50,+50) - (note s3 position was 400,100) 

406 select_and_move_objects(s3,445,145,delay=delay) 

407 sleep(delay) 

408 assert_object_position(tb1,450,75) # was 400,25 

409 assert_object_position(s1,150,150) # was 100,100 

410 assert_object_position(s2,300,150) # was 250,100 

411 assert_object_position(s3,450,150) # was 400,100 

412 assert_object_position(s4,550,150) # was 500,100 

413 assert_object_position(p1,625,150) # was 575,100 

414 assert_object_position(p2,675,150) # was 625,100 

415 assert_object_position(t1,750,150) # was 700,100 

416 assert_object_position(l1,75,150,600,150) # was 25,100 and 550,100 

417 assert_object_position(l2,700,150,850,150) # was 650,100 and 800,150 

418 assert_object_position(ts1,800,150) # was 750,100 

419 assert_object_position(i1,200,300) # will not have moved 

420 

421 print("Basic schematic editor tests - Area selection and move of selected objects (snap-to-grid off)") 

422 toggle_snap_to_grid() 

423 sleep(delay) 

424 # Test move of selected objects (+10,+10) - (note s3 position was 450,150) 

425 select_and_move_objects(s3,460,160,delay=delay) 

426 sleep(delay) 

427 assert_object_position(tb1,460,85) 

428 assert_object_position(s1,160,160) 

429 assert_object_position(s2,310,160) 

430 assert_object_position(s3,460,160) 

431 assert_object_position(s4,560,160) 

432 assert_object_position(p1,635,160) 

433 assert_object_position(p2,685,160) 

434 assert_object_position(t1,760,160) 

435 assert_object_position(l1,85,160,610,160) 

436 assert_object_position(l2,710,160,860,160) 

437 assert_object_position(ts1,810,160) 

438 assert_object_position(i1,200,300) # will not have moved 

439 # Test snap to grid of selected objects (note s3 position was 440,140) 

440 snap_selected_objects_to_grid() 

441 sleep(delay) 

442 assert_object_position(tb1,450,75) 

443 assert_object_position(s1,150,150) 

444 assert_object_position(s2,300,150) 

445 assert_object_position(s3,450,150) 

446 assert_object_position(s4,550,150) 

447 assert_object_position(p1,625,150) 

448 assert_object_position(p2,675,150) 

449 assert_object_position(t1,750,150) 

450 assert_object_position(l1,75,150,600,150) 

451 assert_object_position(l2,700,150,850,150) 

452 assert_object_position(ts1,800,150) 

453 assert_object_position(i1,200,300) # will not have moved 

454 # Test move of selected objects (-10,-10) - (note s3 position was 450,150 after the snap to grid) 

455 select_and_move_objects(s3,440,140,delay=delay) 

456 sleep(delay) 

457 assert_object_position(tb1,440,65) 

458 assert_object_position(s1,140,140) 

459 assert_object_position(s2,290,140) 

460 assert_object_position(s3,440,140) 

461 assert_object_position(s4,540,140) 

462 assert_object_position(p1,615,140) 

463 assert_object_position(p2,665,140) 

464 assert_object_position(t1,740,140) 

465 assert_object_position(l1,65,140,590,140) 

466 assert_object_position(l2,690,140,840,140) 

467 assert_object_position(ts1,790,140) 

468 assert_object_position(i1,200,300) # will not have moved 

469 # Test snap to grid of selected objects (note s3 position was 440,140) 

470 snap_selected_objects_to_grid() 

471 sleep(delay) 

472 assert_object_position(tb1,450,75) 

473 assert_object_position(s1,150,150) 

474 assert_object_position(s2,300,150) 

475 assert_object_position(s3,450,150) 

476 assert_object_position(s4,550,150) 

477 assert_object_position(p1,625,150) 

478 assert_object_position(p2,675,150) 

479 assert_object_position(t1,750,150) 

480 assert_object_position(l1,75,150,600,150) 

481 assert_object_position(l2,700,150,850,150) 

482 assert_object_position(ts1,800,150) 

483 assert_object_position(i1,200,300) # will not have moved 

484 toggle_snap_to_grid() 

485 sleep(delay) 

486 

487 print("Basic schematic editor tests - Nudging of selected objects (arrow keys) - snap to grid ON") 

488 # Test nudging of selected objects - Snap to grid is ON by default 

489 # so the objects will be nudged by the grid value (25 pixels) 

490 nudge_selected_objects("Right") 

491 sleep(delay) 

492 assert_object_position(tb1,475,75) 

493 assert_object_position(s1,175,150) 

494 assert_object_position(s2,325,150) 

495 assert_object_position(s3,475,150) 

496 assert_object_position(s4,575,150) 

497 assert_object_position(p1,650,150) 

498 assert_object_position(p2,700,150) 

499 assert_object_position(t1,775,150) 

500 assert_object_position(l1,100,150,625,150) 

501 assert_object_position(l2,725,150,875,150) 

502 assert_object_position(ts1,825,150) 

503 assert_object_position(i1,200,300) # will not have moved 

504 nudge_selected_objects("Down") 

505 sleep(delay) 

506 assert_object_position(tb1,475,100) 

507 assert_object_position(s1,175,175) 

508 assert_object_position(s2,325,175) 

509 assert_object_position(s3,475,175) 

510 assert_object_position(s4,575,175) 

511 assert_object_position(p1,650,175) 

512 assert_object_position(p2,700,175) 

513 assert_object_position(t1,775,175) 

514 assert_object_position(l1,100,175,625,175) 

515 assert_object_position(l2,725,175,875,175) 

516 assert_object_position(ts1,825,175) 

517 assert_object_position(i1,200,300) # will not have moved 

518 nudge_selected_objects("Left") 

519 sleep(delay) 

520 assert_object_position(tb1,450,100) 

521 assert_object_position(s1,150,175) 

522 assert_object_position(s2,300,175) 

523 assert_object_position(s3,450,175) 

524 assert_object_position(s4,550,175) 

525 assert_object_position(p1,625,175) 

526 assert_object_position(p2,675,175) 

527 assert_object_position(t1,750,175) 

528 assert_object_position(l1,75,175,600,175) 

529 assert_object_position(l2,700,175,850,175) 

530 assert_object_position(ts1,800,175) 

531 assert_object_position(i1,200,300) # will not have moved 

532 nudge_selected_objects("Up") 

533 sleep(delay) 

534 assert_object_position(tb1,450,75) 

535 assert_object_position(s1,150,150) 

536 assert_object_position(s2,300,150) 

537 assert_object_position(s3,450,150) 

538 assert_object_position(s4,550,150) 

539 assert_object_position(p1,625,150) 

540 assert_object_position(p2,675,150) 

541 assert_object_position(t1,750,150) 

542 assert_object_position(l1,75,150,600,150) 

543 assert_object_position(l2,700,150,850,150) 

544 assert_object_position(ts1,800,150) 

545 assert_object_position(i1,200,300) # will not have moved 

546 

547 print("Basic schematic editor tests - Nudging of selected objects (arrow keys) - snap to grid OFF") 

548 # Test Nudging of object with snap to grid off - objects will be nudged by 1 pixel 

549 toggle_snap_to_grid() 

550 sleep(delay) 

551 nudge_selected_objects("Down") 

552 sleep(delay) 

553 nudge_selected_objects("Down") 

554 sleep(delay) 

555 nudge_selected_objects("Down") 

556 sleep(delay) 

557 nudge_selected_objects("Right") 

558 sleep(delay) 

559 nudge_selected_objects("Right") 

560 sleep(delay) 

561 nudge_selected_objects("Right") 

562 sleep(delay) 

563 assert_object_position(tb1,453,78) 

564 assert_object_position(s1,153,153) 

565 assert_object_position(s2,303,153) 

566 assert_object_position(s3,453,153) 

567 assert_object_position(s4,553,153) 

568 assert_object_position(p1,628,153) 

569 assert_object_position(p2,678,153) 

570 assert_object_position(t1,753,153) 

571 assert_object_position(l1,78,153,603,153) 

572 assert_object_position(l2,703,153,853,153) 

573 assert_object_position(ts1,803,153) 

574 assert_object_position(i1,200,300) # will not have moved 

575 

576 print("Basic schematic editor tests - Snap to grid of selected objects (s-key)") 

577 # Test Snap to grid 

578 snap_selected_objects_to_grid() 

579 sleep(delay) 

580 assert_object_position(tb1,450,75) 

581 assert_object_position(s1,150,150) 

582 assert_object_position(s2,300,150) 

583 assert_object_position(s3,450,150) 

584 assert_object_position(s4,550,150) 

585 assert_object_position(p1,625,150) 

586 assert_object_position(p2,675,150) 

587 assert_object_position(t1,750,150) 

588 assert_object_position(l1,75,150,600,150) 

589 assert_object_position(l2,700,150,850,150) 

590 assert_object_position(ts1,800,150) 

591 assert_object_position(i1,200,300) # will not have moved 

592 sleep(delay) 

593 # Test Nudging of object in the other direction with snap to grid off 

594 nudge_selected_objects("Up") 

595 sleep(delay) 

596 nudge_selected_objects("Up") 

597 sleep(delay) 

598 nudge_selected_objects("Up") 

599 sleep(delay) 

600 nudge_selected_objects("Left") 

601 sleep(delay) 

602 nudge_selected_objects("Left") 

603 sleep(delay) 

604 nudge_selected_objects("Left") 

605 sleep(delay) 

606 assert_object_position(tb1,447,72) 

607 assert_object_position(s1,147,147) 

608 assert_object_position(s2,297,147) 

609 assert_object_position(s3,447,147) 

610 assert_object_position(s4,547,147) 

611 assert_object_position(p1,622,147) 

612 assert_object_position(p2,672,147) 

613 assert_object_position(t1,747,147) 

614 assert_object_position(l1,72,147,597,147) 

615 assert_object_position(l2,697,147,847,147) 

616 assert_object_position(ts1,797,147) 

617 assert_object_position(i1,200,300) # will not have moved 

618 snap_selected_objects_to_grid() 

619 sleep(delay) 

620 assert_object_position(tb1,450,75) 

621 assert_object_position(s1,150,150) 

622 assert_object_position(s2,300,150) 

623 assert_object_position(s3,450,150) 

624 assert_object_position(s4,550,150) 

625 assert_object_position(p1,625,150) 

626 assert_object_position(p2,675,150) 

627 assert_object_position(t1,750,150) 

628 assert_object_position(l1,75,150,600,150) 

629 assert_object_position(l2,700,150,850,150) 

630 assert_object_position(ts1,800,150) 

631 assert_object_position(i1,200,300) # will not have moved 

632 sleep(delay) 

633 # Re-enable snap to grid 

634 toggle_snap_to_grid() 

635 sleep(delay) 

636 

637 print("Basic schematic editor tests - Scrolling of canvas area (arrow keys)") 

638 # Test scrolling of the canvas (Arrow keys when no objects selected). 

639 # We first have to force a re-size of the root window to make it smaller than the canvas size 

640 run_function(lambda:schematic.root.geometry("500x300")) 

641 sleep(0.5) 

642 deselect_all_objects() 

643 sleep(delay) 

644 assert_objects_deselected(ts1,tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1) 

645 nudge_selected_objects("Right") 

646 sleep(delay) 

647 nudge_selected_objects("Right") 

648 sleep(delay) 

649 nudge_selected_objects("Down") 

650 sleep(delay) 

651 nudge_selected_objects("Down") 

652 sleep(delay) 

653 nudge_selected_objects("Left") 

654 sleep(delay) 

655 nudge_selected_objects("Left") 

656 sleep(delay) 

657 nudge_selected_objects("Up") 

658 sleep(delay) 

659 nudge_selected_objects("Up") 

660 sleep(delay) 

661 reset_window_size() 

662 sleep(delay) 

663 

664 print("Basic schematic editor tests - Cancel of move in progress (esc-key)") 

665 # Test cancel of a move in progress (note s3 start position is 450,150) 

666 select_area(60,60,900,250,delay=delay) 

667 assert_objects_selected(ts1,tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2) 

668 assert_objects_deselected(i1) 

669 select_and_move_objects(s3,403,98,delay=delay,test_cancel=True) 

670 sleep(delay) 

671 assert_object_position(tb1,450,75) 

672 assert_object_position(s1,150,150) 

673 assert_object_position(s2,300,150) 

674 assert_object_position(s3,450,150) 

675 assert_object_position(s4,550,150) 

676 assert_object_position(p1,625,150) 

677 assert_object_position(p2,675,150) 

678 assert_object_position(t1,750,150) 

679 assert_object_position(l1,75,150,600,150) 

680 assert_object_position(l2,700,150,850,150) 

681 assert_object_position(ts1,800,150) 

682 assert_object_position(i1,200,300) # will not have moved 

683 

684 print("Basic schematic editor tests - Rotation of signals and points (r-key)") 

685 select_all_objects() 

686 sleep(delay) 

687 assert_objects_selected(ts1,tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1) 

688 assert_object_configuration(s1,{"orientation" : 0}) 

689 assert_object_configuration(s2,{"orientation" : 0}) 

690 assert_object_configuration(s3,{"orientation" : 0}) 

691 assert_object_configuration(s4,{"orientation" : 0}) 

692 assert_object_configuration(p1,{"orientation" : 0}) 

693 assert_object_configuration(p2,{"orientation" : 0}) 

694 rotate_selected_objects() 

695 sleep(delay) 

696 assert_object_configuration(s1,{"orientation" : 180}) 

697 assert_object_configuration(s2,{"orientation" : 180}) 

698 assert_object_configuration(s3,{"orientation" : 180}) 

699 assert_object_configuration(s4,{"orientation" : 180}) 

700 assert_object_configuration(p1,{"orientation" : 180}) 

701 assert_object_configuration(p2,{"orientation" : 180}) 

702 rotate_selected_objects() 

703 sleep(delay) 

704 assert_object_configuration(s1,{"orientation" : 0}) 

705 assert_object_configuration(s2,{"orientation" : 0}) 

706 assert_object_configuration(s3,{"orientation" : 0}) 

707 assert_object_configuration(s4,{"orientation" : 0}) 

708 assert_object_configuration(p1,{"orientation" : 0}) 

709 assert_object_configuration(p2,{"orientation" : 0}) 

710 

711 print("Basic schematic editor tests - Copy and paste selected objects (Cntl-c/Cntl-v)") 

712 # Test copy and paste and then move (not the block instrument) 

713 select_or_deselect_objects(i1) 

714 sleep(delay) 

715 assert_objects_selected(ts1,tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2) 

716 assert_objects_deselected(i1) 

717 copy_selected_objects() 

718 sleep(delay) 

719 new_objects = paste_clipboard_objects() 

720 [ts11,tb11,s11,s12,s13,s14,p11,p12,t11,l11,l12] = new_objects 

721 sleep(delay) 

722 assert_objects_selected(ts11,tb11,s11,s12,s13,s14,p11,p12,t11,l11,l12) 

723 assert_objects_deselected(ts1,tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1) 

724 # Select the Track section (should not be overlayed) 

725 select_and_move_objects(t11,750,75,delay=delay) 

726 sleep(delay) 

727 

728 print("Basic schematic editor tests - Delete selected objects (backspace-key)") 

729 # Test delete of selected objects 

730 assert_objects_selected(ts11,tb11,s11,s12,s13,s14,p11,p12,t11,l11,l12) 

731 assert_objects_deselected(ts1,tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1) 

732 delete_selected_objects() 

733 sleep(delay) 

734 assert_objects_do_not_exist(ts11,tb11,s11,s12,s13,s14,p11,p12,t11,l11,l12) 

735 assert_objects_exist(ts1,tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1) 

736 

737 print("Basic schematic editor tests - Copy and paste selected objects (Cntl-c/Cntl-v)") 

738 # Finally test copy/paste of block instrument 

739 select_single_object(i1) 

740 sleep(delay) 

741 assert_objects_selected(i1) 

742 assert_objects_deselected(ts1,tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2) 

743 copy_selected_objects() 

744 sleep(delay) 

745 new_objects = paste_clipboard_objects() 

746 [i11] = new_objects 

747 assert_objects_selected(i11) 

748 assert_objects_deselected(ts1,tb1,s1,s2,s3,s4,p1,p2,t1,l1,l2,i1) 

749 sleep(delay) 

750 # Select and move the original instrument (as this will get selected if we try to select the new one) 

751 select_and_move_objects(i1,600,325,delay=delay) 

752 assert_object_position(i1,600,325) 

753 

754 # clean up 

755 sleep(delay) 

756 select_all_objects() 

757 sleep(delay) 

758 delete_selected_objects() 

759 return() 

760 

761#----------------------------------------------------------------------------------- 

762# These test the schematic undo and re-do functions, specifically: 

763# The ability to move backwards and forwards through the undo/redo buffer 

764# Resetting of the undo/redo buffer following a new edit (i.e. cant re-do) 

765#----------------------------------------------------------------------------------- 

766 

767def run_undo_and_redo_tests(delay:float=0.0): 

768 print("Schematic Undo and Redo tests - generate schematic events") 

769 # Initialise the test harness to give us a 'new' schematic 

770 sleep(delay) 

771 initialise_test_harness() 

772 # Create an initial event 

773 sleep(delay) 

774 p1 = create_left_hand_point() # event 1 # 

775 assert_objects_exist(p1) 

776 # Re-initialise the test harness to give us a 'new' schematic 

777 sleep(delay) 

778 initialise_test_harness() 

779 assert_objects_do_not_exist(p1) 

780 # Create a new chain of events 

781 sleep(delay) 

782 s1 = create_colour_light_signal() # event 1 # 

783 assert_objects_exist(s1) 

784 sleep(delay) 

785 assert_object_position(s1,75,50) 

786 select_and_move_objects(s1,100,100,delay=delay) # event 2 # 

787 assert_object_position(s1,100,100) 

788 sleep(delay) 

789 l1 = create_line() # event 3 # 

790 assert_objects_exist(l1) 

791 sleep(delay) 

792 assert_object_position(l1,75,50,125,50) 

793 select_and_move_objects(l1,500,150,delay=delay) # event 4 # 

794 assert_object_position(l1,475,150,525,150) 

795 sleep(delay) 

796 select_and_move_line_end(l1,1,25,100,delay=delay) # event 5 # 

797 assert_object_position(l1,25,100,525,150) 

798 sleep(delay) 

799 select_and_move_line_end(l1,2,550,100,delay=delay) # event 6 # 

800 assert_object_position(l1,25,100,550,100) 

801 sleep(delay) 

802 select_single_object(s1) 

803 sleep(delay) 

804 assert_object_configuration(s1,{"orientation":0}) 

805 rotate_selected_objects() # event 7 # 

806 assert_object_configuration(s1,{"orientation":180}) 

807 sleep(delay) 

808 copy_selected_objects() 

809 [s11] = paste_clipboard_objects() # event 8 # 

810 assert_objects_exist(s11) 

811 sleep(delay) 

812 delete_selected_objects() # event 9 # 

813 assert_objects_do_not_exist(s11) 

814 sleep(delay) 

815 assert_object_configuration(s1,{"itemid":1}) 

816 update_object_configuration(s1,{"itemid":2}) # event 10 # 

817 assert_object_configuration(s1,{"itemid":2}) 

818 

819 print("Schematic Undo and Redo tests - Undo schematic events") 

820 sleep(delay) 

821 assert_object_configuration(s1,{"itemid":2}) 

822 undo() 

823 assert_object_configuration(s1,{"itemid":1}) # undo of event 10 # 

824 sleep(delay) 

825 assert_objects_do_not_exist(s11) 

826 undo() # undo of event 9 # 

827 assert_objects_exist(s11) 

828 sleep(delay) 

829 undo() # undo of event 8 # 

830 assert_objects_do_not_exist(s11) 

831 sleep(delay) 

832 assert_object_configuration(s1,{"orientation":180}) 

833 undo() # undo of event 7 # 

834 assert_object_configuration(s1,{"orientation":0}) 

835 sleep(delay) 

836 assert_object_position(l1,25,100,550,100) 

837 undo() # undo of event 6 # 

838 assert_object_position(l1,25,100,525,150) 

839 sleep(delay) 

840 assert_object_position(l1,25,100,525,150) 

841 undo() # undo of event 5 # 

842 assert_object_position(l1,475,150,525,150) 

843 sleep(delay) 

844 undo() # undo of event 4 # 

845 assert_object_position(l1,75,50,125,50) 

846 sleep(delay) 

847 assert_objects_exist(l1) 

848 undo() # undo of event 3 # 

849 assert_objects_do_not_exist(l1) 

850 sleep(delay) 

851 assert_object_position(s1,100,100) 

852 undo() # undo of event 2 # 

853 assert_object_position(s1,75,50) 

854 sleep(delay) 

855 assert_objects_exist(s1) 

856 undo() # undo of event 1 # 

857 assert_objects_do_not_exist(s1) 

858 

859 print("Schematic Undo and Redo tests - Start of buffer reached") 

860 # Test we can't go back any further 

861 undo() 

862 assert_objects_do_not_exist(p1) 

863 undo() 

864 assert_objects_do_not_exist(p1) 

865 undo() 

866 assert_objects_do_not_exist(p1) 

867 undo() 

868 assert_objects_do_not_exist(p1) 

869 

870 print("Schematic Undo and Redo tests - Redo schematic events") 

871 sleep(delay) 

872 assert_objects_do_not_exist(s1) 

873 redo() 

874 assert_objects_exist(s1) 

875 sleep(delay) 

876 assert_object_position(s1,75,50) 

877 redo() 

878 assert_object_position(s1,100,100) 

879 sleep(delay) 

880 assert_objects_do_not_exist(l1) 

881 redo() 

882 assert_objects_exist(l1) 

883 sleep(delay) 

884 assert_object_position(l1,75,50,125,50) 

885 redo() 

886 assert_object_position(l1,475,150,525,150) 

887 sleep(delay) 

888 redo() 

889 assert_object_position(l1,25,100,525,150) 

890 sleep(delay) 

891 redo() 

892 assert_object_position(l1,25,100,550,100) 

893 sleep(delay) 

894 select_single_object(s1) 

895 sleep(delay) 

896 assert_object_configuration(s1,{"orientation":0}) 

897 redo() 

898 assert_object_configuration(s1,{"orientation":180}) 

899 sleep(delay) 

900 copy_selected_objects() 

901 assert_objects_do_not_exist(s11) 

902 redo() 

903 assert_objects_exist(s11) 

904 sleep(delay) 

905 redo() 

906 assert_objects_do_not_exist(s11) 

907 sleep(delay) 

908 assert_object_configuration(s1,{"itemid":1}) 

909 redo() 

910 assert_object_configuration(s1,{"itemid":2}) 

911 

912 print("Schematic Undo and Redo tests - End of buffer reached") 

913 # Test we can't go forward any further 

914 redo() 

915 redo() 

916 redo() 

917 redo() 

918 

919 print("Schematic Undo and Redo tests - Reset buffer on new schematic event") 

920 # Undo a few schematic events and then create a new object 

921 sleep(delay) 

922 assert_object_configuration(s1,{"itemid":2}) 

923 undo() # undo of event 10 # 

924 assert_object_configuration(s1,{"itemid":1}) 

925 sleep(delay) 

926 assert_objects_do_not_exist(s11) 

927 undo() # undo of event 9 # 

928 assert_objects_exist(s11) 

929 sleep(delay) 

930 p1 = create_left_hand_point() 

931 # Test we can't go any further forward (end of buffer) 

932 redo() 

933 assert_objects_exist(s11) 

934 assert_object_configuration(s1,{"itemid":1}) 

935 redo() 

936 assert_objects_exist(s11) 

937 assert_object_configuration(s1,{"itemid":1}) 

938 redo() 

939 assert_objects_exist(s11) 

940 assert_object_configuration(s1,{"itemid":1}) 

941 redo() 

942 assert_objects_exist(s11) 

943 assert_object_configuration(s1,{"itemid":1}) 

944 # one final undo 

945 sleep(delay) 

946 undo() 

947 assert_objects_do_not_exist(p1) 

948 # clean up 

949 sleep(delay) 

950 select_all_objects() 

951 sleep(delay) 

952 delete_selected_objects() 

953 return() 

954 

955###################################################################################################### 

956 

957def run_all_schematic_editor_tests(delay:float=0.0, shutdown:bool=False): 

958 initialise_test_harness() 

959 set_edit_mode() 

960 run_object_edit_window_tests(delay) 

961 run_basic_editor_tests(delay) 

962 run_undo_and_redo_tests(delay) 

963 if shutdown: report_results() 

964 

965if __name__ == "__main__": 965 ↛ 966line 965 didn't jump to line 966, because the condition on line 965 was never true

966 start_application(lambda:run_all_schematic_editor_tests(delay=0.0, shutdown=True)) 

967 

968############################################################################################################################### 

969