
    8xd*                        d Z ddlmZ ddlZddlZddlmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZmZmZmZ d#dZd$dZd%dZ	 d&d'dZd(dZd(dZd(dZd(dZ	 d)d*d"ZdS )+z)
Module to handle generating test files.
    )annotationsN)basenameexistsisfilejoin)Path   )MetaData)	copy_intoensure_liston_winrm_rfmr
   test_dirr   returnboolc           	     6   t          |                     dg                     }|D ]e}t          | j                                      |          D ];}t          |||                    | j                  z  | j        j        dd           <ft          |          S )z
    Copy all test files from recipe over into testing directory.

    :param metadata: The meta.yaml object.
    :param test_dir: The testing directory.
    :return: Whether any test scripts copied were copied over.
    z
test/filesFT)lockingclobber)
r   	get_valuer   pathrglobr   relative_toconfigtimeoutr   )r   r   patternspatternfiles        7lib/python3.11/site-packages/conda_build/create_test.pycreate_filesr       s     1;;|R8899H  LL&&w// 	 	D4++AF333     	 >>    
win_statustuple[os.PathLike, os.PathLike]c                   |rdnd}d|z   }|}| j         rd}| j                            dg           D ]}|                                 |                    d          k    ri|                    di                               dd          }t          j                            |          d	                                         |k    r|} n||fS )
Nz.batz.shrun_testno-fileoutputsnametestscriptr	   )	is_outputmetagetr(   osr   splitextlower)r   r"   extdst_namesrc_nameoutout_test_scripts          r   _get_output_script_namer6   &   s     
)&&ECCHH{ 6::i,, 	 	Cvvxx3776??**"%''&""5"5"9"9(I"N"N7##O44Q7==??3FF.HEXr!   os.PathLike	list[str]c                   | j         rddgnt          g}g }|D ]}t          | |          \  }}t          ||          }t	          t          | j        |                    r0t          t          | j        |          || j        j        d           t          | 
                    dg                     }|rt          t          |          d          5 }	|	                    d           |s|	                    d           |	                    d           |D ]C}
|	                    |
           |	                    d           |r|	                    d	           D|r|	                    d
           n|	                    d           d d d            n# 1 swxY w Y   t          |          r|                    |           |S )NFT)r   ztest/commandsaz

z	set -ex


z IF %ERRORLEVEL% NEQ 0 exit /B 1
z
exit /B 0
zexit 0
)noarchr   r6   r   r   r   r   r   r   r   r   openwriter   append)r   r   r"   shell_filesstatusr3   r2   	dest_filecommandsfcmds              r   create_shell_filesrF   ;   s   "#(8%JK * *4Q??(8,,	$qvx(()) 	QVX&& 	    q{{?B??@@ 	(d9oos++ (q +GGM***# E ECGGCLLLGGDMMM E CDDD (GGM****GGJ'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ) 	*y)))s   B5FF	F	# r1   strcomment_chartuple[os.PathLike, bool]c                   d|z   }| j         rd}| j                            dg           D ]p}|                                 |                    d          k    rC|                    di                               dd          }|                    |          r|} nqt          |d|z             }|rt          | j        |          }t          |          rmt          |d          5 }	|		                    | d	| 
                                 d
           |		                    d| 
                                z             	 t          |          5 }
|		                    d| d           |		                    | d| d           |		                    |
                                           |		                    | d| d           d d d            n# 1 swxY w Y   n%# t          $ r |		                    d           Y nw xY w|		                    d| 
                                z             d d d            n# 1 swxY w Y   |t          |          o!t          |          ot          |          dk    fS )Nr%    r'   r(   r)   r*   r&   wz tests for z (this is a generated file);
z*print('===== testing package: %s =====');
zprint('running z');
z --- z (begin) ---
z (end) ---
z># tests were not packaged with this module, and cannot be run
z
print('===== %s OK =====');
)r+   r,   r-   r(   endswithr   r   r   r=   r>   distreadAttributeErrorr   r   )r   r   r1   rI   r(   r4   r5   out_file	test_filefofis              r   _create_test_filesrV   _   s/    D{ 	 6::i,, 	 	Cvvxx3776??**"%''&""5"5"9"9(I"N"N"++C00 *DEHj3.//H G&&	) 	Gh$$ G#XXXXX   FQRRR	i KB!>4!>!>!>???L!K!Kt!K!K!KLLL+++L!I!It!I!I!IJJJ	K K K K K K K K K K K K K K K
 &   HHY     :QVVXXEFFF!G G G G G G G G G G G G G G G$ 	T

Lvh''LHY,?,?9,L s\   &AH8?GA7GGG	GG	GH8G?<H8>G??-H88H<?H<c                    t          | |d          \  }}|                                 }|                    d          }|                    d          }|                    d          }|p|p|}|rdg }	t          |                     dg                     D ]=}
t          |
d          r+d|
v r'|
d         dk    r|	                    |
d	                    >n/t          |                     dg                     }	d
 |	D             }	|	rst          |d          5 }|	D ]G}|                    d|z             |                    d|z             |                    d           H	 d d d            n# 1 swxY w Y   |s|	r|ndS )Nz.pyr-lua-perl-test/importskeyslangpythonimportsc                R    g | ]$}t          |d           rd|v |d         dk    "|%S )r\   r]   r^   )hasattr).0items     r   
<listcomp>z#create_py_files.<locals>.<listcomp>   sR     
 
 
D&))	
 .4t^^VPX@X@X  AY@X@Xr!   r:   zprint("import: %r")
z
import %s
r;   F)	rV   r(   
startswithr   r   ra   extendr=   r>   )r   r   tf	tf_existspkg_namelikely_r_pkglikely_lua_pkglikely_perl_pkglikely_non_python_pkgr_   import_itemrT   r(   s                r   create_py_filesro      s   &q(E::MB	
 vvxxH&&t,,L((00N))'22O(MNMo 
&q{{>2'F'FGG 	7 	7K V,,7k))'833{95666	7 akk."==>>
 

 
 
  "c]] 	b  047888-...	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 2w222U2s   AE--E14E1c                ^   t          | |d          \  }}d }|                                                     d          r$t          |                     dg                     }nPt          |                     dg                     D ],}t          |d          rd|v r|d         dk    r
|d         } n-|rst          |d          5 }|D ]G}|                    d	|z             |                    d
|z             |                    d           H	 d d d            n# 1 swxY w Y   |s|r|ndS )Nz.rrX   r[   r\   r]   rr_   r:   zprint("library(%r)")
zlibrary(%s)
r;   F)rV   r(   re   r   r   ra   r=   r>   r   r   rg   rh   r_   rn   rT   r(   s           r   create_r_filesrs      s   &q(D99MB	G 	vvxx4   
akk."==>>&q{{>2'F'FGG 	 	KV,,k))'3..%i0 "c]] 	b  1D89994/000	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 2w222U2s   ADD #D c                   t          | |d          \  }}d }|                                                     d          r$t          |                     dg                     }nPt          |                     dg                     D ],}t          |d          rd|v r|d         dk    r
|d         } n-|s|rt          |d          5 }t          d	|                                 	                    d
          z  |           |rU|D ]R}t          d|z  |           t          d|z  |           d|vr$t          d
                    |          |           Sd d d            n# 1 swxY w Y   |s|r|ndS )Nz.plrZ   r[   r\   r]   perlr_   r:   zmy $expected_version = "%s";0r   zprint("import: %s\n");zuse %s;
 a  if (defined {0}->VERSION) {{
	my $given_version = {0}->VERSION;
	$given_version =~ s/0+$//;
	die('Expected version ' . $expected_version . ' but found ' . $given_version) unless ($expected_version eq $given_version);
	print('	using version ' . {0}->VERSION . '
');

}}F)rV   r(   re   r   r   ra   r=   printversionrstripformatrr   s           r   create_pl_filesr}      s   &q(E::MB	Gvvxx7## 
akk."==>>&q{{>2'F'FGG 	 	KV,,k))'611%i0 G "c]] 	b1AIIKK4F4Fs4K4KKRTUUUU #  D3d:DDDD+,26666$!) %fTll!#   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	* 2w222U2s   BE##E'*E'c                $   t          | |d          \  }}d }|                                                     d          r$t          |                     dg                     }nPt          |                     dg                     D ],}t          |d          rd|v r|d         dk    r
|d         } n-|rVt          |d          5 }|D ]*}t          d	|z  |
           t          d|z  |
           +	 d d d            n# 1 swxY w Y   |s|r|ndS )Nz.luarY   r[   r\   r]   luar_   za+zprint("require \"%s\"\n");rw   zrequire "%s"
F)rV   r(   re   r   r   ra   r=   ry   rr   s           r   create_lua_filesr      s   &q(F;;MB	Gvvxx6"" 
akk."==>>&q{{>2'F'FGG 	 	KV,,k))'500%i0 8"d^^ 	8r 8 83d:DDDD&-B777778	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 2w222U2s   .C??DDos.PathLike | None.tuple[bool, bool, bool, bool, bool, list[str]]c           	        |rt          |           t          j        |d           t          |                     dg                     }|r5t          |d                              t          j        |                     n"| j	        j
        }t          j        |d           t          | t          |                    t          | |          t          | |          t          | |          t          | |          t!          | |          fS )NT)exist_okztest/requiresztest_time_dependencies.json)r   r.   makedirsr   r   r   
write_textjsondumpsr   r   r    r}   ro   rs   r   rF   )r   r   test_requiress      r   create_all_test_filesr     s     -h
Ht,,,,#AKK$D$DEE 	899DD
=))  
 8$
Ht,,,, 	QX''8$$8$$q(##H%%1h'' r!   )r   r
   r   r   r   r   )r   r
   r"   r   r   r#   )r   r
   r   r7   r   r8   )rG   )
r   r
   r   r7   r1   rH   rI   rH   r   rJ   )r   r
   r   r7   r   r   )N)r   r
   r   r   r   r   )__doc__
__future__r   r   r.   os.pathr   r   r   r   pathlibr   metadatar
   utilsr   r   r   r   r    r6   rF   rV   ro   rs   r}   r   r    r!   r   <module>r      sw    # " " " " "  				 2 2 2 2 2 2 2 2 2 2 2 2             8 8 8 8 8 8 8 8 8 8 8 8   *   *! ! ! !P 	* * * * *Z%3 %3 %3 %3P3 3 3 36%3 %3 %3 %3P3 3 3 32 $(      r!   