@@ -541,6 +541,38 @@ testcase click_create_tab_opens_editor:
541541 $ if not _ok: renpy.quit(status = 1 )
542542 $ renpy.quit()
543543
544+ testcase video_queue_error_msg_substitute_guard:
545+ $ _cue.is_overlay_visible = True
546+ run Jump(" start" )
547+ pause 2.0
548+ $ renpy.show(" cuevid" )
549+ pause 1.0
550+ $ _cue.video_editor.create(1.5 )
551+ python :
552+ import time as _time
553+ _queue = _cue.video_editor.job_queue
554+ _deadline = _time.time() + 30.0
555+ while _queue.processing and _time.time() < _deadline:
556+ _queue.poll()
557+ _time.sleep(0.1 )
558+ # Regression for the CI crash on runners without ffmpeg: a failed encode
559+ # sets error_msg to "[Errno 2] ...". The queue text used to be substituted,
560+ # so those brackets were py_eval'd and crashed the whole overlay on every
561+ # render. Both dynamic text lines are `substitute False` now -- render the
562+ # queue with a bracketed error (and bracketed filename) to prove it.
563+ $ _cue.video_editor.open_editor()
564+ $ _job = _cue.video_editor.job_queue.jobs[- 1 ]
565+ $ _job.status = CueJobStatus.ERROR
566+ $ _job.vpath = " videos/[bracket] scene.mp4"
567+ $ _job.error_msg = " [Errno 2] No such file or directory: 'ffmpeg'"
568+ $ renpy.restart_interaction()
569+ pause 0.5
570+ $ _ok = _job.error_msg == " [Errno 2] No such file or directory: 'ffmpeg'"
571+ $ _cue.video_editor.close_editor()
572+ $ renpy.restart_interaction()
573+ $ if not _ok: renpy.quit(status = 1 )
574+ $ renpy.quit()
575+
544576testcase video_seamless_transition_preserves_position:
545577 $ _cue.is_overlay_visible = True
546578 run Jump(" start" )
0 commit comments