o
    ¼>hÁ7  ã                   @   sˆ   d dl Z d dlZd dlmZ zd dlmZ d dlmZ W n e	y'   dZ
Y nw dZ
dd„ Zdd	„ Ze e
 d
¡G dd„ dejƒƒZdS )é    N)ÚUtf8Validator)ÚlibFTc                  C   s¦  g } d}dg g}|d   d¡ |d   d¡ |d   d¡ |d   d¡ |d   d|f¡ |   |¡ d	g g}tƒ }tdt|ƒd ƒD ]"}| ¡  | |d
|… ¡}|d   |d o\|d |d
|… f¡ qB|   |¡ dg g}|d   d¡ |d   d¡ |d   d¡ |d   d¡ |   |¡ dg g}|d   d¡ |d   d¡ |   |¡ dg g}|d   d¡ |d   d¡ |d   d¡ |d   d¡ |   |¡ dg g}|d   d¡ |d   d¡ |d   d¡ |   |¡ dg g}|d   d¡ |d   d¡ |d   d ¡ |d   d¡ |d   d!¡ |   |¡ d"g g}|d   d#¡ |d   d$¡ |d   d%¡ |d   d&¡ |d   d'¡ |d   d(¡ |d   d)¡ d*}d+g g}g d,¢}|D ]$}d*}t|d |d ƒD ]}|t d-|d.¡7 }qc|d   d/|f¡ qV|   |¡ d0g g}g d1¢}	|	D ]}
|d   d/|
f¡ qŠ|   |¡ d2g g}|d   d/d* |	¡f¡ |   |¡ d3g g}|d   d4¡ |d   d5¡ |d   d6¡ |   |¡ d7g g}|d   d8¡ |d   d9¡ |d   d:¡ |d   d;¡ |d   d<¡ |   |¡ d=g g}|d   d>¡ |d   d?¡ |d   d@¡ |d   dA¡ |d   dB¡ |   |¡ dCg g}|d   dD¡ |d   dE¡ |d   dF¡ |d   dG¡ |d   dH¡ |   |¡ dIg g}|d   dJ¡ |d   dK¡ |d   dL¡ |d   dM¡ |d   dN¡ |d   dO¡ |d   dP¡ |   |¡ dQg g}|d   dR¡ |d   dS¡ |d   dT¡ |d   dU¡ |d   dV¡ |d   dW¡ |d   dX¡ |d   dY¡ |   |¡ dZg g}|d   d[¡ |d   d¡ d\D ]/}d]D ])}|d^krò|d_ksd`D ]}|| da | }|dbvr|d   d|f¡ qôqæqâ|   |¡ dcg g}|d   dd¡ |d   de¡ |d   df¡ |d   dg¡ |d   d ¡ |d   d[¡ |d   d¡ |   |¡ | S )hz{
    Create test sequences for UTF-8 decoder tests from
    http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
    s   Îºá½¹ÏƒÎ¼Îµs   Some valid UTF-8 sequencesé   )Ts   hello$world)Ts   helloÂ¢world)Ts   helloâ‚¬world)Ts   helloð¤­¢worldTsI   All prefixes of a valid UTF-8 string that contains multi-byte code pointsNr   s+   First possible sequence of a certain length)Tó    )Ts   Â€)Ts   à €)Ts   ð€€s7   First possible sequence length 5/6 (invalid codepoints))Fs   øˆ€€€)Fs   ü„€€€€s*   Last possible sequence of a certain length)Tó   )Ts   ß¿)Ts   ï¿¿)Ts   ô¿¿s8   Last possible sequence length 4/5/6 (invalid codepoints))Fs   ÷¿¿¿)Fs   û¿¿¿¿)Fs   ý¿¿¿¿¿s   Other boundary conditions)Ts   íŸ¿)Ts   î€€)Ts   ï¿½)Fs   ô€€s   Unexpected continuation bytes)Fó   €)Fó   ¿)Fs   €¿)Fs   €¿€)Fs   €¿€¿)Fs   €¿€¿€)Fs   €¿€¿€¿ó    s   Lonely start characters))éÀ   éß   )éà   éï   )éð   é÷   )éø   éû   )éü   éý   ÚBBé    Fs-   Sequences with last continuation byte missing)
ó   Às   à€s   ð€€s   ø€€€s   ü€€€€ó   ßs   ï¿s   ÷¿¿s   û¿¿¿s   ý¿¿¿¿s%   Concatenation of incomplete sequencess   Impossible bytes)Fó   þ)Fó   ÿ)Fs   þþÿÿs'   Examples of an overlong ASCII character)Fs   À¯)Fs   à€¯)Fs   ð€€¯)Fs   ø€€€¯)Fs   ü€€€€¯s   Maximum overlong sequences)Fs   Á¿)Fs   àŸ¿)Fó   ð¿¿)Fs   ø‡¿¿¿)Fs   üƒ¿¿¿¿s,   Overlong representation of the NUL character)Fs   À€)Fs   à€€)Fs   ð€€€)Fs   ø€€€€)Fs   ü€€€€€s   Single UTF-16 surrogates)Fó   í €)Fs   í­¿)Fs   í®€)Fs   í¯¿)Fs   í°€)Fs   í¾€)Fs   í¿¿s   Paired UTF-16 surrogates)Fs   í €í°€)Fs   í €í¿¿)Fs   í­¿í°€)Fs   í­¿í¿¿)Fs   í®€í°€)Fs   í®€í¿¿)Fs   í¯¿í°€)Fs   í¯¿í¿¿s'   Non-character code points (valid UTF-8))Ts   ï¿¾)ó   ðó   ñó   òó   óó   ô)ó   ó   Ÿó   ¯r   r    r!   )ó   ¾r   r   )s   ð¿¾r   s(   Unicode specials (i.e. replacement char))Ts   ï¿¹)Ts   ï¿º)Ts   ï¿»)Ts   ï¿¼)	ÚappendÚStandardUtf8ValidatorÚrangeÚlenÚresetÚvalidateÚstructÚpackÚjoin)ÚUTF8_TEST_SEQUENCESÚvssÚvsÚvÚiÚresÚsÚmÚmmÚkÚkkÚz1Úz2Úz3Úzz© r=   úˆ/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/autobahn/nvx/test/test_nvx_utf8validator.pyÚ_create_utf8_test_sequences+   s  
þ(















€ù

r?   c                  C   sD   g } t ƒ D ]}dd„ |d D ƒ}t|ƒdkr|  |d |g¡ q| S )z<
    Generate some exotic, but valid UTF8 test strings.
    c                 S   s   g | ]
}|d  r|d ‘qS )r   r   r=   )Ú.0Úxr=   r=   r>   Ú
<listcomp>õ   s    z5_create_valid_utf8_test_sequences.<locals>.<listcomp>r   r   )r?   r(   r%   )ÚVALID_UTF8_TEST_SEQUENCESÚtestÚvalidsr=   r=   r>   Ú!_create_valid_utf8_test_sequencesï   s   
€rF   z!NVX native extensions not presentc                   @   s>   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zddd„ZdS )ÚTestNvxUtf8Validatorc                 C   sb   g }t ƒ D ]	}| |d ¡ qtddƒD ]}|dk s|dkr*| dt|ƒ d¡f¡ q	 || _d S )Nr   r   iÿÿ  i Ø  iÿß  Tzutf-8)r?   Úextendr'   r%   ÚchrÚencodeÚ_TEST_SEQUENCES)Úselfr0   r7   r2   ÚssÚjÚss1Úss2r=   r=   r>   ÚsetUpþ   s   
ÿ€
zTestNvxUtf8Validator.setUpc                 C   ó   t ƒ }|  |¡S )zA
        Test standard implementation of UTF8 validator.
        )r&   Ú
_test_utf8©rL   Ú	validatorr=   r=   r>   Útest_standard_utf8validator   ó   
z0TestNvxUtf8Validator.test_standard_utf8validatorc                 C   rR   )z<
        Test NVX implementation of UTF8 validator.
        )ÚNvxUtf8ValidatorrS   rT   r=   r=   r>   Útest_nvx_utf8validator'  rW   z+TestNvxUtf8Validator.test_nvx_utf8validatorc                 C   rR   )zU
        Test standard implementation of UTF8 validator in incremental mode.
        )r&   Ú_test_utf8_incrementalrT   r=   r=   r>   Ú'test_standard_utf8validator_incremental.  rW   z<TestNvxUtf8Validator.test_standard_utf8validator_incrementalc                 C   sF   | j D ]}| ¡  | |d ¡}|d o|d }|  ||d ¡ qd S )Nr   r   )rK   r)   r*   ÚassertEqual)rL   rU   r4   Úrr3   r=   r=   r>   rS   C  s   
ùzTestNvxUtf8Validator._test_utf8Tc                 C   sP  |rd}n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 )Né   é   )TTé   r`   u   Âµ@ÃŸÃ¶Ã¤Ã¼Ã Ã¡Úutf8)FFr   r   ó   õ)TTé   rc   s   edited)FFr   é   r   )TTr^   r^   s   edit)FFé   rd   s   edí €)TFrd   rd   s   editedí)FFr   rd   s    €)r)   r\   r*   rJ   )rL   rU   ÚwithPositionsr7   r=   r=   r>   rZ   M  s    (""""""&z+TestNvxUtf8Validator._test_utf8_incrementalN)T)	Ú__name__Ú
__module__Ú__qualname__rQ   rV   rY   r[   rS   rZ   r=   r=   r=   r>   rG   û   s    "
rG   )r+   ÚunittestÚ autobahn.websocket.utf8validatorr   r&   Ú_nvx_utf8validatorr   Úautobahn.nvxrX   ÚImportErrorÚHAS_NVXr?   rF   ÚskipIfÚTestCaserG   r=   r=   r=   r>   Ú<module>   s   ÿ E