a
    ze                     @   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 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re  dS )    N)support)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 n   Y n0 d S N)osunlinkr   TESTFNself r   (/usr/lib/python3.9/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 s60    Y  ttjd}t|}W d    n1 sl0    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 ]D}| j|d$ | jttj||d W d    q1 sF0    Y  qd S Nr+   )objectALL_FORMATSsubTestr7   	TypeErrorr4   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(0    Y  |  t td W d    n1 sZ0    Y  |  t td W d    n1 s0    Y  d S )Nz
not an int            i)r7   rA   r   
ValueErrorr   r   r   r   test_invalid_uid  s    &&zTestPlistlib.test_invalid_uidc              
   C   s   dD ]}t D ]|}| j||dZ tj||d}t|}| |t | || tj||d}| || W d    q1 s~0    Y  qqt D ]f}ddd d ddd  fD ]F}| j||d$ | jt	tj||d W d    q1 s0    Y  qqd S )	N)r         i     l            l    l    r   l         r,   r+   r=   l           r      r   l         )
r?   r@   r4   rB   loadsassertIsInstanceintr.   r7   OverflowErrorr   r,   r+   datar:   data2r   r   r   test_int  s    
.
zTestPlistlib.test_intc              
   C   s   dD ]}t D ]}| j||d^ tjt||d}t|}| |t | || tj||d}| || W d    q1 s0    Y  qqd S )N)r    r!   rK   r=   )	r?   r@   r4   rB   	bytearrayrM   rN   bytesr.   rQ   r   r   r   test_bytearray  s    
zTestPlistlib.test_bytearrayc                 C   sJ   |   }t|}t|}| t|t| t|}| || d S r   )r-   r4   rB   rM   r.   r(   )r   r,   rR   r:   rS   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.   r4   rM   rB   r   rR   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9rZ   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_   r`   rY   rZ   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   rH   rI   rJ   l            )Zuid0Zuid2Zuid8Zuid16Zuid32Zuid63)r   r.   r4   rM   rB   
FMT_BINARY)r   rR   Z	dict_datar   r   r   test_uid  s    zTestPlistlib.test_uidc                 C   s   t d}| |jd d S Nr   )r   r.   rR   )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 rk   )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 rk   )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.   rM   rB   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 rk   )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    q1 sX0    Y  qd S Nr=   z2generated data was not identical to Apple's output)r?   r@   r4   rM   TESTDATArB   r.   )r   r+   r,   rR   r   r   r   test_appleformatting.  s    z!TestPlistlib.test_appleformattingc              	   C   s   d | _ tD ]}| j|dh | j|d}tjt| |d}| t|t|d tt| }| t|t|d W d    q
1 s0    Y  q
d S r   )	ZmaxDiffr?   r@   r-   r4   rM   r   r.   r(   )r   r+   r,   r:   r   r   r   test_appleformattingfromliteral7  s    z,TestPlistlib.test_appleformattingfromliteralc              	   C   s   t D ]}| j|d t }| j|d}tj|||d tjt| |d}| t	|t	| tt| }| t	|t	| W d    q1 s0    Y  qd S r<   )
r?   r@   r   r-   r4   r5   r6   getvaluer.   r(   )r   r+   r   r,   r:   r   r   r   test_bytesioC  s    zTestPlistlib.test_bytesioc              
   C   s   t  }d|d< d|d< d|d< tD ]}dD ]}| j||d t }tj||||d tjt| t jd	}| 	t
|t
| |r| 	t| g d
 n| 	t| g d W d    q,1 s0    Y  q,q$d S Nr   r   r   r   r   r   )FT)r+   	sort_keys)Z	dict_typer   )r   r   r   )collectionsOrderedDictr?   r@   r   r4   r5   r6   r   r.   r(   r*   keys)r   r,   r+   r   r   r:   r   r   r   test_keysort_bytesioN  s     z!TestPlistlib.test_keysort_bytesioc              
   C   s   t  }d|d< d|d< d|d< tD ]}dD ]}| j||dz tj|||d}tj|t jd	}| t|t| |r| t	|
 g d
 n| t	|
 g d W d    q,1 s0    Y  q,q$d S r   )r   r   r?   r@   r4   rB   rM   r.   r(   r*   r   )r   r,   r+   r   rR   r:   r   r   r   test_keysortc  s    zTestPlistlib.test_keysortc              	   C   sr   ddi}t D ]`}| j|d@ | jttj||d t }| jttj|||d W d    q1 sb0    Y  qd S )N*   aNumberr=   )r?   r@   r7   rA   r4   rB   r   r5   )r   r,   r+   r   r   r   r   test_keys_no_stringu  s    z TestPlistlib.test_keys_no_stringc              	   C   s   ddd}t D ]}| j|d| tj||ddd}t|}| |ddi t }tj|||ddd | }t| }| |ddi W d    q1 s0    Y  qd S )	Nr   ZaWord)r   snaker=   TF)r+   Zskipkeysr   r   )	r?   r@   r4   rB   rM   r.   r   r5   r   )r   r,   r+   rR   r:   r9   r   r   r   test_skipkeys  s"    

zTestPlistlib.test_skipkeysc              	   C   s   dddd}t D ]}| j|df tj||d}t|}| |ddgddgddgd |tjkrx| |d	 |d
  W d    q1 s0    Y  qd S )N)r   r   )r      firstsecondthirdr=   r   r   r   r   r   r   )r?   r@   r4   rB   rM   r.   ri   assertIsNotr   r,   r+   rR   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    q1 s0    Y  qd S )	Nr   r   r   r   r   r=   r   r   r?   r@   r4   rB   rM   r.   r   r   r   r   r   test_list_members  s    
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    q1 s0    Y  qd S )	Nr   r   r   r   r   r=   r   r   r   r   r   r   r   test_dict_members  s    
zTestPlistlib.test_dict_membersc              	   C   s   t dD ]}t|}d| }|dks,|dv rXtj|tjd}|dkr| t|| n:| t  tj|tjd W d    n1 s0    Y  tj|tj	d qd S )N   zstring containing %s    z
	r=   )
rx   chrr4   rB   FMT_XMLr.   rM   r7   rE   ri   )r   ir   Z
testStringrR   r   r   r   test_controlcharacters  s    .z#TestPlistlib.test_controlcharactersc              	   C   sb   ddi}t D ]P}| j|d0 tj||d}| t|| W d    q1 sR0    Y  qd S )NZpythonu   🐍r=   )r?   r@   r4   rB   r.   rM   )r   r,   r+   rR   r   r   r   test_non_bmp_characters  s
    z$TestPlistlib.test_non_bmp_charactersc              
   C   s   t D ]}| j|d | t tjd|d W d    n1 sD0    Y  | t tjd|d W d    n1 s|0    Y  W d    q1 s0    Y  qd S )Nr=   u   u   )r?   r@   r7   UnicodeEncodeErrorr4   rB   )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    q1 sv0    Y  qd S )Nr=   abc)r   r   r   r   )r?   r@   r4   rM   rB   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>r7   rE   r4   rM   encoder   r   r   r   r   test_invalidarray  s    

zTestPlistlib.test_invalidarrayc                 C   s>   dD ]4}|  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   s   |  ttjd d S )Ns-   <plist><integer>not integer</integer></plist>r7   rE   r4   rM   r   r   r   r   test_invalidinteger  s    
z TestPlistlib.test_invalidintegerc                 C   s   |  ttjd d S )Ns*   <plist><integer>not real</integer></plist>r   r   r   r   r   test_invalidreal  s    
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>{   )r4   rM   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 ]\}}}| jtjd}| j|dN |	d|}||
d| }t|}| t|t| W d    q,1 s0    Y  q,d S )	Ns   utf-8zutf-8s   utf-16z	utf-16-lez	utf-16-ber=   )encodings   UTF-8)r   r4   r   codecsBOM_UTF8BOM_UTF16_LEBOM_UTF16_BEr-   r@   replacedecoder   rM   r.   r(   )r   baseZxml_encodingr   Zbomr,   rR   r:   r   r   r   test_xml_encodings  s    



	
zTestPlistlib.test_xml_encodingsc                 C   s<   |  t tji dd W d    n1 s.0    Y  d S )NZblahr=   )r7   rE   r4   rB   r   r   r   r   test_dump_invalid_format,  s    z%TestPlistlib.test_dump_invalid_formatc                 C   s:   |  tj td W d    n1 s,0    Y  d S )Ns!   these are not plist file contents)r7   r4   InvalidFileExceptionrM   r   r   r   r   test_load_invalid_file0  s    z#TestPlistlib.test_load_invalid_filec                 C   sL   t d}d|_| t  tj|tjd W d    n1 s>0    Y  d S )Nr   r=   )r   rR   r7   rE   r4   rB   ri   )r   Zneg_uidr   r   r   test_modified_uid_negative4  s    z'TestPlistlib.test_modified_uid_negativec                 C   sL   t d}d|_| t  tj|tjd W d    n1 s>0    Y  d S )Nr   rD   r=   )r   rR   r7   rP   r4   rB   ri   )r   Zhuge_uidr   r   r   test_modified_uid_huge:  s    z#TestPlistlib.test_modified_uid_hugec                 C   sB   |  tjd  tjttjd W d    n1 s40    Y  d S )Nz)XML entity declarations are not supportedr=   )ZassertRaisesRegexr4   r   rM   XML_PLIST_WITH_ENTITYr   r   r   r   r   test_xml_plist_with_entity_decl@  s    z,TestPlistlib.test_xml_plist_with_entity_decl)N)0__name__
__module____qualname__r   r-   r/   r;   rC   rF   rT   rW   rX   r]   rg   rh   rj   rm   rn   rp   rr   ru   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     sZ   
	

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extendr4   rM   joinri   )r   r   ZobjectsrR   offsetZoffsetsxtailr   r   r   r   H  s    




zTestBinaryPlistlib.decodec                 C   s   d}|  t|ddi d S )Ns<   bplist00    QaQb                                  r   r   )r.   r4   rM   r\   r   r   r   test_nonstandard_refs_sizeW  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    q:1 s0    Y  q:d S )NFT90  ^@abcdeu
   абвгд   abcder"   r#   r$   r%   r   Y  r   r   12r   i  r=   iL  )	r)   rU   r@   r4   rB   ri   Z
assertLessr   rq   )r   r   rR   r   r   r   test_dump_duplicatesc  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 ]}| j|dj tj|gd tjd}t|\}}t|trt	|}| 
|| | 
|| | || W d    q81 s0    Y  q8d S )NFTr   r   r   r   r"   r#   r$   r%   r   r   r   r   r   r   r=   )r)   rU   r@   r4   rB   ri   rM   
isinstancetupler*   r.   assertIs)r   r   rR   r   r   r   r   r   test_identityl  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   r4   rM   rB   ri   r   )r   r   r   r   r   r   test_cyclesy  s    
zTestBinaryPlistlib.test_cyclesc              	   C   s   dD ]}dd t |D }z | jg |dR ddd}W n tyL   Y q0 t |D ](}| |t | t|d |d }qV| |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>  r   z8TestBinaryPlistlib.test_deep_nesting.<locals>.<listcomp>s   Tseedr   r   r   r   seed)rx   r   RecursionErrorrN   r*   r.   r   )r   Nchunksresultr   r   r   r   test_deep_nesting  s     
z$TestBinaryPlistlib.test_deep_nestingc              	   C   st   dD ]j}| j |dJ tjdtj|d }tj|tjd}| t|| W d    q1 sd0    Y  qd S )N)l    l        )tsr   )Zsecondsr=   )	r@   r)   ZutcfromtimestampZ	timedeltar4   rB   ri   r.   rM   )r   r   drR   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  q8|D ]v}| d|dP | tj$ | t|gd  W d    n1 s0    Y  W d    q^1 s0    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>  r   z6TestBinaryPlistlib.test_unsupported.<locals>.<genexpr>   ztoken Z02xs                   )rx   r   r@   r7   r4   r   r   rV   )r   Zunsupportedtokenr   r  r   test_unsupported  s    z#TestBinaryPlistlib.test_unsupportedc              
   C   s|   t D ]r\}}| |P | tj$ tjd| tjd W d    n1 sN0    Y  W d    q1 sl0    Y  qd S )Nr   r=   )INVALID_BINARY_PLISTSr@   r7   r4   r   rM   ri   )r   namerR   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   F  s   		

r   c                   @   s   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.   r4   rM   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    s   r  c                   @   s   e Zd Zdd ZdS )MiscTestCasec                 C   s   ddh}t j| t|d d S )NZPlistFormatZPLISTHEADER)	blacklist)r   Zcheck__all__r4   )r   r  r   r   r   test__all__  s    zMiscTestCase.test__all__N)r   r   r   r  r   r   r   r   r    s   r  __main__)r}   rs   ry   r   Zunittestr4   r	   r)   r   Zbinasciir   rY   r   ior   r   r   ri   r?   Z
a2b_base64r   r   r  ZTestCaser   r   r  r  r   mainr   r   r   r   <module>   s>   4
W     7| 
