ó
t0^c           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z m Z m Z m	 Z	 e j
 d  Z e j d  Z d e j f d     YZ d e j f d	     YZ d
 e j f d     YZ d e j f d     YZ d e j f d     YZ e d k re j   n  d S(   s   Tests for josepy.json_util.i˙˙˙˙N(   t   errorst
   interfacest	   test_utilt   utils   cert.pems   csr.pemt	   FieldTestc           B   sM   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   s!   Tests for josepy.json_util.Field.c         C   sw   d d l  m } x` t j t t g t t g t t g  D]7 \ } } } |  j | d d | d | j |   q8 Wd  S(   Ni˙˙˙˙(   t   Fieldt   foot   defaultt	   omitempty(   t   josepy.json_utilR   t	   itertoolst   productt   Truet   Falset   assertFalset   omit(   t   selfR   R   R   t   value(    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_no_omit_boolean   s
    	.c         C   s§   t  j   } d   } d   } d d l m } | d  } | j |  } |  j d | j |   | j |  } |  j d | j |   |  j d | j |   d  S(   Nc         S   s   d S(   Nt   d(    (   t   unused_value(    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   decoder   s    c         S   s   d S(   Nt   e(    (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   encoder    s    i˙˙˙˙(   R   R   R   R   (	   t   mockt	   MagicMockR	   R   R   t   assertEqualt   encodeR   t   decode(   R   t
   mock_valueR   R   R   t   field(    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_descriptors   s    		c         C   sk   d t  j f d     Y} |   } d d l m } |  j | j |  | k  |  j d | j |   d  S(   Nt	   MockFieldc           B   s    e  Z d    Z e d    Z RS(   c         S   s   d S(   NR   (    (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   to_partial_json0   s    c         S   s   d  S(   N(    (   t   clst   jobj(    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt	   from_json3   s    (   t   __name__t
   __module__R!   t   classmethodR$   (    (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyR    .   s   	i˙˙˙˙(   R   R   (   R   t   JSONDeSerializableR	   R   t
   assertTruet   default_encodert   assertNotEqual(   R   R    t
   mock_fieldR   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_default_encoder_is_partial-   s
    	c         C   s<   t  j   } d d l m } |  j | j |  | k  d  S(   Ni˙˙˙˙(   R   (   R   R   R	   R   R)   R*   (   R   R   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt    test_default_encoder_passthrough=   s    c         C   s6   d d l  m } |  j d | j d d d g   d  S(   Ni˙˙˙˙(   R   i   i   i   (   i   i   i   (   R	   R   R   t   default_decoder(   R   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt"   test_default_decoder_list_to_tupleB   s    c         C   s_   d d l  m } | j i d d 6 } |  j t | t j   |  j | t j d d   d  S(   Ni˙˙˙˙(   R   i   t   x(   R	   R   R/   R)   t
   isinstanceR   t
   frozendictR   (   R   R   t   obj(    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt'   test_default_decoder_dict_to_frozendictF   s    c         C   s<   t  j   } d d l m } |  j | j |  | k  d  S(   Ni˙˙˙˙(   R   (   R   R   R	   R   R)   R/   (   R   R   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt    test_default_decoder_passthroughL   s    (
   R%   R&   t   __doc__R   R   R-   R.   R0   R5   R6   (    (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyR      s   						t   JSONObjectWithFieldsMetaTestc           B   s;   e  Z d  Z d   Z d   Z d   Z d   Z d   Z RS(   s4   Tests for josepy.json_util.JSONObjectWithFieldsMeta.c            sş   d d l  m } d d l  m } | d    _ | d    _ t j |  d t f   f d     Y } d | f d	     Y} d
 | f   f d     Y} |   _ |   _	 |   _
 d  S(   Ni˙˙˙˙(   R   (   t   JSONObjectWithFieldsMetat   Bazt   Baz2t   Ac              s   e  Z d Z   j Z RS(   t   bar(   R=   (   R%   R&   t	   __slots__R   t   baz(    (   R   (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyR<   ]   s   t   Bc           B   s   e  Z RS(    (   R%   R&   (    (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyR@   b   s   t   Cc              s   e  Z   j Z RS(    (   R%   R&   t   field2R?   (    (   R   (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyRA   e   s   (   R	   R   R9   R   RB   t   sixt   add_metaclasst   objectt   a_clst   b_clst   c_cls(   R   R   R9   R<   R@   RA   (    (   R   s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   setUpU   s    		c         C   sD   |  j  i |  j d 6|  j j  |  j  i |  j d 6|  j j  d  S(   NR?   (   R   R   RF   t   _fieldsRG   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_fieldsl   s     c         C   s$   |  j  i |  j d 6|  j j  d  S(   NR?   (   R   RB   RH   RJ   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_fields_inheritanceq   s    c         C   s0   |  j  d |  j j  |  j  d |  j j  d  S(   NR=   R?   (   s   bars   baz(   s   baz(   R   RF   R>   RG   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt
   test_slotsu   s    c         C   s0   |  j  d |  j j  |  j  d |  j j  d  S(   NR=   (   s   bar(    (   R   RF   t   _orig_slotsRG   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_orig_slotsy   s    (   R%   R&   R7   RI   RK   RL   RM   RO   (    (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyR8   R   s   				t   JSONObjectWithFieldsTestc           B   sz   e  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 RS(   s0   Tests for josepy.json_util.JSONObjectWithFields.c            sg   d d l  m } d d l  m   d | f   f d     Y} | |  _ | d d  d d d	 d
  |  _ d  S(   Ni˙˙˙˙(   t   JSONObjectWithFields(   R   t   MockJSONObjectWithFieldsc              sh   e  Z   d  d e d d   d d   Z   d  Z   d  Z e j d    Z e j d	    Z RS(
   R1   R   R   c         S   s   |  d S(   Ni   (    (   R1   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   <lambda>   s    R   c         S   s   |  d S(   Ni   (    (   R1   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyRS      s    t   yt   Zc         S   s   |  d k r t  j    n  |  S(   Niô  (   R    t   SerializationError(   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyRT      s    c         S   s   |  d k r t  j    n  |  S(   Niô  (   R    t   DeserializationError(   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyRT      s    (   R%   R&   R   R1   RT   t   zR   R   (    (   R   (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyRR      s   	R1   RT   i   RX   i   (   R	   RQ   R   RR   t   NoneR   (   R   RQ   RR   (    (   R   s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyRI      s
    	c         C   s)   |  j  |  j |  j d d d d   d  S(   NRT   i   RX   i   (   R   R   RR   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_init_defaults    s    c      	   C   s5   |  j  d |  j d d d d d d  j d   d  S(   Ni
   R1   i   RT   i    RX   (   R   RR   R   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_encodeŁ   s    c         C   s    |  j  t j |  j j d  d  S(   NR   (   t   assertRaisesR    t   ErrorR   R   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_encode_wrong_field§   s    c         C   s/   |  j  t j |  j d d d d   j d  d  S(   NRT   iô  RX   (   R\   R    RV   RR   RY   R   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt+   test_encode_serialization_error_passthroughŞ   s    c         C   s+   |  j  |  j j   i d d 6d d 6 d  S(   Ni   RT   i   RU   (   R   R   t   fields_to_partial_json(   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt'   test_fields_to_partial_json_omits_emptyŻ   s    c         C   sC   |  j  i d  d 6d d 6d d 6|  j j i d d 6d d 6  d  S(   NR1   i   RT   i   RX   RU   (   R   RY   RR   t   fields_from_json(   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt-   test_fields_from_json_fills_default_for_empty˛   s    c         C   s   |  j  t j |  j j i d d 6 |  j  t j |  j j i d d 6 |  j  t j |  j j i d d 6d d 6 |  j  t j |  j j i d d 6d d 6 d  S(   Ni    RT   RU   R1   (   R\   R    RW   RR   Rb   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt&   test_fields_from_json_fails_on_missingˇ   s    c         C   sG   |  j  |  j d d d d d d  j   i d d 6d d 6d d 6 d  S(   NR1   i   RT   i   RX   i   RU   (   R   RR   R!   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt#   test_fields_to_partial_json_encoderĹ   s    !c         C   sJ   |  j  i d d 6d d 6d d 6|  j j i d d 6d d 6d d 6  d  S(   Ni   R1   RT   i   RX   i   RU   (   R   RR   Rb   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_fields_from_json_decoderĘ   s    	c      	   C   s2   |  j  t j |  j d d d d d d  j  d  S(   NR1   i   RT   iô  RX   i   (   R\   R    RV   RR   R!   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt-   test_fields_to_partial_json_error_passthroughĐ   s    c         C   s5   |  j  t j |  j j i d d 6d d 6d d 6 d  S(   Ni   R1   iô  RT   i   RU   (   R\   R    RW   RR   R$   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt'   test_fields_from_json_error_passthroughŐ   s    	(   R%   R&   R7   RI   RZ   R[   R^   R_   Ra   Rc   Rd   Re   Rf   Rg   Rh   (    (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyRP      s   											t   DeEncodersTestc           B   s   e  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 RS(   c         C   s   d |  _  d |  _ d  S(   Nu  MIIB3jCCAYigAwIBAgICBTkwDQYJKoZIhvcNAQELBQAwdzELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE1pY2hpZ2FuMRIwEAYDVQQHDAlBbm4gQXJib3IxKzApBgNVBAoMIlVuaXZlcnNpdHkgb2YgTWljaGlnYW4gYW5kIHRoZSBFRkYxFDASBgNVBAMMC2V4YW1wbGUuY29tMB4XDTE0MTIxMTIyMzQ0NVoXDTE0MTIxODIyMzQ0NVowdzELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE1pY2hpZ2FuMRIwEAYDVQQHDAlBbm4gQXJib3IxKzApBgNVBAoMIlVuaXZlcnNpdHkgb2YgTWljaGlnYW4gYW5kIHRoZSBFRkYxFDASBgNVBAMMC2V4YW1wbGUuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKx1c7RR7R_drnBSQ_zfx1vQLHUbFLh1AQQQ5R8DZUXd36efNK79vukFhN9HFoHZiUvOjm0c-pVE6K-EdE_twuUCAwEAATANBgkqhkiG9w0BAQsFAANBAC24z0IdwIVKSlntksllvr6zJepBH5fMndfk3XJp10jT6VE-14KNtjh02a56GoraAvJAT5_H67E8GvJ_ocNnB_ou×  MIIBXTCCAQcCAQAweTELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE1pY2hpZ2FuMRIwEAYDVQQHDAlBbm4gQXJib3IxDDAKBgNVBAoMA0VGRjEfMB0GA1UECwwWVW5pdmVyc2l0eSBvZiBNaWNoaWdhbjEUMBIGA1UEAwwLZXhhbXBsZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEArHVztFHtH92ucFJD_N_HW9AsdRsUuHUBBBDlHwNlRd3fp580rv2-6QWE30cWgdmJS86ObRz6lUTor4R0T-3C5QIDAQABoCkwJwYJKoZIhvcNAQkOMRowGDAWBgNVHREEDzANggtleGFtcGxlLmNvbTANBgkqhkiG9w0BAQsFAANBAHJH_O6BtC9aGzEVCMGOZ7z9iIRHWSzr9x_bOzn7hLwsbXPAgO1QxEwL-X-4g20Gn9XBE1N9W6HCIEut2d8wACg(   t   b64_certt   b64_csr(   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyRI   Ý   s    	c         C   sI   d d l  m } | d  } |  j t | t j   |  j d |  d  S(   Ni˙˙˙˙(   t   encode_b64joseR1   u   eA(   R	   Rl   R)   R2   RC   t   string_typesR   (   R   Rl   t   encoded(    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_encode_b64joseö   s    c         C   sI   d d l  m } | d  } |  j t | t j   |  j d |  d  S(   Ni˙˙˙˙(   t   decode_b64joseu   eAR1   (   R	   Rp   R)   R2   RC   t   binary_typeR   (   R   Rp   t   decoded(    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_decode_b64joseü   s    c         C   s*   d d l  m } |  j t j | d  d  S(   Ni˙˙˙˙(   Rp   u   x(   R	   Rp   R\   R    RW   (   R   Rp   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt!   test_decode_b64jose_padding_error  s    c         C   sh   d d l  m } |  j d | d d d  |  j t j | d d d |  j t j | d d d d  S(	   Ni˙˙˙˙(   Rp   R   u   Zm9vt   sizei   i   i   (   R	   Rp   R   R\   R    RW   (   R   Rp   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_decode_b64jose_size  s    c         C   sz   d d l  m } |  j d | d d d d t  |  j d | d d d d t  |  j t j | d d d	 d t d  S(
   Ni˙˙˙˙(   Rp   R   u   Zm9vRu   i   t   minimumi   i   (   R	   Rp   R   R   R\   R    RW   (   R   Rp   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt    test_decode_b64jose_minimum_size  s
    ""c         C   sI   d d l  m } | d  } |  j d |  |  j t | t j   d  S(   Ni˙˙˙˙(   t   encode_hex16R   u   666f6f(   R	   Ry   R   R)   R2   RC   Rm   (   R   Ry   Rn   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_encode_hex16  s    c         C   sI   d d l  m } | d  } |  j d |  |  j t | t j   d  S(   Ni˙˙˙˙(   t   decode_hex16u   666f6fR   (   R	   R{   R   R)   R2   RC   Rq   (   R   R{   Rr   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_decode_hex16  s    c         C   sz   d d l  m } |  j d | d d d d t  |  j d | d d d d t  |  j t j | d d d	 d t d  S(
   Ni˙˙˙˙(   R{   R   u   666f6fRu   i   Rw   i   i   (   R	   R{   R   R   R\   R    RW   (   R   R{   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_decode_hex16_minimum_size!  s
    ""c         C   s*   d d l  m } |  j t j | d  d  S(   Ni˙˙˙˙(   R{   u   x(   R	   R{   R\   R    RW   (   R   R{   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_decode_hex16_odd_length(  s    c         C   s-   d d l  m } |  j |  j | t   d  S(   Ni˙˙˙˙(   t   encode_cert(   R	   R   R   Rj   t   CERT(   R   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_encode_cert,  s    c         C   sb   d d l  m } | |  j  } |  j t | t j   |  j | t  |  j	 t
 j | d  d  S(   Ni˙˙˙˙(   t   decode_certu    (   R	   R   Rj   R)   R2   R   t   ComparableX509R   R   R\   R    RW   (   R   R   t   cert(    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_decode_cert0  s
    c         C   s-   d d l  m } |  j |  j | t   d  S(   Ni˙˙˙˙(   t
   encode_csr(   R	   R   R   Rk   t   CSR(   R   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_encode_csr7  s    c         C   sb   d d l  m } | |  j  } |  j t | t j   |  j | t  |  j	 t
 j | d  d  S(   Ni˙˙˙˙(   t
   decode_csru    (   R	   R   Rk   R)   R2   R   R   R   R   R\   R    RW   (   R   R   t   csr(    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_decode_csr;  s
    (   R%   R&   RI   Ro   Rs   Rt   Rv   Rx   Rz   R|   R}   R~   R   R   R   R   (    (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyRi   Ü   s   													t   TypedJSONObjectWithFieldsTestc           B   s>   e  Z d    Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   sd   d d l  m } d | f d     Y} | j d | f d     Y } | |  _ | d d  |  _ d  S(	   Ni˙˙˙˙(   t   TypedJSONObjectWithFieldst#   MockParentTypedJSONObjectWithFieldsc           B   s   e  Z i  Z d  Z RS(   t   type(   R%   R&   t   TYPESt   type_field_name(    (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyR   K  s   t   MockTypedJSONObjectWithFieldsc           B   s,   e  Z d  Z d Z e d    Z d   Z RS(   t   testR   c         S   s   i | d d 6S(   NR   (    (   R"   R#   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyRb   U  s    c         S   s   i |  j  d 6S(   NR   (   R   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyR`   Y  s    (   s   foo(   R%   R&   t   typR>   R'   Rb   R`   (    (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyR   O  s   R   R=   (   R	   R   t   registert
   parent_clst   msg(   R   R   R   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyRI   E  s    		c         C   s+   |  j  |  j j   i d d 6d d 6 d  S(   NR   R   R=   R   (   R   R   R!   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_to_partial_json_  s    c         C   s=   x6 g  d d d g D]" } |  j  t j |  j j |  q Wd  S(   Ni   t   asd(    (   R\   R    RW   R   R$   (   R   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_from_json_non_dict_failse  s    c         C   s    |  j  t j |  j j i   d  S(   N(   R\   R    RW   R   R$   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt!   test_from_json_dict_no_type_failsj  s    c         C   s'   |  j  t j |  j j i d d 6 d  S(   NR=   R   (   R\   R    t   UnrecognizedTypeErrorR   R$   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt!   test_from_json_unknown_type_failsn  s    c         C   s5   |  j  i d d 6|  j j i d d 6d d 6  d  S(   NR=   R   R   R   (   R   R   R$   (   R   (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   test_from_json_returns_objr  s    (   R%   R&   RI   R   R   R   R   R   (    (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyR   C  s   					t   __main__(   R7   R
   t   unittestR   RC   t   josepyR    R   R   R   t   load_comparable_certR   t   load_comparable_csrR   t   TestCaseR   R8   RP   Ri   R   R%   t   main(    (    (    s9   /usr/lib/python2.7/site-packages/josepy/json_util_test.pyt   <module>   s   "D-]g4