o
    eþ  ã                   @   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   úCD:\Projects\ConvertPro\env\Lib\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__-   s   
zEasyAsAbc.__init__c                 C   r   )NúInstance Method FOOr   r   r   r   r
   r   0   ó   zEasyAsAbc.fooc                 C   s   | j S r   r   r   r   r   r
   r   3   s   zEasyAsAbc.barc                 C   s
   || _ d S r   r   r   r   r   r
   r   7   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   ?   r$   zEasyAsAbc.sfooN)r   r   r   r    r   r   r   r   r   r   r   r   r   r   r   r
   r   ,   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)Úbyrefc                 S   s   | d S )Né   r   )Úxr   r   r
   Ú<lambda>N   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_localC   s    
ý

r4   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   \   r$   z$test_abc_local.<locals>.LocalABC.fooc                 S   s   t | ƒS r   )Úreprr   r   r   r
   Úbaz`   s   z$test_abc_local.<locals>.LocalABC.bazN)r   r   r   r   r   r   r6   r   r   r   r
   ÚLocalABC[   s    
r7   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   k   r"   z test_abc_local.<locals>.Real.fooc                    s   dt ˆ | ƒ ¡  S )NúMy )Úsuperr6   r   )ÚRealÚ	__class__r   r
   r6   n   s   z test_abc_local.<locals>.Real.baz)r   r   r   r   r6   Ú__classcell__r   ©r;   )r<   r
   r;   j   s    r;   r8   NzFailed to raise type errorFz.Realr9   )r   r-   r.   r2   r   Ú	TypeErrorÚprintr   r   Ú
isinstancer6   r5   )r7   ZlabcÚrealÚeZlabc2Zpikr   r>   r
   Útest_abc_localW   s2   

€þrD   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Ž   ó    rH   c                   @   rF   )z-test_meta_local_no_cache.<locals>.KlassyClassNrG   r   r   r   r
   ÚKlassyClass‘   rI   rJ   N)r   ÚABCMetaÚregisterÚ
issubclassr-   ÚdumpsÚloadsr2   )rE   rH   rJ   ÚresZlmabcÚccÚkcr   r   r
   Útest_meta_local_no_cacheˆ   s   
rS   Ú__main__)Ú__doc__r-   r   r   r/   Útypesr   Úsettingsr   r   r4   rD   rS   r   r   r   r   r
   Ú<module>   s"   
1
ý