o
    ؋j	                     @  s^   d Z ddlmZ ddlZddlZddlZdddZddd	Zdd
dZ	dddZ
dddZdS )zEHelpers for deterministic headless UI regression tests on buildboxes.    )annotationsNreturnNonec                  C  sP   dt jv rdS td} G dd dt}G dd d}|| _|| _| t jd< dS )z?Avoid requiring PortAudio for UI construction/screenshot tests.ZsounddeviceNc                   @  s   e Zd ZdS )z1install_headless_audio_stub.<locals>.CallbackStopN)__name__
__module____qualname__ r   r   9/home/user/Projects/AutoRemaster/tests/ui_test_support.pyCallbackStop   s    r
   c                   @  s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
z1install_headless_audio_stub.<locals>.OutputStreamc                 _  
   d| _ d S NFactive)selfargskwargsr   r   r	   __init__      
z:install_headless_audio_stub.<locals>.OutputStream.__init__c                 S  r   )NTr   r   r   r   r	   start   r   z7install_headless_audio_stub.<locals>.OutputStream.startc                 S  r   r   r   r   r   r   r	   stop   r   z6install_headless_audio_stub.<locals>.OutputStream.stopc                 S  r   r   r   r   r   r   r	   close   r   z7install_headless_audio_stub.<locals>.OutputStream.closeN)r   r   r   r   r   r   r   r   r   r   r	   OutputStream   s
    r   )sysmodulestypes
ModuleType	Exceptionr
   r   )moduler
   r   r   r   r	   install_headless_audio_stub	   s   


r   c                  C  s8   t jdk stt jddrdS dd } | t j_dt j_dS )zDAdapt Tk 9 empty Menu.index semantics for CustomTkinter 5.2.2 tests.g      "@_autoremaster_test_patchFNc                 S  s*   | j | jd|}|dkrd S | j |S )Nindex )tkcall_wZgetint)r   r!   resultr   r   r	   r!   &   s   z&install_tk9_menu_compat.<locals>.indexT)r#   Z	TkVersiongetattrZMenur!   r    )r!   r   r   r	   install_tk9_menu_compat!   s
   r(   c                   C  s   t   t  d S )N)r   r(   r   r   r   r	   prepare_headless_ui0   s   
r)   c                  C  s.   ddl m}  d| _i | _d| _g | _d| _dS )zAReset process-global module discovery between isolated app tests.r   ModuleRegistryNF)Z
ui.modulesr+   	_instanceZ_modules_initializedZ_discovery_queueZ_queue_populatedr*   r   r   r	   reset_module_registry5   s   
r.   c              	   C  s   zt | ddr| j  W n	 ty   Y nw dD ]!}t | |d}|r:z| | W n	 ty3   Y nw t| |d qzt | ddrG| j  W n	 tyQ   Y nw z|   W dS  tyc   Y dS w )z<Cancel recurring jobs before destroying a headless test app.spectrum_displayN)Z_playback_ui_timerZ_live_preview_timerZ_preview_update_timerwaveform_frame)	r'   r/   r   r   Zafter_cancelsetattrr0   cleanupZdestroy)appnameZjobr   r   r	   shutdown_test_app?   s:   

r5   )r   r   )__doc__
__future__r   r   r   Ztkinterr#   r   r(   r)   r.   r5   r   r   r   r	   <module>   s    




