
    .`j                        d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlmZmZmZmZmZ  e	e      j'                         j(                  d   Zedz  Zd	Zddd
ZddZddZedk(  r e        yy)z<Smoke-test the field-character speaker/identity review page.    )annotationsN)Path)urljoin)WebDriverError
execute_js	free_portrequest_jsonwait_for_driver   outas  
const marker = window.HWANSE_LAST_FIELD_CHARACTER_IDENTITY_REVIEW || null;
const canvases = Array.from(document.querySelectorAll('#rectGrid canvas'));
return {
  readyState: document.readyState,
  ready: window.HWANSE_FIELD_CHARACTER_IDENTITY_REVIEW_READY === true,
  marker,
  assetButtons: document.querySelectorAll('#assetList [data-asset]').length,
  speakerRows: document.querySelectorAll('#speakerRows tr').length,
  canvases: canvases.map((canvas) => ({
    width: canvas.width,
    height: canvas.height,
    visiblePixels: (() => {
      const data = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height).data;
      let count = 0;
      for (let index = 3; index < data.length; index += 4) if (data[index] > 0) count += 1;
      return count;
    })(),
  })),
  bodyText: document.body?.innerText || '',
  bootError: window.HWANSE_BOOT_ERROR || null,
};
c                   t        j                         |z   }d }t        j                         |k  rt        | |t        d      }|j	                  d      xs i }|j	                  d      r5|j	                  d      r$|j	                  d      r|j	                  d      r|S t        j
                  d       t        j                         |k  rt        d|      )	N   timeoutmarkerreadyrectRenderReadycanvasesg?z6field character identity review did not become ready: )time	monotonicr   STATE_SCRIPTgetsleepr   )port
session_idr   deadline
last_stater   s         7tools/verify_field_character_identity_review_browser.pywait_for_stater   -   s    ~~')H"J
..
X
%j,J
)/R>>'"vzz'':vzzJ[?\akaoaopza{

3 ..
X
% QR\Q_`
aa    c                	   t        j                  d      }|st        d      t               }t        dz  }|j                  d      5 }t        j                  |dd| dg|t        j                        }d	}	 t        ||       t        |d
dddddiiid      }t        |xs i j                  di       j                  d      xs d	      }|st        d|      t        |d
d| ddddddd       t        | j                  d      dz   d      }t        |d
d| dd|id       t        ||      }	|	d    }
|
j                  d!      d"k7  s|
j                  d#      d$k7  rt        d%|	      |
j                  d&      d'k7  s|
j                  d(      d)k7  rt        d*|	      |
j                  d+      r|
j                  d,      st        d-|	      |	j                  d.d      dk  s|	j                  d/d      d0k  rt        d1|	      |	j                  d2      rt!        d3 |	d2   D              rt        d4|	      d5|	j                  d6d	      vsd7|	j                  d6d	      vrt        d8|	      t#        ||d9d:       t        ||      }|j                  d       xs i }|j                  d!      d;k7  s|j                  d#      d<k7  rt        d=|      d>|j                  d6d	      vsd?|j                  d6d	      vrt        d@|      dA||
|	d.   |	d/   t%        |	d2         |j                  d!      dB}t        dCz  j'                  t)        j*                  |dDdEF      dGz   dHI       t-        t)        j*                  |dDJ             |r	 t        |dKd| d dL       |j1                          	 |j3                  dL       d d d        y # t.        $ r Y 7w xY w# t        j4                  $ r |j7                          Y =w xY w# |r$	 t        |dKd| d dL       n# t.        $ r Y nw xY w|j1                          	 |j3                  dL       w # t        j4                  $ r |j7                          Y w w xY wxY w# 1 sw Y   y xY w)MNWebKitWebDriverz WebKitWebDriver is not installedz0field_character_identity_review_webkitdriver.logwbz--host=127.0.0.1z--port=z--replace-on-new-session)stdoutstderr POSTz/sessioncapabilitiesalwaysMatchbrowserNameMiniBrowser   r   value	sessionIdz!could not create WebKit session: z	/session/z/window/rectr   iP  i  )xywidthheight   /z7web/field_character_identity_review.html?asset=cara_at1z/urlurlr   assetcara_at1identityStatuszconfirmed-cns-identityz'confirmed identity selection mismatch: fieldCnsCount!   speakerLabelCountz   zdataset summary mismatch: continuationFirstLinesExcludedmonsterCnsExcludedz!evidence policy marker mismatch: assetButtonsspeakerRowsd   z$asset/speaker lists did not render: r   c              3  F   K   | ]  }|j                  d d      dk    yw)visiblePixelsr   N)r   ).0rows     r   	<genexpr>zverify.<locals>.<genexpr>e   s!     /nUX0Kq0P/ns   !z)one or more CNS rect canvases are blank: u	   아타호bodyTextu   이름 미연결z&identity boundary labels are missing: zRdocument.querySelector('#assetList [data-asset="cara_07"]')?.click(); return true;r   cara_07zrect-identity-unboundz'candidate identity selection mismatch: u   주작권사z!dialogue-block-resource-candidatez#candidate evidence did not render: ok)statusr5   r   r?   r@   canvasCountcandidateAssetz2field_character_identity_review_browser_smoke.jsonF   )ensure_asciiindent
zutf-8)encoding)rN   DELETE   )shutilwhichr   r   OUTopen
subprocessPopenSTDOUTr
   r	   strr   r   rstripr   anyr   len
write_textjsondumpsprint	Exception	terminatewaitTimeoutExpiredkill)basedriverr   log_pathlogprocessr   responser5   stater   candidate_statecandidate_markerreports                 r   verifyrr   9   s   \\+,F?@@;DGGH	t	 N""'74&)9;UV$$

 
G	D'*#--1O!PQH hn"11'2>BB;OUSUVJ$'H%UVVJ<|4a$#> $++c*S02klCv:,d'CeS\[]^"44E8_Fzz'"j0FJJ?O4PTl4l$'Nui%XYYzz/*b0FJJ?R4SWZ4Z$'A%%KLL::>?vzzRfGg$'H	%RSSyy+b0EIImQ4ORU4U$'KE9%UVV99Z(C/n\abl\m/n,n$'PQVPY%Z[[%))J";;?QY^YbYbcmoqYr?r$'MeY%WXXf	 -T:>O.228<B##G,	9=M=Q=QRb=cg~=~$'NNa%bcc_%8%8R%HHLo  xG  xK  xK  LV  XZ  x[  M[$'J?J]%^__  %n 5$]3"5#45"2"6"6w"?F GGSS

6a@4G  T  $**V%89 x9ZL1I4YZ[ Q'YN NP ! 
 ,,   x9ZL1I4YZ[  Q',, [N Ns   0R8LPRO(R9O#	O RO  R##P	RP		RR P$#R $	P0	-R /P0	0R QR #Q=	:R <Q=	=R  RRc                     t        j                         } | j                  dd       | j                         }t	        |j
                         y )Nz--basezhttp://127.0.0.1:8013/)default)argparseArgumentParseradd_argument
parse_argsrr   rh   )parserargss     r   mainr{      s>    $$&F
*BCD
499r    __main__)   )r   intr   r[   r   floatreturndict)rh   r[   r   None)r   r   )__doc__
__future__r   ru   r`   rT   rX   r   pathlibr   urllib.parser   browser_smoke_helpersr   r   r   r	   r
   __file__resolveparentsROOTrV   r   r   rr   r{   __name__ r    r   <module>r      s{    B "         f f H~''*
Ul2	bTn zF r    