o
    N©Zhƒ  ã                   @   s˜   d Z ddlZddlZddlmZ ddlZddlmZ dejd< G dd„ deƒZG d	d
„ d
eƒZ	dd„ Z
dd„ Zdd„ ZedkrJe
ƒ  eƒ  eƒ  dS dS )z;
test dill's ability to pickle abstract base class objects
é    N)ÚABC)ÚFunctionTypeTÚrecursec                   @   sd   e Zd Zejdd„ ƒZeejdd„ ƒƒZejejdd„ ƒƒZe	ejdd„ ƒƒZ
eejdd	„ ƒƒZd
S )ÚOneTwoThreec                 C   ó   dS )zA methodN© ©Úselfr   r   úJ/var/www/html/lang_env/lib/python3.10/site-packages/dill/tests/test_abc.pyÚfoo   s   zOneTwoThree.fooc                 C   r   )zProperty getterNr   r   r   r   r
   Úbar   ó   zOneTwoThree.barc                 C   r   )zProperty setterNr   ©r	   Úvaluer   r   r
   r      r   c                 C   r   )zClass methodNr   ©Úclsr   r   r
   Úcfoo%   r   zOneTwoThree.cfooc                   C   r   )zStatic methodNr   r   r   r   r
   Úsfoo+   r   zOneTwoThree.sfooN)Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodr   Úpropertyr   ÚsetterÚclassmethodr   Ústaticmethodr   r   r   r   r
   r      s    
r   c                   @   sN   e Zd Zdd„ Zdd„ Zedd„ ƒZejdd„ ƒZedd	„ ƒZ	e
d
d„ ƒZdS )Ú	EasyAsAbcc                 C   s
   d | _ d S ©N©Z_barr   r   r   r
   Ú__init__2   s   
zEasyAsAbc.__init__c                 C   r   )NúInstance Method FOOr   r   r   r   r
   r   5   ó   zEasyAsAbc.fooc                 C   s   | j S r   r   r   r   r   r
   r   8   s   zEasyAsAbc.barc                 C   s
   || _ d S r   r   r   r   r   r
   r   <   s   
c                 C   r   )NúClass Method CFOOr   r   r   r   r
   r   @   ó   zEasyAsAbc.cfooc                   C   r   )NúStatic Method SFOOr   r   r   r   r
   r   D   r$   zEasyAsAbc.sfooN)r   r   r   r    r   r   r   r   r   r   r   r   r   r   r   r
   r   1   s    


r   c                  C   s  t  t¡tus	J ‚t  t¡tusJ ‚t ¡ % t dt j¡ t jtddtu s)J ‚t jtddtu s4J ‚W d   ƒ n1 s>w   Y  tƒ } dd„ | _t  | ¡}t	|ƒt	| ƒu sZJ ‚t	|jƒt
u scJ ‚| d¡dkslJ ‚| ¡ dkstJ ‚| ¡ d	ks|J ‚| ¡ d
ks„J ‚d S )NÚignoreT)Zbyrefc                 S   s   | d S )Né   r   )Úxr   r   r
   Ú<lambda>S   s    z$test_abc_non_local.<locals>.<lambda>é   é	   r%   r#   r!   )ÚdillÚcopyr   r   ÚwarningsÚcatch_warningsÚsimplefilterZPicklingWarningr   Útyper   r   r   r   )ÚinstanceZ	depickledr   r   r
   Útest_abc_non_localH   s    
ý

r3   c               
      sF  G dd„ dt ƒ} t | ¡}|| usJ ‚t|ƒt| ƒu sJ ‚G ‡ fdd„d|ƒ‰ ˆ ƒ }| ¡ dks2J ‚z|ƒ  W n tyI } zW Y d}~nd}~ww tdƒ J ‚t |ˆ ƒ f¡\}}dt|ƒjkscJ ‚d	t|ƒjv slJ ‚t|ƒˆ ustJ ‚|| uszJ ‚||us€J ‚t	||ƒs‡J ‚t	||ƒrŽJ ‚t	|| ƒr•J ‚| 
¡ d
t|ƒ ks¡J ‚dS )z-
    Test using locally scoped ABC class
    c                   @   s"   e Zd Zejdd„ ƒZdd„ ZdS )z test_abc_local.<locals>.LocalABCc                 S   s   d S r   r   r   r   r   r
   r   b   r$   z$test_abc_local.<locals>.LocalABC.fooc                 S   s   t | ƒS r   )Úreprr   r   r   r
   Úbazf   s   z$test_abc_local.<locals>.LocalABC.bazN)r   r   r   r   r   r   r5   r   r   r   r
   ÚLocalABCa   s    
r6   c                       s&   e Zd Zdd„ Z‡‡ fdd„Z‡  ZS )ztest_abc_local.<locals>.Realc                 S   r   )NúTrue!r   r   r   r   r
   r   q   r"   z test_abc_local.<locals>.Real.fooc                    s   dt ˆ | ƒ ¡  S )NúMy )Úsuperr5   r   )ÚRealÚ	__class__r   r
   r5   t   s   z test_abc_local.<locals>.Real.baz)r   r   r   r   r5   Ú__classcell__r   ©r:   )r;   r
   r:   p   s    r:   r7   NzFailed to raise type errorFz.Realr8   )r   r,   r-   r1   r   Ú	TypeErrorÚprintr   r   Ú
isinstancer5   r4   )r6   ZlabcÚrealÚeZlabc2Zpikr   r=   r
   Útest_abc_local]   s2   

€þrC   c                  C   s¤   t  ddi ¡} G dd„ dƒ}G dd„ dƒ}|  |¡ t|| ƒr!J ‚t|| ƒs(J ‚t | ||f¡}t |¡\}}}t|ƒt| ƒksBJ ‚t||ƒrIJ ‚t||ƒsPJ ‚dS )z7
    Test calling metaclass and cache registration
    ÚLocalMetaABCr   c                   @   ó   e Zd ZdS )z-test_meta_local_no_cache.<locals>.ClassyClassN©r   r   r   r   r   r   r
   ÚClassyClass”   ó    rG   c                   @   rE   )z-test_meta_local_no_cache.<locals>.KlassyClassNrF   r   r   r   r
   ÚKlassyClass—   rH   rI   N)r   ÚABCMetaÚregisterÚ
issubclassr,   ÚdumpsÚloadsr1   )rD   rG   rI   ÚresZlmabcÚccÚkcr   r   r
   Útest_meta_local_no_cacheŽ   s   
rR   Ú__main__)Ú__doc__r,   r   r   r.   Útypesr   Úsettingsr   r   r3   rC   rR   r   r   r   r   r
   Ú<module>   s"   
1
ý