
    daf                        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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j0                  d      ej,                   ej0                  d      d ej0                  d	      iZd
Zg dZ G d dej8                        Z G d dej8                        Z G d dej8                        Z G d dej8                        Z  ejB                  ejD                  dk(  d       G d dej8                               Z#e$dk(  r ejJ                          yy)    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                      e Zd Zd Zd/d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d 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d 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*d* Z+d+ Z,d, Z-d- Z.d. Z/y)0TestPlistlibc                 Z    	 t        j                  t        j                         y #  Y y xY wN)osunlinkr   TESTFNselfs    -/root/Python-3.12.4/Lib/test/test_plistlib.pytearDownzTestPlistlib.tearDown  s#    	IIi&&'	s   #& *Nc                     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gt        j                  dddddd      t               t                     }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)anotherStringaUnicodeValue
aTrueValueaFalseValue
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>   
      !   )aStringaListaFloatanIntaBigIntaBigInt2aNegativeIntaNegativeBigIntaDictsomeDatasomeMoreData
nestedDataaDateanEmptyDictanEmptyListzThat was a unicode key.u   Åbenraa)dictdatetimelist)r   fmtpls      r   _createzTestPlistlib._create  s    Ry1"#*51!"? (@?@%%dBBB?&&+
. 5<	r   c                 ~    | j                         }| j                  |d   d       | j                  |d   d   d       y )Nr.   r   r6   r&   F)rB   assertEqual)r   rA   s     r   test_createzTestPlistlib.test_create  s:    \\^I1G]3U;r   c                    | j                         }t        t        j                  d      5 }t	        j
                  ||       d d d        t        t        j                  d      5 }t	        j                  |      }d d d        | j                  t        |      t                     | j                  t        t        j
                  |d       | j                  t        t        j                  d       y # 1 sw Y   xY w# 1 sw Y   xY w)Nwbrbfilename)rB   openr   r   plistlibdumploadrD   r=   assertRaisesAttributeError)r   rA   fppl2s       r   test_iozTestPlistlib.test_io  s    \\^)""D) 	"RMM"b!	" )""D) 	$R--#C	$ 	b49-.(--ZH.(--D	" 	"	$ 	$s   C2$C>2C;>Dc                     t               g}t        D ]D  }| j                  |      5  | j                  t        t
        j                  ||       d d d        F y # 1 sw Y   QxY wNr@   )objectALL_FORMATSsubTestrN   	TypeErrorrK   dumps)r   rA   r@   s      r   test_invalid_typezTestPlistlib.test_invalid_type  sd    x\ 	JC#& J!!)X^^RS!IJ J	JJ Js   (AA#	c                 B   | j                  t              5  t        d       d d d        | j                  t              5  t        d       d d d        | j                  t              5  t        d       d d d        y # 1 sw Y   \xY w# 1 sw Y   ?xY w# 1 sw Y   y xY w)Nz
not an int            i)rN   rY   r   
ValueErrorr   s    r   test_invalid_uidzTestPlistlib.test_invalid_uid  s    y) 		z* 	L	z* 	H	 			 		 		 	s"   A=B	(B=B	BBc           	      R   dD ]  }t         D ]  }| j                  ||      5  t        j                  ||      }t        j                  |      }| j                  |t               | j                  ||       t        j                  ||      }| j                  ||       d d d          t         D ]Z  }dddz  dz
  dddz   fD ]E  }| j                  ||      5  | j                  t        t        j                  ||       d d d        G \ y # 1 sw Y   xY w# 1 sw Y   axY w)	N)r         i     l            l    l    r   l         rA   r@   rU   l           r      r   l         )
rW   rX   rK   rZ   loadsassertIsInstanceintrD   rN   OverflowErrorr   rA   r@   datarQ   data2s         r   test_intzTestPlistlib.test_int  s+   0 		2B" 2\\RS\1 2#>>"#6D"...C))#s3$$R-$NN3C8E$$T512 22		2  	3C"AHQJc	B 3\\RS\1 3%%mX^^&(c & 33 33	32 23 3s   A>D(DDD&c                    dD ]  }t         D ]  }| j                  ||      5  t        j                  t	        |      |      }t        j
                  |      }| j                  |t               | j                  ||       t        j                  ||      }| j                  ||       d d d          y # 1 sw Y   xY w)N)r(   r)   re   rU   )	rW   rX   rK   rZ   	bytearrayrg   rh   bytesrD   rk   s         r   test_bytearrayzTestPlistlib.test_bytearray  s    K 	2B" 2\\RS\1 2#>>)B-SAD"...C))#u5$$S"-$NN3C8E$$T512 22	22 2s   BB66B?c                    | j                         }t        j                  |      }t        j                  |      }| j	                  t        |      t        |             t        j                  |      }| j	                  ||       y r   )rB   rK   rZ   rg   rD   r=   )r   rA   rl   rQ   rm   s        r   
test_byteszTestPlistlib.test_bytes  s_    \\^~~b!nnT"b49-s#u%r   c                     ddigggggggg}| j                  t        j                  t        j                  |            |       y )Ntest   aaaaaarD   rK   rg   rZ   r   rl   s     r   test_indentation_arrayz#TestPlistlib.test_indentation_array  sF    	*+,-./012t(<=tDr   c           
          ddddddddd	d
iiiiiiiii}| j                  t        j                  t        j                  |            |       y )N123456789rw   rx   ry   s     r   test_indentation_dictz"TestPlistlib.test_indentation_dict  sV    cC#cC#Y?O9P3Q-R'S!TUVWt(<=tDr   c                     dddddigggggigii}| j                  t        j                  t        j                  |            |       y )Nr|   r}   r~   rv   rw   rx   ry   s     r   test_indentation_dict_mixz&TestPlistlib.test_indentation_dict_mix  sO    cS	':&;%<$=#>"?@ABCt(<=tDr   c                    t        d      }| j                  t        j                  t        j                  |t        j
                              |       t        d      t        d      t        d      t        d      t        d      t        d      d	}| j                  t        j                  t        j                  |t        j
                              |       y )
Nr   rU   r   r   rb   rc   rd   l            )uid0uid2uid8uid16uid32uid63)r   rD   rK   rg   rZ   
FMT_BINARY)r   rl   	dict_datas      r   test_uidzTestPlistlib.test_uid  s    1vtATAT(UVX\]FFK\\\
	 	yhFYFY(Z[]fgr   c                 R    t        d      }| j                  |j                  d       y Nr   )r   rD   rl   )r   uids     r   test_uid_datazTestPlistlib.test_uid_data  s    !f1%r   c                     | j                  t        d      t        d             | j                  t        d      t        d             | j                  t        d      d       y )Nr   r   znot uid)rD   r   assertNotEqualr   s    r   test_uid_eqzTestPlistlib.test_uid_eq  sF    QQ(CFCF+CFI.r   c                 p    | j                  t        t        d            t        t        d                   y r   )rD   hashr   r   s    r   test_uid_hashzTestPlistlib.test_uid_hash!  s"    c!ftCF|4r   c                 L    | j                  t        t        d            d       y )Nr   zUID(1))rD   reprr   r   s    r   test_uid_reprzTestPlistlib.test_uid_repr$  s    c!fx0r   c                 `    | j                  t        j                  t        d            d       y r   )rD   operatorindexr   r   s    r   test_uid_indexzTestPlistlib.test_uid_index'  s    A/3r   c           
          t        t        j                  dz         D ]N  }| j                  t        j                  t        j
                  t        d      |            t        d             P y )Nr      )protocol)rangepickleHIGHEST_PROTOCOLrD   rg   rZ   r   )r   protos     r   test_uid_picklezTestPlistlib.test_uid_pickle*  sR    622Q67 	[EV\\&,,s2w*OPRUVXRYZ	[r   c                     | j                  t        j                  t        d            t        d             | j                  t        j                  t        d            t        d             y r   )rD   copyr   deepcopyr   s    r   test_uid_copyzTestPlistlib.test_uid_copy.  sD    3q6*CF3s1v.A7r   c                    t         D ]j  }| j                  |      5  t        j                  t        |         }t        j
                  ||      }| j                  |t        |   d       d d d        l y # 1 sw Y   wxY wNrU   z2generated data was not identical to Apple's output)rW   rX   rK   rg   TESTDATArZ   rD   )r   r@   rA   rl   s       r   test_appleformattingz!TestPlistlib.test_appleformatting2  s|     	JC#& J^^HSM2~~bc2  x}HJJ J	JJ Js   AA55A>	c                    d | _         t        D ]  }| j                  |      5  | j                  |      }t	        j
                  t        |   |      }| j                  t        |      t        |      d       t	        j
                  t        |         }| j                  t        |      t        |      d       d d d         y # 1 sw Y   xY wr   )	maxDiffrW   rX   rB   rK   rg   r   rD   r=   )r   r@   rA   rQ   s       r   test_appleformattingfromliteralz,TestPlistlib.test_appleformattingfromliteral;  s     	JC#& J\\c\*nnXc]<  b49HJnnXc]3  b49HJJ J	JJ Js   BCC	c                    t         D ]  }| j                  |      5  t               }| j                  |      }t	        j
                  |||       t	        j                  t        |j                               |      }| j                  t        |      t        |             t	        j                  t        |j                                     }| j                  t        |      t        |             d d d         y # 1 sw Y   xY wrT   )
rW   rX   r   rB   rK   rL   rM   getvaluerD   r=   )r   r@   r!   rA   rQ   s        r   test_bytesiozTestPlistlib.test_bytesioG  s     	6C#& 6I\\c\*b!-mmGAJJL$9sC  b495mmGAJJL$9:  b4956 6	66 6s   CC>>D	c           	      |   t        j                         }d|d<   d|d<   d|d<   t        D ]  }dD ]  }| j                  ||      5  t	               }t        j                  ||||       t        j                  t	        |j                               t         j                  	      }| j                  t        |      t        |             |r,| j                  t        |j                               g d
       n+| j                  t        |j                               g d       d d d          y # 1 sw Y   xY wNr   r!   r   r    r   r"   )FT)r@   	sort_keys)	dict_typer   )r!   r    r"   )collectionsOrderedDictrW   rX   r   rK   rL   rM   r   rD   r=   r?   keys)r   rA   r@   r   r!   rQ   s         r   test_keysort_bytesioz!TestPlistlib.test_keysort_bytesioR  s   $$&333 	LC* L	\\cY\? L	AMM"aSIF"--

(="-"9"9;C $$T"XtCy9 ((chhj)9?K((chhj)9?KL LL	LL Ls   CD11D;c           	      2   t        j                         }d|d<   d|d<   d|d<   t        D ]  }dD ]  }| j                  ||      5  t	        j
                  |||      }t	        j                  |t         j                  	      }| j                  t        |      t        |             |r,| j                  t        |j                               g d
       n+| j                  t        |j                               g d       d d d          y # 1 sw Y   xY wr   )r   r   rW   rX   rK   rZ   rg   rD   r=   r?   r   )r   rA   r@   r   rl   rQ   s         r   test_keysortzTestPlistlib.test_keysortg  s    $$&333 
	LC* 	L	\\cY\? L#>>"#KD"..9P9PQC$$T"XtCy9 ((chhj)9?K((chhj)9?KL L	L
	LL Ls   B;DDc           	      "   ddi}t         D ]v  }| j                  |      5  | j                  t        t        j
                  ||       t               }| j                  t        t        j                  |||       d d d        x y # 1 sw Y   xY w)N*   aNumberrU   )rW   rX   rN   rY   rK   rZ   r   rL   )r   rA   r@   r!   s       r   test_keys_no_stringz TestPlistlib.test_keys_no_stringy  s    9 	LC#& L!!)X^^RS!II!!)X]]Bs!K	L L	LL Ls   ABB	c           	         ddd}t         D ]  }| j                  |      5  t        j                  ||dd      }t        j                  |      }| j                  |ddi       t               }t        j                  |||dd       |j                         }t        j                  |j                               }| j                  |ddi       d d d         y # 1 sw Y   xY w)	Nr   aWord)r   snakerU   TF)r@   skipkeysr   r   )	rW   rX   rK   rZ   rg   rD   r   rL   r   )r   rA   r@   rl   rQ   rP   s         r   test_skipkeyszTestPlistlib.test_skipkeys  s    

  	:C#& :~~C$%A nnT*  w&89YdeE{{}nnR[[]3  w&89: :	:: :s   B.CC#	c           	      Z   dddd}t         D ]  }| j                  |      5  t        j                  ||      }t        j                  |      }| j                  |ddgddgddgd       |t        j                  k7  r| j                  |d	   |d
          d d d         y # 1 sw Y   xY w)N)r   r   )r      firstsecondthirdrU   r   r   r   r   r   r   )rW   rX   rK   rZ   rg   rD   r   assertIsNotr   rA   r@   rl   rQ   s        r   test_tuple_memberszTestPlistlib.test_tuple_members  s    
  
	BC#& 	B~~bc2nnT*  V !fV' 
 (---$$S\3x=A	B 	B
	B	B 	Bs   A4B!!B*	c           	      @   ddgddgddgd}t         D ]}  }| j                  |      5  t        j                  ||      }t        j                  |      }| j                  |ddgddgddgd       | j                  |d   |d          d d d         y # 1 sw Y   xY w)	Nr   r   r   r   r   rU   r   r   rW   rX   rK   rZ   rg   rD   r   r   s        r   test_list_memberszTestPlistlib.test_list_members  s    V!fV
  		>C#& >~~bc2nnT*  V !fV' 
   Ws8}=> >		>> >   A!BB	c           	      @   ddiddiddid}t         D ]}  }| j                  |      5  t        j                  ||      }t        j                  |      }| j                  |ddiddiddid       | j                  |d   |d          d d d         y # 1 sw Y   xY w)	Nr    r   r!   r   r   rU   r   r   r   r   s        r   test_dict_memberszTestPlistlib.test_dict_members  s    1XAh1Y
  		>C#& >~~bc2nnT*  !1X"Ah!1Y' 
   Ws8}=> >		>> >r   c                    t        d      D ]  }t        |      }d|z  }|dk\  s|dv rPt        j                  |t        j                        }|dk7  ri| j                  t        j                  |      |       nC| j                  t              5  t        j                  |t        j                         d d d        t        j                  |t        j                          y # 1 sw Y   1xY w)N   zstring containing %s    z
	rU   )
r   chrrK   rZ   FMT_XMLrD   rg   rN   r^   r   )r   ir"   
testStringrl   s        r   test_controlcharactersz#TestPlistlib.test_controlcharacters  s    s 	@AAA/!3JBw!x-~~jh6F6FG9$$X^^D%9:F&&z2 ENN:83C3CDENN:8+>+>?	@E Es   &C##C,	c                     ddi}t         D ]Y  }| j                  |      5  t        j                  ||      }| j	                  t        j
                  |      |       d d d        [ y # 1 sw Y   fxY w)Npythonu   🐍rU   )rW   rX   rK   rZ   rD   rg   )r   rA   r@   rl   s       r   test_non_bmp_charactersz$TestPlistlib.test_non_bmp_characters  sl    % 	;C#& ;~~bc2  !5r:; ;	;; ;s   =A((A1	c                 l   t         D ]  }| j                  |      5  | j                  t              5  t	        j
                  d|       d d d        | j                  t              5  t	        j
                  d|       d d d        d d d         y # 1 sw Y   IxY w# 1 sw Y    xY w# 1 sw Y   xY w)NrU   u   u   )rW   rX   rN   UnicodeEncodeErrorrK   rZ   )r   r@   s     r   test_lone_surrogatesz!TestPlistlib.test_lone_surrogates  s     	6C#& 6&&'9: 6NN856&&'9: 6NN8566 6	66 66 66 6s:   B*B
B*'B?B*BB*B'#B**B3	c                 d   t         D ]  }| j                  |      5  d}g d}t        j                  t        j                  ||            }t        j                  t        j                  ||            }| j                  ||       | j                  ||       d d d         y # 1 sw Y   xY w)NrU   abc)r   r   r   r   )rW   rX   rK   rg   rZ   rD   )r   r@   test1test2result1result2s         r   test_nondictrootzTestPlistlib.test_nondictroot  s     	1C#& 1("..3)GH"..3)GH  0  01 1	11 1s   A?B&&B/	c                 ~    dD ]8  }| j                  t        t        j                  d|z  j	                                : y )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>rN   r^   rK   rg   encoder   r   s     r   test_invalidarrayzTestPlistlib.test_invalidarray  s?    < 	OA j(..A!CKKMO	Or   c                     dD ]n  }| j                  t        t        j                  d|z  j	                                | j                  t        t        j                  d|z  j	                                p y )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   s     r   test_invaliddictzTestPlistlib.test_invaliddict  sh    K 	\A
 j(..?AIIKMj(..NqPXXZ\	\r   c                 N    | j                  t        t        j                  d       y )Ns-   <plist><integer>not integer</integer></plist>rN   r^   rK   rg   r   s    r   test_invalidintegerz TestPlistlib.test_invalidinteger  s    *hnnJ	Lr   c                 N    | j                  t        t        j                  d       y )Ns*   <plist><integer>not real</integer></plist>r   r   s    r   test_invalidrealzTestPlistlib.test_invalidreal  s    *hnnG	Ir   c                     d}t        j                  |      }| j                  |d       d}t        j                  |      }| j                  |d       d}t        j                  |      }| j                  |d       y )Ns%   <plist><integer>456</integer></plist>i  s%   <plist><integer>0xa</integer></plist>r+   s&   <plist><integer>0123</integer></plist>{   )rK   rg   rD   )r   rA   values      r   test_integer_notationsz#TestPlistlib.test_integer_notations  sk    5r"$5r"#6r"$r   c                    t         t        j                     }ddt        j                  fddt        j
                  fddt        j                  ffD ]  \  }}}| j                  t        j                        }| j                  |      5  |j                  d|      }||j                  d      j                  |      z   }t        j                  |      }| j                  t        |      t        |             d d d         y # 1 sw Y   xY w)	Ns   utf-8zutf-8s   utf-16z	utf-16-lez	utf-16-berU   )encodings   UTF-8)r   rK   r   codecsBOM_UTF8BOM_UTF16_LEBOM_UTF16_BErB   rX   replacedecoder   rg   rD   r=   )r   basexml_encodingr  bomrA   rl   rQ   s           r   test_xml_encodingszTestPlistlib.test_xml_encodings  s    (() w8V-@-@AV-@-@A, 	6'L(C ("2"23Bx0 6||Hl;T[[188BBnnT*  b495	6 6	66 6s   	A/DD	c                     | j                  t              5  t        j                  i d       d d d        y # 1 sw Y   y xY w)NblahrU   )rN   r^   rK   rZ   r   s    r   test_dump_invalid_formatz%TestPlistlib.test_dump_invalid_format0  s3    z* 	+NN26*	+ 	+ 	+s	   7A c                     | j                  t        j                        5  t        j                  d       d d d        y # 1 sw Y   y xY w)Ns!   these are not plist file contents)rN   rK   InvalidFileExceptionrg   r   s    r   test_load_invalid_filez#TestPlistlib.test_load_invalid_file4  s<    x<<= 	ANN?@	A 	A 	As	   ?Ac                     t        d      }d|_        | j                  t              5  t	        j
                  |t        j                         d d d        y # 1 sw Y   y xY w)Nr   rU   )r   rl   rN   r^   rK   rZ   r   )r   neg_uids     r   test_modified_uid_negativez'TestPlistlib.test_modified_uid_negative8  sI    a&z* 	=NN7(;(;<	= 	= 	=   &AA c                     t        d      }d|_        | j                  t              5  t	        j
                  |t        j                         d d d        y # 1 sw Y   y xY w)Nr   r]   rU   )r   rl   rN   rj   rK   rZ   r   )r   huge_uids     r   test_modified_uid_hugez#TestPlistlib.test_modified_uid_huge>  sI    q6}- 	>NN8)<)<=	> 	> 	>r  c                     | j                  t        j                  d      5  t        j                  t        t        j
                         d d d        y # 1 sw Y   y xY w)Nz)XML entity declarations are not supportedrU   )assertRaisesRegexrK   r  rg   XML_PLIST_WITH_ENTITYr   r   s    r   test_xml_plist_with_entity_declz,TestPlistlib.test_xml_plist_with_entity_declD  sJ    ##H$A$A$OQ 	HNN0h6F6FG	H 	H 	Hs   *AAr   )0__name__
__module____qualname__r   rB   rE   rR   r[   r_   rn   rr   rt   rz   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  r  r  r   r   r   r
   r
     s    6<
EJ3$	2&EEEh&/
514[8J
J	6L*L$L:*B&>$>$@;61O	\LI%6&+A=>Hr   r
   c                   `    e Zd Zedddd       Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zy)TestBinaryPlistlibr   offset_sizeref_sizec                    dg}d}g }|D ]B  }|j                  |j                  | d             |j                  |       |t        |      z  }D t        j                  d| |t        |      d|      }|j                  |       |j                  |       t        j                  dj                  |      t        j                        S )N   bplist00   bigz>6xBBQQQr   r   rU   )
appendto_byteslenstructpackextendrK   rg   joinr   )r&  r'  objectsrl   offsetoffsetsxtails           r   r  zTestBinaryPlistlib.decodeL  s    } 	ANN6??;>?KKNc!fF	 {{:{Hw<F4GD~~chhtn(2E2EFFr   c                 V    d}| j                  t        j                  |      ddi       y )Ns<   bplist00    QaQb                                  r    r!   )rD   rK   rg   ry   s     r   test_nonstandard_refs_sizez-TestBinaryPlistlib.test_nonstandard_refs_size[  s(    4 	-Sz:r   c                 `   d dddddddt        j                   dd	d
d	dd      t        d      ddgdddifD ]k  }| j                  |      5  t        j                  |gdz  t        j
                        }| j                  t        |      dt        |             d d d        m y # 1 sw Y   xxY w)NFT90  ^@abcdeu
   абвгд   abcder*   r+   r,   r-   r   Y  r   r?  12r6  i  rU   iL  )	r>   rp   rX   rK   rZ   r   
assertLessr.  r   )r   r6  rl   s      r   test_dump_duplicatesz'TestBinaryPlistlib.test_dump_duplicatesg  s    tUFG\8##D"b"b"=H%Cy)dC[J 	=A " =~~qc$hH4G4GHD	4d<= =	== =s   
AB$$B-	c                    d ddddddt        j                   ddd	dd
d
      t        d      ddgdddifD ]  }| j                  |      5  t        j                  |gdz  t        j
                        }t        j                  |      \  }}t        |t              rt        |      }| j                  ||       | j                  ||       | j                  ||       d d d         y # 1 sw Y   xY w)NFTr;  r<  r=  r>  r*   r+   r,   r-   r   r?  r@  rA  rB  r   rU   )r>   rp   rX   rK   rZ   r   rg   
isinstancetupler?   rD   assertIs)r   r6  rl   r    r!   s        r   test_identityz TestBinaryPlistlib.test_identityp  s    tUFGX##D"b"b"=H%Cy)dC[J 
	$A " $~~qc!e1D1DE~~d+1a'QA  A&  A&a#$ $
	$$ $s   	BC''C0	c                 :   g }|j                  |       t        j                  t        j                  |t        j                              }| j                  |d   |       g f}|d   j                  |       t        j                  t        j                  |t        j                              }| j                  |d   d   |       i }||d<   t        j                  t        j                  |t        j                              }| j                  |d   |       y )NrU   r   r6  )r,  rK   rg   rZ   r   rH  )r   r    r!   s      r   test_cycleszTestBinaryPlistlib.test_cycles}  s    	NN8>>!1D1DEFadAE	!ANN8>>!1D1DEFad1gq!#NN8>>!1D1DEFafa r   c           	         t         j                  rddgng d}|D ]  }t        |      D cg c]  }d|dz   j                  dd      z    }}	  | j                  g |dddd	}t        |      D ]8  }| j                  |t               | j                  t        |      d       |d
   }: | j                  |d        y c c}w # t        $ r* | j                  |t        j                         dz         Y w xY w)N2   順 )rM  iX  rN     r   r   r+  s   Tseedr%  r   seedr   )r   is_wasir   r-  r  rh   r?   rD   r.  RecursionErrorassertGreatersysgetrecursionlimit)r   testsNr   chunksresults         r   test_deep_nestingz$TestBinaryPlistlib.test_deep_nesting  s    !(W6H 	1ADI!HMqgQ 0 0E ::MFM	1$UfUkUqSTU q 'A))&$7$$S[!4#AYF'   0	1M " B""1c&;&;&=q&@ABs   C C0C87C8c           	      T   dD ]  }| j                  |      5  t        j                  ddddd      t        j                  |      z   }t        j                  |t        j
                        }| j                  t        j                  |      |       d d d         y # 1 sw Y   xY w)N)l    l        )tsi  r   r   )secondsrU   )rX   r>   	timedeltarK   rZ   r   rD   rg   )r   r\  drl   s       r   test_large_timestampz'TestBinaryPlistlib.test_large_timestamp  s    ! 	:B$ :&&tQ1a8''34~~aX-@-@A  !5q9	: :	:: :s   A;BB'	c                    | j                  | j                  d      d        | j                  | j                  d      d       | j                  | j                  d      d       | j                  | j                  d      d       y )N       F   	T   r   )rH  r  rD   r   s    r   test_load_singletonsz'TestBinaryPlistlib.test_load_singletons  s`    dkk'*D1dkk'*E2dkk'*D1W-s3r   c                    | j                  | j                  d      d       | j                  | j                  d      d       | j                  | j                  d      d       | j                  | j                  d      d       | j                  | j                  d	      d
       | j                  | j                  d      d       y )Ns    r   s      s   i  s   ܺl   :} s	   #Egl   MW	s	   ܺvT2lMW	)rD   r  r   s    r   test_load_intz TestBinaryPlistlib.test_load_int  s    [115[148_5v>%<=zJ%LM+	-%LM+	-r   c                    g t        dd      t        dd      ddt        dd      t        d	d
      }dD ]%  |j                  fdt        d      D               ' |D ]f  }| j                  d|d      5  | j                  t        j
                        5  | j                  t        |g      dz          d d d        d d d        h y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   r*  r+      r   r-   $   3   4   @   )p                  c              3   (   K   | ]	  }|z     y wr   r"  ).0jr   s     r   	<genexpr>z6TestBinaryPlistlib.test_unsupported.<locals>.<genexpr>  s     8q1u8s      ztoken 02xs                   )r   r1  rX   rN   rK   r  r  rq   )r   unsupportedtokenr   s      @r   test_unsupportedz#TestBinaryPlistlib.test_unsupported  s    Ka KeBm KK!K$)$$5K8=dD8IK5 	9A8eBi88	9  	=EuSk23 =&&x'D'DE =KKug ;<== =	== == =s$   < CC;CCCC#	c                 $   t         D ]o  \  }}| j                  |      5  | j                  t        j                        5  t        j
                  d|z   t        j                         d d d        d d d        q y # 1 sw Y   xY w# 1 sw Y   xY w)Nr)  rU   )INVALID_BINARY_PLISTSrX   rN   rK   r  rg   r   )r   namerl   s      r   test_invalid_binaryz&TestBinaryPlistlib.test_invalid_binary  s    / 	PJD$d# P&&x'D'DE PNN;#58;N;NOPP P	PP PP Ps"    B)A:'B:B?BB	N)r  r   r!  staticmethodr  r9  rD  rI  rK  rZ  r`  rf  ri  r~  r  r"  r   r   r$  r$  J  sN    %& G G
;=$!"1:4-=Pr   r$  c                       e Zd Zd Zy)TestKeyedArchivec                     dddt        d      dddg dd	d
gdgddt        d      id}| j                  t        j                  t        d         |       y )NrN  z$nullr   r   zKeyArchive UID Test)pytypez$classz	NS.stringOC_BuiltinPythonUnicode)r  OC_PythonUnicodeNSStringNSObjectOC_PythonStringr  )z
$classnamez$classesz$classhintsNSKeyedArchiverroot)z$versionz$objectsz	$archiverz$topr   )r   rD   rK   rg   r   ry   s     r   test_keyed_archive_dataz(TestKeyedArchive.test_keyed_archive_data  sv     !!f!6 #<! *:$& +A-
4 	(ABDIr   N)r  r   r!  r  r"  r   r   r  r    s    Jr   r  c                       e Zd Zd Zy)MiscTestCasec                 D    ddh}t        j                  | t        |       y )NPlistFormatPLISTHEADER)not_exported)r   check__all__rK   )r   r  s     r   test__all__zMiscTestCase.test__all__  s    %}5T8,Gr   N)r  r   r!  r  r"  r   r   r  r    s    Hr   r  darwinzplutil utility is for Mac osc                       e Zd ZdZddddddZddddddZdd	d
Zedd       Zedd       Z	d Z
d Zd Zd Zd Zd Zd Zd Zy)
TestPlutilzplutil_test.plistHr   d   rz  )r    r!   )fnamelnamemarks  S   )HexTypeIntTypeNc                     t        | j                  d      5 }t        j                  | j                  |t        j
                         d d d        y # 1 sw Y   y xY w)NrG   rU   )rJ   	file_namerK   rL   
propertiesr   )clsfs     r   
setUpClasszTestPlutil.setUpClass  sG     #--% 	FMM#..!1D1DE	F 	F 	F   1AAc                 B    t        j                  | j                         y r   )r   remover  )r  s    r   tearDownClasszTestPlutil.tearDownClass  s    
		#-- r   c                 `    t        j                  dd| j                  gdd      j                  S )Nplutilz-lintT)capture_outputr   )
subprocessrunr  stdoutr   s    r   get_lint_statuszTestPlutil.get_lint_status  s(    ~~x$..ARV]abiiir   c                 J    t        j                  ddd| j                  g       y)z1Convert binary file to json using plutil
        r  -convertjsonNr  r  r  r   s    r   convert_to_jsonzTestPlutil.convert_to_json  s     	*fdnnEFr   c                 J    t        j                  ddd| j                  g       y)z,Convert file to binary using plutil
        r  r  binary1Nr  r   s    r   convert_to_binzTestPlutil.convert_to_bin  s     	*iHIr   c                     t        | j                  d      5 }t        j                  | j                  |t        j
                         ddd       y# 1 sw Y   yxY w)z6Write Hex properties to file using writePlist
        rG   rU   N)rJ   r  rK   rL   rA   r   r   r  s     r   write_plzTestPlutil.write_pl  sC     $..$' 	?1MM$''1(*=*=>	? 	? 	?r  c                 ^    | j                  | j                   d| j                                y )Nz: OK
)rD   r  r  r   s    r   test_lint_statuszTestPlutil.test_lint_status  s'    DNN+62D4H4H4JKr   c                     | j                          t        | j                        5 }t        j                  |j                               }| j                  || j                         d d d        y # 1 sw Y   y xY wr   )r  rJ   r  r  rg   readrD   exptected_properties)r   r  ffs      r   check_contentzTestPlutil.check_content  s[    $..! 	<QAFFH%BR!:!:;	< 	< 	<s   A A//A8c                     | j                          t        | j                  d      5 }| j                  t	        j
                  |      | j                         d d d        y # 1 sw Y   y xY w)NrH   )r  rJ   r  rD   rK   rM   r  r  s     r   check_plistlib_parsezTestPlutil.check_plistlib_parse&  sV    $..$' 	J1X]]1-t/H/HI	J 	J 	Js   0A  A)c                 d   | j                          | j                          t        | j                  d      5 }t	        j
                  |j                               }| j                  |j                  d      d       | j                  |j                  d      d       d d d        y # 1 sw Y   y xY w)Nrr  r  r  r  )	r  r  rJ   r  r  rg   r  rD   get)r   r  ps      r   test_octal_and_hexzTestPlutil.test_octal_and_hex,  s    $..#& 	3!

1668$AQUU9-x8QUU9-r2	3 	3 	3s   A&B&&B/)returnN)r  r   r!  r  r  r  rA   classmethodr  r  r  r  r  r  r  r  r  r  r"  r   r   r  r    s    #ID)
J # #

B
 F F
 ! !jG
J
?L<J3r   r  __main__)&r   r   r   r/  unittestrK   r   rT  r  r>   r  r  binasciir   rv   r   test.supportr   ior   r   r   r   rW   
a2b_base64r   r  r  TestCaser
   r$  r  r  
skipUnlessplatformr  r  mainr"  r   r   <module>r     sz         	 
        "  x223
 )h)) 3+8 39h ,,, .@ A* (X(( 
* 
UU
n U pqH8$$ qHhzP** zPzJx(( J@H8$$ H
 S\\X-/MNE3"" E3 OE3N zHMMO r   