
    )j1              	           d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ  G d d          Zd	 Zd
 Z G d d          ZddedefdZ	 ddedededefdZdededefdZdS )    N)Path)ProcessStarter)Image)
pixelmatch)expectPagec                   (    e Zd ZddZd Zd Zd ZdS )TrameServerMonitorFc                 f    || _         i | _        d| _        || _        |                                  d S )Nr   )	_log_path_last_stateportdo_print_log_linesupdate)selflog_pathr   s      T/DATA/AppData/hermes/venv/lib/python3.11/site-packages/trame_client/utils/testing.py__init__zTrameServerMonitor.__init__   s1    !	"4    c                 b   d}t          | j        d          5 }|                                D ]H}| j        rt	          |           d|v rt          |dd                    | _        |d d         dk    r|}I	 d d d            n# 1 swxY w Y   t          j        |dd                    | _	        d S )Nz	STATE: {}rSERVER_PORT:      zSTATE: )
openr   	readlinesr   printintr   jsonloadsr   )r   last_state_lineflines       r   r   zTrameServerMonitor.update   s    %$.#&& 	+! + +*  $KKK!T)) #DIDI8y((&*O+	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+  :oabb&9::s   ABB
Bc                 8    |                                   | j        S N)r   r   )r   s    r   	get_statezTrameServerMonitor.get_state%   s    r   c                 ^    |                                   | j                            |          S r%   )r   r   get)r   names     r   r(   zTrameServerMonitor.get)   s&    ##D)))r   N)F)__name__
__module____qualname__r   r   r&   r(    r   r   r
   r
      sU           ; ; ;     * * * * *r   r
   c                  N    t          dt          j        |           d           d S )NzSTATE:Tflush)r   r   dumps)kwargss    r   print_stater3   .   s'    	(DJv&&d333333r   c                         j         j        | t                      j                            d           fd            } S )Non_server_readyc                  6    t          dj        d           d S )Nr   Tr/   )r   r   )r2   servers    r   print_server_portz)enable_testing.<locals>.print_server_port5   s     nfk666666r   )statechanger3   
controlleradd)r7   state_monitorr8   s   `  r   enable_testingr>   2   s]    'FL'444,--7 7 7 7 .-7 Mr   c                        e Zd Zd Zd Zd ZdS )FixtureHelperc                 .    t          |          | _        d S r%   )r   	root_path)r   rB   s     r   r   zFixtureHelper.__init__=   s    ir   c                     | j         dz  }|                    d          D ](}|                                 t          d|            )d S )Nvisual_baselinez**/page_url.txtz - remove: )rB   globunlinkr   )r   	BASE_PATHfiles      r   remove_page_urlszFixtureHelper.remove_page_urls@   s\    N%66	NN#455 	( 	(DKKMMM&&&''''	( 	(r   c                 j      G  fddt                     }t                    j        |t          fS )Nc                       e Zd ZdZdZ eej                                                   e	 j
        z            dddddgZdS )	0FixtureHelper.get_xprocess_args.<locals>.StarterTzApp running at:z--serverz--hostz	127.0.0.1z--port0N)r*   r+   r,   terminate_on_interruptpatternr   sys
executableas_posixstrrB   args)r   server_paths   r   StarterrL   G   sa        %)"'G S^$$--//DN[011DDDr   rV   )r   r   r)   r
   )r   rU   rV   s   `` r   get_xprocess_argszFixtureHelper.get_xprocess_argsF   sX    	 	 	 	 	 	 	 	n 	 	 	 K  %w0BBBr   N)r*   r+   r,   r   rI   rW   r-   r   r   r@   r@   <   sF        ) ) )( ( (C C C C Cr   r@   皙?img_testref_pathc                    t          j        |          }t          j        d|j                  }|j        d|                    d          j         z  }t          || ||          }|                    |           ||k     sJ d S )NRGBAdiff_z.png)	threshold)	r   r   newsizeparentwith_suffixr)   r   save)rY   rZ   r^   img_refimg_diff	diff_pathmismatchs          r   assert_images_matchrh   Y   s    j""Gy..H"M(*>*>v*F*F*K"M"MMI'8XKKKHMM)ir   pageref_dirr)   r^   c                    ||z  }t          |                    d                    }|sGt          d| d           |                    dd           |dz  }|                     |           d S |dz  }|                     |           t          j        |          }|D ]&}	 t          |||            d S # t          $ r Y #w xY wt          d	|           )
Nzref*.pngzNo reference images exist in z. Creating one...T)parentsexist_okzref1.png)pathztest_image.pngzNo reference images matched in )	listrE   r   mkdir
screenshotr   r   rh   AssertionError)	ri   rj   r)   r^   img_dir
ref_imagesref_img_pathtest_img_pathrY   s	            r   assert_screenshot_matchesrw   h   s    nGgll:..//J HgHHHIIIdT222+\*** ..MOOO'''z-((H #  	  ,	BBB FF  	 	 	H	 D7DD
E
EEs   %B99
CCc                    |                      d          }|| dz  }|                                sdt          d| d           t          |d          5 }|                    |                                           d d d            n# 1 swxY w Y   d S t          |d          5 }t          |                              |                                           d d d            d S # 1 swxY w Y   d S )Nhtmlz.yml'z' does not exist. Creating...wr   )	locatorexistsr   r   writearia_snapshotr   to_match_aria_snapshotread)ri   rj   r)   ry   rZ   wfrfs          r   assert_snapshot_matchesr      sg   <<DD&H?? 9(999:::(C   	+BHHT''))***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+	h		 7t++BGGII6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s$   (B		BB&5C((C,/C,)rX   )r   rP   pathlibr   xprocessr   PILr   pixelmatch.contrib.PILr   playwright.sync_apir   r   r
   r3   r>   r@   rh   rS   floatrw   r   r-   r   r   <module>r      s    



       # # # # # #       - - - - - - , , , , , , , ,* * * * * * * *<4 4 4  C C C C C C C C:   %  4          >A"F "F
"F"F%("F5:"F "F "F "FJ
7$ 
7 
7S 
7 
7 
7 
7 
7 
7r   