
    [eB4                     
   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Zd dlmZ d dlmZ d dlmZ  G d de      Z G d	 d
e      Z G d deej0                        Z G d dej0                        Zy)    N)mock)client)fixture)base)	jsonutilsc                       e Zd Zd Zy)
ReprObjectc                      y)Nrepr selfs    I/usr/lib/python3/dist-packages/oslo_serialization/tests/test_jsonutils.py__repr__zReprObject.__repr__#   s        N)__name__
__module____qualname__r   r   r   r   r	   r	   "   s    r   r	   c                   n     e Zd ZdZ fdZ fdZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Z xZS )JSONUtilsTestMixinNc                     t         t        |           t        j                  j                  t        | j                        | _        | j                  j                         | _
        y )N)json)superr   setUpr   patchmultipler   	json_impljson_patcherstartjson_impl_mockr   	__class__s    r   r   zJSONUtilsTestMixin.setUp+   sO     $-/ JJ//DNN 0 
 #//557r   c                 ^    | j                   j                          t        t        |           y N)r   stopr   r   tearDownr!   s    r   r&   zJSONUtilsTestMixin.tearDown2   s#      $02r   c                 R    | j                  dt        j                  ddi             y N
{"a": "b"}ab)assertEqualr   dumpsr   s    r   
test_dumpszJSONUtilsTestMixin.test_dumps6   s    ySz'BCr   c                     t               g}t        j                  t        j                  t
              }| j                  dt        j                  ||             y )Nfallbackz["repr"])default)r	   	functoolspartialr   to_primitiver   r,   r-   )r   argsconverts      r   test_dumps_defaultz%JSONUtilsTestMixin.test_dumps_default9   s>    ~##I$:$:TJY__T7%KLr   c                 R    | j                  dt        j                  ddi             y )Ns
   {"a": "b"}r*   r+   )r,   r   dump_as_bytesr   s    r   test_dump_as_bytesz%JSONUtilsTestMixin.test_dump_as_bytes>   s!    	(?(?c
(KLr   c                      t        j                  dd      dd      }| j                  dt        j                  |             y )Nfoobar baz      [1, 2])collections
namedtupler,   r   r-   )r   ns     r   test_dumps_namedtuplez(JSONUtilsTestMixin.test_dumps_namedtupleA   s6    4K""5)4Q:9??1#56r   c                     d}ddi}t        j                         }t        j                  ||       | j	                  ||j                                y r(   )ioStringIOr   dumpr,   getvaluer   expected	json_dictfps       r   	test_dumpzJSONUtilsTestMixin.test_dumpE   s?    #J	[[]y"%2;;=1r   c                     d} t        j                  dd      dd      }t        j                         }t	        j
                  ||       | j                  ||j                                y )NrA   r=   r>   r?   r@   )rB   rC   rG   rH   r   rI   r,   rJ   rK   s       r   test_dump_namedtuplez'JSONUtilsTestMixin.test_dump_namedtupleN   sQ    <K**5)<QB	[[]y"%2;;=1r   c                 R    | j                  ddit        j                  d             y )Nr*   r+   r)   )r,   r   loadsr   s    r   
test_loadszJSONUtilsTestMixin.test_loadsW   s    #sY__\%BCr   c                 r   | j                  t        j                  d      t               | j                  t        j                  d      t               d}| j                  t        j                  |      t               |j	                  d      }| j                  t        j                  |      t               y )Ns   "foo"z"foo"u
   "тест"utf-8)assertIsInstancer   rS   strencode)r   i18n_str_unicodei18n_strs      r   test_loads_unicodez%JSONUtilsTestMixin.test_loads_unicodeZ   s    iooh7=ioog6< 8ioo.>?E#**73iooh7=r   c                 b    d}t        j                  |d       }| j                  d|d          y )Nz
{"foo": 3}c                      y)N   r   )xs    r   <lambda>z;JSONUtilsTestMixin.test_loads_with_kwargs.<locals>.<lambda>g       r   )	parse_intr_   r=   )r   rS   r,   )r   jsontextresults      r   test_loads_with_kwargsz)JSONUtilsTestMixin.test_loads_with_kwargse   s+    [AF5M*r   c                 @   d}ddi}dD ]  }t        j                  |j                  |            }t        j                  ||      }| j                  ||       |j                         D ]1  \  }}| j                  |t               | j                  |t               3  y )Nu   {"a": "тэст"}r*   u   тэст)rV   cp1251)encoding)	rG   BytesIOrY   r   loadr,   itemsrW   rX   )r   rd   rL   ri   rN   re   keyvals           r   	test_loadzJSONUtilsTestMixin.test_loadj   s    634+ 	0HHOOH56B^^B:FXv."LLN 0S%%c3/%%c3/0		0r   c                 h    | j                  t        j                  dt        d      i      ddg       y )Nr*   helloz{"a": "ValueError('hello',)"}z{"a": "ValueError('hello')"})assertInr   r-   
ValueErrorr   s    r   test_dumps_exception_valuez-JSONUtilsTestMixin.test_dumps_exception_valuew   s.    ioosJw,?&@A879	:r   )r   r   r   r   r   r&   r.   r8   r;   rE   rO   rQ   rT   r\   rf   ro   rt   __classcell__r"   s   @r   r   r   '   sM    I83DM
M722D	>+
0:r   r   c                       e Zd ZeZy)JSONUtilsTestJsonN)r   r   r   r   r   r   r   r   rx   rx   }   s    Ir   rx   c                        e Zd Z f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# xZ$S )"ToPrimitiveTestCasec                 z    t         t        |           | j                  t	        j
                               | _        y r$   )r   rz   r   
useFixturer   Translationtrans_fixturer!   s    r   r   zToPrimitiveTestCase.setUp   s+    !4.0!__W-@-@-BCr   c                 N    | j                  t        j                  d      d       y )Ns   abcabcr,   r   r5   r   s    r   
test_byteszToPrimitiveTestCase.test_bytes   s    //7?r   c                 V    | j                  g dt        j                  g d             y N)r?   r@      r   r   s    r   	test_listzToPrimitiveTestCase.test_list   s    I$:$:9$EFr   c                 N    | j                  g t        j                  g              y r$   r   r   s    r   test_empty_listz#ToPrimitiveTestCase.test_empty_list       Y33B78r   c                 R    | j                  g dt        j                  d             y r   r   r   s    r   
test_tuplezToPrimitiveTestCase.test_tuple   s    I$:$:9$EFr   c           
      ~    | j                  t        ddd      t        j                  t        ddd                   y Nr?   r@   r   r*   r+   c)r,   dictr   r5   r   s    r   	test_dictzToPrimitiveTestCase.test_dict   s3    Q!,"//qA0CD	Fr   c                 N    | j                  i t        j                  i              y r$   r   r   s    r   test_empty_dictz#ToPrimitiveTestCase.test_empty_dict   r   r   c           	          t        j                   ddddddd      }| j                  dt        j                  |             y )	N  r@   r      r_         z1920-02-03T04:05:06.000007datetimer,   r   r5   r   r`   s     r   test_datetimez!ToPrimitiveTestCase.test_datetime   s=    dAq!Q155"//2	4r   c           	          t        j                   ddddddd      }| j                  |t        j                  |d	             y )
Nr   r@   r   r   r_   r   r   F)convert_datetimer   r   s     r   test_datetime_preservez*ToPrimitiveTestCase.test_datetime_preserve   s;    dAq!Q15I221uMNr   c                     t        j                         }|j                  d       | j                  dt	        j
                  |             y )Nz19710203T04:05:06z1971-02-03T04:05:06.000000)	xmlrpclibDateTimedecoder,   r   r5   r   s     r   test_DateTimez!ToPrimitiveTestCase.test_DateTime   s<     	$%5"//2	4r   c                 ~     G d dt               } |       }| j                  g dt        j                  |             y )Nc                   "    e Zd Zd Zd Zd ZeZy)0ToPrimitiveTestCase.test_iter.<locals>.IterClassc                 $    g d| _         d| _        y )Nr?   r@   r   r   r_   r   )dataindexr   s    r   __init__z9ToPrimitiveTestCase.test_iter.<locals>.IterClass.__init__   s    +	
r   c                     | S r$   r   r   s    r   __iter__z9ToPrimitiveTestCase.test_iter.<locals>.IterClass.__iter__   s    r   c                     | j                   t        | j                        k(  rt        | j                   dz   | _         | j                  | j                   dz
     S Nr?   )r   lenr   StopIterationr   s    r   nextz5ToPrimitiveTestCase.test_iter.<locals>.IterClass.next   sB    ::TYY/''!ZZ!^
yya00r   N)r   r   r   r   r   r   __next__r   r   r   	IterClassr      s    1
 Hr   r   r   )objectr,   r   r5   )r   r   r`   s      r   	test_iterzToPrimitiveTestCase.test_iter   s2    	 	 K)*@*@*CDr   c                      G d dt               } |       }t        j                  |      }| j                  dddd|       y )Nc                       e Zd Zd Zd Zy):ToPrimitiveTestCase.test_iteritems.<locals>.IterItemsClassc                 T    t        ddd      j                         | _        d| _        y Nr?   r@   r   r   r   )r   rl   r   r   r   s    r   r   zCToPrimitiveTestCase.test_iteritems.<locals>.IterItemsClass.__init__   s"     1Q/557	
r   c                     | j                   S r$   r   r   s    r   	iteritemszDToPrimitiveTestCase.test_iteritems.<locals>.IterItemsClass.iteritems   s    yy r   Nr   r   r   r   r   r   r   r   IterItemsClassr      s    !r   r   r?   r@   r   r   r   r   r5   r,   )r   r   r`   ps       r   test_iteritemsz"ToPrimitiveTestCase.test_iteritems   s?    	!V 	! ""1%qqq115r   c                      G d dt               } |       } |       }||j                  d<   ||j                  d<   t        j                  |       y )Nc                       e Zd Zd Zd Zy)EToPrimitiveTestCase.test_iteritems_with_cycle.<locals>.IterItemsClassc                 8    t        ddd      | _        d| _        y r   )r   r   r   r   s    r   r   zNToPrimitiveTestCase.test_iteritems_with_cycle.<locals>.IterItemsClass.__init__   s     1Q/	
r   c                 6    | j                   j                         S r$   r   rl   r   s    r   r   zOToPrimitiveTestCase.test_iteritems_with_cycle.<locals>.IterItemsClass.iteritems       yy((r   Nr   r   r   r   r   r      s    )r   r   other)r   r   r   r5   )r   r   r`   x2s       r   test_iteritems_with_cyclez-ToPrimitiveTestCase.test_iteritems_with_cycle   sK    	)V 	) w 	q!r   c                      G d dt               } |       }t        j                  |      }| j                  dddd|       y )Nc                       e Zd Zd Zd Zy)2ToPrimitiveTestCase.test_items.<locals>.ItemsClassc                 *    t        ddd      | _        y r   r   r   r   s    r   r   z;ToPrimitiveTestCase.test_items.<locals>.ItemsClass.__init__        1Q/	r   c                 6    | j                   j                         S r$   r   r   s    r   rl   z8ToPrimitiveTestCase.test_items.<locals>.ItemsClass.items   r   r   N)r   r   r   r   rl   r   r   r   
ItemsClassr      s    0)r   r   r?   r@   r   r   r   )r   r   r`   r   s       r   
test_itemszToPrimitiveTestCase.test_items   s>    	) 	) L""1%qqq115r   c                      G d dt               } |       }t        j                  |      }| j                  ddi|       y )Nc                       e Zd Zd Zd Zy)PToPrimitiveTestCase.test_precedence_items_iteritems.<locals>.ItemsIterItemsClassc                 
    ddiS )Nrl   r   r   s    r   rl   zVToPrimitiveTestCase.test_precedence_items_iteritems.<locals>.ItemsIterItemsClass.items   s    ))r   c                 
    ddiS )Nr   r   r   s    r   r   zZToPrimitiveTestCase.test_precedence_items_iteritems.<locals>.ItemsIterItemsClass.iteritems   s    #[11r   N)r   r   r   rl   r   r   r   r   ItemsIterItemsClassr      s    *2r   r   r   r   )r   r   r`   r   s       r   test_precedence_items_iteritemsz3ToPrimitiveTestCase.test_precedence_items_iteritems   s=    	2& 	2  !""1%+{3Q7r   c                      G d dt         j                  j                        } |       }t        j                  |      }| j                  dddd|       y )Nc                   $    e Zd Zd Zd Zd Zd Zy)6ToPrimitiveTestCase.test_mapping.<locals>.MappingClassc                 *    t        ddd      | _        y r   r   r   s    r   r   z?ToPrimitiveTestCase.test_mapping.<locals>.MappingClass.__init__   r   r   c                      | j                   |   S r$   r   )r   rn   s     r   __getitem__zBToPrimitiveTestCase.test_mapping.<locals>.MappingClass.__getitem__   s    yy~%r   c                 ,    t        | j                        S r$   )iterr   r   s    r   r   z?ToPrimitiveTestCase.test_mapping.<locals>.MappingClass.__iter__   s    DII&r   c                 ,    t        | j                        S r$   )r   r   r   s    r   __len__z>ToPrimitiveTestCase.test_mapping.<locals>.MappingClass.__len__  s    499~%r   N)r   r   r   r   r   r   r   r   r   r   MappingClassr      s    0&'&r   r   r?   r@   r   r   )rB   r   Mappingr   r5   r,   )r   r   r`   r   s       r   test_mappingz ToPrimitiveTestCase.test_mapping   sH    	&;??22 	& N""1%qqq115r   c                      G d dt               } |       }| j                  t        d      t        j                  |d             | j                  t        t        j                  |       y )Nc                       e Zd ZdZd Zy)7ToPrimitiveTestCase.test_instance.<locals>.MysteryClass
   c                     d| _         y r   r+   r   s    r   r   z@ToPrimitiveTestCase.test_instance.<locals>.MysteryClass.__init__  s	    r   N)r   r   r   r*   r   r   r   r   MysteryClassr   	  s    Ar   r   r?   r   T)convert_instances)r   r,   r   r   r5   assertRaisesrs   )r   r   r`   s      r   test_instancez!ToPrimitiveTestCase.test_instance  sV    	6 	 N"//TJ	L 	*i&<&<a@r   c                 Z    t         }| j                  dt        j                  |             y )Nz<class 'bytearray'>)	bytearrayr,   r   r5   r   s     r   test_typeerrorz"ToPrimitiveTestCase.test_typeerror  s#    /1G1G1JKr   c                 f   d }t         |t        g}t        j                  |      }| j	                  dt        |             | j                  |d   j                  d      xs |d   j                  d             | j                  |d   j                  d             | j	                  d|d	          y )
Nc                       y r$   r   r   r   r   r=   z-ToPrimitiveTestCase.test_nasties.<locals>.foo  s    r   r   r   z<module 'datetime' from z<module 'datetime' (built-in)r?   z=<function ToPrimitiveTestCase.test_nasties.<locals>.foo at 0xz<built-in function dir>r@   )r   dirr   r5   r,   r   
assertTrue
startswith)r   r=   r`   rets       r   test_nastiesz ToPrimitiveTestCase.test_nasties  s    	sC $$Q'CH%A))*EF LA))*JK	MA))K
 	 	2CF;r   c                 ^    G fddt                d      }ddd ii}dddd iii}ddddd iiii}t        j                  |d      }| j                  ||       t        j                  |d      }| j                  ||       t        j                  |d      }| j                  ||       y )Nc                       e Zd Zd Z fdZy)7ToPrimitiveTestCase.test_depth.<locals>.LevelsGeneratorc                     || _         y r$   )_levels)r   levelss     r   r   z@ToPrimitiveTestCase.test_depth.<locals>.LevelsGenerator.__init__(  s	    %r   c                 z    | j                   dk(  rt        g       S t        d | j                   dz
        fg      S )Nr   r?   )r  r   )r   LevelsGenerators    r   r   zAToPrimitiveTestCase.test_depth.<locals>.LevelsGenerator.iteritems+  s9    <<1$8O!_T\\A5E%F!G HIIr   Nr   )r  s   r   r  r  '  s    &Jr   r  r   r   r@   )	max_depthr   r   )r   l4_objjson_l2json_l3json_l4r   r  s         @r   
test_depthzToPrimitiveTestCase.test_depth&  s    	Jf 	J !#q$i.q1d)n%q1q$i.)*$$Vq9#&$$Vq9#&$$Vq9#&r   c                     dt        j                  d      i}t        j                  |      }| j	                  ddi|       y )Nip_addrz1.2.3.4)netaddr	IPAddressr   r5   r,   r   thingr   s      r   test_ipaddr_using_netaddrz-ToPrimitiveTestCase.test_ipaddr_using_netaddr@  s<    G--i89$$U+)Y/5r   c                     dt        j                  d      i}t        j                  |      }| j	                  ddi|       y )Nr  z192.168.0.1	ipaddress
ip_addressr   r5   r,   r  s      r   test_ipaddr_using_ipaddress_v4z2ToPrimitiveTestCase.test_ipaddr_using_ipaddress_v4E  s<    I00?@$$U+)]3S9r   c                     dt        j                  d      i}t        j                  |      }| j	                  ddi|       y )Nr  z
2001:db8::r  r  s      r   test_ipaddr_using_ipaddress_v6z2ToPrimitiveTestCase.test_ipaddr_using_ipaddress_v6J  s<    I00>?$$U+)\2C8r   c                     dt        j                  d      i}t        j                  |      }| j	                  ddi|       y )Nip_netz
1.2.3.0/24)r  	IPNetworkr   r5   r,   r  s      r   test_ipnet_using_netaddrz,ToPrimitiveTestCase.test_ipnet_using_netaddrO  s<    7,,\:;$$U+(L137r   c                     | j                   j                  d      }|dz  }t        j                  |      }| j	                  ||       y )NzA message with param: %stest_domainr~   lazyr   r5   r,   r   msgr   s      r   test_message_with_paramz+ToPrimitiveTestCase.test_message_with_paramT  sC      %%&@AM!$$S)c"r   c                     | j                   j                  d      }|ddiz  }t        j                  |      }| j	                  ||       y )Nz A message with params: %(param)sparamrq   r"  r$  s      r   test_message_with_named_paramz1ToPrimitiveTestCase.test_message_with_named_paramZ  sH      %%&HIWg&&$$S)c"r   c                     t               }| j                  t        t        j                  |       t        j                  |t
              }| j                  d|       y Nr0   r   r	   r   rs   r   r5   r   r,   r   objr   s      r   test_fallbackz!ToPrimitiveTestCase.test_fallback`  sC    l*i&<&<cB$$S48%r   c                     t               }|g}| j                  t        t        j                  |       t        j                  |t
              }| j                  dg|       y r+  r,  )r   r.  obj_listr   s       r   test_fallback_listz&ToPrimitiveTestCase.test_fallback_listh  sL    l5*i&<&<hG$$X=&3'r   c                     t        j                  d      }t        j                  |      }| j	                  t        |      |       t        j                  |d       }| j	                  d|       y )Nr?   c                      y)Nitertools_countr   _s    r   ra   zCToPrimitiveTestCase.test_fallback_itertools_count.<locals>.<lambda>w  rb   r   r0   r5  )	itertoolscountr   r5   r,   rX   r-  s      r   test_fallback_itertools_countz1ToPrimitiveTestCase.test_fallback_itertools_countq  sX    ooa $$S)S3'$$S3NO*C0r   c                     t         }t        j                  |      }| j                  t	        |      |       d }t        j                  ||      }| j                  d|       y )Nc                      d| j                   z  S )Nztype:%s)r   )typeobjs    r   	formatterz:ToPrimitiveTestCase.test_fallback_nasty.<locals>.formatter  s    w////r   r0   ztype:int)intr   r5   r,   rX   )r   r.  r   r>  s       r   test_fallback_nastyz'ToPrimitiveTestCase.test_fallback_nastyz  sR    $$S)S3'	0$$S9=S)r   c                      G d dt               } |       }t        j                  |      }| j                  t	        |      |       t        j                  |d       }| j                  d|       y )Nc                       e Zd ZdZy)@ToPrimitiveTestCase.test_fallback_typeerror.<locals>.NotIterableN)r   r   r   r   r   r   r   NotIterablerC    s    Hr   rD  c                      yNr1   r   r6  s    r   ra   z=ToPrimitiveTestCase.test_fallback_typeerror.<locals>.<lambda>  rb   r   r0   r1   )r   r   r5   r,   rX   )r   rD  r.  r   s       r   test_fallback_typeerrorz+ToPrimitiveTestCase.test_fallback_typeerror  s^    	& 	 m$$S)S3'$$S3GHS)r   c                     t         j                  }t        j                  |      }| j	                  t        |      |       t        j                  |d       }| j	                  d|       y )Nc                      yrF  r   r6  s    r   ra   zGToPrimitiveTestCase.test_fallback_typeerror_IO_object.<locals>.<lambda>  rb   r   r0   r1   )rG   IOBaser   r5   r,   rX   r-  s      r   !test_fallback_typeerror_IO_objectz5ToPrimitiveTestCase.test_fallback_typeerror_IO_object  sR    ii$$S)S3'$$S3GHS)r   c                 d    | j                  t        j                  t        d            ddg       y )Nzan exceptionzValueError('an exception',)zValueError('an exception'))rr   r   r5   rs   r   s    r   test_exceptionz"ToPrimitiveTestCase.test_exception  s+    i,,Z-GH435	6r   )%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/  r2  r:  r@  rG  rK  rM  ru   rv   s   @r   rz   rz      s    D@G9GF94
O4E&6"$686(AL<'46
:
9
8
##&(1***6r   rz   )rB   collections.abcr   r3   rG   r  r8  r   unittestr   xmlrpcr   r   r  	oslo_i18nr   oslotestr   	test_baseoslo_serializationr   r   r	   r   BaseTestCaserx   rz   r   r   r   <module>rV     su         	     &   & ( 
S: S:l*I,B,B ]6)00 ]6r   