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
« 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#-----------------------------------------------------------------------------------
27from system_test_harness import *
29#-----------------------------------------------------------------------------------
30# This function tests the following schematic functions:
31# Editing of objects (i.e. opening and closing the edit windows)
32#-----------------------------------------------------------------------------------
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)
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#-----------------------------------------------------------------------------------
104def run_basic_editor_tests(delay:float=0.0):
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
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)
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
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
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)
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)
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
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})
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)
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)
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)
754 # clean up
755 sleep(delay)
756 select_all_objects()
757 sleep(delay)
758 delete_selected_objects()
759 return()
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#-----------------------------------------------------------------------------------
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})
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)
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)
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})
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()
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()
955######################################################################################################
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()
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))
968###############################################################################################################################