
                           S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKJr  S SK	J
r
  S SKJrJr  S SKrS SKrS SKJr  S SKJr  S SKJr  S S	KJr  S qSS
 jr\R2                  " SS9    SS j5       r\R2                  " 5       SS j5       r " S S5      r\R2                  " 5             SS j5       r\ " S S5      5       rg)    )annotationsN)	dataclass)Path)Any	Generator)pyodide_testing_app)run_hypercorn_in_thread)DEFAULT_CERTS)	parse_urlc                    [         S-  q SR                  [        S5       Vs/ s H  n[        R                  " S5      PM     sn5      nX-   S[          3-   $ s  snf )N       
1234567890.)_coverage_countjoinrangerandomchoice)prefixx	rand_parts      Gplatform/gsutil/third_party/urllib3/test/contrib/emscripten/conftest.py_get_coverage_filenamer      sR    qOeBiHi|4iHII!O#4 555 Is    Amodule)scopec              #    #    [        [        R                  " 5       U R                  R	                  S5      5      n[        U5      [        R                  S'   Sn[        R                  " 5        n[        R                  " 5       nU S3/Ul        UR                  [        U[        5      5        [        R                  " [         [#        UR                  S   5      R$                  5      n[        R                  " 5       n[&        S   Ul        [&        S   Ul        [&        S   Ul        [&        S	   Ul        [&        S
   Ul        U S3/Ul        UR                  [        U[        5      5        [        R                  " [         [#        UR                  S   5      R$                  5      n[3        UUUS9v   [5        S5        S S S 5        g ! , (       d  f       g = f7f)Nz
--dist-dirpyodide_dist_dir	localhostz:0r   certfilekeyfile	cert_reqsca_certsalpn_protocols)	http_host	http_port
https_portzServer teardown)r   osgetcwdconfig	getoptionstrr   
contextlib	ExitStack	hypercornConfigbindenter_contextr	   typingcastintr   portr
   r!   r"   verify_moder$   r%   PyodideServerInfoprint)requestr   r&   stackhttp_server_configr'   https_server_configr(   s           r   testserver_httpr?      s     BIIK)A)A,)OP589I5J12I				5&--/&/[#3"4#$68KL	
 KKY/A/F/Fq/I%J%O%OP	'..0'4Z'@$&3I&>#*7*D''4Z'@$-:;K-L*'0k$4#5 #$79LM	
 [[i0C0H0H0K&L&Q&QR
!
 	

 	 3 
 		s   A,G.EG
	G

GGc              #  @  #    SS jn[        U SUR                  X R                  5      5        U R                  5         U v   [	        U R                  S5      5      n[        [        S5       S5       nUR                  U5        S S S 5        g ! , (       d  f       g = f7f)Nc                &    U R                  S5        g )Nz
            await pyodide.loadPackage("coverage")
            await pyodide.runPythonAsync(`import coverage
_coverage= coverage.Coverage(source_pkgs=['urllib3'])
_coverage.start()
        `
        ))run_js)selfs    r   _install_coverage,selenium_coverage.<locals>._install_coverageC   s    	
    rD   ay  
return await pyodide.runPythonAsync(`
_coverage.stop()
_coverage.save()
_coverage_datafile = open(".coverage","rb")
_coverage_outdata = _coverage_datafile.read()
# avoid polluting main namespace too much
import js as _coverage_js
# convert to js Array (as default conversion is TypedArray which does
# bad things in firefox)
_coverage_js.Array.from_(_coverage_outdata)
`)
    z.coverage.emscripten.wb)rC   r   returnNone)	setattr__get__	__class__rD   bytesrB   openr   write)seleniumrD   coverage_out_binaryoutfiles       r   selenium_coveragerS   A   s     	
 !!(,>,>?
  
N	
" 
'(?@AD	IW)* 
J	I	Is   A0B2B	B
BBc                  (    \ rS rSrSS jrSS jrSrg)ServerRunnerInfok   c                (    Xl         X l        X0l        g )Nhostr7   rP   )rC   rY   r7   rP   s       r   __init__ServerRunnerInfo.__init__l   s    		 rF   c                    [        U[        5      (       a^  UR                  S5      (       aH  [        R                  " U5      n[        R                  " S5      U-   nU[        R                  " S5      -  n[        U R                  R                  SU R                   SU R                   S[        U5       S3SS	95      n[        [        S
5       S5       nUR                  U5        S S S 5        g ! , (       d  f       g = f)N
z
            import coverage
            _coverage= coverage.Coverage(source_pkgs=['urllib3'])
            _coverage.start()
            a  
            _coverage.stop()
            _coverage.save()
            _coverage_datafile = open(".coverage","rb")
            _coverage_outdata = _coverage_datafile.read()
            # avoid polluting main namespace too much
            import js as _coverage_js
            # convert to js Array (as default conversion is TypedArray which does
            # bad things in firefox)
            _coverage_js.Array.from_(_coverage_outdata)
            z.
            let worker = new Worker('https://:a  /pyodide/webworker_dev.js');
            let p = new Promise((res, rej) => {
                worker.onmessageerror = e => rej(e);
                worker.onerror = e => rej(e);
                worker.onmessage = e => {
                    if (e.data.results) {
                       res(e.data.results);
                    } else {
                       rej(e.data.error);
                    }
                };
                worker.postMessage({ python: z= });
            });
            return await p;
            F)pyodide_checksz.coverage.emscripten.worker.rG   )
isinstancer-   
startswithtextwrapdedentrM   rP   rB   rY   r7   reprrN   r   rO   )rC   coderQ   rR   s       r   run_webworkerServerRunnerInfo.run_webworkerq   s    dC  T__T%:%:??4(D    HOO
 D $MM  ..2ii[$)) E/ 04Dzl ;   %# ! 
* %&DEF
MM-.
 
 
s   C//
C=rX   N)rY   r-   r7   r6   rP   r   rH   rI   )re   r-   rH   r   )__name__
__module____qualname____firstlineno__rZ   rf   __static_attributes__ rF   r   rU   rU   k   s    !
5/rF   rU   r9   c              #    #    SUR                    SUR                   S3nU R                  U5        U R                  5         U R	                  5         U R                  5         U R                  5         U R                  5         U R                  S5        U R                  5         [        UR                   UR                  U 5      v   g 7f)Nzhttps://r^   z/pyodide/test.htmlz.
await pyodide.loadPackage('/wheel/dist.whl')
)r&   r(   gotojavascript_setupload_pyodideinitialize_pyodide
save_staterestore_staterB   rD   rU   )rS   r?   addrs      r   run_from_serverrv      s      o//0/2L2L1MM_`D4 &&(""$((*  "##%	
 '')
!!?#=#=?P s   CCc                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg)	r9      r6   r'   r(   r-   r&   rm   N)rh   ri   rj   rk   __annotations__rl   rm   rF   r   r9   r9      s    NONrF   )r   r-   rH   r-   )r;   zpytest.FixtureRequestrH   z(Generator[PyodideServerInfo, None, None])rP   r   rH   zGenerator[Any, None, None])rS   r   r?   r9   rH   z'Generator[ServerRunnerInfo, None, None])
__future__r   r.   r)   r   rb   r4   dataclassesr   pathlibr   r   r   r0   pytestdummyserver.appr   dummyserver.hypercornserverr	   dummyserver.socketserverr
   urllib3.util.urlr   r   r   fixturer?   rS   rU   rv   r9   rm   rF   r   <module>r      s    "  	    !  !   / ? 2 &6 h!"!-!  !D &+ &+R;/ ;/B ->, ,   rF   