o
    DDi                  	   @   sv  d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ dZdZdZdZed	Zd'dee dedefddZdededdfddZdedededee fddZdeeef ddfddZdeeef ddfddZeee e
eef f Zeee e
eef f Z edde dedeegef fd d!Z!G d"d# d#e"Z#G d$d% d%ee#d&Z$dS )(    N)wraps)AnyCallableDictIterableListMappingOptionalSequenceTupleTypeVarUnion)TestCase__data_provider_data_data_provider___provider_test_limit   TUnexpected None valuevaluemessagereturnc                 C   s   | d usJ || S N )r   r   r   r   M/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/testing/utils.pynone_throws"   s   r   test_method
test_limitc                 C   s"   t | t|}t| tt|| d S r   )getattrPROVIDER_TEST_LIMIT_ATTR_NAMEsetattrmax)r   r   existing_test_limitr   r   r   update_test_limit'   s   r#   member_namemember	attr_namec                 C   s$   t |r| drt||d S d S )Ntest)inspect
isfunction
startswithr   )r$   r%   r&   r   r   r   try_get_provider_attr3   s   r+   dctc                 C   s  i }g }|   D ]r\}}t||t}|d urzt|tr|  nt|D ]G\}}t|tr2t | }tdt	|sBJ d| dt
|||fdtdtt dtdtf dtfd	d
}| d| }	|	|_|||	< q#|sutd| d|| q| | |D ]}
| |
= qd S )Nz[a-zA-Z0-9_]+z9Testcase description must be a valid python identifier: ''selfdatar%   .r   c                 S   s*   t |tr|| fi |S || g|R  S r   )
isinstancedict)r.   r/   r%   r   r   r   new_testO   s   
z.populate_data_provider_tests.<locals>.new_test_z(No data_provider tests were created for z ! Please double check your data.)itemsr+   DATA_PROVIDER_DATA_ATTR_NAMEr0   r1   	enumerate DATA_PROVIDER_DESCRIPTION_PREFIXre	fullmatchstrr   objectr   r   __name__
ValueErrorappendupdate)r,   test_methods_to_addtest_methods_to_remover$   r%   provider_datadescriptionr/   r2   name	test_namer   r   r   populate_data_provider_tests;   sV   









rF   c           	      C   s   i }|   D ]=\}}t||t}|d urCt||t}|r t|nd}||krC|||fdtdtdtdtdd f
dd}t|d	| |||< q|  D ]\}}|| |< qHd S )
N   r.   r$   	num_testsr   r   c                 S   s*   t | d| d| d d d d )Nz generated z tests but the limit is z!. You can increase the number of z3allowed tests by specifying test_limit, but please z0consider whether you really need to test all of zthese combinations.)AssertionError)r.   r$   rH   r   r   r   r   test_replacementy   s   z1validate_provider_tests.<locals>.test_replacementr<   )r4   r+   r   r5   lenr   r    )	r,   members_to_replacer$   r%   r   r/   rH   rJ   
new_memberr   r   r   validate_provider_testsi   s>   

rN   )r   static_datac                   s4   t  tttfst  dtdtf fdd}|S )Nr   r   c                    s   t |  t| t  | S r   )r#   r    r5   )r   rO   r   r   r   test_decorator   s   
z%data_provider.<locals>.test_decorator)r0   r1   listtupler   )rO   r   rQ   r   rP   r   data_provider   s   rT   c                       s>   e Zd Zdedeedf deeef def fddZ	  Z
S )BaseTestMetarD   bases.r,   r   c                    s&   t | t| t | ||t|S r   )rN   rF   super__new__r1   )mcsrD   rV   r,   	__class__r   r   rX      s   zBaseTestMeta.__new__)r<   
__module____qualname__r:   r   typer   r   r;   rX   __classcell__r   r   rZ   r   rU      s    6rU   c                   @   s   e Zd ZdS )UnitTestN)r<   r\   r]   r   r   r   r   r`      s    r`   )	metaclass)r   )%r(   r8   	functoolsr   typingr   r   r   r   r   r   r	   r
   r   r   r   unittestr   r5   r7   r   DEFAULT_TEST_LIMITr   r:   r   intr#   r+   rF   rN   r;   TestCaseTypeStaticDataTyperT   r^   rU   r`   r   r   r   r   <module>   sF   4
.%
