U
    
W[   ã                   @   sª   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 dlmZ G dd	„ d	ejƒZd
ddd
dgd
digZG dd„ deƒZG dd„ dejƒZdS )é    )ÚdivisionÚabsolute_importN)Údedent)Úunittest)Úsob)Ú
components)Ú	Ephemeralc                   @   s   e Zd ZdS )ÚDummyN©Ú__name__Ú
__module__Ú__qualname__© r   r   ú7/usr/lib/python3/dist-packages/twisted/test/test_sob.pyr	      s   r	   é   Úhello)r   r   c                   @   s   e Zd ZdS )Ú
FakeModuleNr
   r   r   r   r   r      s   r   c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚPersistTestsc                 C   s^   t D ]T}t |d¡}d ¡ D ]:}| |¡ |jd| d t d| |¡}|  ||¡ qqd S )NÚ úsource picklezpersisttest.©Úfilename)Úobjectsr   Ú
PersistentÚsplitÚsetStyleÚsaveÚloadÚassertEqual)ÚselfÚoÚpÚstyleÚo1r   r   r   Ú
testStyles!   s    
zPersistTests.testStylesc                 C   sŽ   t ƒ }d|_| tjt |d¡¡ d ¡ D ]^}t |¡ |¡ t |¡jd| d t 	d| |¡}|  
|j|j¡ |  
t |¡j|¡ q*d S )Né   Zlalar   zlala.r   )r	   ÚfooZsetComponentr   ZIPersistabler   r   r   r   r   r   r"   )r   r    r"   r#   r   r   r   ÚtestStylesBeingSet*   s    zPersistTests.testStylesBeingSetc                 C   s$   t  dd¡}| jt|jddd dS )z?
        Calling save() with a passphrase is an error.
        NÚobjectzfilename.pickleÚabc)Z
passphrase)r   Z
PersistantÚassertRaisesÚ	TypeErrorr   )r   r!   r   r   r   ÚtestPassphraseError6   s       ÿz PersistTests.testPassphraseErrorc                 C   sš   dddg}t  |d¡}d ¡ D ]v}| |¡ | ¡  t  d|d  |¡}|  ||¡ d ¡ D ]6}| |¡ t  d	| d
 |d  |¡}|  ||¡ q\qd S )Nr   é   é   r(   r   z	object.tar   z	lala lolozobject-z.ta)r   r   r   r   r   r   r   )r   r    r!   r"   r#   Útagr   r   r   Ú	testNames?   s    


zPersistTests.testNamesc              	   C   sB   t ddƒ}| d¡ W 5 Q R X t dd¡}|  |dddg¡ d S )Nzpersisttest.pythonÚwzfoo=[1,2,3] r&   r   r-   r.   )ÚopenÚwriter   ZloadValueFromFiler   )r   Úfr    r   r   r   Ú
testPythonM   s    zPersistTests.testPythonc                 C   s’   |   ttjd¡ |  dt d¡¡ |  dt d¡¡ |  dt d¡¡ |  dt d¡¡ |  dt d¡¡ |  d	t d
¡¡ |  d	t d¡¡ d S )Nz	file.blahÚpythonzfile.pyzfile.tacz	file.etacÚpicklezfile.tapz	file.etapÚsourcezfile.tasz	file.etas)r*   ÚKeyErrorr   Z	guessTyper   ©r   r   r   r   ÚtestTypeGuesserT   s    zPersistTests.testTypeGuesserc              	   C   s¨   d| j _|  ¡ }t |¡ tj |d¡}dat|dƒ}| 	t
dƒ¡ W 5 Q R X t |d¡}|  |t¡ |  |d d¡ |  |d d	¡ |  tt¡ |  tjt¡ bdS )
zñ
        L{_EverythingEphermal.__getattr__} will proxy the __main__ module as an
        L{Ephemeral} object, and during load will be transparent, but after
        load will return L{Ephemeral} objects from any accessed attributes.
        r   zpersisttest.ee_getattrNr1   a†  
            app = []
            import __main__
            app.append(__main__.testMainModGetattr == 1)
            try:
                __main__.somethingElse
            except AttributeError:
                app.append(True)
            else:
                app.append(False)
            from twisted.test import test_sob
            test_sob.mainWhileLoading = __main__
            r8   r   zExpected attribute not set.zUnexpected attribute set.)ÚfakeMainZtestMainModGetattrÚmktempÚosÚmkdirÚpathÚjoinZmainWhileLoadingr2   r3   r   r   r   ZassertIsInstanceÚlistZ
assertTruer   ZsomethingElse)r   Údirnamer   r4   Zloadedr   r   r   ÚtestEverythingEphemeralGetattr^   s    
z+PersistTests.testEverythingEphemeralGetattrc              	   C   s|   d| j _|  ¡ }t |¡ tj |d¡}t|dƒ$}| d¡ | d¡ | d¡ W 5 Q R X t	 
|d¡ |  | j jd¡ dS )	zU
        Verify that _EverythingEphemeral.__setattr__ won't affect __main__.
        r   zpersisttest.ee_setattrr1   zimport __main__
z __main__.testMainModSetattr = 2
zapp = None
r8   N)r<   ZtestMainModSetattrr=   r>   r?   r@   rA   r2   r3   r   r   r   ©r   rC   r   r4   r   r   r   ÚtestEverythingEphemeralSetattr…   s    


z+PersistTests.testEverythingEphemeralSetattrc              	   C   sl   |   ¡ }t |¡ tj |d¡}t|dƒ}| d¡ W 5 Q R X |  tt	j
|d¡ |  ttjd ƒt¡ dS )zW
        Test that an exception during load() won't cause _EE to mask __main__
        zpersisttest.ee_exceptionr1   zraise ValueError
r8   Ú__main__N)r=   r>   r?   r@   rA   r2   r3   r*   Ú
ValueErrorr   r   r   ÚtypeÚsysÚmodulesr   rE   r   r   r   Ú testEverythingEphemeralException˜   s    
z-PersistTests.testEverythingEphemeralExceptionc                 C   s"   t jd | _tƒ  | _t jd< dS )zi
        Replace the __main__ module with a fake one, so that it can be mutated
        in tests
        rG   N)rJ   rK   ÚrealMainr   r<   r:   r   r   r   ÚsetUp¦   s    zPersistTests.setUpc                 C   s   | j tjd< dS )z8
        Restore __main__ to its original value
        rG   N)rM   rJ   rK   r:   r   r   r   ÚtearDown®   s    zPersistTests.tearDownN)r   r   r   r$   r'   r,   r0   r5   r;   rD   rF   rL   rN   rO   r   r   r   r   r       s   		
'r   )Z
__future__r   r   r>   rJ   Útextwrapr   Ztwisted.trialr   Ztwisted.persistedr   Ztwisted.pythonr   Ztwisted.persisted.stylesr   ZComponentizedr	   r   r(   r   ZTestCaser   r   r   r   r   Ú<module>   s    û