
                           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 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 add
Z ej2                  d      	 	 	 	 dd       Z ej2                         dd       Z G d d      Z ej2                         	 	 	 	 	 	 dd       Ze G d d             Zy)    )annotationsN)	dataclass)Path)Any	Generator)pyodide_testing_app)run_hypercorn_in_thread)DEFAULT_CERTS)	parse_urlc                    t         dz  a dj                  t        d      D cg c]  }t        j                  d       c}      }| |z   dt          z   S c c}w )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      sT    qOeBiHi|4iHIII!O#4 555 Is   Amodule)scopec              #    K   t        t        j                         | j                  j	                  d            }t        |      t        j                  d<   d}t        j                         5 }t        j                         }| dg|_        |j                  t        |t                     t        j                  t         t#        |j                  d         j$                        }t        j                         }t&        d   |_        t&        d   |_        t&        d   |_        t&        d	   |_        t&        d
   |_        | dg|_        |j                  t        |t                     t        j                  t         t#        |j                  d         j$                        }t3        |||       t5        d       d d d        y # 1 sw Y   y xY ww)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              #  6  K   dd}t        | d|j                  | | j                               | j                          |  t	        | j                  d            }t        t        d       d      5 }|j                  |       d d d        y # 1 sw Y   y xY ww)Nc                &    | j                  d       y )Nz
            await pyodide.loadPackage("coverage")
            await pyodide.runPythonAsync(`import coverage
_coverage= coverage.Coverage(source_pkgs=['urllib3'])
_coverage.start()
        `
        ))run_js)selfs    r   _install_coveragez,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_coveragerR   A   s     	
 !!(H,>,>?
  
N	
" 
'(?@AD	IW)* 
J	I	Is   A0B2B	BBBc                      e Zd ZddZddZy)ServerRunnerInfoc                .    || _         || _        || _        y )N)hostr7   rO   )rC   rV   r7   rO   s       r   __init__zServerRunnerInfo.__init__l   s    		 rE   c                   t        |t              rV|j                  d      rEt        j                  |      }t        j                  d      |z   }|t        j                  d      z  }t        | j                  j                  d| j                   d| j                   dt        |       dd	            }t        t        d
       d      5 }|j                  |       d d d        y # 1 sw Y   y xY w)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.rF   )
isinstancer-   
startswithtextwrapdedentrL   rO   rB   rV   r7   reprrM   r   rN   )rC   coderP   rQ   s       r   run_webworkerzServerRunnerInfo.run_webworkerq   s    dC T__T%:??4(D    HOO
 D $MM  ..2ii[$)) E/ 04Dzl ;   %# ! 
* %&DEF
MM-.
 
 
s   
C%%C.N)rV   r-   r7   r6   rO   r   rG   rH   )ra   r-   rG   r   )__name__
__module____qualname__rW   rb    rE   r   rT   rT   k   s    !
5/rE   rT   r9   c              #    K   d|j                    d|j                   d}| j                  |       | j                          | j	                          | j                          | j                          | j                          | j                  d       | j                          t        |j                   |j                  |        y w)Nzhttps://rZ   z/pyodide/test.htmlz.
await pyodide.loadPackage('/wheel/dist.whl')
)r&   r(   gotojavascript_setupload_pyodideinitialize_pyodide
save_staterestore_staterB   rD   rT   )rR   r?   addrs      r   run_from_serverro      s      o//0/2L2L1MM_`D4 &&(""$((*  "##%	
 '')
!!?#=#=?P s   CCc                  ,    e Zd ZU ded<   ded<   ded<   y)r9   r6   r'   r(   r-   r&   N)rc   rd   re   __annotations__rf   rE   r   r9   r9      s    NONrE   )r   r-   rG   r-   )r;   zpytest.FixtureRequestrG   z(Generator[PyodideServerInfo, None, None])rO   r   rG   zGenerator[Any, None, None])rR   r   r?   r9   rG   z'Generator[ServerRunnerInfo, None, None])
__future__r   r.   r)   r   r^   r4   dataclassesr   pathlibr   r   r   r0   pytestdummyserver.appr   dummyserver.hypercornserverr	   dummyserver.socketserverr
   urllib3.util.urlr   r   r   fixturer?   rR   rT   ro   r9   rf   rE   r   <module>r{      s    "  	    !  !   / ? 2 &6 h!"!-!  !D &+ &+R;/ ;/B ->, ,   rE   