Ë
    ojƒ  ã                   ó^   — d Z ddlZddlmZ ddlmZ  G d„ d«      Zd„ Zd„ Z G d	„ d
e«      Z	y)zt
Tests for miscellaneous behaviors of the top-level L{twisted} package (ie, for
the code in C{twisted/__init__.py}.
é    N)Ú
ModuleType)ÚTestCasec                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚSetAsideModulezž
    L{SetAsideModule} is a context manager for temporarily removing a module
    from C{sys.modules}.

    @ivar name: The name of the module to remove.
    c                 ó   — || _         y ©N)Úname)Úselfr	   s     ú;/usr/lib/python3/dist-packages/twisted/test/test_twisted.pyÚ__init__zSetAsideModule.__init__   s	   € Øˆ�	ó    c                 ó  — t        t        j                  j                  «       «      D ��ci c]5  \  }}|| j                  k(  s|j                  | j                  dz   «      r||“Œ7 }}}|D ]  }t        j                  |= Œ |S c c}}w )z¥
        Find the given module and all of its hierarchically inferior modules in
        C{sys.modules}, remove them from it, and return whatever was found.
        ú.)ÚlistÚsysÚmodulesÚitemsr	   Ú
startswith)r
   r	   Ú
moduleNameÚmoduler   s        r   Ú	_unimportzSetAsideModule._unimport   s„   € ô )-¬S¯[©[×->Ñ->Ó-@Ó(A÷
á$�˜VØ˜dŸi™iÒ'¨:×+@Ñ+@ÀÇÁÈSÁÔ+Qð ˜Ñð
ˆñ 
ð
 ò 	"ˆDÜ—‘˜DÑ!ð	"àˆùó
s   «:Bc                 óD   — | j                  | j                  «      | _        y r   )r   r	   r   )r
   s    r   Ú	__enter__zSetAsideModule.__enter__+   s   € Ø—~‘~ d§i¡iÓ0ˆ�r   c                 óŒ   — | j                  | j                  «       t        j                  j	                  | j                  «       y r   )r   r	   r   r   Úupdate)r
   ÚexcTypeÚexcValueÚ	tracebacks       r   Ú__exit__zSetAsideModule.__exit__.   s(   € Ø�‰�t—y‘yÔ!Ü�‰×Ñ˜4Ÿ<™<Õ(r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   © r   r   r   r      s   „ ñòòò1ó)r   r   c                 ó`   — i }t        d| |«       t        j                  j                  |«       y)a  
    Take a mapping defining a package and turn it into real C{ModuleType}
    instances in C{sys.modules}.

    Consider these example::

        a = {"foo": "bar"}
        b = {"twisted": {"__version__": "42.6"}}
        c = {"twisted": {"plugin": {"getPlugins": stub}}}

    C{_install(a)} will place an item into C{sys.modules} with C{"foo"} as the
    key and C{"bar" as the value.

    C{_install(b)} will place an item into C{sys.modules} with C{"twisted"} as
    the key.  The value will be a new module object.  The module will have a
    C{"__version__"} attribute with C{"42.6"} as the value.

    C{_install(c)} will place an item into C{sys.modules} with C{"twisted"} as
    the key.  The value will be a new module object with a C{"plugin"}
    attribute.  An item will also be placed into C{sys.modules} with the key
    C{"twisted.plugin"} which refers to that module object.  That module will
    have an attribute C{"getPlugins"} with a value of C{stub}.

    @param modules: A mapping from names to definitions of modules.  The names
        are native strings like C{"twisted"} or C{"unittest"}.  Values may be
        arbitrary objects.  Any value which is not a dictionary will be added to
        C{sys.modules} unmodified.  Any dictionary value indicates the value is
        a new module and its items define the attributes of that module.  The
        definition of this structure is recursive, so a value in the dictionary
        may be a dictionary to trigger another level of processing.

    @return: L{None}
    N)Ú_makePackagesr   r   r   )r   Úresults     r   Ú_installr(   3   s(   € ðD €FÜ�$˜ Ô(Ü‡K�K×Ñ�vÕr   c                 óÌ  — i }t        |j                  «       «      D ]Å  \  }}| €Mt        |t        «      r7t	        |«      }|j
                  j                  t        |||«      «       |||<   ŒO|||<   ŒUt        |t        «      r\t	        | j                  dz   |z   «      }|j
                  j                  t        |||«      «       ||| j                  dz   |z   <   |||<   ŒÁ|||<   ŒÇ |S )aË  
    Construct module objects (for either modules or packages).

    @param parent: L{None} or a module object which is the Python package
        containing all of the modules being created by this function call.  Its
        name will be prepended to the name of all created modules.

    @param attributes: A mapping giving the attributes of the particular module
        object this call is creating.

    @param result: A mapping which is populated with all created module names.
        This is suitable for use in updating C{sys.modules}.

    @return: A mapping of all of the attributes created by this call.  This is
        suitable for populating the dictionary of C{parent}.

    @see: L{_install}.
    r   )	r   r   Ú
isinstanceÚdictr   Ú__dict__r   r&   r    )ÚparentÚ
attributesr'   Úattrsr	   Úvaluer   s          r   r&   r&   Z   sÞ   € ð& €EÜ˜J×,Ñ,Ó.Ó/ò $‰ˆˆeØˆ>Ü˜%¤Ô&Ü# DÓ)�Ø—‘×&Ñ&¤}°V¸UÀFÓ'KÔLØ%��t’à$��t’ä˜%¤Ô&Ü# F§O¡O°cÑ$9¸DÑ$@ÓA�Ø—‘×&Ñ&¤}°V¸UÀFÓ'KÔLØ7=��v—‘¨Ñ,¨tÑ3Ñ4Ø$��d’à#��d’ð$ð  €Lr   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚMakePackagesTestszh
    Tests for L{_makePackages}, a helper for populating C{sys.modules} with
    fictional modules.
    c                 ón   — i }t        dt        d¬«      |«       | j                  |t        d¬«      «       y)z‘
        A non-C{dict} value in the attributes dictionary passed to L{_makePackages}
        is preserved unchanged in the return value.
        NÚreactor)r4   )r&   r+   ÚassertEqual©r
   r   s     r   Útest_nonModulez MakePackagesTests.test_nonModule‡   s/   € ð
 ˆÜ�dœD¨Ô3°WÔ=Ø×Ñ˜¤$¨yÔ"9Õ:r   c                 ó$  — i }t        dt        t        d¬«      ¬«      |«       | j                  |t        «       | j                  |d   t        «       | j	                  d|d   j
                  «       | j	                  d|d   j                  «       y)zÑ
        A C{dict} value in the attributes dictionary passed to L{_makePackages}
        is turned into a L{ModuleType} instance with attributes populated from
        the items of that C{dict} value.
        NÚ123©Úversion©Útwistedr=   )r&   r+   ÚassertIsInstancer   r5   r    r;   r6   s     r   Útest_moduleWithAttributez*MakePackagesTests.test_moduleWithAttribute�   sz   € ð ˆÜ�dœD¬°eÔ)<Ô=¸wÔGØ×Ñ˜g¤tÔ,Ø×Ñ˜g iÑ0´*Ô=Ø×Ñ˜ G¨IÑ$6×$?Ñ$?Ô@Ø×Ñ˜ ¨	Ñ 2× :Ñ :Õ;r   c           
      óä  — i }t        dt        t        t        d¬«      ¬«      ¬«      |«       | j                  |t        «       | j                  |d   t        «       | j	                  d|d   j
                  «       | j                  |d   j                  t        «       | j	                  d|d   j                  j
                  «       | j	                  d|d   j                  j                  «       y)z¥
        Processing of the attributes dictionary is recursive, so a C{dict} value
        it contains may itself contain a C{dict} value to the same effect.
        NÚ321r:   )Úwebr<   r=   ztwisted.web)r&   r+   r>   r   r5   r    rB   r;   r6   s     r   Útest_packageWithModulez(MakePackagesTests.test_packageWithModule�   sÁ   € ð
 ˆÜ�dœD¬´$¸uÔ2EÔ)FÔGÈÔQØ×Ñ˜g¤tÔ,Ø×Ñ˜g iÑ0´*Ô=Ø×Ñ˜ G¨IÑ$6×$?Ñ$?Ô@Ø×Ñ˜g iÑ0×4Ñ4´jÔAØ×Ñ˜¨°	Ñ(:×(>Ñ(>×(GÑ(GÔHØ×Ñ˜ ¨	Ñ 2× 6Ñ 6× >Ñ >Õ?r   N)r    r!   r"   r#   r7   r?   rC   r$   r   r   r2   r2   �   s   „ ñò
;ò<ó@r   r2   )
r#   r   Útypesr   Útwisted.trial.unittestr   r   r(   r&   r2   r$   r   r   ú<module>rF      s:   ðñó Ý å +÷
)ñ )òB$òN$ôN(@˜õ (@r   