§
    Étºf¹o  ã                   óp  — d Z ddlZddlmZmZmZ ddlmZmZm	Z	 ddl
mZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ  G d„ dej        ¦  «        Z G d„ d¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z ej         eej!        ¦  «          G d„ dej        ¦  «        Z"dS )z%
Tests for L{twisted.words.service}.
é    N)ÚcheckersÚcredentialsÚportal)ÚaddressÚdeferÚreactor)ÚDeferredÚDeferredListÚmaybeDeferredÚsucceed)Úpb)Úproto_helpers)Úunittest)ÚewordsÚservice)Úircc                   óD   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )Ú
RealmTestsc                 óÈ  — t          j        d¦  «        }d|                     ¦   «         z   }t          |d|                     ¦   «         z   ¦  «        }t          |d|                     ¦   «         z   ¦  «        }d|                     ¦   «         z   dz   }t          t
          d|                     ¦   «         z   ¦  «        }t          t
          d|                     ¦   «         z   ¦  «        }|                       ||¦  «        ¦  «        }	|                      ||	j        ¦  «         |  	                     ||¦  «        ¦  «         
                    |¦  «         t          ||d¦  «         |                       |d	|                     ¦   «         z   ¦  «        ¦  «        }	|                      d	|                     ¦   «         z   |	j        ¦  «         |                       |d	|                     ¦   «         z   ¦  «        ¦  «        }
|                      |	|
¦  «         t          ||d
¦  «         |  	                     |d|                     ¦   «         z   ¦  «        ¦  «         
                    |¦  «         d S )NÚ	realmnameÚtestÚcreateÚgetÚ	OnRequestÚ	DuplicateÚNoSuchTÚnewFÚanother)r   ÚInMemoryWordsRealmÚlowerÚgetattrÚtitler   ÚsuccessResultOfÚassertEqualÚnameÚfailureResultOfÚtrapÚsetattrÚassertIdentical)ÚselfÚkindÚrealmr%   r   r   ÚflagÚdupExcÚ	noSuchExcÚpÚnewps              ú^/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/words/test/test_service.pyÚ_entityCreationTestzRealmTests._entityCreationTest   s  € åÔ*¨;Ñ7Ô7ˆà˜Ÿ
š
™œÑ$ˆÝ˜ ¨4¯:ª:©<¬<Ñ 7Ñ8Ô8ˆÝ�e˜U T§Z¢Z¡\¤\Ñ1Ñ2Ô2ˆØ˜$Ÿ*š*™,œ,Ñ&¨Ñ4ˆÝ� ¨t¯zªz©|¬|Ñ!;Ñ<Ô<ˆÝ�F H¨t¯zªz©|¬|Ñ$;Ñ<Ô<ˆ	ð × Ò   ¨¡¤Ñ.Ô.ˆØ×Ò˜˜qœvÑ&Ô&Ð&ð 	×Ò˜V˜V D™\œ\Ñ*Ô*×/Ò/°Ñ7Ô7Ð7õ 	��t˜TÑ"Ô"Ð"Ø× Ò    U¨T¯ZªZ©\¬\Ñ%9Ñ!:Ô!:Ñ;Ô;ˆØ×Ò˜ §¢¡¤Ñ-¨q¬vÑ6Ô6Ð6ð ×#Ò# C C¨°·
²
±´Ñ(<Ñ$=Ô$=Ñ>Ô>ˆØ×Ò˜Q Ñ%Ô%Ð%õ 	��t˜UÑ#Ô#Ð#Ø×Ò˜S˜S ¨T¯ZªZ©\¬\Ñ!9Ñ:Ô:Ñ;Ô;×@Ò@ÀÑKÔKÐKÐKÐKó    c                 ó,   — |                       d¦  «        S )NÚUser©r3   ©r*   s    r2   ÚtestUserCreationzRealmTests.testUserCreation4   s   € Ø×'Ò'¨Ñ/Ô/Ð/r4   c                 ó,   — |                       d¦  «        S )NÚGroupr7   r8   s    r2   ÚtestGroupCreationzRealmTests.testGroupCreation7   s   € Ø×'Ò'¨Ñ0Ô0Ð0r4   c                 ó   — t          j        d¦  «        }|                      |                     d¦  «        ¦  «        }|                      |                     d¦  «        ¦  «        }|                      ||¦  «         |                      |                     d¦  «        ¦  «        }|                      ||¦  «         |                      |                     d¦  «        ¦  «                             t          j
        ¦  «         d S )Nr   ÚtestuserÚ
nosuchuser)r   r   r#   Ú
createUserÚgetUserr)   Ú
lookupUserr&   r'   r   Ú
NoSuchUser)r*   r,   ÚuserÚ	retrievedÚlookedUps        r2   ÚtestUserRetrievalzRealmTests.testUserRetrieval:   sà   € ÝÔ*¨;Ñ7Ô7ˆð ×#Ò# E×$4Ò$4°ZÑ$@Ô$@ÑAÔAˆð ×(Ò(¨¯ª°zÑ)BÔ)BÑCÔCˆ	Ø×Ò˜T 9Ñ-Ô-Ð-ð ×'Ò'¨×(8Ò(8¸Ñ(DÔ(DÑEÔEˆØ×Ò˜Y¨Ñ1Ô1Ð1ð 
×	Ò	˜e×.Ò.¨|Ñ<Ô<Ñ	=Ô	=×	BÒ	BÅ6ÔCTÑ	UÔ	UÐ	UÐ	UÐ	Ur4   c                 óÊ  — t          j        d¦  «        }t          j        d¦  «        }|                      |                     |¦  «        ¦  «        }|                      ||¦  «         |                      |                     d¦  «        ¦  «        }|                      ||¦  «         |                      |                     d¦  «        ¦  «        }|                      ||¦  «         d S )Nr   r>   )r   r   r6   r#   ÚaddUserr)   rA   rB   )r*   r,   r0   rD   rE   rF   s         r2   ÚtestUserAdditionzRealmTests.testUserAdditionK   sÎ   € ÝÔ*¨;Ñ7Ô7ˆõ ŒL˜Ñ$Ô$ˆØ×#Ò# E§M¢M°!Ñ$4Ô$4Ñ5Ô5ˆØ×Ò˜Q Ñ%Ô%Ð%ð ×(Ò(¨¯ª°zÑ)BÔ)BÑCÔCˆ	Ø×Ò˜T 9Ñ-Ô-Ð-ð ×'Ò'¨×(8Ò(8¸Ñ(DÔ(DÑEÔEˆØ×Ò˜Y¨Ñ1Ô1Ð1Ð1Ð1r4   c                 ó„  — t          j        d¦  «        }|                      |                     d¦  «        ¦  «        }|                      |                     d¦  «        ¦  «        }|                      ||¦  «         |                      |                     d¦  «        ¦  «                             t          j	        ¦  «         d S )Nr   Ú	testgroupÚnosuchgroup)
r   r   r#   ÚcreateGroupÚgetGroupr)   r&   r'   r   ÚNoSuchGroup)r*   r,   ÚgrouprE   s       r2   ÚtestGroupRetrievalzRealmTests.testGroupRetrieval[   sŸ   € ÝÔ*¨;Ñ7Ô7ˆà×$Ò$ U×%6Ò%6°{Ñ%CÔ%CÑDÔDˆà×(Ò(¨¯ª¸Ñ)DÔ)DÑEÔEˆ	à×Ò˜U IÑ.Ô.Ð.à	×	Ò	˜eŸnšn¨]Ñ;Ô;Ñ	<Ô	<×	AÒ	AÅ&ÔBTÑ	UÔ	UÐ	UÐ	UÐ	Ur4   c                 ó"  — t          j        d¦  «        }t          j        d¦  «        }|                      |                     |¦  «        ¦  «         |                      |                     d¦  «        ¦  «        }|                      ||¦  «         d S )Nr   rL   Ú	testGroup)r   r   r;   r#   ÚaddGrouprO   r)   )r*   r,   r0   rQ   s       r2   ÚtestGroupAdditionzRealmTests.testGroupAdditionf   s|   € ÝÔ*¨;Ñ7Ô7ˆåŒM˜+Ñ&Ô&ˆØ×Ò˜UŸ^š^¨AÑ.Ô.Ñ/Ô/Ð/Ø×$Ò$ U§^¢^°KÑ%@Ô%@ÑAÔAˆØ×Ò˜Q Ñ&Ô&Ð&Ð&Ð&r4   c                 óÎ   — t          j        d¦  «        }|                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         dS )zÚ
        Try creating a group with the same name as an existing user and
        assert that it succeeds, since users and groups should not be in the
        same namespace and collisions should be impossible.
        r   r   N)r   r   r#   r@   rN   )r*   r,   s     r2   ÚtestGroupUsernameCollisionz%RealmTests.testGroupUsernameCollisionn   s^   € õ Ô*¨;Ñ7Ô7ˆà×Ò˜U×-Ò-¨fÑ5Ô5Ñ6Ô6Ð6Ø×Ò˜U×.Ò.¨vÑ6Ô6Ñ7Ô7Ð7Ð7Ð7r4   c                 óŒ  — t          j        d¦  «        }|                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     ¦   «         ¦  «        }d„ |D ¦   «         }|                     ¦   «          |                      |ddg¦  «         d S )Nr   ÚgrouponeÚgrouptwoc                 ó   — g | ]	}|j         ‘Œ
S © )r%   )Ú.0Úgs     r2   ú
<listcomp>z.RealmTests.testEnumeration.<locals>.<listcomp>�   s   € Ð$Ð$Ð$˜ˆQŒVÐ$Ð$Ð$r4   )r   r   r#   rN   Ú
itergroupsÚsortr$   )r*   r,   ÚgroupsÚns       r2   ÚtestEnumerationzRealmTests.testEnumerationy   s¶   € ÝÔ*¨;Ñ7Ô7ˆØ×Ò˜U×.Ò.¨zÑ:Ô:Ñ;Ô;Ð;à×Ò˜U×.Ò.¨zÑ:Ô:Ñ;Ô;Ð;à×%Ò% e×&6Ò&6Ñ&8Ô&8Ñ9Ô9ˆà$Ð$˜VÐ$Ñ$Ô$ˆØ	�Š‰ŒˆØ×Ò˜˜Z¨Ð4Ñ5Ô5Ð5Ð5Ð5r4   N)Ú__name__Ú
__module__Ú__qualname__r3   r9   r<   rG   rJ   rR   rV   rX   re   r]   r4   r2   r   r      s¤   € € € € € ðLð Lð Lð>0ð 0ð 0ð1ð 1ð 1ðWð Wð Wð"2ð 2ð 2ð 	Wð 	Wð 	Wð'ð 'ð 'ð	8ð 	8ð 	8ð
6ð 
6ð 
6ð 
6ð 
6r4   r   c                   ó>   — e Zd Z ej        ddd¦  «        fd„Zd„ ZdS )ÚTestCaseUserAggÚTCPú	127.0.0.1i1Ô  c                 óú   — || _         t          j        ¦   «         | _        |                     |¦  «        | _        | j        | j        _        | j        | j         _        | j                             | j        ¦  «         d S ©N)rD   r   Ú StringTransportWithDisconnectionÚ	transportÚbuildProtocolÚprotocolÚmindÚmakeConnection)r*   rD   r,   Úfactoryr   s        r2   Ú__init__zTestCaseUserAgg.__init__‡   se   € ð ˆŒ	Ý&ÔGÑIÔIˆŒØ×-Ò-¨gÑ6Ô6ˆŒØ"&¤-ˆŒÔØœˆŒ	ŒØŒ×$Ò$ T¤^Ñ4Ô4Ð4Ð4Ð4r4   c                 ó:   — | j                              |¦  «         d S rn   )rr   ÚdataReceived)r*   Ústuffs     r2   ÚwritezTestCaseUserAgg.write•   s   € ØŒ×"Ò" 5Ñ)Ô)Ð)Ð)Ð)r4   N)rf   rg   rh   r   ÚIPv4Addressrv   rz   r]   r4   r2   rj   rj   †   sM   € € € € € ð $�Ô# E¨;¸Ñ>Ô>ð5ð 5ð 5ð 5ð*ð *ð *ð *ð *r4   rj   c                   óª   — e Zd Zg d¢Zd„ Zd„ Zdd„Zd„ Zdd„Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚIRCProtocolTests)ÚuseruserÚ	otheruserÚsomeguyÚ	firstuserÚusernameÚuseroneÚusertwoÚ	userthreeÚuserfours   userfiveÚsomeuserc                 ó  — t          j        d¦  «        | _        t          j        ¦   «         | _        t          j        | j        | j        g¦  «        | _        t          j        | j        | j        ¦  «        | _	        g }| j
        D ]w}t          |t          ¦  «        r|                     d¦  «        }|                     | j                             |¦  «        ¦  «         | j                             ||dz   ¦  «         Œxt#          |¦  «        S )Nr   úutf-8Ú	_password)r   r   r,   r   Ú'InMemoryUsernamePasswordDatabaseDontUseÚcheckerr   ÚPortalÚ
IRCFactoryru   ÚSTATIC_USERSÚ
isinstanceÚbytesÚdecodeÚappendr@   rI   r
   )r*   ÚcÚnicks      r2   ÚsetUpzIRCProtocolTests.setUp¨   sÝ   € ÝÔ/°Ñ<Ô<ˆŒ
ÝÔGÑIÔIˆŒÝ”m D¤J°´°Ñ?Ô?ˆŒÝÔ)¨$¬*°d´kÑBÔBˆŒàˆØÔ%ð 	;ð 	;ˆDÝ˜$¥Ñ&Ô&ð ,Ø—{’{ 7Ñ+Ô+�Ø�HŠH�T”Z×*Ò*¨4Ñ0Ô0Ñ1Ô1Ð1ØŒL× Ò   t¨kÑ'9Ñ:Ô:Ð:Ð:Ý˜A‰ŒÐr4   c                 ó  — |                       |¦  «        }t          j        t          j        t          j        t          j        g}|D ]\  }}}||v r|                     |¦  «         Œ |                      |d|›�¦  «         dS )z½
        The user has been greeted with the four messages that are (usually)
        considered to start an IRC session.

        Asserts that the required responses were received.
        zMissing responses for N)Ú	_responser   ÚRPL_WELCOMEÚRPL_YOURHOSTÚRPL_CREATEDÚ
RPL_MYINFOÚremoveÚassertFalse)r*   rD   ÚresponseÚexpectedÚprefixÚcommandÚargss          r2   Ú_assertGreetingz IRCProtocolTests._assertGreeting¶   s…   € ð —>’> $Ñ'Ô'ˆÝ”O¥SÔ%5µs´ÍÌÐWˆØ%-ð 	)ð 	)Ñ!ˆF�G˜TØ˜(Ð"Ð"Ø—’ Ñ(Ô(Ð(øØ×Ò˜Ð#H¸HÐ#HÐ#HÑIÔIÐIÐIÐIr4   Nc                 óx   — |€|dz   }|                      d|› d�¦  «         |                      d|› d�¦  «         d S )NrŠ   zPASS z
zNICK z extrainfo
)rz   )r*   rD   r•   Úpasswords       r2   Ú_loginzIRCProtocolTests._loginÅ   sT   € ØÐØ˜kÑ)ˆHØ�
Š
Ð)˜8Ð)Ð)Ð)Ñ*Ô*Ð*Ø�
Š
Ð/˜4Ð/Ð/Ð/Ñ0Ô0Ð0Ð0Ð0r4   c                 óÂ   — |                       | j                             |¦  «        ¦  «        }t          || j        | j        ¦  «        }|                      ||¦  «         |S rn   )r#   r,   rB   rj   ru   r§   )r*   r%   rD   Úaggs       r2   Ú_loggedInUserzIRCProtocolTests._loggedInUserË   sS   € Ø×#Ò# D¤J×$9Ò$9¸$Ñ$?Ô$?Ñ@Ô@ˆÝ˜d D¤J°´Ñ=Ô=ˆØ�Š�C˜ÑÔÐØˆ
r4   c                 ó@  — |j                              ¦   «         }|                     d¦  «        }|                     ¦   «         }|j                              ¦   «          g }t          t          j        |¦  «        D ]%}|�|d         |k    r|                     |¦  «         Œ&|S )z£
        Extracts the user's response, and returns a list of parsed lines.
        If messageType is defined, only messages of that type will be returned.
        r‰   Né   )	rp   Úvaluer’   Ú
splitlinesÚclearÚmapr   Úparsemsgr“   )r*   rD   ÚmessageTyperŸ   ÚresultÚmessages         r2   r˜   zIRCProtocolTests._responseÑ   s™   € ð
 ”>×'Ò'Ñ)Ô)ˆØ—?’? 7Ñ+Ô+ˆØ×&Ò&Ñ(Ô(ˆØŒ×ÒÑÔÐØˆÝ�3œ<¨Ñ2Ô2ð 	'ð 	'ˆGØÐ" g¨a¤j°KÒ&?Ð&?Ø—’˜gÑ&Ô&Ð&øØˆr4   c                 óZ   — |                       d¦  «        }|                      |¦  «         d S )Nr�   )rª   r¤   )r*   rD   s     r2   ÚtestPASSLoginzIRCProtocolTests.testPASSLoginà   s/   € Ø×!Ò! +Ñ.Ô.ˆØ×Ò˜TÑ"Ô"Ð"Ð"Ð"r4   c                 óœ  — |                       | j                             d¦  «        ¦  «        }t          || j        | j        ¦  «        }|                     d¦  «         |                      |d¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         t          j
        ¦  «         |                      |d         d         d¦  «         |                      |d         d         ddg¦  «         |j                             ¦   «          |                     d¦  «         |                      |¦  «         d	S )
zµ
        Sending NICK without PASS will prompt the user for their password.
        When the user sends their password to NickServ, it will respond with a
        Greeting.
        r�   zNICK firstuser extrainfo
ÚPRIVMSGr¬   r   é   z	Password?z%PRIVMSG nickserv firstuser_password
N)r#   r,   rB   rj   ru   rz   r˜   r$   Úlenr   ÚNICKSERVrp   r¯   r¤   ©r*   r�   rD   rŸ   s       r2   Útest_nickServLoginz#IRCProtocolTests.test_nickServLoginä   s!  € ð ×(Ò(¨¬×)>Ò)>¸{Ñ)KÔ)KÑLÔLˆ	å˜y¨$¬*°d´lÑCÔCˆØ�
Š
Ð1Ñ2Ô2Ð2Ø—>’> $¨	Ñ2Ô2ˆØ×Ò�˜X™œ¨Ñ*Ô*Ð*Ø×Ò˜ !œ Qœ­Ô)9Ñ:Ô:Ð:Ø×Ò˜ !œ Qœ¨Ñ3Ô3Ð3Ø×Ò˜ !œ Qœ¨+°{Ð)CÑDÔDÐDØŒ×ÒÑÔÐà�
Š
Ð<Ñ=Ô=Ð=Ø×Ò˜TÑ"Ô"Ð"Ð"Ð"r4   c                 ó~  — |                       | j                             d¦  «        ¦  «        }t          || j        | j        ¦  «        }|                      |dd¦  «         |                      |d¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         ddg¦  «         d S )Nr�   Ú	wrongpassr¸   r¬   r   r¹   zLogin failed.  Goodbye.)	r#   r,   rB   rj   ru   r§   r˜   r$   rº   r¼   s       r2   ÚtestFailedLoginz IRCProtocolTests.testFailedLoginø   s©   € Ø×(Ò(¨¬×)>Ò)>¸{Ñ)KÔ)KÑLÔLˆ	å˜y¨$¬*°d´lÑCÔCˆØ�Š�D˜+ {Ñ3Ô3Ð3Ø—>’> $¨	Ñ2Ô2ˆØ×Ò�˜X™œ¨Ñ*Ô*Ð*Ø×Ò˜ !œ Qœ¨+Ð7PÐ)QÑRÔRÐRÐRÐRr4   c                 ó>  ‡— g Š|                       | j                             d¦  «        ¦  «        }t          || j        | j        ¦  «        }|                      |d¦  «         ˆfd„|j        _        |                     d¦  «         |  	                    ‰dg¦  «         d S )Nr�   c                  ó.   •— ‰                       d¦  «        S )NT)r“   )Úlogouts   €r2   ú<lambda>z-IRCProtocolTests.testLogout.<locals>.<lambda>  s   ø€  v§}¢}°TÑ':Ô':€ r4   zQUIT
T)
r#   r,   rB   rj   ru   r§   rr   rÃ   rz   r$   )r*   r�   rD   rÃ   s      @r2   Ú
testLogoutzIRCProtocolTests.testLogout  s—   ø€ ØˆØ×(Ò(¨¬×)>Ò)>¸{Ñ)KÔ)KÑLÔLˆ	å˜y¨$¬*°d´lÑCÔCˆØ�Š�D˜+Ñ&Ô&Ð&Ø:Ð:Ð:Ð:ˆŒÔØ�
Š
�:ÑÔÐØ×Ò˜ $ Ñ(Ô(Ð(Ð(Ð(r4   c                 óÒ  — |                       | j                             d¦  «        ¦  «        }|                       | j                             d¦  «        ¦  «        }d|j        d<   t          || j        | j        ¦  «        }|                      |d¦  «         |j         	                    ¦   «          | 
                    d¦  «         |                      |¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         |                      |d         d	         d
¦  «         |                      |d         d         dg¦  «         |                      |d	         d	         d¦  «         |                      |d         d	         d¦  «         |                      |d         d	         d¦  «         |                      |d         d	         d¦  «         |                      d¦  «        }|j         	                    ¦   «          |j         	                    ¦   «          | 
                    d¦  «         |                      |¦  «        }|                      |¦  «        }|                      t          |¦  «        d	¦  «         |                      |d         d         d¦  «         |                      |d         d	         d
¦  «         |                      |d         d         dg¦  «         |                      |d	         d         d¦  «         |                      |d	         d	         d¦  «         |                      |d	         d         g d¢g d¢g¦  «         d S )Nr�   Úsomechannelzsome random topicÚtopicúJOIN #somechannel
é   r   zfirstuser!firstuser@realmnamer¬   ÚJOINr¹   ú#somechannelÚ353Ú366é   Ú332é   Ú333r   úotheruser!otheruser@realmnamer   )r   ú=rÌ   zfirstuser otheruser)r   rÔ   rÌ   zotheruser firstuser)r#   r,   rB   rN   Úmetarj   ru   r§   rp   r¯   rz   r˜   r$   rº   rª   ÚassertIn)r*   r�   rÇ   rD   rŸ   ÚotherÚevents          r2   ÚtestJoinzIRCProtocolTests.testJoin  s  € Ø×(Ò(¨¬×)>Ò)>¸{Ñ)KÔ)KÑLÔLˆ	à×*Ò*¨4¬:×+AÒ+AÀ-Ñ+PÔ+PÑQÔQˆà$7ˆÔ˜Ñ!õ ˜y¨$¬*°d´lÑCÔCˆØ�Š�D˜+Ñ&Ô&Ð&ØŒ×ÒÑÔÐØ�
Š
Ð*Ñ+Ô+Ð+à—>’> $Ñ'Ô'ˆØ×Ò�˜X™œ¨Ñ*Ô*Ð*ð 	×Ò˜ !œ QœÐ)HÑIÔIÐIØ×Ò˜ !œ Qœ¨Ñ0Ô0Ð0Ø×Ò˜ !œ Qœ¨.Ð)9Ñ:Ô:Ð:ð 	×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ø×Ò˜ !œ Qœ¨Ñ/Ô/Ð/ð 	×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ø×Ò˜ !œ Qœ¨Ñ/Ô/Ð/ð ×"Ò" ;Ñ/Ô/ˆàŒ×ÒÑÔÐØŒ×ÒÑÔÐØ�ŠÐ+Ñ,Ô,Ð,ð —>’> %Ñ(Ô(ˆà—’˜tÑ$Ô$ˆØ×Ò�˜U™œ QÑ'Ô'Ð'Ø×Ò˜˜qœ !œÐ&EÑFÔFÐFØ×Ò˜˜qœ !œ fÑ-Ô-Ð-Ø×Ò˜˜qœ !œ ~Ð&6Ñ7Ô7Ð7à×Ò˜ !œ Qœ¨Ñ5Ô5Ð5Ø×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ø�ŠØ�QŒK˜ŒNàIÐIÐIØIÐIÐIðñ	
ô 	
ð 	
ð 	
ð 	
r4   c                 ó  — |                       | j                             d¦  «        ¦  «        }|                       | j                             d¦  «        ¦  «         t	          || j        | j        ¦  «        }|                      |d¦  «         |j                             ¦   «          | 	                    d¦  «         |  
                    |¦  «        }d„ |D ¦   «         }|                      d|¦  «         |                      d|¦  «         dS )zo
        When a user joins a group without a topic, no topic information is
        sent to that user.
        r�   rÇ   rÉ   c                 ó   — g | ]
}|d          ‘ŒS )r¬   r]   )r^   Úrs     r2   r`   z7IRCProtocolTests.test_joinTopicless.<locals>.<listcomp>R  s   € Ð0Ð0Ð0 !˜˜1œÐ0Ð0Ð0r4   rÐ   rÒ   N)r#   r,   rB   rN   rj   ru   r§   rp   r¯   rz   r˜   ÚassertNotIn)r*   r�   rD   rŸ   ÚresponseCodess        r2   Útest_joinTopiclessz#IRCProtocolTests.test_joinTopiclessB  só   € ð
 ×(Ò(¨¬×)>Ò)>¸{Ñ)KÔ)KÑLÔLˆ	à×Ò˜TœZ×3Ò3°MÑBÔBÑCÔCÐCõ ˜y¨$¬*°d´lÑCÔCˆØ�Š�D˜+Ñ&Ô&Ð&ØŒ×ÒÑÔÐØ�
Š
Ð*Ñ+Ô+Ð+à—>’> $Ñ'Ô'ˆØ0Ð0 xÐ0Ñ0Ô0ˆØ×Ò˜ Ñ.Ô.Ð.Ø×Ò˜ Ñ.Ô.Ð.Ð.Ð.r4   c                 óú  — |                       d¦  «        }|                      | j                             d¦  «        ¦  «         |                     d¦  «         |j                             ¦   «          |                       d¦  «        }|                     d¦  «         |j                             ¦   «          |j                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      |¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         |                      |d         d         d	¦  «         |                      |d         d
         ddg¦  «         |                      ||¦  «         |                     d¦  «         |j                             ¦   «          |j                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      |¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         |                      |d         d         d	¦  «         |                      |d         d
         ddg¦  «         |                      ||¦  «         |                     d¦  «         |j                             ¦   «          |j                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      |¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         |                      |d         d         d	¦  «         |                      |d         d
         ddg¦  «         |                      ||¦  «         d S )Nr~   rÇ   rÉ   r   zPART #somechannel
r¬   r   úuseruser!useruser@realmnameÚPARTr¹   rÌ   Úleavingz(PART #somechannel :goodbye stupidheads
zgoodbye stupidheadss   JOIN #somechannel
s)   PART #somechannel :goodbye stupidheads1
zgoodbye stupidheads1©
rª   r#   r,   rN   rz   rp   r¯   r˜   r$   rº   ©r*   rD   r×   rŸ   rØ   s        r2   Ú	testLeavezIRCProtocolTests.testLeaveV  sƒ  € Ø×!Ò! *Ñ-Ô-ˆà×Ò˜TœZ×3Ò3°MÑBÔBÑCÔCÐCà�
Š
Ð*Ñ+Ô+Ð+ØŒ×ÒÑÔÐà×"Ò" ;Ñ/Ô/ˆà�ŠÐ+Ñ,Ô,Ð,àŒ×ÒÑÔÐØŒ×ÒÑÔÐà�
Š
Ð*Ñ+Ô+Ð+à—>’> $Ñ'Ô'ˆØ—’˜uÑ%Ô%ˆà×Ò�˜X™œ¨Ñ*Ô*Ð*Ø×Ò˜ !œ QœÐ)FÑGÔGÐGØ×Ò˜ !œ Qœ¨Ñ0Ô0Ð0Ø×Ò˜ !œ Qœ¨.¸)Ð)DÑEÔEÐEØ×Ò˜ 5Ñ)Ô)Ð)ð 	�
Š
Ð*Ñ+Ô+Ð+àŒ×ÒÑÔÐØŒ×ÒÑÔÐà�
Š
Ð?Ñ@Ô@Ð@à—>’> $Ñ'Ô'ˆØ—’˜uÑ%Ô%ˆà×Ò�˜X™œ¨Ñ*Ô*Ð*Ø×Ò˜ !œ QœÐ)FÑGÔGÐGØ×Ò˜ !œ Qœ¨Ñ0Ô0Ð0Ø×Ò˜ !œ Qœ¨.Ð:OÐ)PÑQÔQÐQØ×Ò˜ 5Ñ)Ô)Ð)à�
Š
Ð+Ñ,Ô,Ð,àŒ×ÒÑÔÐØŒ×ÒÑÔÐà�
Š
ÐAÑBÔBÐBà—>’> $Ñ'Ô'ˆØ—’˜uÑ%Ô%ˆà×Ò�˜X™œ¨Ñ*Ô*Ð*Ø×Ò˜ !œ QœÐ)FÑGÔGÐGØ×Ò˜ !œ Qœ¨Ñ0Ô0Ð0Ø×Ò˜ !œ Qœ¨.Ð:PÐ)QÑRÔRÐRØ×Ò˜ 5Ñ)Ô)Ð)Ð)Ð)r4   c                 ón  — |                       d¦  «        }t          j        d¦  «        }d|j        d<   d|j        d<   d|j        d<   |                      | j                             |¦  «        ¦  «         |j                             ¦   «          | 	                    d	¦  «         |  
                    |¦  «        }|                      |d
         d         d¦  «         |                      |d
         d         d¦  «         |                      |d
         d         g d¢¦  «         |                      |d         d         d¦  «         |                      |d         d         g d¢¦  «         |j                             ¦   «          | 	                    d¦  «         |  
                    |¦  «        }|                      |d         d         d¦  «         |                      |d         d         g d¢¦  «         |                      |d         d         d¦  «         |                      |d         d         g d¢¦  «         d S )Nr~   rÇ   úThis is a test topic.rÈ   Úsome_fellowÚtopic_authoriqË¢Ú
topic_daterÉ   rÏ   r   r   r¬   rÐ   r¹   )r~   rÌ   rè   rÑ   rÒ   )r~   rÌ   ré   Ú77777777úTOPIC #somechannel
)rª   r   r;   rÕ   r#   r,   rU   rp   r¯   rz   r˜   r$   )r*   rD   rQ   rŸ   s       r2   ÚtestGetTopiczIRCProtocolTests.testGetTopic‘  s4  € Ø×!Ò! *Ñ-Ô-ˆå”˜mÑ,Ô,ˆØ5ˆŒ
�7ÑØ%2ˆŒ
�>Ñ"Ø#+ˆŒ
�<Ñ à×Ò˜TœZ×0Ò0°Ñ7Ô7Ñ8Ô8Ð8àŒ×ÒÑÔÐØ�
Š
Ð*Ñ+Ô+Ð+à—>’> $Ñ'Ô'ˆà×Ò˜ !œ Qœ¨Ñ5Ô5Ð5Ø×Ò˜ !œ Qœ¨Ñ/Ô/Ð/ð 	×ÒØ�QŒK˜ŒNÐQÐQÐQñ	
ô 	
ð 	
ð 	×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ø×ÒØ�QŒK˜ŒNÐSÐSÐSñ	
ô 	
ð 	
ð 	Œ×ÒÑÔÐà�
Š
Ð+Ñ,Ô,Ð,à—>’> $Ñ'Ô'ˆà×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ø×ÒØ�QŒK˜ŒNÐQÐQÐQñ	
ô 	
ð 	
ð 	×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ø×ÒØ�QŒK˜ŒNÐSÐSÐSñ	
ô 	
ð 	
ð 	
ð 	
r4   c                 ób  — |                       d¦  «        }|                      | j                             d¦  «        ¦  «        }|                     d¦  «         |                       d¦  «        }|                     d¦  «         |j                             ¦   «          |j                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      |¦  «        }|                      ||¦  «         |                      |d         d         d¦  «         |                      |d         d         d	¦  «         |                      |d         d
         ddg¦  «         |j                             ¦   «          d|j	        d<   |                     d¦  «         |                      |¦  «        }|                      |d         d         d¦  «         |                      |d         d
         g d¢¦  «         |                      |d         d         d¦  «         |                      |d         d
         g d¢¦  «         |j                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      |d         d         d¦  «         d S )Nr~   rÇ   rÉ   r   z,TOPIC #somechannel :This is the new topic.
r   rÓ   r¬   ÚTOPICr¹   rÌ   úThis is the new topic.i90  rë   rí   rÐ   )r   rÌ   rñ   rÒ   )r   rÌ   r   Ú12345zTOPIC #asdlkjasd
Ú403)
rª   r#   r,   rN   rz   rp   r¯   r˜   r$   rÕ   )r*   rD   rÇ   r×   rŸ   rØ   s         r2   ÚtestSetTopiczIRCProtocolTests.testSetTopic»  s~  € Ø×!Ò! *Ñ-Ô-ˆà×*Ò*¨4¬:×+AÒ+AÀ-Ñ+PÔ+PÑQÔQˆà�
Š
Ð*Ñ+Ô+Ð+à×"Ò" ;Ñ/Ô/ˆà�ŠÐ+Ñ,Ô,Ð,àŒ×ÒÑÔÐØŒ×ÒÑÔÐà�ŠÐDÑEÔEÐEà—>’> %Ñ(Ô(ˆØ—’˜tÑ$Ô$ˆà×Ò˜ 5Ñ)Ô)Ð)à×Ò˜ !œ QœÐ)HÑIÔIÐIØ×Ò˜ !œ Qœ¨Ñ1Ô1Ð1Ø×Ò˜ !œ Qœ¨.Ð:RÐ)SÑTÔTÐTàŒ×ÒÑÔÐà).ˆÔ˜Ñ&Ø�ŠÐ,Ñ-Ô-Ð-à—>’> %Ñ(Ô(ˆØ×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ø×ÒØ�QŒK˜ŒNÐSÐSÐSñ	
ô 	
ð 	
ð 	×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ø×ÒØ�QŒK˜ŒNÐOÐOÐOñ	
ô 	
ð 	
ð 	Œ×ÒÑÔÐØ�ŠÐ*Ñ+Ô+Ð+à—>’> %Ñ(Ô(ˆØ×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ð/Ð/r4   c                 ó,  — |                       d¦  «        }|                      | j                             d¦  «        ¦  «         |                     d¦  «         |                       d¦  «        }|                     d¦  «         |j                             ¦   «          |j                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      |¦  «        }|                      |¦  «         |  	                    t          |¦  «        d¦  «         |  	                    |d         d         d¦  «         |  	                    |d         d         d	d
¦  «         |  	                    |d         d         ddg¦  «         d S )Nr~   rÇ   rÉ   r   z%PRIVMSG #somechannel :Hello, world.
r¬   r   rá   r¸   éÿÿÿÿr¹   rÌ   zHello, world.)rª   r#   r,   rN   rz   rp   r¯   r˜   rž   r$   rº   rå   s        r2   ÚtestGroupMessagez!IRCProtocolTests.testGroupMessageé  sg  € Ø×!Ò! *Ñ-Ô-ˆà×Ò˜TœZ×3Ò3°MÑBÔBÑCÔCÐCà�
Š
Ð*Ñ+Ô+Ð+à×"Ò" ;Ñ/Ô/ˆà�ŠÐ+Ñ,Ô,Ð,àŒ×ÒÑÔÐØŒ×ÒÑÔÐà�
Š
Ð<Ñ=Ô=Ð=à—>’> $Ñ'Ô'ˆØ—’˜uÑ%Ô%ˆà×Ò˜Ñ"Ô"Ð"Ø×Ò�˜U™œ QÑ'Ô'Ð'Ø×Ò˜˜qœ !œÐ&CÑDÔDÐDØ×Ò˜˜qœ !œ i°Ñ4Ô4Ð4Ø×Ò˜˜qœ !œ ~°Ð&GÑHÔHÐHÐHÐHr4   c                 óæ  — |                       d¦  «        }|                       d¦  «        }|j                             ¦   «          |j                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      |¦  «        }|                      |¦  «         |                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         |                      |d         d         d¦  «         |                      |d         d         dd	g¦  «         |                     d
¦  «         |                      |¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         |                      |d         d         d¦  «         |                      |d         d         g d¢¦  «         d S )Nr~   r   z#PRIVMSG otheruser :Hello, monkey.
r¬   r   rá   r¸   r¹   zHello, monkey.z)PRIVMSG nousernamedthis :Hello, monkey.
r   Ú401)r~   ÚnousernamedthiszNo such nick/channel.)rª   rp   r¯   rz   r˜   rž   r$   rº   rå   s        r2   ÚtestPrivateMessagez#IRCProtocolTests.testPrivateMessage  sÈ  € Ø×!Ò! *Ñ-Ô-ˆà×"Ò" ;Ñ/Ô/ˆàŒ×ÒÑÔÐØŒ×ÒÑÔÐà�
Š
Ð:Ñ;Ô;Ð;à—>’> $Ñ'Ô'ˆØ—’˜uÑ%Ô%ˆà×Ò˜Ñ"Ô"Ð"Ø×Ò�˜U™œ QÑ'Ô'Ð'Ø×Ò˜˜qœ !œÐ&CÑDÔDÐDØ×Ò˜˜qœ !œ iÑ0Ô0Ð0Ø×Ò˜˜qœ !œ {Ð4DÐ&EÑFÔFÐFà�
Š
Ð@ÑAÔAÐAà—>’> $Ñ'Ô'ˆà×Ò�˜X™œ¨Ñ*Ô*Ð*Ø×Ò˜ !œ Qœ¨Ñ5Ô5Ð5Ø×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ø×ÒØ�QŒK˜ŒNÐTÐTÐTñ	
ô 	
ð 	
ð 	
ð 	
r4   c                 ó@  — |                       d¦  «        }|j                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         d S )Nr~   zOPER user pass
r¬   r   Ú491©rª   rp   r¯   rz   r˜   r$   rº   ©r*   rD   rŸ   s      r2   ÚtestOperzIRCProtocolTests.testOper   s�   € Ø×!Ò! *Ñ-Ô-ˆàŒ×ÒÑÔÐØ�
Š
Ð'Ñ(Ô(Ð(Ø—>’> $Ñ'Ô'ˆà×Ò�˜X™œ¨Ñ*Ô*Ð*Ø×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ð/Ð/r4   c                 óÌ  — |                       d¦  «        }|j                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         |                      |d         d         d¦  «         |                      |d         d         ddg¦  «         d S )	Nr~   zMODE useruser
r¬   r   r   Ú221r¹   ú+rþ   rÿ   s      r2   ÚtestGetUserModez IRCProtocolTests.testGetUserMode*  sÎ   € Ø×!Ò! *Ñ-Ô-ˆàŒ×ÒÑÔÐØ�
Š
Ð&Ñ'Ô'Ð'à—>’> $Ñ'Ô'ˆØ×Ò�˜X™œ¨Ñ*Ô*Ð*Ø×Ò˜ !œ Qœ¨Ñ5Ô5Ð5Ø×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ø×Ò˜ !œ Qœ¨*°cÐ):Ñ;Ô;Ð;Ð;Ð;r4   c                 ó@  — |                       d¦  «        }|j                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         d S )Nr~   zMODE useruser +abcd
r¬   r   Ú472rþ   rÿ   s      r2   ÚtestSetUserModez IRCProtocolTests.testSetUserMode6  s�   € Ø×!Ò! *Ñ-Ô-ˆàŒ×ÒÑÔÐØ�
Š
Ð,Ñ-Ô-Ð-à—>’> $Ñ'Ô'ˆØ×Ò�˜X™œ¨Ñ*Ô*Ð*Ø×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ð/Ð/r4   c                 óÄ  — |                       d¦  «        }|                      | j                             d¦  «        ¦  «         |                     d¦  «         |j                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         d S )Nr~   rÇ   rÉ   zMODE #somechannel
r¬   r   Ú324rä   rÿ   s      r2   ÚtestGetGroupModez!IRCProtocolTests.testGetGroupMode@  sÄ   € Ø×!Ò! *Ñ-Ô-ˆà×Ò˜TœZ×3Ò3°MÑBÔBÑCÔCÐCà�
Š
Ð*Ñ+Ô+Ð+àŒ×ÒÑÔÐØ�
Š
Ð*Ñ+Ô+Ð+à—>’> $Ñ'Ô'ˆØ×Ò�˜X™œ¨Ñ*Ô*Ð*Ø×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ð/Ð/r4   c                 óÄ  — |                       d¦  «        }|                      | j                             d¦  «        ¦  «         |                     d¦  «         |j                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      t          |¦  «        d¦  «         |                      |d         d         d¦  «         d S )Nr~   Ú	groupnameúJOIN #groupname
zMODE #groupname +abcd
r¬   r   r  rä   rÿ   s      r2   ÚtestSetGroupModez!IRCProtocolTests.testSetGroupModeN  sÄ   € Ø×!Ò! *Ñ-Ô-ˆà×Ò˜TœZ×3Ò3°KÑ@Ô@ÑAÔAÐAà�
Š
Ð(Ñ)Ô)Ð)àŒ×ÒÑÔÐØ�
Š
Ð.Ñ/Ô/Ð/à—>’> $Ñ'Ô'ˆØ×Ò�˜X™œ¨Ñ*Ô*Ð*Ø×Ò˜ !œ Qœ¨Ñ/Ô/Ð/Ð/Ð/r4   c           	      ó¨  — t          j        d¦  «        }|                      | j                             |¦  «        ¦  «         g }dD ]G}|                      |¦  «        }|                     |¦  «         |d                              d¦  «         ŒH|D ]}|j         	                    ¦   «          Œ|d                              d¦  «         |  
                    |d         ¦  «        }|                      |  
                    |d         ¦  «        ¦  «         |                      |  
                    |d         ¦  «        ¦  «         g d¢}|d d…         D ]ð\  }}	}
|                      |d	¦  «         |                      |	d
¦  «         |
\  }}}}}}}}|                      |d¦  «         |                      |d¦  «         |                      ||v ¦  «         |                      |d	¦  «         |                      |d	¦  «         |                     |¦  «         |                      |d¦  «         |                      |d|z   ¦  «         Œñ|                      |¦  «         |d         \  }}	}
|                      |d	¦  «         |                      |	d¦  «         |
\  }}}|                      |d¦  «         |                      |d¦  «         |                      |d¦  «         d S )Nr  )rƒ   r„   r…   rö   r  r   zWHO #groupname
r¬   r¹   r   Ú352rƒ   z
#groupnameÚHz0 Ú315zEnd of /WHO list.)r   r;   r#   r,   rU   rª   r“   rz   rp   r¯   r˜   rž   r$   Ú
assertTruer�   )r*   rQ   Úusersr•   ÚurD   rÜ   Ú	wantusersr¡   Úcodery   ÚmynameÚ	theirnameÚ	theirhostÚtheirserverÚ	theirnickr-   ÚextraÚchannels                      r2   ÚtestWhozIRCProtocolTests.testWho\  sò  € Ý”˜kÑ*Ô*ˆØ×Ò˜TœZ×0Ò0°Ñ7Ô7Ñ8Ô8Ð8àˆØ5ð 	3ð 	3ˆDØ×"Ò" 4Ñ(Ô(ˆAØ�LŠL˜‰OŒOˆOØ�"ŒI�OŠOÐ1Ñ2Ô2Ð2Ð2Øð 	#ð 	#ˆDØŒN× Ò Ñ"Ô"Ð"Ð"àˆaŒ�ŠÐ+Ñ,Ô,Ð,à�NŠN˜5 œ8Ñ$Ô$ˆØ×Ò˜Ÿš¨¨a¬Ñ1Ô1Ñ2Ô2Ð2Ø×Ò˜Ÿš¨¨a¬Ñ1Ô1Ñ2Ô2Ð2à7Ð7Ð7ˆ	Ø#$ S b S¤6ð 	6ð 	6ÑˆF�D˜%Ø×Ò˜V [Ñ1Ô1Ð1Ø×Ò˜T 5Ñ)Ô)Ð)ð ñ	ØØØØØØØØà×Ò˜V YÑ/Ô/Ð/Ø×Ò˜U LÑ1Ô1Ð1Ø�OŠO˜I¨Ð2Ñ3Ô3Ð3Ø×Ò˜Y¨Ñ4Ô4Ð4Ø×Ò˜[¨+Ñ6Ô6Ð6Ø×Ò˜YÑ'Ô'Ð'Ø×Ò˜T 3Ñ'Ô'Ð'Ø×Ò˜U D¨9Ñ$4Ñ5Ô5Ð5Ð5Ø×Ò˜Ñ#Ô#Ð#à œeÑˆ��eØ×Ò˜ Ñ-Ô-Ð-Ø×Ò˜˜uÑ%Ô%Ð%Ø!&Ñˆ�˜Ø×Ò˜ Ñ+Ô+Ð+Ø×Ò˜ ,Ñ/Ô/Ð/Ø×Ò˜Ð 3Ñ4Ô4Ð4Ð4Ð4r4   c                 ó  — |                       d¦  «        }|j                             ¦   «          |                      | j                             d¦  «        ¦  «        }d„ |_        d|j        d<   |                     d¦  «         |  	                    |¦  «        }|  
                    t          |¦  «        d¦  «         |\  }}|  
                    |d         d	¦  «         |  
                    |d
         d¦  «         |  
                    |d         d         d¦  «         |  
                    |d         d
         d¦  «         |  
                    |d         d         d¦  «         |  
                    |d         d         d¦  «         |  
                    |d         d	¦  «         |  
                    |d
         d¦  «         |  
                    |d         d         d¦  «         |  
                    |d         d
         d¦  «         |j                             ¦   «          |                     d¦  «         |  	                    |¦  «        }|  
                    t          |¦  «        d¦  «         |\  }}|  
                    |d
         d¦  «         |  
                    |d         d
         d¦  «         |  
                    |d         d         d¦  «         |  
                    |d         d         d¦  «         |  
                    |d
         d¦  «         d S )Nr‡   Ú	somegroupc                  ó    — t          d¦  «        S )Né   )r   r]   r4   r2   rÄ   z+IRCProtocolTests.testList.<locals>.<lambda>”  s   € ¥¨¡¤€ r4   zthis is the topic woorÈ   zLIST #somegroup
r¹   r   r   r¬   Ú322Ú17rÏ   Ú323zEnd of /LISTzLIST
)rª   rp   r¯   r#   r,   rN   ÚsizerÕ   rz   r˜   r$   rº   )r*   rD   r!  rÜ   ÚrespÚendÚfg1s          r2   ÚtestListzIRCProtocolTests.testList�  s½  € Ø×!Ò! *Ñ-Ô-ˆØŒ×ÒÑÔÐà×(Ò(¨¬×)?Ò)?ÀÑ)LÔ)LÑMÔMˆ	Ø,Ð,ˆ	ŒØ"9ˆ	Œ�wÑð 	�
Š
Ð(Ñ)Ô)Ð)à�NŠN˜4Ñ Ô ˆØ×Ò�˜Q™œ Ñ#Ô#Ð#Ø‰	ˆˆcà×Ò˜˜aœ +Ñ.Ô.Ð.Ø×Ò˜˜aœ %Ñ(Ô(Ð(Ø×Ò˜˜aœ œ ZÑ0Ô0Ð0Ø×Ò˜˜aœ œ [Ñ1Ô1Ð1Ø×Ò˜˜aœ œ TÑ*Ô*Ð*Ø×Ò˜˜aœ œÐ%<Ñ=Ô=Ð=à×Ò˜˜Qœ Ñ-Ô-Ð-Ø×Ò˜˜Qœ Ñ'Ô'Ð'Ø×Ò˜˜Qœ œ JÑ/Ô/Ð/Ø×Ò˜˜Qœ œ NÑ3Ô3Ð3àŒ×ÒÑÔÐð 	�
Š
�:ÑÔÐØ�NŠN˜4Ñ Ô ˆØ×Ò�˜Q™œ Ñ#Ô#Ð#à‰ˆˆSà×Ò˜˜Qœ Ñ'Ô'Ð'Ø×Ò˜˜Qœ œ KÑ0Ô0Ð0Ø×Ò˜˜Qœ œ DÑ)Ô)Ð)Ø×Ò˜˜Qœ œÐ$;Ñ<Ô<Ð<à×Ò˜˜Qœ Ñ'Ô'Ð'Ð'Ð'r4   c                 ó¦	  — |                       d¦  «        }t          j        d¦  «        }d„ |_        d|_        t          j        ¦   «         dz
  |_        |                      | j         	                    |¦  «        ¦  «         |j
                             ¦   «          |                     d¦  «         |                      |¦  «        }|                      t          |¦  «        d¦  «         |\  }}}}}|                      |d         d	¦  «         |                      |d
         d¦  «         |                      |d         d         d¦  «         |                      |d         d
         d¦  «         |                      |d         d         d¦  «         |                      |d         d         d	¦  «         |                      |d         d         d¦  «         |                      |d         d         d¦  «         |                      |d         d	¦  «         |                      |d
         d¦  «         |                      |d         d         d¦  «         |                      |d         d
         d¦  «         |                      |d         d         d	¦  «         |                      |d         d         d¦  «         |                      |d         d	¦  «         |                      |d
         d¦  «         |                      |d         d         d¦  «         |                      |d         d
         d¦  «         |                      |d         d         d¦  «         |                      |d         d         d¦  «         |                      |d         d         d¦  «         |                      |d         d	¦  «         |                      |d
         d¦  «         |                      |d         d         d¦  «         |                      |d         d
         d¦  «         |                      |d         d         d¦  «         |                      |d         d	¦  «         |                      |d
         d¦  «         |                      |d         d         d¦  «         |                      |d         d
         d¦  «         |                      |d         d         d¦  «         d S )Nr€   Úotherguyc                  ól   — t          t          j        d¦  «        t          j        d¦  «        g¦  «        S )NÚgroupAÚgroupB)Úiterr   r;   r]   r4   r2   rÄ   z,IRCProtocolTests.testWhois.<locals>.<lambda>¾  s,   € ¥dÝŒ]˜8Ñ$Ô$¥g¤m°HÑ&=Ô&=Ð>ñ'
ô '
€ r4   é
   é   zWHOIS otherguy
rÊ   r   r   r¬   Ú311r¹   rÏ   rÑ   Ú*Ú312zHi mom!Ú317Ú15Ú10zseconds idle, signon timeÚ319z#groupA #groupBÚ318zEnd of WHOIS list.)rª   r   r6   ra   ÚsignOnÚtimeÚlastMessager#   r,   rI   rp   r¯   rz   r˜   r$   rº   )	r*   rD   r-  rÜ   ÚwuserÚwserverÚidleÚchannelsr)  s	            r2   Ú	testWhoiszIRCProtocolTests.testWhoisº  sZ  € Ø×!Ò! )Ñ,Ô,ˆå”< 
Ñ+Ô+ˆð
ð 
ˆÔð ˆŒÝ#œy™{œ{¨RÑ/ˆÔà×Ò˜TœZ×/Ò/°Ñ9Ô9Ñ:Ô:Ð:àŒ×ÒÑÔÐØ�
Š
Ð'Ñ(Ô(Ð(Ø�NŠN˜4Ñ Ô ˆà×Ò�˜Q™œ Ñ#Ô#Ð#Ø./Ñ+ˆˆw˜˜h¨à×Ò˜˜qœ ;Ñ/Ô/Ð/Ø×Ò˜˜qœ 5Ñ)Ô)Ð)Ø×Ò˜˜qœ !œ iÑ0Ô0Ð0Ø×Ò˜˜qœ !œ jÑ1Ô1Ð1Ø×Ò˜˜qœ !œ jÑ1Ô1Ð1Ø×Ò˜˜qœ !œ kÑ2Ô2Ð2Ø×Ò˜˜qœ !œ cÑ*Ô*Ð*Ø×Ò˜˜qœ !œ jÑ1Ô1Ð1à×Ò˜ œ [Ñ1Ô1Ð1Ø×Ò˜ œ UÑ+Ô+Ð+Ø×Ò˜ œ Aœ¨	Ñ2Ô2Ð2Ø×Ò˜ œ Aœ¨
Ñ3Ô3Ð3Ø×Ò˜ œ Aœ¨Ñ4Ô4Ð4Ø×Ò˜ œ Aœ¨	Ñ2Ô2Ð2à×Ò˜˜aœ +Ñ.Ô.Ð.Ø×Ò˜˜aœ %Ñ(Ô(Ð(Ø×Ò˜˜aœ œ YÑ/Ô/Ð/Ø×Ò˜˜aœ œ ZÑ0Ô0Ð0Ø×Ò˜˜aœ œ TÑ*Ô*Ð*Ø×Ò˜˜aœ œ TÑ*Ô*Ð*Ø×Ò˜˜aœ œÐ%@ÑAÔAÐAà×Ò˜ !œ kÑ2Ô2Ð2Ø×Ò˜ !œ eÑ,Ô,Ð,Ø×Ò˜ !œ Qœ¨Ñ3Ô3Ð3Ø×Ò˜ !œ Qœ¨Ñ4Ô4Ð4Ø×Ò˜ !œ QœÐ):Ñ;Ô;Ð;à×Ò˜˜Qœ Ñ-Ô-Ð-Ø×Ò˜˜Qœ Ñ'Ô'Ð'Ø×Ò˜˜Qœ œ IÑ.Ô.Ð.Ø×Ò˜˜Qœ œ JÑ/Ô/Ð/Ø×Ò˜˜Qœ œÐ$8Ñ9Ô9Ð9Ð9Ð9r4   rn   )rf   rg   rh   r�   r–   r¤   r§   rª   r˜   r¶   r½   rÀ   rÅ   rÙ   rß   ræ   rî   rô   r÷   rû   r   r  r  r
  r  r  r+  rC  r]   r4   r2   r}   r}   ™   s¦  € € € € € ðð ð €Lðð ð ðJð Jð Jð1ð 1ð 1ð 1ðð ð ðð ð ð ð#ð #ð #ð#ð #ð #ð(Sð Sð Sð)ð )ð )ð5
ð 5
ð 5
ðn/ð /ð /ð(9*ð 9*ð 9*ðv(
ð (
ð (
ðT,0ð ,0ð ,0ð\Ið Ið Ið2
ð 
ð 
ð<0ð 0ð 0ð
<ð 
<ð 
<ð0ð 0ð 0ð0ð 0ð 0ð0ð 0ð 0ð15ð 15ð 15ðf)(ð )(ð )(ðV5:ð 5:ð 5:ð 5:ð 5:r4   r}   c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestMindc                 ó>   — g | _         g | _        g | _        g | _        d S rn   )ÚjoinsÚpartsÚmessagesrÕ   )r*   ÚaÚkws      r2   rv   zTestMind.__init__ó  s"   € ØˆŒ
ØˆŒ
ØˆŒØˆŒ	ˆ	ˆ	r4   c                 ó>   — | j                              ||f¦  «         d S rn   )rG  r“   )r*   rD   rQ   s      r2   Úremote_userJoinedzTestMind.remote_userJoinedù  s"   € ØŒ
×Ò˜4 ˜-Ñ(Ô(Ð(Ð(Ð(r4   c                 ó@   — | j                              |||f¦  «         d S rn   )rH  r“   )r*   rD   rQ   Úreasons       r2   Úremote_userLeftzTestMind.remote_userLeftü  s%   € ØŒ
×Ò˜4 ¨Ð/Ñ0Ô0Ð0Ð0Ð0r4   c                 ó@   — | j                              |||f¦  «         d S rn   )rI  r“   )r*   ÚsenderÚ	recipientr´   s       r2   Úremote_receivezTestMind.remote_receiveÿ  s%   € ØŒ×Ò˜f i°Ð9Ñ:Ô:Ð:Ð:Ð:r4   c                 ó>   — | j                              ||f¦  «         d S rn   )rÕ   r“   )r*   rQ   rÕ   s      r2   Úremote_groupMetaUpdatezTestMind.remote_groupMetaUpdate  s"   € ØŒ	×Ò˜% ˜Ñ'Ô'Ð'Ð'Ð'r4   N)rf   rg   rh   rv   rM  rP  rT  rV  r]   r4   r2   rE  rE  ò  s_   € € € € € ðð ð ð)ð )ð )ð1ð 1ð 1ð;ð ;ð ;ð(ð (ð (ð (ð (r4   rE  c                   óF   — e Zd Zd„ Zd„ Zd„ Zd„ Zej        d„ ¦   «         Z	dS )ÚPBProtocolTestsc                 ó&  — t          j        d¦  «        | _        t          j        ¦   «         | _        t          j        | j        | j        g¦  «        | _        t          j	        | j        ¦  «        | _
        | j        | j
        _        d| j
        _        t          j        ¦   «         | _        d| j        _        t!          j        d| j
        ¦  «        | _        t!          j        d| j                             ¦   «         j        | j        ¦  «        | _        d S )Nr   Tr   rl   )r   r   r,   r   r‹   rŒ   r   r�   r   ÚPBServerFactoryÚserverFactoryÚ_protocolFactoryrr   ÚunsafeTracebacksÚPBClientFactoryÚclientFactoryr   Ú	listenTCPÚ
serverPortÚ
connectTCPÚgetHostÚportÚ
clientConnr8   s    r2   r–   zPBProtocolTests.setUp
  sÑ   € ÝÔ/°Ñ<Ô<ˆŒ
ÝÔGÑIÔIˆŒÝ”m D¤J°´°Ñ?Ô?ˆŒÝÔ/°´Ñ<Ô<ˆÔØ&*Ô&;ˆÔÔ#Ø.2ˆÔÔ+ÝÔ/Ñ1Ô1ˆÔØ.2ˆÔÔ+Ý!Ô+¨A¨tÔ/AÑBÔBˆŒÝ!Ô,Ø˜œ×0Ò0Ñ2Ô2Ô7¸Ô9Kñ
ô 
ˆŒˆˆr4   c                 óB   — t          j        d¦  «        | _        | j        S )Nr   )r   ÚBrokerÚ_serverProtocol)r*   r£   rK  s      r2   r\  z PBProtocolTests._protocolFactory  s   € Ý!œy¨™|œ|ˆÔØÔ#Ð#r4   c                 óÚ   ‡— t          ¦   «         Š| j                             ˆfd„¦  «         t          t	          | j        j        ¦  «        t	          | j        j        ¦  «        ‰g¦  «        S )Nc                  ó.   •— ‰                       d ¦  «        S rn   )Úcallback)Úd3s   €r2   rÄ   z*PBProtocolTests.tearDown.<locals>.<lambda>  s   ø€ ¸¿ºÀDÑ8IÔ8I€ r4   )	r	   rh  ÚnotifyOnDisconnectr
   r   ra  ÚstopListeningre  Ú
disconnect)r*   rl  s    @r2   ÚtearDownzPBProtocolTests.tearDown  sg   ø€ Ý‰ZŒZˆØÔ×/Ò/Ð0IÐ0IÐ0IÐ0IÑJÔJÐJÝå˜dœoÔ;Ñ<Ô<Ý˜dœoÔ8Ñ9Ô9Øðñ
ô 
ð 	
r4   c                 ó,  ‡ ‡‡— |}t          |t          ¦  «        r|                     d¦  «        }t          j        ||¦  «        Š‰ j                             ||¦  «         ‰ j                             |¦  «        }| 	                    ˆˆˆ fd„¦  «         |S )NÚasciic                 ó:   •— ‰j                              ‰‰¦  «        S rn   )r_  Úlogin)ÚignÚcredsrs   r*   s    €€€r2   rÄ   z1PBProtocolTests._loggedInAvatar.<locals>.<lambda>.  s   ø€  $Ô"4×":Ò":¸5À$Ñ"GÔ"G€ r4   )
r�   ÚstrÚencoder   ÚUsernamePasswordrŒ   rI   r,   r@   ÚaddCallback)r*   r%   r¦   rs   Ú	nameBytesÚdrv  s   `  `  @r2   Ú_loggedInAvatarzPBProtocolTests._loggedInAvatar'  s“   øøø€ Øˆ	Ý�d�CÑ Ô ð 	-ØŸš GÑ,Ô,ˆIÝÔ,¨Y¸ÑAÔAˆØŒ×Ò˜Y¨Ñ1Ô1Ð1ØŒJ×!Ò! $Ñ'Ô'ˆØ	�ŠÐGÐGÐGÐGÐGÐGÑHÔHÐHØˆr4   c              #   óÔ  K  — t          ¦   «         }|                      dd|¦  «        V —}t          ¦   «         }|                      dd|¦  «        V —}t          ¦   «         }|                      dd|¦  «        V —}| j                             d¦  «        V — | j                             d¦  «        V — |                     d¦  «        V —}|                     d¦  «        V —}|                     d¦  «        V — |                     d¦  «        V — |                     d¦  «        V — |                     d	d
i¦  «        V — |                     ¦   «         V — |                     ¦   «         V — d S )NÚones   p1Útwos   p2s   threes   p3Úfoobars   barfoos   texts   hello, monkeys)rE  r}  r,   rN   ÚjoinÚsendÚleave)	r*   Úmindoner  Úmindtwor€  Ú	mindThreeÚthreerZ   r[   s	            r2   Ú
testGroupszPBProtocolTests.testGroups1  sv  è è € å‘*”*ˆØ×(Ò(¨°°wÑ?Ô?Ð?Ð?ˆå‘*”*ˆØ×(Ò(¨°°wÑ?Ô?Ð?Ð?ˆå‘J”Jˆ	Ø×*Ò*¨8°U¸IÑFÔFÐFÐFˆàŒj×$Ò$ XÑ.Ô.Ð.Ð.Ð.ØŒj×$Ò$ YÑ/Ô/Ð/Ð/Ð/àŸš (Ñ+Ô+Ð+Ð+ˆØŸš )Ñ,Ô,Ð,Ð,ˆà�hŠh�xÑ Ô Ð Ð Ð Ø�hŠh�yÑ!Ô!Ð!Ð!Ð!Ø�jŠj˜Ñ"Ô"Ð"Ð"Ð"à�mŠm˜WÐ&7Ð8Ñ9Ô9Ð9Ð9Ð9à�nŠnÑÔÐÐÐØ�nŠnÑÔÐÐÐÐÐr4   N)
rf   rg   rh   r–   r\  rp  r}  r   ÚinlineCallbacksr‰  r]   r4   r2   rX  rX  	  so   € € € € € ð
ð 
ð 
ð$ð $ð $ð	
ð 	
ð 	
ðð ð ð Ôðð ñ Ôðð ð r4   rX  )#Ú__doc__r=  Útwisted.credr   r   r   Útwisted.internetr   r   r   Útwisted.internet.deferr	   r
   r   r   Útwisted.spreadr   Útwisted.testr   Útwisted.trialr   Útwisted.wordsr   r   Útwisted.words.protocolsr   ÚTestCaser   rj   r}   ÚPBMindrE  ÚsetUnjellyableForClassÚPBMindReferencerX  r]   r4   r2   ú<module>r˜     sõ  ððð ð €€€à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø "Ð "Ð "Ð "Ð "Ð "Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ðo6ð o6ð o6ð o6ð o6�Ô"ñ o6ô o6ð o6ðd*ð *ð *ð *ð *ñ *ô *ð *ð&V	:ð V	:ð V	:ð V	:ð V	:�xÔ(ñ V	:ô V	:ð V	:ðr(ð (ð (ð (ð (ˆwŒ~ñ (ô (ð (ð( €Ô ˜( GÔ$;Ñ <Ô <Ð <ð@ð @ð @ð @ð @�hÔ'ñ @ô @ð @ð @ð @r4   