o
    HXh                     @   s&  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZ d dlmZ d dlmZ ejejfZeje	deje	dde	d	iZd
Zg dZG dd dejZG dd dejZG dd dejZG dd dejZedkre  dS dS )    N)support)	os_helper)BytesIO)UIDs  
        PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NU
        WVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VO
        IiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4w
        LmR0ZCI+CjxwbGlzdCB2ZXJzaW9uPSIxLjAiPgo8ZGljdD4KCTxrZXk+YUJp
        Z0ludDwva2V5PgoJPGludGVnZXI+OTIyMzM3MjAzNjg1NDc3NTc2NDwvaW50
        ZWdlcj4KCTxrZXk+YUJpZ0ludDI8L2tleT4KCTxpbnRlZ2VyPjkyMjMzNzIw
        MzY4NTQ3NzU4NTI8L2ludGVnZXI+Cgk8a2V5PmFEYXRlPC9rZXk+Cgk8ZGF0
        ZT4yMDA0LTEwLTI2VDEwOjMzOjMzWjwvZGF0ZT4KCTxrZXk+YURpY3Q8L2tl
        eT4KCTxkaWN0PgoJCTxrZXk+YUZhbHNlVmFsdWU8L2tleT4KCQk8ZmFsc2Uv
        PgoJCTxrZXk+YVRydWVWYWx1ZTwva2V5PgoJCTx0cnVlLz4KCQk8a2V5PmFV
        bmljb2RlVmFsdWU8L2tleT4KCQk8c3RyaW5nPk3DpHNzaWcsIE1hw588L3N0
        cmluZz4KCQk8a2V5PmFub3RoZXJTdHJpbmc8L2tleT4KCQk8c3RyaW5nPiZs
        dDtoZWxsbyAmYW1wOyAnaGknIHRoZXJlISZndDs8L3N0cmluZz4KCQk8a2V5
        PmRlZXBlckRpY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5hPC9rZXk+CgkJ
        CTxpbnRlZ2VyPjE3PC9pbnRlZ2VyPgoJCQk8a2V5PmI8L2tleT4KCQkJPHJl
        YWw+MzIuNTwvcmVhbD4KCQkJPGtleT5jPC9rZXk+CgkJCTxhcnJheT4KCQkJ
        CTxpbnRlZ2VyPjE8L2ludGVnZXI+CgkJCQk8aW50ZWdlcj4yPC9pbnRlZ2Vy
        PgoJCQkJPHN0cmluZz50ZXh0PC9zdHJpbmc+CgkJCTwvYXJyYXk+CgkJPC9k
        aWN0PgoJPC9kaWN0PgoJPGtleT5hRmxvYXQ8L2tleT4KCTxyZWFsPjAuNTwv
        cmVhbD4KCTxrZXk+YUxpc3Q8L2tleT4KCTxhcnJheT4KCQk8c3RyaW5nPkE8
        L3N0cmluZz4KCQk8c3RyaW5nPkI8L3N0cmluZz4KCQk8aW50ZWdlcj4xMjwv
        aW50ZWdlcj4KCQk8cmVhbD4zMi41PC9yZWFsPgoJCTxhcnJheT4KCQkJPGlu
        dGVnZXI+MTwvaW50ZWdlcj4KCQkJPGludGVnZXI+MjwvaW50ZWdlcj4KCQkJ
        PGludGVnZXI+MzwvaW50ZWdlcj4KCQk8L2FycmF5PgoJPC9hcnJheT4KCTxr
        ZXk+YU5lZ2F0aXZlQmlnSW50PC9rZXk+Cgk8aW50ZWdlcj4tODAwMDAwMDAw
        MDA8L2ludGVnZXI+Cgk8a2V5PmFOZWdhdGl2ZUludDwva2V5PgoJPGludGVn
        ZXI+LTU8L2ludGVnZXI+Cgk8a2V5PmFTdHJpbmc8L2tleT4KCTxzdHJpbmc+
        RG9vZGFoPC9zdHJpbmc+Cgk8a2V5PmFuRW1wdHlEaWN0PC9rZXk+Cgk8ZGlj
        dC8+Cgk8a2V5PmFuRW1wdHlMaXN0PC9rZXk+Cgk8YXJyYXkvPgoJPGtleT5h
        bkludDwva2V5PgoJPGludGVnZXI+NzI4PC9pbnRlZ2VyPgoJPGtleT5uZXN0
        ZWREYXRhPC9rZXk+Cgk8YXJyYXk+CgkJPGRhdGE+CgkJUEd4dmRITWdiMlln
        WW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5k
        VzVyCgkJUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJ
        RFBHeHZkSE1nYjJZZ1ltbHVZWEo1CgkJSUdkMWJtcytBQUVDQXp4c2IzUnpJ
        RzltSUdKcGJtRnllU0JuZFc1clBnQUJBZ004Ykc5MGN5QnZaaUJpCgkJYVc1
        aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMr
        QUFFQ0F6eHNiM1J6CgkJSUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJH
        OTBjeUJ2WmlCaWFXNWhjbmtnWjNWdWF6NEFBUUlECgkJUEd4dmRITWdiMlln
        WW1sdVlYSjVJR2QxYm1zK0FBRUNBdz09CgkJPC9kYXRhPgoJPC9hcnJheT4K
        CTxrZXk+c29tZURhdGE8L2tleT4KCTxkYXRhPgoJUEdKcGJtRnllU0JuZFc1
        clBnPT0KCTwvZGF0YT4KCTxrZXk+c29tZU1vcmVEYXRhPC9rZXk+Cgk8ZGF0
        YT4KCVBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXp4c2IzUnpJ
        RzltSUdKcGJtRnllU0JuZFc1clBnQUJBZ004CgliRzkwY3lCdlppQmlhVzVo
        Y25rZ1ozVnVhejRBQVFJRFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytB
        QUVDQXp4cwoJYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkw
        Y3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHYKCWRITWdiMllnWW1s
        dVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVy
        UGdBQkFnTThiRzkwCgljeUJ2WmlCaWFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4
        dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBdz09Cgk8L2RhdGE+Cgk8
        a2V5PsOFYmVucmFhPC9rZXk+Cgk8c3RyaW5nPlRoYXQgd2FzIGEgdW5pY29k
        ZSBrZXkuPC9zdHJpbmc+CjwvZGljdD4KPC9wbGlzdD4Ks\  
        YnBsaXN0MDDfEBABAgMEBQYHCAkKCwwNDg8QERITFCgpLzAxMjM0NTc2OFdh
        QmlnSW50WGFCaWdJbnQyVWFEYXRlVWFEaWN0VmFGbG9hdFVhTGlzdF8QD2FO
        ZWdhdGl2ZUJpZ0ludFxhTmVnYXRpdmVJbnRXYVN0cmluZ1thbkVtcHR5RGlj
        dFthbkVtcHR5TGlzdFVhbkludFpuZXN0ZWREYXRhWHNvbWVEYXRhXHNvbWVN
        b3JlRGF0YWcAxQBiAGUAbgByAGEAYRN/////////1BQAAAAAAAAAAIAAAAAA
        AAAsM0GcuX30AAAA1RUWFxgZGhscHR5bYUZhbHNlVmFsdWVaYVRydWVWYWx1
        ZV1hVW5pY29kZVZhbHVlXWFub3RoZXJTdHJpbmdaZGVlcGVyRGljdAgJawBN
        AOQAcwBzAGkAZwAsACAATQBhAN9fEBU8aGVsbG8gJiAnaGknIHRoZXJlIT7T
        HyAhIiMkUWFRYlFjEBEjQEBAAAAAAACjJSYnEAEQAlR0ZXh0Iz/gAAAAAAAA
        pSorLCMtUUFRQhAMoyUmLhADE////+1foOAAE//////////7VkRvb2RhaNCg
        EQLYoTZPEPo8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmlu
        YXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBv
        ZiBiaW5hcnkgZ3Vuaz4AAQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxs
        b3RzIG9mIGJpbmFyeSBndW5rPgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4A
        AQIDPGxvdHMgb2YgYmluYXJ5IGd1bms+AAECAzxsb3RzIG9mIGJpbmFyeSBn
        dW5rPgABAgM8bG90cyBvZiBiaW5hcnkgZ3Vuaz4AAQIDTTxiaW5hcnkgZ3Vu
        az5fEBdUaGF0IHdhcyBhIHVuaWNvZGUga2V5LgAIACsAMwA8AEIASABPAFUA
        ZwB0AHwAiACUAJoApQCuALsAygDTAOQA7QD4AQQBDwEdASsBNgE3ATgBTwFn
        AW4BcAFyAXQBdgF/AYMBhQGHAYwBlQGbAZ0BnwGhAaUBpwGwAbkBwAHBAcIB
        xQHHAsQC0gAAAAAAAAIBAAAAAAAAADkAAAAAAAAAAAAAAAAAAALsKEYED_ARCHIVEs~  
        YnBsaXN0MDDUAQIDBAUGHB1YJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVy
        VCR0b3ASAAGGoKMHCA9VJG51bGzTCQoLDA0OVnB5dHlwZVYkY2xhc3NZTlMu
        c3RyaW5nEAGAAl8QE0tleUFyY2hpdmUgVUlEIFRlc3TTEBESExQZWiRjbGFz
        c25hbWVYJGNsYXNzZXNbJGNsYXNzaGludHNfEBdPQ19CdWlsdGluUHl0aG9u
        VW5pY29kZaQVFhcYXxAXT0NfQnVpbHRpblB5dGhvblVuaWNvZGVfEBBPQ19Q
        eXRob25Vbmljb2RlWE5TU3RyaW5nWE5TT2JqZWN0ohobXxAPT0NfUHl0aG9u
        U3RyaW5nWE5TU3RyaW5nXxAPTlNLZXllZEFyY2hpdmVy0R4fVHJvb3SAAQAI
        ABEAGgAjAC0AMgA3ADsAQQBIAE8AVgBgAGIAZAB6AIEAjACVAKEAuwDAANoA
        7QD2AP8BAgEUAR0BLwEyATcAAAAAAAACAQAAAAAAAAAgAAAAAAAAAAAAAAAA
        AAABOQ==s  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd" [
   <!ENTITY entity "replacement text">
  ]>
<plist version="1.0">
  <dict>
    <key>A</key>
    <string>&entity;</string>
  </dict>
</plist>
)()ztoo short data    )z1too large offset_table_offset and offset_size = 1s"                                *)z9too large offset_table_offset and nonstandard offset_sizes$                                  ,)z'integer overflow in offset_table_offsets"                         )ztoo large top_objects"                               	)zinteger overflow in top_objects"                        	)z)too large num_objects and offset_size = 1s"                                	)z1too large num_objects and nonstandard offset_sizes$                                  	)z%extremally large num_objects (32 bit)s"                             	)z%extremally large num_objects (64 bit)s"                            	)zinteger overflow in num_objectss"                         	)zoffset_size = 0s"                                 	)zref_size = 0s%    
                             )ztoo large offsets"    *                            	)zinteger overflow in offsets)                                	)ztoo large array sizes'                                 )z$extremally large array size (32-bit)s*                                )z$extremally large array size (64-bit)s.                                   )zinteger overflow in array sizes.                                )ztoo large reference indexs%    
                            )z#integer overflow in reference indexs,                                )ztoo large bytes sizes%   O #A                            )z$extremally large bytes size (32-bit)s(   OA                            )z$extremally large bytes size (64-bit)s,   O   A                            )zinteger overflow in bytes sizes,   OA                            )ztoo large ASCII sizes%   _ #A                            )z$extremally large ASCII size (32-bit)s(   _A                            )z$extremally large ASCII size (64-bit)s,   _   A                            )zinteger overflow in ASCII sizes,   _A                            )zinvalid ASCIIs#   Q                            
)ztoo large UTF-16 sizes'   o                               )z%extremally large UTF-16 size (32-bit)s*   oO                              )z%extremally large UTF-16 size (64-bit)s.   o                                 )zinteger overflow in UTF-16 sizes.   o                              )zinvalid UTF-16s$   a                             )znon-hashable keys&                               )z&too large datetime (datetime overflow)s*   3BP                                  )z'too large datetime (timedelta overflow)s*   3B                                  )zinvalid datetime (Infinity)s*   3                                  )zinvalid datetime (NaN)s*   3                                  c                   @   sv  e Zd Zdd Zd\ddZdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFdG Z%dHdI Z&dJdK Z'dLdM Z(dNdO Z)dPdQ Z*dRdS Z+dTdU Z,dVdW Z-dXdY Z.dZd[ Z/dS )]TestPlistlibc                 C   s    z	t tj W d S    Y d S N)osunlinkr   TESTFNself r   </opt/python-3.10.19/usr/lib/python3.10/test/test_plistlib.pytearDown  s   zTestPlistlib.tearDownNc                 C   sr   t dddddg dgddd	d
ddt ddddt ddg ddddddgtddddddt  t d}d|d< |S )NDoodahAB   g     @@@)         g      ?i  l    l   ,        l  @J z<hello & 'hi' there!>u   Mässig, MaßTF   )r   r   textabc)ZanotherStringZaUnicodeValueZ
aTrueValueaFalseValueZ
deeperDict   <binary gunk>   <lots of binary gunk> <lots of binary gunk> <lots of binary gunk> <lots of binary gunk> <lots of binary gunk> <lots of binary gunk> <lots of binary gunk> <lots of binary gunk> <lots of binary gunk> <lots of binary gunk>   
      !   )aStringZaListZaFloatZanIntZaBigIntZaBigInt2ZaNegativeIntZaNegativeBigIntaDictZsomeDataZsomeMoreDataZ
nestedDataZaDateZanEmptyDictZanEmptyListzThat was a unicode key.u   Åbenraa)dictdatetimelist)r   fmtplr   r   r   _create  s2   zTestPlistlib._createc                 C   s0   |   }| |d d | |d d d d S )Nr'   r   r(   r    F)r.   assertEqual)r   r-   r   r   r   test_create  s   zTestPlistlib.test_createc                 C   s   |   }ttjd}t|| W d    n1 sw   Y  ttjd}t|}W d    n1 s6w   Y  | t|t| | 	t
tj|d | 	t
tjd d S )Nwbrbfilename)r.   openr   r   plistlibdumploadr/   r)   assertRaisesAttributeError)r   r-   fppl2r   r   r   test_io  s   zTestPlistlib.test_ioc              	   C   sV   t  g}tD ]"}| j|d | jttj||d W d    n1 s#w   Y  qd S Nr,   )objectALL_FORMATSsubTestr8   	TypeErrorr5   dumps)r   r-   r,   r   r   r   test_invalid_type  s   zTestPlistlib.test_invalid_typec                 C   s   |  t td W d    n1 sw   Y  |  t td W d    n1 s-w   Y  |  t td W d    d S 1 sGw   Y  d S )Nz
not an int            i)r8   rB   r   
ValueErrorr   r   r   r   test_invalid_uid  s   


"zTestPlistlib.test_invalid_uidc              
   C   s   dD ]C}t D ]>}| j||d- tj||d}t|}| |t | || tj||d}| || W d    n1 s?w   Y  qqt D ]3}ddd d ddd  fD ]#}| j||d | jt	tj||d W d    n1 suw   Y  qWqHd S )	N)r         i     l            l    l    r   l         r-   r,   r>   l           r      r   l         )
r@   rA   r5   rC   loadsassertIsInstanceintr/   r8   OverflowErrorr   r-   r,   datar;   data2r   r   r   test_int  s,   
	
zTestPlistlib.test_intc              
   C   s   dD ]E}t D ]@}| j||d/ tjt||d}t|}| |t | || tj||d}| || W d    n1 sAw   Y  qqd S )N)r!   r"   rL   r>   )	r@   rA   r5   rC   	bytearrayrN   rO   bytesr/   rR   r   r   r   test_bytearray  s   
zTestPlistlib.test_bytearrayc                 C   sJ   |   }t|}t|}| t|t| t|}| || d S r	   )r.   r5   rC   rN   r/   r)   )r   r-   rS   r;   rT   r   r   r   
test_bytes  s   


zTestPlistlib.test_bytesc                 C   s4   ddigggggggg}|  tt|| d S )Ntest   aaaaaar/   r5   rN   rC   r   rS   r   r   r   test_indentation_array  s   z#TestPlistlib.test_indentation_arrayc              
   C   sD   ddddddddd	d
iiiiiiiii}|  tt|| d S )N123456789r[   r\   r]   r   r   r   test_indentation_dict   s   (z"TestPlistlib.test_indentation_dictc                 C   s<   dddddigggggigii}|  tt|| d S )Nr_   r`   ra   rZ   r[   r\   r]   r   r   r   test_indentation_dict_mix  s    z&TestPlistlib.test_indentation_dict_mixc                 C   sr   t d}| ttj|tjd| t dt dt dt dt dt dd	}| ttj|tjd| d S )
Nr   r>   r   r   rI   rJ   rK   l            )Zuid0Zuid2Zuid8Zuid16Zuid32Zuid63)r   r/   r5   rN   rC   
FMT_BINARY)r   rS   Z	dict_datar   r   r   test_uid  s   "zTestPlistlib.test_uidc                 C   s   t d}| |jd d S Nr   )r   r/   rS   )r   uidr   r   r   test_uid_data  s   zTestPlistlib.test_uid_datac                 C   s<   |  tdtd | tdtd | tdd d S )Nr   r   znot uid)r/   r   ZassertNotEqualr   r   r   r   test_uid_eq  s   zTestPlistlib.test_uid_eqc                 C   s    |  ttdttd d S rl   )r/   hashr   r   r   r   r   test_uid_hash  s    zTestPlistlib.test_uid_hashc                 C   s   |  ttdd d S )Nr   zUID(1))r/   reprr   r   r   r   r   test_uid_repr!  s   zTestPlistlib.test_uid_reprc                 C   s   |  ttdd d S rl   )r/   operatorindexr   r   r   r   r   test_uid_index$  s   zTestPlistlib.test_uid_indexc              	   C   s<   t tjd D ]}| ttjtd|dtd qd S )Nr      )protocol)rangepickleHIGHEST_PROTOCOLr/   rN   rC   r   )r   protor   r   r   test_uid_pickle'  s   &zTestPlistlib.test_uid_picklec                 C   s8   |  ttdtd |  ttdtd d S rl   )r/   copyr   deepcopyr   r   r   r   test_uid_copy+  s   zTestPlistlib.test_uid_copyc              	   C   sh   t D ]/}| j|d tt| }tj||d}| |t| d W d    n1 s,w   Y  qd S Nr>   z2generated data was not identical to Apple's output)r@   rA   r5   rN   TESTDATArC   r/   )r   r,   r-   rS   r   r   r   test_appleformatting/  s   z!TestPlistlib.test_appleformattingc              	   C   s   d | _ tD ]D}| j|d4 | j|d}tjt| |d}| t|t|d tt| }| t|t|d W d    n1 sDw   Y  qd S r   )	ZmaxDiffr@   rA   r.   r5   rN   r   r/   r)   )r   r,   r-   r;   r   r   r   test_appleformattingfromliteral8  s   z,TestPlistlib.test_appleformattingfromliteralc              	   C   s   t D ]Q}| j|dA t }| j|d}tj|||d tjt| |d}| t	|t	| tt| }| t	|t	| W d    n1 sNw   Y  qd S r=   )
r@   rA   r   r.   r5   r6   r7   getvaluer/   r)   )r   r,   r   r-   r;   r   r   r   test_bytesioD  s   zTestPlistlib.test_bytesioc              
   C   s   t  }d|d< d|d< d|d< tD ][}dD ]V}| j||dE t }tj||||d tjt| t jd	}| 	t
|t
| |rQ| 	t| g d
 n| 	t| g d W d    n1 sgw   Y  qqd S Nr   r   r   r   r   r   )FT)r,   	sort_keys)Z	dict_typer   )r   r   r   )collectionsOrderedDictr@   rA   r   r5   r6   r7   r   r/   r)   r+   keys)r   r-   r,   r   r   r;   r   r   r   test_keysort_bytesioO  s*   z!TestPlistlib.test_keysort_bytesioc              
   C   s   t  }d|d< d|d< d|d< tD ]S}dD ]N}| j||d= tj|||d}tj|t jd	}| t|t| |rI| t	|
 g d
 n| t	|
 g d W d    n1 s_w   Y  qqd S r   )r   r   r@   rA   r5   rC   rN   r/   r)   r+   r   )r   r-   r,   r   rS   r;   r   r   r   test_keysortd  s$   zTestPlistlib.test_keysortc              	   C   sr   ddi}t D ]0}| j|d  | jttj||d t }| jttj|||d W d    n1 s1w   Y  qd S )N*   aNumberr>   )r@   rA   r8   rB   r5   rC   r   r6   )r   r-   r,   r   r   r   r   test_keys_no_stringv  s   z TestPlistlib.test_keys_no_stringc              	   C   s   ddd}t D ]N}| j|d> tj||ddd}t|}| |ddi t }tj|||ddd | }t| }| |ddi W d    n1 sPw   Y  qd S )	Nr   ZaWord)r   snaker>   TF)r,   Zskipkeysr   r   )	r@   rA   r5   rC   rN   r/   r   r6   r   )r   r-   r,   rS   r;   r:   r   r   r   test_skipkeys  s(   

zTestPlistlib.test_skipkeysc              	   C   s   dddd}t D ]C}| j|d3 tj||d}t|}| |ddgddgddgd |tjkr<| |d	 |d
  W d    n1 sFw   Y  qd S )N)r   r   )r      firstsecondthirdr>   r   r   r   r   r   r   )r@   rA   r5   rC   rN   r/   rj   assertIsNotr   r-   r,   rS   r;   r   r   r   test_tuple_members  s&   

zTestPlistlib.test_tuple_membersc              	   C   s   ddgddgddgd}t D ]>}| j|d. tj||d}t|}| |ddgddgddgd | |d |d  W d    n1 sGw   Y  qd S )	Nr   r   r   r   r   r>   r   r   r@   rA   r5   rC   rN   r/   r   r   r   r   r   test_list_members  "   
zTestPlistlib.test_list_membersc              	   C   s   ddiddiddid}t D ]>}| j|d. tj||d}t|}| |ddiddiddid | |d |d  W d    n1 sGw   Y  qd S )	Nr   r   r   r   r   r>   r   r   r   r   r   r   r   test_dict_members  r   zTestPlistlib.test_dict_membersc              	   C   s   t dD ]M}t|}d| }|dks|dv r,tj|tjd}|dkr+| t|| n| t tj|tjd W d    n1 sDw   Y  tj|tj	d qd S )N   zstring containing %s    z
	r>   )
ry   chrr5   rC   FMT_XMLr/   rN   r8   rF   rj   )r   ir   Z
testStringrS   r   r   r   test_controlcharacters  s   z#TestPlistlib.test_controlcharactersc              	   C   sb   ddi}t D ](}| j|d tj||d}| t|| W d    n1 s)w   Y  qd S )NZpythonu   🐍r>   )r@   rA   r5   rC   r/   rN   )r   r-   r,   rS   r   r   r   test_non_bmp_characters  s   z$TestPlistlib.test_non_bmp_charactersc              
   C   s   t D ]P}| j|d@ | t tjd|d W d    n1 s"w   Y  | t tjd|d W d    n1 s>w   Y  W d    n1 sMw   Y  qd S )Nr>   u   u   )r@   rA   r8   UnicodeEncodeErrorr5   rC   )r   r,   r   r   r   test_lone_surrogates  s   z!TestPlistlib.test_lone_surrogatesc              	   C   s   t D ]>}| j|d. d}g d}ttj||d}ttj||d}| || | || W d    n1 s;w   Y  qd S )Nr>   abc)r   r   r   r   )r@   rA   r5   rN   rC   r/   )r   r,   Ztest1Ztest2Zresult1Zresult2r   r   r   test_nondictroot  s   zTestPlistlib.test_nondictrootc                 C   s&   dD ]}|  ttjd|   qd S )N)z<key>key inside an array</key>z-<key>key inside an array2</key><real>3</real>z&<true/><key>key inside an array3</key>z <plist><array>%s</array></plist>r8   rF   r5   rN   encoder   r   r   r   r   test_invalidarray  s
   

zTestPlistlib.test_invalidarrayc                 C   s>   dD ]}|  ttjd|   |  ttjd|   qd S )N)z0<key><true/>k</key><string>compound key</string>z<key>single key</key>z<string>missing key</string>ze<key>k1</key><string>v1</string><real>5.3</real><key>k1</key><key>k2</key><string>double key</string>z<plist><dict>%s</dict></plist>z-<plist><array><dict>%s</dict></array></plist>r   r   r   r   r   test_invaliddict  s   



zTestPlistlib.test_invaliddictc                 C      |  ttjd d S )Ns-   <plist><integer>not integer</integer></plist>r8   rF   r5   rN   r   r   r   r   test_invalidinteger     
z TestPlistlib.test_invalidintegerc                 C   r   )Ns*   <plist><integer>not real</integer></plist>r   r   r   r   r   test_invalidreal	  r   zTestPlistlib.test_invalidrealc                 C   sR   d}t |}| |d d}t |}| |d d}t |}| |d d S )Ns%   <plist><integer>456</integer></plist>i  s%   <plist><integer>0xa</integer></plist>r$   s&   <plist><integer>0123</integer></plist>{   )r5   rN   r/   )r   r-   valuer   r   r   test_integer_notations  s   


z#TestPlistlib.test_integer_notationsc              	   C   s   t tj }ddtjfddtjfddtjffD ]A\}}}| jtjd}| j|d' |	d|}||
d| }t|}| t|t| W d    n1 sRw   Y  qd S )	Ns   utf-8zutf-8s   utf-16z	utf-16-lez	utf-16-ber>   )encodings   UTF-8)r   r5   r   codecsBOM_UTF8BOM_UTF16_LEBOM_UTF16_BEr.   rA   replacedecoder   rN   r/   r)   )r   baseZxml_encodingr   Zbomr-   rS   r;   r   r   r   test_xml_encodings  s   



	
zTestPlistlib.test_xml_encodingsc                 C   s>   |  t tji dd W d    d S 1 sw   Y  d S )NZblahr>   )r8   rF   r5   rC   r   r   r   r   test_dump_invalid_format-  s   "z%TestPlistlib.test_dump_invalid_formatc                 C   s<   |  tj td W d    d S 1 sw   Y  d S )Ns!   these are not plist file contents)r8   r5   InvalidFileExceptionrN   r   r   r   r   test_load_invalid_file1  s   "z#TestPlistlib.test_load_invalid_filec                 C   N   t d}d|_| t tj|tjd W d    d S 1 s w   Y  d S )Nr   r>   )r   rS   r8   rF   r5   rC   rj   )r   Zneg_uidr   r   r   test_modified_uid_negative5  
   "z'TestPlistlib.test_modified_uid_negativec                 C   r   )Nr   rE   r>   )r   rS   r8   rQ   r5   rC   rj   )r   Zhuge_uidr   r   r   test_modified_uid_huge;  r   z#TestPlistlib.test_modified_uid_hugec                 C   sD   |  tjd tjttjd W d    d S 1 sw   Y  d S )Nz)XML entity declarations are not supportedr>   )ZassertRaisesRegexr5   r   rN   XML_PLIST_WITH_ENTITYr   r   r   r   r   test_xml_plist_with_entity_declA  s
   "z,TestPlistlib.test_xml_plist_with_entity_declr	   )0__name__
__module____qualname__r   r.   r0   r<   rD   rG   rU   rX   rY   r^   rh   ri   rk   rn   ro   rq   rs   rv   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s\    
	

r   c                   @   sp   e Zd ZedddddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )TestBinaryPlistlibr   offset_sizeref_sizec                 G   s   dg}d}g }|D ]}| || d | | |t|7 }q	td| |t|d|}|| | | tjd|tj	dS )N   bplist00   bigz>6xBBQQQr   r   r>   )
appendto_byteslenstructpackextendr5   rN   joinrj   )r   r   ZobjectsrS   offsetZoffsetsxtailr   r   r   r   I  s   




zTestBinaryPlistlib.decodec                 C   s   d}|  t|ddi d S )Ns<   bplist00    QaQb                                  r   r   )r/   r5   rN   r]   r   r   r   test_nonstandard_refs_sizeX  s   z-TestBinaryPlistlib.test_nonstandard_refs_sizec                 C   s   d dddddddt  dd	d
d	ddtdddgdddifD ].}| j|d tj|gd tjd}| t|dt| W d    n1 sFw   Y  qd S )NFT90  ^@abcdeu
   абвгд   abcder#   r$   r%   r&   r   Y  r   r   12r   i  r>   iL  )	r*   rV   rA   r5   rC   rj   Z
assertLessr   rr   )r   r   rS   r   r   r   test_dump_duplicatesd  s   z'TestBinaryPlistlib.test_dump_duplicatesc                 C   s   d ddddddt  ddd	dd
d
tdddgdddifD ]E}| j|d5 tj|gd tjd}t|\}}t|tr@t	|}| 
|| | 
|| | || W d    n1 s\w   Y  qd S )NFTr   r   r   r   r#   r$   r%   r&   r   r   r   r   r   r   r>   )r*   rV   rA   r5   rC   rj   rN   
isinstancetupler+   r/   assertIs)r   r   rS   r   r   r   r   r   test_identitym  s   
z TestBinaryPlistlib.test_identityc                 C   s   g }| | ttj|tjd}| |d | g f}|d  | ttj|tjd}| |d d | i }||d< ttj|tjd}| |d | d S )Nr>   r   r   )r   r5   rN   rC   rj   r   )r   r   r   r   r   r   test_cyclesz  s   
zTestBinaryPlistlib.test_cyclesc              	   C   s   dD ]D}dd t |D }z| jg |dR ddd}W n	 ty&   Y qw t |D ]}| |t | t|d |d }q+| |d	 qd S )
N)i,  順 c                 S   s    g | ]}d |d  dd qS )   r   r   r   )r   ).0r   r   r   r   
<listcomp>  s     z8TestBinaryPlistlib.test_deep_nesting.<locals>.<listcomp>s   Tseedr   r   r   r   seed)ry   r   RecursionErrorrO   r+   r/   r   )r   Nchunksresultr   r   r   r   test_deep_nesting  s    
z$TestBinaryPlistlib.test_deep_nestingc              	   C   st   dD ]5}| j |d% tjdtj|d }tj|tjd}| t|| W d    n1 s2w   Y  qd S )N)l    l        )tsr   )Zsecondsr>   )	rA   r*   ZutcfromtimestampZ	timedeltar5   rC   rj   r/   rN   )r   r   drS   r   r   r   test_large_timestamp  s   

z'TestBinaryPlistlib.test_large_timestampc                 C   sL   |  | dd  |  | dd |  | dd | | dd d S )N       F   	T   r   )r   r   r/   r   r   r   r   test_load_singletons  s   z'TestBinaryPlistlib.test_load_singletonsc                 C   sp   |  | dd |  | dd |  | dd |  | dd |  | d	d
 |  | dd d S )Ns    r   s      s   i  s   ܺl   :} s	   #Egl   MW	s	   ܺvT2lMW	)r/   r   r   r   r   r   test_load_int  s   z TestBinaryPlistlib.test_load_intc              
      s   g t ddt ddddt ddt d	d
}dD ] | fddt dD  q|D ];}| d|d( | tj | t|gd  W d    n1 sVw   Y  W d    n1 sew   Y  q/d S )Nr   r   r$      r   r&   $   3   4   @   )p                  c                 3   s    | ]} | V  qd S r	   r   )r   jr   r   r   	<genexpr>  s    z6TestBinaryPlistlib.test_unsupported.<locals>.<genexpr>   ztoken Z02xs                   )ry   r   rA   r8   r5   r   r   rW   )r   Zunsupportedtokenr   r  r   test_unsupported  s(   z#TestBinaryPlistlib.test_unsupportedc              
   C   s|   t D ]9\}}| |( | tj tjd| tjd W d    n1 s'w   Y  W d    n1 s6w   Y  qd S )Nr   r>   )INVALID_BINARY_PLISTSrA   r8   r5   r   rN   rj   )r   namerS   r   r   r   test_invalid_binary  s   z&TestBinaryPlistlib.test_invalid_binaryN)r   r   r   staticmethodr   r   r   r   r   r   r   r   r  r  r  r   r   r   r   r   G  s    		

r   c                   @      e Zd Zdd ZdS )TestKeyedArchivec                 C   sR   dddt ddddg dd	d
gdgddt did}| ttd | d S )Nr   z$nullr   r   zKeyArchive UID Test)Zpytypez$classz	NS.stringOC_BuiltinPythonUnicode)r  ZOC_PythonUnicodeNSStringZNSObjectZOC_PythonStringr  )z
$classnamez$classesz$classhintsZNSKeyedArchiverroot)z$versionz$objectsz	$archiverz$topr   )r   r/   r5   rN   r   r]   r   r   r   test_keyed_archive_data  s"   z(TestKeyedArchive.test_keyed_archive_dataN)r   r   r   r  r   r   r   r   r        r  c                   @   r  )MiscTestCasec                 C   s   ddh}t j| t|d d S )NZPlistFormatZPLISTHEADER)not_exported)r   Zcheck__all__r5   )r   r  r   r   r   test__all__  s   zMiscTestCase.test__all__N)r   r   r   r   r   r   r   r   r    r  r  __main__) r~   rt   rz   r   Zunittestr5   r
   r*   r   Zbinasciir   rZ   r   Ztest.supportr   ior   r   r   rj   r@   Z
a2b_base64r   r   r  ZTestCaser   r   r  r  r   mainr   r   r   r   <module>   sD   4
W     7| 