U
    ¹~Hj#  ã                   @   s˜   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ƒZG dd„ dejƒZdS )é    N)Údedent)Úsob)Ú	Ephemeral)Ú
components)Úunittestc                   @   s   e Zd ZdS )ÚDummyN©Ú__name__Ú
__module__Ú__qualname__© r   r   ú9/tmp/pip-unpacked-wheel-ewod1tgb/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   ÚtestPassphraseError5   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   Ú
testPythonI   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   ÚtestTypeGuesserO   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_getattrNr/   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__
            r6   r   zExpected attribute not set.zUnexpected attribute set.)ÚfakeMainZtestMainModGetattrÚmktempÚosÚmkdirÚpathÚjoinZmainWhileLoadingr0   r1   r   r   r   ZassertIsInstanceÚlistÚ
assertTruer   ZsomethingElse)r   Údirnamer   r2   Zloadedr   r   r   ÚtestEverythingEphemeralGetattrY   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_setattrr/   zimport __main__
z __main__.testMainModSetattr = 2
zapp = None
r6   N)r:   ZtestMainModSetattrr;   r<   r=   r>   r?   r0   r1   r   r   r   ©r   rB   r   r2   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_exceptionr/   zraise ValueError
r6   Ú__main__N)r;   r<   r=   r>   r?   r0   r1   r(   Ú
ValueErrorr   r   r   ÚtypeÚsysÚmodulesr   rD   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
        rF   N)rI   rJ   ÚrealMainr   r:   r8   r   r   r   ÚsetUp¤   s    zPersistTests.setUpc                 C   s   | j tjd< dS )z8
        Restore __main__ to its original value
        rF   N)rL   rI   rJ   r8   r   r   r   ÚtearDown¬   s    zPersistTests.tearDownN)r	   r
   r   r"   r%   r*   r.   r3   r9   rC   rE   rK   rM   rN   r   r   r   r   r       s   	
*r   )r<   rI   Útextwrapr   Ztwisted.persistedr   Ztwisted.persisted.stylesr   Ztwisted.pythonr   Ztwisted.trialr   ZComponentizedr   r   r   ZTestCaser   r   r   r   r   Ú<module>   s   û	