Ë
    êmxi*0  ã                   ó2  — d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZmZmZmZmZ g di df‘di df‘d	i d
f‘di df‘di df‘di df‘di df‘di df‘di df‘di df‘di df‘di df‘di df‘di d f‘d!i d"f‘d#i d$f‘d%i d&f‘d'd(d)d*gid+f‘d,d(d*gid-f‘d.i d/f‘d0i d1f‘d2i d3f‘d4i d5f‘d6d(d)d7gid8f‘d9i d:f‘d;i d<f‘d=i d>f‘d=d?d@id=f‘dAd@d@dBœdCf‘dDdEd@idFf‘dGi dHf‘dGd(dIgidJf‘dKdLdMidNf‘dOdLdP„ idQf‘dKdLdR„ idNf‘Z G dS„ dTe j,                  «      Zy)Ué    N)
Úutf8Úxhtml_escapeÚxhtml_unescapeÚ
url_escapeÚurl_unescapeÚ
to_unicodeÚjson_decodeÚjson_encodeÚsqueezeÚrecursive_unicode)Úunicode_type)ÚListÚTupleÚUnionÚDictÚAnyzhello http://world.com/!z8hello <a href="http://world.com/">http://world.com/</a>!z0hello http://world.com/with?param=true&stuff=yeszqhello <a href="http://world.com/with?param=true&amp;stuff=yes">http://world.com/with?param=true&amp;stuff=yes</a>z>http://url.com/w(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz]<a href="http://url.com/w">http://url.com/w</a>(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz>http://url.com/withmany.......................................zd<a href="http://url.com/withmany">http://url.com/withmany</a>.......................................z;http://url.com/withmany((((((((((((((((((((((((((((((((((a)za<a href="http://url.com/withmany">http://url.com/withmany</a>((((((((((((((((((((((((((((((((((a)zhttp://foo.com/blah_blahz?<a href="http://foo.com/blah_blah">http://foo.com/blah_blah</a>zhttp://foo.com/blah_blah/zA<a href="http://foo.com/blah_blah/">http://foo.com/blah_blah/</a>z)(Something like http://foo.com/blah_blah)zP(Something like <a href="http://foo.com/blah_blah">http://foo.com/blah_blah</a>)z$http://foo.com/blah_blah_(wikipedia)zW<a href="http://foo.com/blah_blah_(wikipedia)">http://foo.com/blah_blah_(wikipedia)</a>z+http://foo.com/blah_(blah)_(wikipedia)_blahze<a href="http://foo.com/blah_(blah)_(wikipedia)_blah">http://foo.com/blah_(blah)_(wikipedia)_blah</a>z5(Something like http://foo.com/blah_blah_(wikipedia))zh(Something like <a href="http://foo.com/blah_blah_(wikipedia)">http://foo.com/blah_blah_(wikipedia)</a>)zhttp://foo.com/blah_blah.z@<a href="http://foo.com/blah_blah">http://foo.com/blah_blah</a>.zhttp://foo.com/blah_blah/.zB<a href="http://foo.com/blah_blah/">http://foo.com/blah_blah/</a>.z<http://foo.com/blah_blah>zG&lt;<a href="http://foo.com/blah_blah">http://foo.com/blah_blah</a>&gt;z<http://foo.com/blah_blah/>zI&lt;<a href="http://foo.com/blah_blah/">http://foo.com/blah_blah/</a>&gt;zhttp://foo.com/blah_blah,z@<a href="http://foo.com/blah_blah">http://foo.com/blah_blah</a>,z&http://www.example.com/wpstyle/?p=364.zZ<a href="http://www.example.com/wpstyle/?p=364">http://www.example.com/wpstyle/?p=364</a>.zrdar://1234Úpermitted_protocolsÚhttpÚrdarz%<a href="rdar://1234">rdar://1234</a>z
rdar:/1234z#<a href="rdar:/1234">rdar:/1234</a>z'http://userid:password@example.com:8080z]<a href="http://userid:password@example.com:8080">http://userid:password@example.com:8080</a>zhttp://userid@example.comzA<a href="http://userid@example.com">http://userid@example.com</a>zhttp://userid@example.com:8080zK<a href="http://userid@example.com:8080">http://userid@example.com:8080</a>z"http://userid:password@example.comzS<a href="http://userid:password@example.com">http://userid:password@example.com</a>zFmessage://%3c330e7f8409726r6a4ba78dkf1fd71420c1bf6ff@mail.gmail.com%3eÚmessagez›<a href="message://%3c330e7f8409726r6a4ba78dkf1fd71420c1bf6ff@mail.gmail.com%3e">message://%3c330e7f8409726r6a4ba78dkf1fd71420c1bf6ff@mail.gmail.com%3e</a>u   http://âž¡.ws/ä¨¹u1   <a href="http://âž¡.ws/ä¨¹">http://âž¡.ws/ä¨¹</a>z<tag>http://example.com</tag>zJ&lt;tag&gt;<a href="http://example.com">http://example.com</a>&lt;/tag&gt;zJust a www.example.com link.zAJust a <a href="http://www.example.com">www.example.com</a> link.Úrequire_protocolTz:A http://reallylong.com/link/that/exceedsthelenglimit.html)r   Úshortenz§A <a href="http://reallylong.com/link/that/exceedsthelenglimit.html" title="http://reallylong.com/link/that/exceedsthelenglimit.html">http://reallylong.com/link...</a>z6A http://reallylongdomainnamethatwillbetoolong.com/hi!r   z¢A <a href="http://reallylongdomainnamethatwillbetoolong.com/hi" title="http://reallylongdomainnamethatwillbetoolong.com/hi">http://reallylongdomainnametha...</a>!z/A file:///passwords.txt and http://web.com linkzLA file:///passwords.txt and <a href="http://web.com">http://web.com</a> linkÚfilezSA <a href="file:///passwords.txt">file:///passwords.txt</a> and http://web.com linkzwww.external-link.comÚextra_paramsúrel="nofollow" class="external"z`<a href="http://www.external-link.com" rel="nofollow" class="external">www.external-link.com</a>z;www.external-link.com and www.internal-link.com/blogs extrac                 ó,   — | j                  d«      rdS dS )Nzhttp://www.internal-link.comzclass="internal"r   )Ú
startswith©Úhrefs    úO/home/htdocs/ttos/venv/lib/python3.12/site-packages/tornado/test/escape_test.pyú<lambda>r!   Å   s#   € à—?‘?Ð#AÔBð #ð ð 7ð ó    zÈ<a href="http://www.external-link.com" rel="nofollow" class="external">www.external-link.com</a> and <a href="http://www.internal-link.com/blogs" class="internal">www.internal-link.com/blogs</a> extrac                  ó   — y)Nz%    rel="nofollow" class="external"  © r   s    r    r!   r!   Ð   s   � r"   c                   óN   — e 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y)ÚEscapeTestCasec                 ó†   — t         D ]8  \  }}}t        j                  j                  |fi |¤Ž}| j	                  ||«       Œ: y )N)Úlinkify_testsÚtornadoÚescapeÚlinkifyÚassertEqual)ÚselfÚtextÚkwargsÚhtmlÚlinkeds        r    Útest_linkifyzEscapeTestCase.test_linkify×   sA   € Ü"/ò 	+ÑˆD�&˜$Ü—^‘^×+Ñ+¨DÑ;°FÑ;ˆFØ×Ñ˜V TÕ*ñ	+r"   c           	      óÔ   — g d¢}|D ]_  \  }}| j                  t        t        |«      «      t        |«      «       | j                  t        |«      t        t        |«      «      «       Œa y )N)©z<foo>z&lt;foo&gt;r4   )s   <foo>s   &lt;foo&gt;)z<>&"'z&lt;&gt;&amp;&quot;&#x27;)z&amp;z	&amp;amp;)u   <Ã©>u
   &lt;Ã©&gt;)s   <Ã©>s
   &lt;Ã©&gt;)r,   r   r   r   ©r-   ÚtestsÚ	unescapedÚescapeds       r    Útest_xhtml_escapez EscapeTestCase.test_xhtml_escapeÜ   s]   € ò
ˆð #(ò 	MÑˆI�wØ×ÑœT¤,¨yÓ"9Ó:¼DÀ»MÔJØ×ÑœT )›_¬d´>À'Ó3JÓ.KÕLñ	Mr"   c                 óV   — g d¢}|D ]   \  }}| j                  |t        |«      «       Œ" y )N))zfoo&#32;barúfoo bar)zfoo&#x20;barr;   )zfoo&#X20;barr;   )zfoo&#xabc;baru	   fooàª¼bar)úfoo&#xyz;barr<   )ú	foo&#;barr=   )ú
foo&#x;barr>   )r,   r   )r-   r6   r8   r7   s       r    Útest_xhtml_unescape_numericz*EscapeTestCase.test_xhtml_unescape_numericê   s6   € ò
ˆð #(ò 	AÑˆG�YØ×Ñ˜Y¬°wÓ(?Õ@ñ	Ar"   c                 óš   — dj                  «       dfdj                  d«      dfdg}|D ]   \  }}| j                  t        |«      |«       Œ" y )Nõ   Ã©ú%C3%A9Úlatin1z%E9)rA   rB   )Úencoder,   r   r5   s       r    Útest_url_escape_unicodez&EscapeTestCase.test_url_escape_unicode÷   sY   € ð �_‰_Ó Ð)Ø�_‰_˜XÓ&¨Ð.à ð
ˆð #(ò 	=ÑˆI�wØ×ÑœZ¨	Ó2°GÕ<ñ	=r"   c                 óÐ   — dddt        d«      d fg}|D ]P  \  }}}| j                  t        t        |«      |«      |«       | j                  t        t        |«      |«      |«       ŒR y )N)rB   rA   r   )rB   u   ÃƒÂ©rC   rB   rA   )r   r,   r   r   )r-   r6   r8   r7   Úencodings        r    Útest_url_unescape_unicodez(EscapeTestCase.test_url_unescape_unicode  sp   € à(Ø0Ø”t˜H“~ tÐ,ð
ˆð
 -2ò 	OÑ(ˆG�Y ð ×Ñœ\¬*°WÓ*=¸xÓHÈ)ÔTØ×Ñœ\¬$¨w«-¸ÓBÀIÕNñ	Or"   c                 óŠ  — d}d}d}| j                  t        |«      |«       | j                  t        |d¬«      |«       | j                  t        |«      |«       | j                  t        |d¬«      |«       | j                  t        |d ¬«      t        |«      «       | j                  t        |d d¬«      t        |«      «       y )Nz+ #%z
%2B+%23%25z%2B%20%23%25F)Úplus)rG   )rG   rJ   )r,   r   r   r   )r-   r7   Úplus_escapedr8   s       r    Útest_url_escape_quote_plusz)EscapeTestCase.test_url_escape_quote_plus  s¤   € Øˆ	Ø#ˆØ ˆØ×Ñœ IÓ.°Ô=Ø×Ñœ I°EÔ:¸GÔDØ×Ñœ lÓ3°YÔ?Ø×Ñœ g°EÔ:¸IÔFØ×Ñœ l¸TÔBÄDÈÃOÔTØ×ÑÜ˜¨4°eÔ<¼dÀ9»oõ	
r"   c                 ó¤   — | j                  t        t        d«      «      t        «       | j                  t        t        d«      «      t        «       y )NÚfoo)r,   Útyper   Ústrr   ©r-   s    r    Útest_escape_return_typesz'EscapeTestCase.test_escape_return_types  s8   € ð 	×Ñœœl¨5Ó1Ó2´CÔ8Ø×Ñœœl¨5Ó1Ó2´LÕAr"   c                 ó¸   — | j                  t        d«      d«       | j                  t        d«      d«       | j                  t        t        d«      «      d«       y )Ns   "foo"rN   z"foo"u   "Ã©"rA   )r,   r	   r   rQ   s    r    Útest_json_decodezEscapeTestCase.test_json_decode"  sJ   € ð 	×Ñœ XÓ.°Ô6Ø×Ñœ WÓ-¨uÔ5ð 	×Ñœ¤T¨*Ó%5Ó6¸ÕAr"   c           	      óö   — | j                  t        t        d«      «      d«       t        t        u rI| j                  t        t        t        d«      «      «      d«       | j                  t        t        d«       y y )NrA   ó   é)r,   r	   r
   ÚbytesrP   r   ÚassertRaisesÚUnicodeDecodeErrorrQ   s    r    Útest_json_encodezEscapeTestCase.test_json_encode+  s[   € ð 	×Ñœ¤[°Ó%:Ó;¸XÔFÜ”C‰<Ø×Ñœ[¬´T¸(³^Ó)DÓEÀxÔPØ×ÑÔ0´+¸wÕGð r"   c                 ó:   — | j                  t        d«      d«       y )Nz&sequences     of    whitespace   charszsequences of whitespace chars)r,   r   rQ   s    r    Útest_squeezezEscapeTestCase.test_squeeze4  s   € Ø×ÑÜÐ<Ó=Ø+õ	
r"   c                 ó  — ddiddgdddœ}| j                  t        |d   «      ddi«       | j                  t        |d   «      ddg«       | j                  t        |d	   «      d
«       | j                  t        |d   «      d«       y )Nó   fooó   bar)r^   r_   )ÚdictÚlistÚtuplerW   r`   rN   Úbarra   rb   )rN   rc   rW   )r,   r   )r-   r6   s     r    Útest_recursive_unicodez%EscapeTestCase.test_recursive_unicode:  s‘   € à˜VÐ$Ø˜VÐ$Ø%Øñ	
ˆð 	×ÑÔ*¨5°©=Ó9¸EÀ5¸>ÔJØ×ÑÔ*¨5°©=Ó9¸EÀ5¸>ÔJØ×ÑÔ*¨5°©>Ó:¸NÔKØ×ÑÔ*¨5°©>Ó:¸EÕBr"   N)Ú__name__Ú
__module__Ú__qualname__r2   r9   r?   rE   rH   rL   rR   rT   rZ   r\   rd   r$   r"   r    r&   r&   Ö   s@   „ ò+ò
MòAò	=òOò
òBòBòHò
ó
Cr"   r&   )Úunittestr)   Útornado.escaper   r   r   r   r   r   r	   r
   r   r   Útornado.utilr   Útypingr   r   r   r   r   r(   ÚTestCaser&   r$   r"   r    ú<module>rm      sÜ  ðÛ ã ÷÷ ÷ õ &ç 0Õ 0ðð 	#Ø
ØBððð 	;Ø
Ø{ððð 	IØ
Øgððð( 	IØ
Ønðð'ð2 	FØ
Økðð1ð@ 	#Ø
ØIðð?ðJ 	$Ø
ØKððIðT 	4Ø
ØZððSð^ 	/Ø
Øaðð]ðh 	6Ø
Øoððgðr 	@Ø
Ørððqð| 	$Ø
ØJðð{ðF 	%Ø
ØLððEðP 	%Ø
ØQððOðZ 	&Ø
ØSððYðd 	$Ø
ØJððcðn 	1Ø
Ødððmðx 	Ø	 ¨Ð 0Ð1Ø/ððwðB 	Ø	  Ð)Ø-ððAðL 	2Ø
ØgððKðV 	$Ø
ØKððUð` 	)Ø
ØUðð_ðj 	-Ø
Ø]ððiðt 	QØ	 ¨Ð 3Ð4ð	Uððsð@ 	"Ø
ØGðððJ 	(Ø
ØTððIðT 	'Ø
ØKððSð^ 	'Ø	˜TÐ"Ø&ðð]ðh 	EØ!¨dÑ3ð	nððgðt 	AØ	�DÐð	nððsð@ 	:Ø
ØVðððJ 	:Ø	  Ð)Ø]ððIðT 	 Ø	Ð:Ð;ØjððSð^ 	Fàñ ð	
ð	sðð]ðv 	 Ø	ÑMÐNØjððu€ôDnC�X×&Ñ&õ nCr"   