o
    ¯b#  ã                   @   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                   @   ó   e Zd ZdS )ÚDummyN©Ú__name__Ú
__module__Ú__qualname__© r   r   ú7/usr/lib/python3/dist-packages/twisted/test/test_sob.pyr      ó    r   é   Úhello)r   r   c                   @   r   )Ú
FakeModuleNr	   r   r   r   r   r      r   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 |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é   Úlalar   zlala.r   )r   ÚfooÚsetComponentr   Ú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)Ú
passphrase)r   Ú
PersistantÚassertRaisesÚ	TypeErrorr   )r   r!   r   r   r   ÚtestPassphraseError5   s   z PersistTests.testPassphraseErrorc                 C   s˜   g d¢}t  |d¡}d ¡ D ];}| |¡ | ¡  t  d|d  |¡}|  ||¡ d ¡ D ]}| |¡ t  d| d |d  |¡}|  ||¡ q-qd S )	N©r   é   é   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   sT   t ddƒ}| d¡ W d   ƒ n1 sw   Y  t dd¡}|  |g d¢¡ d S )Nzpersisttest.pythonÚwzfoo=[1,2,3] r'   r2   )ÚopenÚwriter   Ú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   Ú	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 d  ƒ n1 s-w   Y  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_getattrNr7   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__
            r?   r   zExpected attribute not set.zUnexpected attribute set.)ÚfakeMainÚtestMainModGetattrÚmktempÚosÚmkdirÚpathÚjoinÚmainWhileLoadingr8   r9   r   r   r   ÚassertIsInstanceÚlistÚ
assertTruer   ÚsomethingElse)r   Údirnamer   r;   Úloadedr   r   r   ÚtestEverythingEphemeralGetattrY   s&   
ÿÿÿz+PersistTests.testEverythingEphemeralGetattrc                 C   s   d| j _|  ¡ }t |¡ tj |d¡}t|dƒ}| d¡ | d¡ | d¡ W d  ƒ n1 s3w   Y  t	 
|d¡ |  | j jd¡ dS )	zU
        Verify that _EverythingEphemeral.__setattr__ won't affect __main__.
        r   zpersisttest.ee_setattrr7   zimport __main__
z __main__.testMainModSetattr = 2
zapp = None
Nr?   )rD   ÚtestMainModSetattrrF   rG   rH   rI   rJ   r8   r9   r   r   r   ©r   rP   r   r;   r   r   r   ÚtestEverythingEphemeralSetattrƒ   s   


ýz+PersistTests.testEverythingEphemeralSetattrc                 C   s€   |   ¡ }t |¡ tj |d¡}t|dƒ}| d¡ W d  ƒ n1 s%w   Y  |  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_exceptionr7   zraise ValueError
Nr?   Ú__main__)rF   rG   rH   rI   rJ   r8   r9   r/   Ú
ValueErrorr   r   r   ÚtypeÚsysÚmodulesr   rT   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
        rV   N)rY   rZ   ÚrealMainr   rD   rB   r   r   r   ÚsetUp¤   s   zPersistTests.setUpc                 C   s   | j tjd< dS )z8
        Restore __main__ to its original value
        rV   N)r\   rY   rZ   rB   r   r   r   ÚtearDown¬   s   zPersistTests.tearDownN)r
   r   r   r$   r*   r1   r6   r<   rC   rR   rU   r[   r]   r^   r   r   r   r   r       s    	
*r   )rG   rY   Útextwrapr   Útwisted.persistedr   Útwisted.persisted.stylesr   Útwisted.pythonr   Útwisted.trialr   ÚComponentizedr   r   r   ÚTestCaser   r   r   r   r   Ú<module>   s    û	