ó
    Ö›‘h	9  ã                   ó  • S r SSKrSSKJr  SSKJrJr  SSKJr  SSK	J
r
  SSKJr  SSKJrJr  SS	KJr  SS
KJr  SSKJr  SSKJrJr  SSKJrJr  SSKJr   " S S\R>                  5      r  " S S\R>                  5      r!g)z+
Test cases for L{twisted.logger._legacy}.
é    N)Útime)ÚListÚcast)Úimplementer)ÚBrokenMethodImplementation)ÚverifyObject)ÚcontextÚlog)ÚFailure)Úunittesté   )ÚformatEvent)ÚILogObserverÚLogEvent)ÚLegacyLogObserverWrapperÚpublishToNewObserver)ÚLogLevelc                   ó  • \ rS rSrSrSS jrSS jrS\S\4S jrS\S\4S	 jr	SS
 jr
SS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrS\S\4S jrSS jrSS jrSS jrSS jrSrg) ÚLegacyLogObserverWrapperTestsé   z(
Tests for L{LegacyLogObserverWrapper}.
ÚreturnNc                 óÂ   • [        [        R                  S 5      n[        U5      n [	        [        U5        g! [
         a  nU R                  U5         SnAgSnAff = f)z4
L{LegacyLogObserverWrapper} is an L{ILogObserver}.
c                 ó   • g ©N© )Úes    ÚcC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/logger/test/test_legacy.pyÚ<lambda>Ú>LegacyLogObserverWrapperTests.test_interface.<locals>.<lambda>"   s   € Àó    N)r   Ú	legacyLogr   r   r   r   Úfail)ÚselfÚlegacyObserverÚobserverr   s       r   Útest_interfaceÚ,LegacyLogObserverWrapperTests.test_interface   sL   € ô œi×4Ñ4±nÓEˆÜ+¨NÓ;ˆð	Üœ xÕ0øÜ)ó 	Ø�I‰I�a�L‰Lûð	ús   ¨9 ¹
AÁAÁAc                 ó¦   • [        [        R                  5       " S S5      5       n[        U" 5       5      nU R	                  [        U5      S5        g)z:
L{LegacyLogObserverWrapper} returns the expected string.
c                   óH   • \ rS rSrS\4S jrS\R                  SS4S jrSr	g)Ú?LegacyLogObserverWrapperTests.test_repr.<locals>.LegacyObserveré.   r   c                 ó   • g)Nz<Legacy Observer>r   ©r#   s    r   Ú__repr__ÚHLegacyLogObserverWrapperTests.test_repr.<locals>.LegacyObserver.__repr__0   s   € Ø*r    Ú	eventDictNc                 ó   • g r   r   )r#   r0   s     r   Ú__call__ÚHLegacyLogObserverWrapperTests.test_repr.<locals>.LegacyObserver.__call__3   s   € Ør    r   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ústrr.   r!   Ú	EventDictr2   Ú__static_attributes__r   r    r   ÚLegacyObserverr*   .   s'   † ð+ #ô +ð¨)×*=Ñ*=ð À$÷ r    r;   z+LegacyLogObserverWrapper(<Legacy Observer>)N)r   r!   r   r   ÚassertEqualÚrepr)r#   r;   r%   s      r   Ú	test_reprÚ'LegacyLogObserverWrapperTests.test_repr)   sJ   € ô
 
”Y×+Ñ+Ó	,÷	ð 	ó 
-ð	ô ,©NÓ,<Ó=ˆà×Ñœ˜h›Ð)VÕWr    Úeventc                 óª   ^• / m[        [        R                  U4S j5      n[        U5      nU" U5        U R	                  [        T5      S5        TS   $ )zª
Send an event to a wrapped legacy observer and capture the event as
seen by that observer.

@param event: an event

@return: the event as observed by the legacy wrapper
c                 ó&   >• TR                  U 5      $ r   )Úappend)r   Úeventss    €r   r   Ú7LegacyLogObserverWrapperTests.observe.<locals>.<lambda>E   s   ø€ ÀÇÁÈaÔ@Pr    é   r   )r   r!   r   r   r<   Úlen)r#   r@   r$   r%   rD   s       @r   ÚobserveÚ%LegacyLogObserverWrapperTests.observe:   sL   ø€ ð "$ˆäœi×4Ñ4Ô6PÓQˆÜ+¨NÓ;ˆÙ�ŒØ×Ñœ˜V› aÔ(à�a‰yÐr    c                 ó&  • UR                  S[        5       5        UR                  SS5        UR                  S[        R                  5        U R	                  [        U5      5      nUR                  5        H  u  p4U R                  X25        M     U$ )z¡
Send an event to a wrapped legacy observer and verify that its data is
preserved.

@param event: an event

@return: the event as observed by the legacy wrapper
Úlog_timeÚ
log_systemÚ-Ú	log_level)Ú
setdefaultr   r   ÚinforH   ÚdictÚitemsÚassertIn)r#   r@   ÚobservedÚkeyÚvalues        r   ÚforwardAndVerifyÚ.LegacyLogObserverWrapperTests.forwardAndVerifyL   su   € ð 	×Ñ˜¤T£VÔ,Ø×Ñ˜ sÔ+Ø×Ñ˜¤h§m¡mÔ4ð —<‘<¤ U£Ó,ˆð  Ÿ+™+ž-‰JˆCØ�M‰M˜#Ö(ñ (ð ˆr    c                 ó6   • U R                  [        SSS95        g)zM
Basic forwarding: event keys as observed by a legacy observer are the
same.
rF   r   ©ÚfooÚbarN)rW   rQ   r-   s    r   Útest_forwardÚ*LegacyLogObserverWrapperTests.test_forwardc   s   € ð
 	×Ñœd q¨aÑ0Õ1r    c                 ór   • [        5       nU R                  [        US95      nU R                  US   U5        g)zK
The new-style C{"log_time"} key is copied to the old-style C{"time"}
key.
)rK   r   N©r   rW   rQ   r<   ©r#   Ústampr@   s      r   Ú	test_timeÚ'LegacyLogObserverWrapperTests.test_timej   s4   € ô
 “ˆØ×%Ñ%¤d°EÑ&:Ó;ˆØ×Ñ˜˜v™¨Õ.r    c                 óz   • [        5       nU R                  [        US-   US95      nU R                  US   U5        g)zZ
The new-style C{"log_time"} key does not step on a pre-existing
old-style C{"time"} key.
rF   )rK   r   r   Nr`   ra   s      r   Útest_timeAlreadySetÚ1LegacyLogObserverWrapperTests.test_timeAlreadySets   s:   € ô
 “ˆØ×%Ñ%¤d°E¸A±IÀEÑ&JÓKˆØ×Ñ˜˜v™¨Õ.r    c                 ó^   • U R                  [        SS95      nU R                  US   S5        g)zO
The new-style C{"log_system"} key is copied to the old-style
C{"system"} key.
r[   )rL   ÚsystemN©rW   rQ   r<   ©r#   r@   s     r   Útest_systemÚ)LegacyLogObserverWrapperTests.test_system|   s-   € ð
 ×%Ñ%¤d°eÑ&<Ó=ˆØ×Ñ˜˜x™¨%Õ0r    c                 ó`   • U R                  [        SSS95      nU R                  US   S5        g)z^
The new-style C{"log_system"} key does not step on a pre-existing
old-style C{"system"} key.
r[   r\   )rL   ri   ri   Nrj   rk   s     r   Útest_systemAlreadySetÚ3LegacyLogObserverWrapperTests.test_systemAlreadySet„   s/   € ð
 ×%Ñ%¤d°eÀEÑ&JÓKˆØ×Ñ˜˜x™¨%Õ0r    c                 ó¢   • [        [        5       [        R                  S9nU R	                  [        U5      5      nU R                  US   S5        g)za
If the new-style C{"log_system"} key is absent, the old-style
C{"system"} key is set to C{"-"}.
)rK   rN   ri   rM   N)rQ   r   r   rP   rH   r<   )r#   r@   rT   s      r   Útest_noSystemÚ+LegacyLogObserverWrapperTests.test_noSystemŒ   s=   € ô œd›f´·±Ñ>ˆØ—<‘<¤ U£Ó,ˆØ×Ñ˜ (Ñ+¨SÕ1r    c                 ó<  • U R                  [        [        R                  SS95        U R                  [        [        R                  SS95        U R                  [        [        R
                  SS95        U R                  [        [        R                  SS95        g)z¡
If explicitly set, the C{isError} key will be preserved when forwarding
from a new-style logging emitter to a legacy logging observer,
regardless of log level.
rF   )rN   ÚisErrorr   N)rW   rQ   r   rP   ÚwarnÚerrorÚcriticalr-   s    r   Útest_levelNotChangeÚ1LegacyLogObserverWrapperTests.test_levelNotChange–   sj   € ð 	×Ñœd¬X¯]©]ÀAÑFÔGØ×Ñœd¬X¯]©]ÀAÑFÔGØ×Ñœd¬X¯^©^ÀQÑGÔHØ×Ñœd¬X×->Ñ->ÈÑJÕKr    c                 ót   • U R                  [        [        R                  S95      nU R	                  SU5        g)zù
The new-style C{"log_level"} key is not translated to the old-style
C{"logLevel"} key.

Events are forwarded from the old module from to new module and are
then seen by old-style observers.
We don't want to add unexpected keys to old-style events.
)rN   ÚlogLevelN)rW   rQ   r   rP   ÚassertNotInrk   s     r   Útest_pythonLogLevelNotSetÚ7LegacyLogObserverWrapperTests.test_pythonLogLevelNotSet¡   s-   € ð ×%Ñ%¤d´X·]±]Ñ&CÓDˆØ×Ñ˜ UÕ+r    c                 ó^   • U R                  [        SS95      nU R                  US   S5        g)zé
If a stdlib log level was provided as a string (eg. C{"WARNING"}) in
the legacy "logLevel" key, it does not get converted to a number.
The documentation suggested that numerical values should be used but
this was not a requirement.
ÚWARNING©r|   r|   Nrj   rk   s     r   Útest_stringPythonLogLevelÚ7LegacyLogObserverWrapperTests.test_stringPythonLogLevel­   s6   € ð ×%Ñ%ÜØ"ñó
ˆð
 	×Ñ˜˜zÑ*¨IÕ6r    c                 ó`   • U R                  [        5       5      nU R                  US   S5        g)z~
The old-style C{"message"} key is added, even if no new-style
C{"log_format"} is given, as it is required, but may be empty.
Úmessager   Nrj   rk   s     r   Útest_messageÚ*LegacyLogObserverWrapperTests.test_message»   s+   € ð
 ×%Ñ%¤d£fÓ-ˆØ×Ñ˜˜yÑ)¨2Õ.r    c                 ó^   • U R                  [        SS95      nU R                  US   S5        g)zF
The old-style C{"message"} key is not modified if it already exists.
rZ   )r†   r†   Nrj   rk   s     r   Útest_messageAlreadySetÚ4LegacyLogObserverWrapperTests.test_messageAlreadySetÃ   s.   € ð ×%Ñ%¤d°>Ñ&BÓCˆØ×Ñ˜˜yÑ)¨>Õ:r    c                 ó‚   • U R                  [        SSS95      nU R                  [        R                  " U5      S5        g)z
Formatting is translated such that text is rendered correctly, even
though old-style logging doesn't use PEP 3101 formatting.
zHello, {who}!Úworld)Ú
log_formatÚwhoúHello, world!N©rW   rQ   r<   r!   ÚtextFromEventDictrk   s     r   Útest_formatÚ)LegacyLogObserverWrapperTests.test_formatÊ   s6   € ð
 ×%Ñ%¤d°oÈ7Ñ&SÓTˆØ×Ñœ×4Ò4°UÓ;¸_ÕMr    c                 ó‚   • U R                  [        SSS95      nU R                  [        R                  " U5      S5        g)zW
Using the message key, which is special in old-style, works for
new-style formatting.
zHello, {message}!r�   )rŽ   r†   r�   Nr‘   rk   s     r   Útest_formatMessageÚ0LegacyLogObserverWrapperTests.test_formatMessageÒ   s<   € ð
 ×%Ñ%ÜÐ/¸ÑAó
ˆð 	×Ñœ×4Ò4°UÓ;¸_ÕMr    c                 ó‚   • U R                  [        SSS95      nU R                  [        R                  " U5      S5        g)zL
Formatting is not altered if the old-style C{"format"} key already
exists.
zHello!zHowdy!)rŽ   ÚformatNr‘   rk   s     r   Útest_formatAlreadySetÚ3LegacyLogObserverWrapperTests.test_formatAlreadySetÜ   s6   € ð
 ×%Ñ%¤d°hÀxÑ&PÓQˆØ×Ñœ×4Ò4°UÓ;¸XÕFr    Úvaluesc                 ód   • [        [        S5      5      nU R                  [        SUSS.UD65      $ )z†
Create a new-style event with a captured failure.

@param values: Additional values to include in the event.

@return: the new event
znyargh!ú	oopsie...)Úlog_failurerŽ   r   )r   ÚRuntimeErrorrW   rQ   )r#   rœ   Úfailures      r   ÚeventWithFailureÚ.LegacyLogObserverWrapperTests.eventWithFailureä   s8   € ô œ, yÓ1Ó2ˆØ×$Ñ$ÜÐG˜W°ÑGÀÑGó
ð 	
r    c                 ó¦   • U R                  5       nU R                  US   US   5        U R                  US   5        U R                  US   S5        g)ze
Captured failures in the new style set the old-style C{"failure"},
C{"isError"}, and C{"why"} keys.
r¡   rŸ   ru   Úwhyrž   N)r¢   ÚassertIsÚ
assertTruer<   rk   s     r   Útest_failureÚ*LegacyLogObserverWrapperTests.test_failureñ   sO   € ð
 ×%Ñ%Ó'ˆØ�‰�e˜IÑ&¨¨mÑ(<Ô=Ø�‰˜˜iÑ(Ô)Ø×Ñ˜˜u™ {Õ3r    c                 ót   • [        [        S5      5      nU R                  US9nU R                  US   U5        g)ú^
Captured failures in the new style do not step on a pre-existing
old-style C{"failure"} key.
zWeak salsa!)r¡   r¡   N)r   r    r¢   r¦   )r#   r¡   r@   s      r   Útest_failureAlreadySetÚ4LegacyLogObserverWrapperTests.test_failureAlreadySetû   s9   € ô
 œ, }Ó5Ó6ˆØ×%Ñ%¨gÐ%Ð6ˆØ�‰�e˜IÑ&¨Õ0r    c                 óL   • U R                  SS9nU R                  US   S5        g)z^
Captured failures in the new style do not step on a pre-existing
old-style C{"isError"} key.
r   ©ru   ru   N©r¢   r<   rk   s     r   Útest_isErrorAlreadySetÚ4LegacyLogObserverWrapperTests.test_isErrorAlreadySet  s,   € ð
 ×%Ñ%¨aÐ%Ð0ˆØ×Ñ˜˜yÑ)¨1Õ-r    c                 óL   • U R                  SS9nU R                  US   S5        g)r«   Úblah)r¥   r¥   Nr°   rk   s     r   Útest_whyAlreadySetÚ0LegacyLogObserverWrapperTests.test_whyAlreadySet  s+   € ð
 ×%Ñ%¨&Ð%Ð1ˆØ×Ñ˜˜u™ vÕ.r    r   ©r   N)r4   r5   r6   r7   Ú__doc__r&   r>   r   rH   rW   r]   rc   rf   rl   ro   rr   ry   r~   rƒ   r‡   rŠ   r“   r–   rš   Úobjectr¢   r¨   r¬   r±   rµ   r:   r   r    r   r   r      s©   † ñô	ôXð"˜Xð ¨(ô ð$ hð °8ô ô.2ô/ô/ô1ô1ô2ô	Lô
,ô7ô/ô;ôNôNôGð
¨ð 
°Hô 
ô4ô1ô.÷/r    r   c                   ó°   • \ rS rSrSrSS jrS\S\S\R                  4S jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSS jrSrg)ÚPublishToNewObserverTestsi  z$
Tests for L{publishToNewObserver}.
r   Nc                 ód   • / U l         [        [        U R                   R                  5      U l        g r   )rD   r   r   rC   r%   r-   s    r   ÚsetUpÚPublishToNewObserverTests.setUp  s!   € Ø&(ˆŒÜœ\¨4¯;©;×+=Ñ+=Ó>ˆ�r    r†   rœ   c                 óÖ   • [         R                  " [        R                  5      =(       d    0 R	                  5       nUR                  U5        XS'   [        5       US'   SU;  a  SUS'   U$ )zæ
Return a basic old-style event as would be created by L{legacyLog.msg}.

@param message: a message event value in the legacy event format
@param values: additional event values in the legacy event format

@return: a legacy event
r†   r   ru   r   )r	   Úgetr!   ÚILogContextÚcopyÚupdater   )r#   r†   rœ   r@   s       r   ÚlegacyEventÚ%PublishToNewObserverTests.legacyEvent  s\   € ô —’œY×2Ñ2Ó3×9°r×?Ñ?ÓAˆØ�‰�VÔØ"ˆiÑÜ›ˆˆf‰Ø˜EÓ!Ø ˆE�)ÑØˆr    c                 ó´   • [        U R                  U R                  5       [        R                  5        U R                  [        U R                  5      S5        g)z&
The observer is called exactly once.
rF   N)r   r%   rÄ   r!   r’   r<   rG   rD   r-   s    r   Útest_observedÚ'PublishToNewObserverTests.test_observed/  sA   € ô 	Ø�M‰M˜4×+Ñ+Ó-¬y×/JÑ/Jô	
ð 	×Ñœ˜TŸ[™[Ó)¨1Õ-r    c                 óÎ   • [        U R                  U R                  5       [        R                  5        U R                  U R                  S   S   U R                  S   S   5        g)zK
The old-style C{"time"} key is copied to the new-style C{"log_time"}
key.
r   rK   r   N©r   r%   rÄ   r!   r’   r<   rD   r-   s    r   rc   Ú#PublishToNewObserverTests.test_time8  sR   € ô
 	Ø�M‰M˜4×+Ñ+Ó-¬y×/JÑ/Jô	
ð 	×Ñ˜Ÿ™ Q™¨
Ñ3°T·[±[À±^ÀFÑ5KÕLr    c                 óÖ   • S[         S[        4S jnU R                  SS5      nU" U5      n[        U R                  X!5        U R                  [        U R                  S   5      U5        g)z
A published old-style event should format as text in the same way as
the given C{textFromEventDict} callable would format it.
r@   r   c                 óZ   • SR                  [        SR                  U S   5      5      5      $ )NÚ Ú r†   )ÚjoinÚreversed)r@   s    r   r’   ÚAPublishToNewObserverTests.test_message.<locals>.textFromEventDictH  s$   € Ø—7‘7œ8 C§H¡H¨U°9Ñ-=Ó$>Ó?Ó@Ð@r    zHello,zworld!r   N)r   r8   rÄ   r   r%   r<   r   rD   )r#   r’   r@   Útexts       r   r‡   Ú&PublishToNewObserverTests.test_messageB  sa   € ð	A¤Xð 	A´#ô 	Að × Ñ  ¨8Ó4ˆÙ  Ó'ˆä˜TŸ]™]¨EÔEØ×Ñœ T§[¡[°¡^Ó4°dÕ;r    c                 óÊ   • [        U R                  U R                  5       [        R                  5        U R                  U R                  S   S   [        R                  5        g)z<
Published event should have log level of L{LogLevel.info}.
r   rN   N)	r   r%   rÄ   r!   r’   r<   rD   r   rP   r-   s    r   Útest_defaultLogLevelÚ.PublishToNewObserverTests.test_defaultLogLevelQ  sI   € ô 	Ø�M‰M˜4×+Ñ+Ó-¬y×/JÑ/Jô	
ð 	×Ñ˜Ÿ™ Q™¨Ñ4´h·m±mÕDr    c                 óÈ   • [        U R                  U R                  SS9[        R                  5        U R                  U R                  S   S   [        R                  5        g)z{
If C{"isError"} is set to C{1} (true) on the legacy event, the
C{"log_level"} key should get set to L{LogLevel.critical}.
rF   r¯   r   rN   N)	r   r%   rÄ   r!   r’   r<   rD   r   rx   r-   s    r   Útest_isErrorÚ&PublishToNewObserverTests.test_isErrorZ  sP   € ô
 	Ø�M‰M˜4×+Ñ+°AÐ+Ð6¼	×8SÑ8Sô	
ð 	×Ñ˜Ÿ™ Q™¨Ñ4´h×6GÑ6GÕHr    c                 óä   • [        U R                  U R                  [        R                  S9[
        R                  5        U R                  U R                  S   S   [        R                  5        g)zÆ
If the old-style C{"logLevel"} key is set to a standard library logging
level, using a predefined (L{int}) constant, the new-style
C{"log_level"} key should get set to the corresponding log level.
r‚   r   rN   N)r   r%   rÄ   Ú
py_loggingr�   r!   r’   r<   rD   r   rv   r-   s    r   Útest_stdlibLogLevelÚ-PublishToNewObserverTests.test_stdlibLogLeveld  sV   € ô 	Ø�M‰MØ×Ñ¤j×&8Ñ&8ÐÐ9Ü×'Ñ'ô	
ð
 	×Ñ˜Ÿ™ Q™¨Ñ4´h·m±mÕDr    c                 óÈ   • [        U R                  U R                  SS9[        R                  5        U R                  U R                  S   S   [        R                  5        g)z¶
If the old-style C{"logLevel"} key is set to a standard library logging
level, using a string value, the new-style C{"log_level"} key should
get set to the corresponding log level.
r�   r‚   r   rN   N)	r   r%   rÄ   r!   r’   r<   rD   r   rv   r-   s    r   Útest_stdlibLogLevelWithStringÚ7PublishToNewObserverTests.test_stdlibLogLevelWithStringq  sP   € ô 	Ø�M‰MØ×Ñ iÐÐ0Ü×'Ñ'ô	
ð
 	×Ñ˜Ÿ™ Q™¨Ñ4´h·m±mÕDr    c                 ó¦   • [        U R                  U R                  SS9[        R                  5        U R                  SU R                  S   5        g)z�
If the old-style C{"logLevel"} key is set to a standard library logging
level, using an unknown value, the new-style C{"log_level"} key should
not get set.
zFoo!!!!!r‚   rN   r   N)r   r%   rÄ   r!   r’   r}   rD   r-   s    r   Útest_stdlibLogLevelWithGarbageÚ8PublishToNewObserverTests.test_stdlibLogLevelWithGarbage~  sG   € ô 	Ø�M‰MØ×Ñ jÐÐ1Ü×'Ñ'ô	
ð
 	×Ñ˜ d§k¡k°!¡nÕ5r    c                 ó®   • [        U R                  U R                  5       [        R                  5        U R                  U R                  S   S   S5        g)zs
Published event should have a namespace of C{"log_legacy"} to indicate
that it was forwarded from legacy logging.
r   Úlog_namespaceÚ
log_legacyNrÊ   r-   s    r   Útest_defaultNamespaceÚ/PublishToNewObserverTests.test_defaultNamespace‹  sE   € ô
 	Ø�M‰M˜4×+Ñ+Ó-¬y×/JÑ/Jô	
ð 	×Ñ˜Ÿ™ Q™¨Ñ8¸,ÕGr    c                 óÎ   • [        U R                  U R                  5       [        R                  5        U R                  U R                  S   S   U R                  S   S   5        g)zO
The old-style C{"system"} key is copied to the new-style
C{"log_system"} key.
r   rL   ri   NrÊ   r-   s    r   rl   Ú%PublishToNewObserverTests.test_system•  sR   € ô
 	Ø�M‰M˜4×+Ñ+Ó-¬y×/JÑ/Jô	
ð 	×Ñ˜Ÿ™ Q™¨Ñ5°t·{±{À1±~ÀhÑ7OÕPr    )rD   r%   r·   )r4   r5   r6   r7   r¸   r½   r8   r¹   r!   r9   rÄ   rÇ   rc   r‡   rÖ   rÙ   rÝ   rà   rã   rè   rl   r:   r   r    r   r»   r»     se   † ñô?ð Cð °6ð ¸i×>QÑ>Qô ô".ôMô<ôEôIôEôEô6ôH÷Qr    r»   )"r¸   ÚloggingrÜ   r   Útypingr   r   Úzope.interfacer   Úzope.interface.exceptionsr   Úzope.interface.verifyr   Útwisted.pythonr	   r
   r!   Útwisted.python.failurer   Útwisted.trialr   Ú_formatr   Ú_interfacesr   r   Ú_legacyr   r   Ú_levelsr   ÚTestCaser   r»   r   r    r   Ú<module>rù      s^   ðñó Ý ß å &Ý @Ý .ç 4Ý *Ý "Ý !ß 0ß DÝ ôy/ H×$5Ñ$5ô y/ôxHQ × 1Ñ 1õ HQr    