
    m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y)    N)Path)ProcessStarter)Image)
pixelmatch)expectPagec                   &    e Zd ZddZd Zd Zd Zy)TrameServerMonitorc                 \    || _         i | _        d| _        || _        | j	                          y )Nr   )	_log_path_last_stateportdo_print_log_linesupdate)selflog_pathr   s      G/DATA/.local/lib/python3.12/site-packages/trame_client/utils/testing.py__init__zTrameServerMonitor.__init__   s)    !	"4    c                 6   d}t        | j                  d      5 }|j                         D ];  }| j                  rt	        |       d|v rt        |dd        | _        |d d dk(  s:|}= 	 d d d        t        j                  |dd        | _	        y # 1 sw Y   'xY w)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    %$..#&!**$K!T) #DIDI8y(&*O & '  ::oab&9: '&s   A
B$BBc                 :    | j                          | j                  S N)r   r   )r   s    r   	get_statezTrameServerMonitor.get_state%   s    r   c                 X    | j                          | j                  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
      s    ; *r   r
   c                  F    t        dt        j                  |       d       y )NzSTATE:Tflush)r   r   dumps)kwargss    r   print_stater3   .   s    	(DJJv&d3r   c                         j                   j                  | t                j                  j	                  d       fd       } S )Non_server_readyc                  6    t        dj                  d       y )Nr   Tr/   )r   r   )r2   servers    r   print_server_portz)enable_testing.<locals>.print_server_port5   s    nfkk6r   )statechanger3   
controlleradd)r7   state_monitorr8   s   `  r   enable_testingr>   2   sJ    'FLL'4,-7 .7 Mr   c                       e Zd Zd Zd Zd Zy)FixtureHelperc                 $    t        |      | _        y r%   )r   	root_path)r   rB   s     r   r   zFixtureHelper.__init__=   s    ir   c                     | j                   dz  }|j                  d      D ]   }|j                          t        d|        " y )Nvisual_baselinez**/page_url.txtz - remove: )rB   globunlinkr   )r   	BASE_PATHfiles      r   remove_page_urlszFixtureHelper.remove_page_urls@   s=    NN%66	NN#45DKKMKv&' 6r   c                 b      G  fddt               }t              j                  |t        fS )Nc                       e Zd ZdZdZ eej                        j                          e	W  j                  W z        dddddgZy)	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   sL    %)"'G S^^$--/DNN[01Dr   rV   )r   r   r)   r
   )r   rU   rV   s   `` r   get_xprocess_argszFixtureHelper.get_xprocess_argsF   s*    	n 	 K %%w0BBBr   N)r*   r+   r,   r   rI   rW   r-   r   r   r@   r@   <   s    )(Cr   r@   img_testref_pathc                    t        j                  |      }t        j                  d|j                        }|j                  d|j                  d      j                   z  }t        || ||      }|j                  |       ||k  sJ y )NRGBAdiff_z.png)	threshold)	r   r   newsizeparentwith_suffixr)   r   save)rX   rY   r]   img_refimg_diff	diff_pathmismatchs          r   assert_images_matchrg   Y   su    jj"Gyy.HE(*>*>v*F*K*K)L"MMI'8XKHMM)ir   pageref_dirr)   r]   c                 v   ||z  }t        |j                  d            }|s:t        d| d       |j                  dd       |dz  }| j	                  |       y |dz  }| j	                  |       t        j                  |      }|D ]  }	 t        |||        y  t        d	|       # t        $ r Y -w xY w)
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   rg   AssertionError)	rh   ri   r)   r]   img_dir
ref_imagesref_img_pathtest_img_pathrX   s	            r   assert_screenshot_matchesrv   h   s     nGgll:./J-gY6GHIdT2+\* ..MOOO'zz-(H #	  ,	B  # :7)D
EE  		s   B,,	B87B8c                    | j                  d      }|| dz  }|j                         sDt        d| d       t        |d      5 }|j	                  |j                                d d d        y t        |d      5 }t        |      j                  |j                                d d d        y # 1 sw Y   y xY w# 1 sw Y   y xY w)Nhtmlz.yml'z' does not exist. Creating...wr   )	locatorexistsr   r   writearia_snapshotr   to_match_aria_snapshotread)rh   ri   r)   rx   rY   wfrfs          r   assert_snapshot_matchesr      s    <<DD6&H??(89:(C BHHT'')* !	h	t++BGGI6 
		 !		s    B,:)B8,B58C)g?)r   rP   pathlibr   xprocessr   PILr   pixelmatch.contrib.PILr   playwright.sync_apir   r   r
   r3   r>   r@   rg   rS   floatrv   r   r-   r   r   <module>r      s     
  #  - ,* *<4C C: %  4    >A"F
"F"F%("F5:"FJ
7$ 
7 
7S 
7r   