B
    v9a/  ã               @   sN   d dl Z d dlmZmZ G dd„ dƒZG dd„ deeƒZG dd„ deeƒZdS )	é    N)ÚPyTestÚCTestc               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestScanstringc             C   sž  | j jj}|  |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 )-Nu   "zð„ x"é   T)u   zð„ xé   z"\u007b")Ú{é   z<"A JSON payload should be an object or array, not a string.")z:A JSON payload should be an object or array, not a string.é<   z["Unclosed array"é   )zUnclosed arrayé   z["extra comma",])zextra commaé   z["double extra comma",,])zdouble extra commaé   z["Comma after the close"],)zComma after the closeé   z["Extra close"]])zExtra closer   z{"Extra comma": true,})zExtra commar   z:{"Extra value after close": true} "misplaced quoted value")zExtra value after closeé   z{"Illegal expression": 1 + 2})zIllegal expressionr   z{"Illegal invocation": alert()})zIllegal invocationr   z+{"Numbers cannot have leading zeroes": 013})z"Numbers cannot have leading zeroesé%   z{"Numbers cannot be hex": 0x14})zNumbers cannot be hexr   z2[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]r   )zToo deepé   z{"Missing colon" null})zMissing coloné   z{"Double colon":: null})zDouble coloné   z {"Comma instead of colon", null})zComma instead of coloné   z!["Colon instead of comma": false])zColon instead of commar   z["Bad value", truth])z	Bad valueé   )ÚjsonÚdecoderÚ
scanstringÚassertEqual)Úselfr   © r   ú%/usr/lib/python3.7/test_scanstring.pyÚtest_scanstring   sz    




















zTestScanstring.test_scanstringc                sv   ˆj jj‰ ‡ ‡fdd„}|ddƒ |ddƒ |ddƒ |d	d
ƒ |ddƒ |ddƒ |ddƒ |ddƒ |dd
ƒ d S )Nc                s    ˆ  ˆ | ddƒ|t| ƒf¡ d S )Nr   T)r   Úlen)ZgivenÚexpect)r   r   r   r   Ú
assertScanZ   s    z2TestScanstring.test_surrogates.<locals>.assertScanz"z\ud834\u0079x"u   zí ´yxz"z\ud834\udd20x"u   zð„ xz"z\ud834\ud834\udd20x"u	   zí ´ð„ xz
"z\ud834x"u   zí ´xu   "z\ud834í´ x12345"u   zí ´í´ x12345z
"z\udd20x"u   zí´ xu
   "zí ´í´ x"u   zí ´í´ xu   "zí ´\udd20x"u   "zí ´x")r   r   r   )r   r    r   )r   r   r   Útest_surrogatesX   s    








zTestScanstring.test_surrogatesc             C   sv   | j jj}ddddddddd	d
dddddddddddddg}x4|D ],}| j| j|d ||ddƒ W d Q R X qBW d S )Nz"\"z"\x"z"\u"z"\u0"z"\u01"z"\u012"z"\uz012"z"\u0z12"z"\u01z2"z"\u012z"z"\u0x12"z"\u0X12"z	"\ud834\"z
"\ud834\u"z"\ud834\ud"z"\ud834\udd"z"\ud834\udd2"z"\ud834\uzdd2"z"\ud834\udzd2"z"\ud834\uddz2"z"\ud834\udd2z"z"\ud834\u0x20"z"\ud834\u0X20")Úmsgr   T)r   r   r   ÚassertRaisesZJSONDecodeError)r   r   Zbad_escapesÚsr   r   r   Útest_bad_escapesh   s6    

zTestScanstring.test_bad_escapesc          	   C   s0   |   t¡ | jj dtjd ¡ W d Q R X d S )Ns   xxxr   )r#   ÚOverflowErrorr   r   r   ÚsysÚmaxsize)r   r   r   r   Útest_overflow‡   s    zTestScanstring.test_overflowN)Ú__name__Ú
__module__Ú__qualname__r   r!   r%   r)   r   r   r   r   r      s   Rr   c               @   s   e Zd ZdS )ÚTestPyScanstringN)r*   r+   r,   r   r   r   r   r-   Œ   s    r-   c               @   s   e Zd ZdS )ÚTestCScanstringN)r*   r+   r,   r   r   r   r   r.      s    r.   )r'   Ztest.test_jsonr   r   r   r-   r.   r   r   r   r   Ú<module>   s
    