Ë
    ojï:  ã                  óÂ  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
mZ d dlmZ d dlmZmZmZ d dlmZ d dlmZ  G d„ d	e«      Z G d
„ dej,                  «      Z G d„ dej,                  «      Z G d„ de«      Z G d„ dee«      Z G d„ de«      Z G d„ dej8                  «      Z G d„ de«      Z G d„ d«      Z G d„ d«      Z  G d„ d«      Z! G d„ d«      Z"d3d „Z# ej                  e!e#«        G d!„ d"«      Z$ G d#„ d$«      Z%d4d%„Z& G d&„ d'e«      Z' G d(„ d)e«      Z( G d*„ d+«      Z) G d,„ d-«      Z*e
ed.e+f      Z, G d/„ d0e«      Z- G d1„ d2e«      Z.eee'gZ/y)5é    )ÚannotationsN)ÚAnyÚCallableÚListÚTuple)ÚNoReturn)ÚaotÚcrefutilÚstyles)Úunittest)ÚTestCasec                  ó,   — e Zd Zdd„Zdd„Zdd„Zdd„Zy)ÚVersionTestsc                óü   —  G d„ d«      a t        j                  t        «       «      } G d„ dt        j                  «      a t        j
                  |«      }t        j                  «        |j                  sJ d«       ‚y )Nc                  ó   — e Zd Zdd„Zy)ÚNullVersionedc                ó   — d| _         y )Nr   ©Úok©Úselfs    ú=/usr/lib/python3/dist-packages/twisted/test/test_persisted.pyÚ__init__zNullVersioned.__init__   ó	   € Ø�•ó    N©ÚreturnÚNone©Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r      s   „ ôr   r   c                  ó   — e Zd ZdZdd„Zy)r   é   c                ó   — d| _         y ©Nr%   r   r   s    r   ÚupgradeToVersion1zNullVersioned.upgradeToVersion1"   r   r   Nr   )r    r!   r"   ÚpersistenceVersionr(   r#   r   r   r   r      s   „ Ø!"Ðôr   zinitial upgrade not run!)r   ÚpickleÚdumpsr   Ú	VersionedÚloadsÚ	doUpgrader   )r   ÚpkclÚmnvs      r   Útest_nullVersionUpgradez$VersionTests.test_nullVersionUpgrade   s^   € ÷	ñ 	ô �|‰|œM›OÓ,ˆô	œF×,Ñ,ô 	ô �l‰l˜4Ó ˆÜ×ÑÔØ�vŠvÐ1Ð1Ó1‰vr   c                ó:  —  G d„ dt         j                  «      at        «       }|j                  s|j                  rJ d«       ‚t        j                  |«      }dt        _        t        j                  |«      }t        j                  «        |j                  sJ d«       ‚|j                  sJ d«       ‚t        j                  |«      }t        j                  |«      }t        j                  «        |j                  dk(  sJ d«       ‚|j                  dk(  sJ d«       ‚y )	Nc                  ó6   — e Zd ZdZdgZdZdZdd„Zdd„Zdd„Z	y)	ÚMyVersionedé   Úgarbagedatar   c                ó"   — d| _         d„ | _        y )NÚxxxc                 ó   — y)Nzcant persistr#   )Úqs    r   ú<lambda>z&MyVersioned.__init__.<locals>.<lambda>5   s   � r   )Úsomedatar6   r   s    r   r   zMyVersioned.__init__3   s   € Ø %�”Ù#;�Õ r   c                ó.   — | xj                   dz  c_         y r'   )Úv3r   s    r   ÚupgradeToVersion3zMyVersioned.upgradeToVersion37   ó   € Ø—’˜1‘–r   c                ó.   — | xj                   dz  c_         y r'   )Úv4r   s    r   ÚupgradeToVersion4zMyVersioned.upgradeToVersion4:   r@   r   Nr   )
r    r!   r"   r)   ÚpersistenceForgetsr>   rB   r   r?   rC   r#   r   r   r4   r4   ,   s)   „ Ø!"Ðà"/ ÐØˆBØˆBó<óôr   r4   zhasn't been upgraded yeté   zdidn't do version 3 upgradezdidn't do version 4 upgrader%   zupgraded unnecessarily)
r   r,   r4   r>   rB   r*   r+   r)   r-   r.   )r   ÚmvÚpicklÚobjs       r   Útest_versionUpgradez VersionTests.test_versionUpgrade)   sÞ   € ô	œ&×*Ñ*ô 	ô" ‹]ˆØ—E’E˜RŸUšUÐ?Ð%?Ó?Ð#Ü—‘˜RÓ ˆØ)*ŒÔ&Ü�l‰l˜5Ó!ˆÜ×ÑÔØ�vŠvÐ4Ð4Ó4ˆvØ�vŠvÐ4Ð4Ó4ˆvÜ—‘˜SÓ!ˆÜ�l‰l˜5Ó!ˆÜ×ÑÔØ�v‰v˜Š{Ð4Ð4Ó4ˆ{Ø�v‰v˜Š{Ð4Ð4Ó4‰{r   c                óú  —  G d„ dt         j                  «      at        dd«      }t        dd«      }t        j                  ||f«      }~~dt        _        d„ t        _        t        j                  |«      \  }}t        j                  «        | j                  |j                  d«       | j                  |j                  d«       | j                  |j                  «       | j                  |j                  «       y )Nc                  ó   — e Zd Zdd„Zdd„Zy)ÚClassWithCustomHashc                ó    — || _         || _        y ©N)ÚuniqueÚhash)r   rO   rP   s      r   r   zClassWithCustomHash.__init__O   s   € Ø$�”Ø �•	r   c                ó   — | j                   S rN   )rP   r   s    r   Ú__hash__zClassWithCustomHash.__hash__S   s   € Ø—y‘yÐ r   N)rO   ÚstrrP   Úintr   r   ©r   rT   )r    r!   r"   r   rR   r#   r   r   rL   rL   N   s   „ ó!ô!r   rL   Úv1r   Úv2r%   c                ó   — t        | dd«      S ©NÚupgradedT©Úsetattrr   s    r   r;   z3VersionTests.test_nonIdentityHash.<locals>.<lambda>\   s   € ¼WØ�*˜dó>
€ r   )r   r,   rL   r*   r+   r)   r(   r-   r.   ÚassertEqualrO   Ú
assertTruerZ   )r   rV   rW   Úpkls       r   Útest_nonIdentityHashz!VersionTests.test_nonIdentityHashK   sÁ   € ô	!¤&×"2Ñ"2ô 	!ô !  qÓ)ˆÜ   qÓ)ˆä�l‰l˜B ˜8Ó$ˆØ�Ø12ÔÔ.ñ1
ÔÔ-ô —‘˜cÓ"‰ˆˆBÜ×ÑÔØ×Ñ˜Ÿ™ DÔ)Ø×Ñ˜Ÿ™ DÔ)Ø�‰˜Ÿ™Ô$Ø�‰˜Ÿ™Õ$r   c                óô  ‡—  G d„ dt         j                  «      a G d„ dt         j                  «      at        «       }t        «       }t	        j
                  |«      t	        j
                  |«      c}Š~~dt        _        dˆfd„}|t        _        dt        _        d	d„}|t        _        t	        j                  |«      }t        j                  «        | j                  |j                  j                  «       y )
Nc                  ó   — e Zd Zy)Ú	ToyClassAN©r    r!   r"   r#   r   r   rc   rc   i   ó   „ Ør   rc   c                  ó   — e Zd Zy)Ú	ToyClassBNrd   r#   r   r   rg   rg   l   re   r   rg   r%   c                ób   •— t        j                  ‰«      | _        t        j                  «        y rN   )r*   r-   Úyr   r.   )r   ÚpklBs    €r   r(   zWVersionTests.test_upgradeDeserializesObjectsRequiringUpgrade.<locals>.upgradeToVersion1u   s   ø€ Ü—\‘\ $Ó'ˆDŒFÜ×ÑÕr   c                ó   — t        | dd«       y rY   r[   r   s    r   ÚsetUpgradedzQVersionTests.test_upgradeDeserializesObjectsRequiringUpgrade.<locals>.setUpgraded|   s   € Ü�D˜* dÕ+r   )r   r   r   r   )r   Úobjectr   r   )r   r,   rc   rg   r*   r+   r)   r(   r-   r.   r^   ri   rZ   )r   Úxri   ÚpklAr(   rl   rj   s         @r   Ú/test_upgradeDeserializesObjectsRequiringUpgradez<VersionTests.test_upgradeDeserializesObjectsRequiringUpgradef   s³   ø€ ô	œ×(Ñ(ô 	ô	œ×(Ñ(ô 	ô ‹KˆÜ‹KˆÜ—\‘\ !“_¤f§l¡l°1£oˆ
ˆˆdØˆqØ'(Œ	Ô$õ	ð '8Œ	Ô#Ø'(Œ	Ô$ó	,ð '2Œ	Ô#ä�L‰L˜ÓˆÜ×ÑÔØ�‰˜Ÿ™Ÿ™Õ%r   Nr   )r    r!   r"   r1   rI   r`   rp   r#   r   r   r   r      s   „ ó2ó& 5óD%ô6&r   r   c                  ó   — e Zd Zy)ÚVersionedSubClassNrd   r#   r   r   rr   rr   †   ó   „ Ør   rr   c                  ó   — e Zd Zy)ÚSecondVersionedSubClassNrd   r#   r   r   ru   ru   Š   rs   r   ru   c                  ó   — e Zd Zy)ÚVersionedSubSubClassNrd   r#   r   r   rw   rw   Ž   rs   r   rw   c                  ó   — e Zd Zy)ÚVersionedDiamondSubClassNrd   r#   r   r   ry   ry   ’   rs   r   ry   c                  ó0   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zy)ÚAybabtuTestszž
    L{styles._aybabtu} gets all of classes in the inheritance hierarchy of its
    argument that are strictly between L{Versioned} and the class itself.
    c                ój   — | j                  t        j                  t        j                  «      g «       y)zM
        L{styles._aybabtu} of L{Versioned} itself is an empty list.
        N)r]   r   Ú_aybabtur,   r   s    r   Útest_aybabtuStrictEmptyz$AybabtuTests.test_aybabtuStrictEmptyœ   s#   € ð 	×ÑœŸ™¬×)9Ñ)9Ó:¸BÕ?r   c                óV   — | j                  t        j                  t        «      g «       y)z�
        There are no classes I{between} L{VersionedSubClass} and L{Versioned},
        so L{styles._aybabtu} returns an empty list.
        N)r]   r   r}   rr   r   s    r   Útest_aybabtuStrictSubclassz'AybabtuTests.test_aybabtuStrictSubclass¢   s   € ð
 	×ÑœŸ™Ô):Ó;¸RÕ@r   c                ó`   — | j                  t        j                  t        «      t        g«       y)z†
        With a sub-sub-class of L{Versioned}, L{styles._aybabtu} returns a list
        containing the intervening subclass.
        N)r]   r   r}   rw   rr   r   s    r   Útest_aybabtuSubsubclassz$AybabtuTests.test_aybabtuSubsubclass©   s"   € ð
 	×ÑœŸ™Ô)=Ó>ÔARÐ@SÕTr   c                ót   — | j                  t        j                  t        «      t        t
        t        g«       y)z�
        For a diamond-shaped inheritance graph, L{styles._aybabtu} returns a
        list containing I{both} intermediate subclasses.
        N)r]   r   r}   ry   rw   rr   ru   r   s    r   Útest_aybabtuStrictzAybabtuTests.test_aybabtuStrict°   s+   € ð
 	×ÑÜ�O‰OÔ4Ó5Ü!Ô#4Ô6MÐNõ	
r   Nr   )r    r!   r"   Ú__doc__r~   r€   r‚   r„   r#   r   r   r{   r{   –   s   „ ñó
@óAóUô
r   r{   c                  ó   — e Zd Zdd„Zy)ÚMyEphemeralc                ó   — || _         y rN   ©rn   ©r   rn   s     r   r   zMyEphemeral.__init__¼   ó	   € Øˆ�r   N©rn   rT   r   r   r   r#   r   r   r‡   r‡   »   s   „ ôr   r‡   c                  ó   — e Zd Zdd„Zy)ÚEphemeralTestsc                óp  — t        d«      }| j                  |j                  t         «       | j                  |j                  d«       t	        j
                  |«      }t	        j                  |«      }| j                  |j                  t        j                  «       | j                  t        |d«      «       y )Né   rn   )r‡   r]   Ú	__class__rn   r*   r+   r-   r   Ú	EphemeralÚassertFalseÚhasattr)r   ÚorG   s      r   Útest_ephemeralzEphemeralTests.test_ephemeralÁ   s|   € Ü˜‹NˆØ×Ñ˜Ÿ™¤kÔ2Ø×Ñ˜Ÿ™˜aÔ ä—‘˜Q“ˆÜ�L‰L˜Óˆà×Ñ˜Ÿ™¤f×&6Ñ&6Ô7Ø×Ñœ  C›Õ)r   Nr   )r    r!   r"   r–   r#   r   r   rŽ   rŽ   À   s   „ ô	*r   rŽ   c                  ó   — e Zd Zdd„Zdd„Zy)Ú
Pickleablec                ó   — || _         y rN   r‰   rŠ   s     r   r   zPickleable.__init__Î   r‹   r   c                ó   — | j                   S rN   r‰   r   s    r   ÚgetXzPickleable.getXÑ   s   € Ø�v‰vˆr   NrŒ   rU   )r    r!   r"   r   r›   r#   r   r   r˜   r˜   Í   s   „ óôr   r˜   c                  ó   — e Zd ZdZdd„Zy)ÚNotPickleablez)
    A class that is not pickleable.
    c                ó   — t        d«      ‚)z9
        Raise an exception instead of pickling.
        zNot serializable.)Ú	TypeErrorr   s    r   Ú
__reduce__zNotPickleable.__reduce__Ú   s   € ô Ð+Ó,Ð,r   N©r   r   )r    r!   r"   r…   r    r#   r   r   r�   r�   Õ   s   „ ñô-r   r�   c                  ó   — e Zd ZdZdd„Zy)ÚCopyRegisteredzb
    A class that is pickleable only because it is registered with the
    C{copyreg} module.
    c                ó"   — t        «       | _        y)zE
        Ensure that this object is normally not pickleable.
        N)r�   ÚnotPickleabler   s    r   r   zCopyRegistered.__init__ç   s   € ô +›_ˆÕr   Nr   )r    r!   r"   r…   r   r#   r   r   r£   r£   á   s   „ ñô
-r   r£   c                  ó   — e Zd ZdZy)ÚCopyRegisteredLoadedz2
    L{CopyRegistered} after unserialization.
    N)r    r!   r"   r…   r#   r   r   r§   r§   î   s   „ òr   r§   c                ó   — t         dfS )zé
    Externally implement C{__reduce__} for L{CopyRegistered}.

    @param cr: The L{CopyRegistered} instance.

    @return: a 2-tuple of callable and argument list, in this case
        L{CopyRegisteredLoaded} and no arguments.
    r#   )r§   )Úcrs    r   ÚreduceCopyRegisteredrª   ô   s   € ô   Ð#Ð#r   c                  ó$   — e Zd ZU dZded<   dd„Zy)ÚAú
    dummy class
    zCallable[[], None]Úbmethodc                 ó   — y rN   r#   r   s    r   Úamethodz	A.amethod
  ó   € Ør   Nr   )r    r!   r"   r…   Ú__annotations__r°   r#   r   r   r¬   r¬     s   … ñð  Óôr   r¬   c                  ó$   — e Zd ZU dZded<   dd„Zy)ÚBr­   r¬   Úac                 ó   — y rN   r#   r   s    r   r®   z	B.bmethod  r±   r   Nr   )r    r!   r"   r…   r²   r®   r#   r   r   r´   r´     s   … ñð 	ƒDôr   r´   c                  ó   — y rN   r#   r#   r   r   Úfunktionr¸     s   € Ør   c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚPicklingTestsz$Test pickling of extra object types.c                óŒ   — t        j                  t        «      }t        j                  |«      }| j	                  |t        «       y rN   )r*   r+   r   r-   r]   )r   rG   r•   s      r   Útest_modulezPicklingTests.test_module   s.   € Ü—‘œVÓ$ˆÜ�L‰L˜ÓˆØ×Ñ˜œFÕ#r   c                ó  — t        d«      }t        j                  |j                  «      }t        j                  |«      }| j                   |«       d«       | j                  t        |«      t        |j                  «      «       y )NrE   )r˜   r*   r+   r›   r-   r]   Útype)r   rH   rG   r•   s       r   Útest_instanceMethodz!PicklingTests.test_instanceMethod%  sY   € Ü˜‹mˆÜ—‘˜SŸX™XÓ&ˆÜ�L‰L˜ÓˆØ×Ñ™›˜aÔ Ø×Ñœ˜a›¤$ s§x¡x£.Õ1r   Nr   )r    r!   r"   r…   r¼   r¿   r#   r   r   rº   rº     s   „ Ù.ó$ô
2r   rº   c                  ó   — e Zd ZdZdd„Zy)ÚStringIOTransitionTestsz–
    When pickling a cStringIO in Python 2, it should unpickle as a BytesIO or a
    StringIO in Python 3, depending on the type of its contents.
    c                ó²   — d}t        j                  |«      }| j                  |t        j                  «       | j                  |j                  «       d«       y)zg
        A cStringIO pickled with bytes in it will yield an L{io.BytesIO} on
        python 3.
        sE   ctwisted.persisted.styles
unpickleStringI
p0
(S'test'
p1
I0
tp2
Rp3
.ÚtestN)r*   r-   ÚassertIsInstanceÚioÚStringIOr]   Úgetvalue)r   ÚpickledStringIWithTextÚloadeds      r   Útest_unpickleBytesIOz,StringIOTransitionTests.test_unpickleBytesIO3  sH   € ð-ð 	ô —‘Ð4Ó5ˆØ×Ñ˜f¤b§k¡kÔ2Ø×Ñ˜Ÿ™Ó*¨FÕ3r   Nr   )r    r!   r"   r…   rÊ   r#   r   r   rÁ   rÁ   -  s   „ ñô
4r   rÁ   c                  ó4   — e Zd ZU d ed<   d ed<   ded<   dd„Zy)ÚEvilSourcerorrµ   Úbrm   Úcc                ój   — | | _         | | j                   _        || j                   j                  _        y rN   )rµ   rÍ   rÎ   rŠ   s     r   r   zEvilSourceror.__init__F  s#   € ØˆŒØˆ�‰ŒØˆ�‰�‰�
r   N)rn   rm   r   r   )r    r!   r"   r²   r   r#   r   r   rÌ   rÌ   A  s   … ØÓØÓØƒIôr   rÌ   c                  ó(   — e Zd ZU ded<   dd„Zdd„Zy)ÚNonDictStaterS   Ústatec                ó   — | j                   S rN   ©rÒ   r   s    r   Ú__getstate__zNonDictState.__getstate__O  s   € Ø�z‰zÐr   c                ó   — || _         y rN   rÔ   )r   rÒ   s     r   Ú__setstate__zNonDictState.__setstate__R  s	   € Øˆ�
r   N)r   rS   )rÒ   rS   r   r   )r    r!   r"   r²   rÕ   r×   r#   r   r   rÑ   rÑ   L  s   … ØƒJóôr   rÑ   Ú_CircularTupleTypec                  ó\   — 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y)ÚAOTTestsc           
     óÐ   — ddddt        ddd«      ddt        j                  dz   d t        f
}t	        j
                  t	        j                  |«      «      }| j                  ||«       y )	Nr%   g       @y              @Tr5   r�   ÚhelloÚworld)ÚsliceÚsysÚmaxsizeÚEllipsisr	   ÚunjellyFromSourceÚjellyToSourcer]   )r   rH   ÚrtObjs      r   Útest_simpleTypeszAOTTests.test_simpleTypesZ  sd   € àØØØÜ�!�Q˜‹NØØÜ�K‰K˜!‰OØÜð
ˆô ×%Ñ%¤c×&7Ñ&7¸Ó&<Ó=ˆØ×Ñ˜˜eÕ$r   c                óX  — t        «       }t        «       }|j                  |_        ||_        t	        j
                  t	        j                  |«      «      j                  j                  }| j                  t	        j                  |«      j                  t	        j                  |«      «       y rN   )r¬   r´   r®   rµ   r	   râ   rã   r]   Ú_selfOfMethodr‘   Ú_classOfMethod)r   rµ   rÍ   Úim_s       r   Útest_methodSelfIdentityz AOTTests.test_methodSelfIdentityj  su   € Ü‹CˆÜ‹CˆØ—I‘IˆŒ	ØˆŒÜ×#Ñ#¤C×$5Ñ$5°aÓ$8Ó9×;Ñ;×CÑCˆØ×Ñœ×*Ñ*¨3Ó/×9Ñ9¼3×;MÑ;MÈcÓ;RÕSr   c                ó0  — t        «       }t        «       }|j                  |_        ||_        t        j                  }t        `	 | j	                  t
        t        j                  t        j                  |«      «       |t        _        y# |t        _        w xY w)z°
        If a class change after an instance has been created,
        L{aot.unjellyFromSource} shoud raise a C{TypeError} when trying to
        unjelly the instance.
        N)	r¬   r´   r®   rµ   ÚassertRaisesrŸ   r	   râ   rã   )r   rµ   rÍ   Úsavedbmethods       r   Útest_methodNotSelfIdentityz#AOTTests.test_methodNotSelfIdentityr  sj   € ô ‹CˆÜ‹CˆØ—I‘IˆŒ	ØˆŒÜ—y‘yˆÜˆIð	%Ø×Ñœi¬×)>Ñ)>Ä×@QÑ@QÐRSÓ@TÔUà$ŒA�Iø˜ŒA�Iús   Á8B ÂBc                ól   —  G d„ d«      }| j                  t        t        j                   |«       «       y)z±
        L{aot.jellyToSource} should raise a C{TypeError} when trying to jelly
        an unknown type without a C{__dict__} property or C{__getstate__}
        method.
        c                  ó0   — e Zd Zedd„«       Zedd„«       Zy)ú2AOTTests.test_unsupportedType.<locals>.UnknownTypec                ó   — t        «       ‚rN   ©ÚAttributeErrorr   s    r   Ú__dict__z;AOTTests.test_unsupportedType.<locals>.UnknownType.__dict__‹  ó   € ä$Ó&Ð&r   c                ó   — t        «       ‚rN   ró   r   s    r   rÕ   z?AOTTests.test_unsupportedType.<locals>.UnknownType.__getstate__�  rö   r   Nr¡   )r    r!   r"   Úpropertyrõ   rÕ   r#   r   r   ÚUnknownTyperñ   Š  s(   „ Øò'ó ð'ð ò'ó ñ'r   rù   N)rì   rŸ   r	   rã   )r   rù   s     r   Útest_unsupportedTypezAOTTests.test_unsupportedTypeƒ  s(   € ÷	'ñ 	'ð 	×Ñœ)¤S×%6Ñ%6¹»ÕFr   c                ó   — t        j                  «       j                  }d|dœ}dddddddd	d	z  t        t         j                  |t        g}t        |«      }|j                  |«       |j                  |«       |j                  |«       t        j                  t        j                  ||g«      «      }|d
   |d   u sJ ‚|d   d
d |d
d k(  sJ ‚y )NrÝ   )rÜ   Úmethodr%   r5   r�   zhe	llo

"x world!u   goodbye 
	á€� world!g      ð?éd   r   é   )	r	   Ú
AOTJellierÚ	jellyToAOr   r¸   ÚtupleÚappendrâ   rã   )r   ÚajÚdÚlÚtÚujs         r   Útest_basicIdentityzAOTTests.test_basicIdentity•  sÐ   € ô �^‰^Ó×'Ñ'ˆØ¨Ñ,ˆàØØØ"Ø'ØØØ�‰HÜÜ�N‰NØÜð
ˆô �!‹HˆØ	�‰�ŒØ	�‰�ŒØ	�‰�ŒÜ×"Ñ"¤3×#4Ñ#4°a¸°VÓ#<Ó=ˆØ�!‰u˜˜1™‰~Ðˆ~Ø�!‰u�Q�qˆz˜Q˜q ˜VÒ#Ð#Ñ#r   c                ó¨   — t        «       }d|_        t        j                  t        j                  |«      «      j                  |j                  k(  sJ ‚y )Nz	meringue!)rÑ   rÒ   r	   râ   rã   )r   rµ   s     r   Útest_nonDictStatezAOTTests.test_nonDictState°  s>   € Ü‹NˆØˆŒÜ×$Ñ$¤S×%6Ñ%6°qÓ%9Ó:×@Ñ@ÀAÇGÁGÒKÐKÑKr   c                ó�   — t        j                  t        j                  t        «       «      «      }| j	                  |t
        «       y)zƒ
        L{aot.jellyToSource} and L{aot.unjellyFromSource} honor functions
        registered in the pickle copy registry.
        N)r	   râ   rã   r£   rÄ   r§   )r   r  s     r   Útest_copyRegzAOTTests.test_copyRegµ  s3   € ô
 ×"Ñ"¤3×#4Ñ#4´^Ó5EÓ#FÓGˆØ×Ñ˜bÔ"6Õ7r   c                ó0  — t        t        g «      «      }t        j                  |«      }t        j                  |«      }|j                  |u sJ ‚|j                  j
                  |j
                  u sJ ‚|j                  |j                  j                  usJ ‚y rN   )rÌ   r	   Ú
jellyToAOTÚunjellyFromAOTrµ   rÍ   rÎ   )r   r•   Új1Úojs       r   Útest_funkyReferenceszAOTTests.test_funkyReferences½  sq   € Üœ-¨Ó+Ó,ˆÜ�^‰^˜AÓˆÜ×Ñ Ó#ˆà�t‰t�r‰zÐˆzØ�t‰t�v‰v˜Ÿ™‰~Ðˆ~Ø�t‰t˜2Ÿ4™4Ÿ6™6Ñ!Ð!Ñ!r   c                ó  — g }|df}|j                  |«       t        j                  |«      }t        j                  |«      }| j	                  |d   t
        «       | j                  |d   d   |«       | j                  |d   d   d«       y)zS
        L{aot.jellyToAOT} can persist circular references through tuples.
        iá  r   r%   N)r  r	   r  r  rÄ   r  ÚassertIsr]   )r   r  r  r  r  s        r   Útest_circularTuplezAOTTests.test_circularTupleÆ  s}   € ð !#ˆØ�ˆIˆØ	�‰�ŒÜ�^‰^˜AÓˆÜ×Ñ Ó#ˆØ×Ñ˜b ™e¤UÔ+Ø�‰�b˜‘e˜A‘h Ô#Ø×Ñ˜˜A™˜q™ 4Õ(r   c                ó|   — | j                  t        j                  ddg ii«      t        j                  d«      «       y)z:
        The generated serialization is indented.
        rÜ   rÝ   z|                app={
                  'hello':{
                    'world':[],
                    },
                  }N)r]   r	   rã   ÚtextwrapÚdedentr   s    r   ÚtestIndentifyzAOTTests.testIndentifyÓ  s:   € ð 	×ÑÜ×Ñ˜w¨°"¨Ð6Ó7Ü�O‰Oðóõ
	
r   Nr   )r    r!   r"   rå   rê   rî   rú   r  r
  r  r  r  r  r#   r   r   rÚ   rÚ   Y  s7   „ ó%ó Tó%ó"Gó$$ó6Ló
8ó"ó)ô
r   rÚ   c                  ó8   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zy)	ÚCrefUtilTestsz 
    Tests for L{crefutil}.
    c                ór   — t        j                  i «      }| j                  t        |j                  dd«       y)zO
        L{crefutil._DictKeyAndValue} only support keys C{0} and C{1}.
        r5   r�   N)r
   Ú_DictKeyAndValuerì   ÚRuntimeErrorÚ__setitem__©r   r  s     r   Útest_dictUnknownKeyz!CrefUtilTests.test_dictUnknownKeyé  s,   € ô ×%Ñ% bÓ)ˆØ×Ñœ,¨¯©°q¸!Õ<r   c                óz   — t        j                  «       }d|d<   | j                  t        |j                  dd«       y)zI
        L{crefutil._Defer} can be assigned a key only one time.
        r%   r   N)r
   Ú_Deferrì   r  r  r   s     r   Útest_deferSetMultipleTimesz(CrefUtilTests.test_deferSetMultipleTimesð  s1   € ô �O‰OÓˆØˆˆ!‰Ø×Ñœ,¨¯©°q¸!Õ<r   c                ó€   — t        j                  g d¢t        «      }| j                  t        |j
                  i d«       y)z¹
        A L{crefutil._Container} where all of its elements are known at
        construction time is nonsensical and will result in errors in any call
        to addDependant.
        )r%   r5   r�   z	ignore-meN)r
   Ú
_ContainerÚlistrì   ÚAssertionErrorÚaddDependant)r   Ú	containers     r   Ú&test_containerWhereAllElementsAreKnownz4CrefUtilTests.test_containerWhereAllElementsAreKnownø  s0   € ô ×'Ñ'ª	´4Ó8ˆ	Ø×Ñœ.¨)×*@Ñ*@À"ÀkÕRr   c                ó|   — | j                  t        t        «       j                  t	        j
                  «       d«       y)zù
        If a dictionary key contains a circular reference (which is probably a
        bad practice anyway) it will be resolved by a
        L{crefutil._DictKeyAndValue}, not by placing a L{crefutil.NotKnown}
        into a dictionary key.
        ÚvalueN)rì   r(  Údictr  r
   ÚNotKnownr   s    r   Ú.test_dontPutCircularReferencesInDictionaryKeysz<CrefUtilTests.test_dontPutCircularReferencesInDictionaryKeys  s,   € ð 	×ÑÜœD›F×.Ñ.´×0AÑ0AÓ0CÀWõ	
r   c                ó†   — | j                  t        t        j                  dt        j                  «       t
        «      «       y)zÛ
        L{crefutil._InstanceMethod} raises L{AssertionError} to indicate it
        should not be called.  This should not be possible with any of its API
        clients, but is provided for helping to debug.
        Úno_nameN)rì   r(  r
   Ú_InstanceMethodr/  r¾   r   s    r   Ú*test_dontCallInstanceMethodsThatArentReadyz8CrefUtilTests.test_dontCallInstanceMethodsThatArentReady  s0   € ð 	×ÑÜÜ×$Ñ$ Y´×0AÑ0AÓ0CÄTÓJõ	
r   Nr   )	r    r!   r"   r…   r!  r$  r+  r0  r4  r#   r   r   r  r  ä  s!   „ ñó=ó=óSó	
ô	
r   r  )r©   rm   r   z,tuple[type[CopyRegisteredLoaded], tuple[()]]r   )0Ú
__future__r   ÚcopyregrÅ   r*   rß   r  Útypingr   r   r   r   r   Útwisted.persistedr	   r
   r   Útwisted.trialr   Útwisted.trial.unittestr   r   r,   rr   ru   rw   ry   r{   r’   r‡   rŽ   r˜   r�   r£   r§   rª   r¬   r´   r¸   rº   rÁ   rÌ   rÑ   rT   rØ   rÚ   r  Ú	testCasesr#   r   r   ú<module>r<     st  ðõ #ó Û 	Û Û 
Û ß -Ó -å ÷ 4Ñ 3Ý "Ý +ôn&�8ô n&ôb	˜×(Ñ(ô 	ô	˜f×.Ñ.ô 	ô	Ð,ô 	ô	Ð3Ð5Lô 	ô"
�8ô "
ôJ�&×"Ñ"ô ô

*�Xô 
*÷ñ ÷	-ñ 	-÷
-ñ 
-÷ñ ó	$ð €‡�ˆ~Ð3Ô 4÷ñ ÷ñ ó	ô2�Hô 2ô 4˜hô 4÷(ñ ÷ñ ð ˜%Ð 4°cÐ 9Ñ:Ñ;Ð ôH
ˆxô H
ôV1
�Hô 1
ðh ˜>¨=Ð9�	r   