U
    kuft                     @   sd   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 e
dZedZdd	 ZG d
d deZdS )zH
Tests for the parts of jsonschema related to the :kw:`format` keyword.
    )TestCase)FormatCheckerValidationError)FormatError)Draft4ValidatorzBoom!zBang!c                 C   s   | dkrt td S )Nbang)BANGBOOMthing r   @/tmp/pip-unpacked-wheel-k94ccfep/jsonschema/tests/test_format.pyboom   s    r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestFormatCheckerc                 C   s   t dd}| |j d S )Nr   formats)r   ZassertFalsecheckersselfcheckerr   r   r   test_it_can_validate_no_formats   s    
z1TestFormatChecker.test_it_can_validate_no_formatsc              	   C   s&   |  t tdgd W 5 Q R X d S )Nzo noesr   )assertRaisesKeyErrorr   )r   r   r   r   .test_it_raises_a_key_error_for_unknown_formats   s    z@TestFormatChecker.test_it_raises_a_key_error_for_unknown_formatsc              	   C   s\   t tj}| tjjd | t tdt W 5 Q R X | 	tjt |tdfd d S Nr   r   )r   )
dictr   r   Z
addCleanuppopZassertWarnsDeprecationWarningZ
cls_checksr   assertEqual)r   originalr   r   r   !test_it_can_register_cls_checkers   s    
z3TestFormatChecker.test_it_can_register_cls_checkersc                 C   s4   t  }|dt | |jtt jtdfd d S r   )r   checksr   r   r   r   r   r   r   r   test_it_can_register_checkers(   s    z/TestFormatChecker.test_it_can_register_checkersc              	   C   s   t  }|jdttdt | t}|jddd W 5 Q R X | |j	j
t | |j	jt | t|j	d | tt |jddd W 5 Q R X d S )Nr   Zraises   instanceformatz12 is not a 'boom'r   )r   r!   typer	   r   r   r   checkassertIs	exceptioncause	__cause__r   strr   )r   r   cmr   r   r   !test_it_catches_registered_errors0   s    z3TestFormatChecker.test_it_catches_registered_errorsc              	   C   sl   t  }|jdtdt tddi|d}| t}|d W 5 Q R X | |j	j
t | |j	jt d S )Nr   r#   r'   )Zformat_checkerr	   )r   r!   
ValueErrorr   r   r   r   validater*   r+   r,   r	   r-   )r   r   Z	validatorr/   r   r   r   7test_format_error_causes_become_validation_error_causes?   s    zITestFormatChecker.test_format_error_causes_become_validation_error_causesc              	   C   s.   t  }| t |jddd W 5 Q R X d S )Nznot-an-ipv4Zipv4r%   )r   r   r   r)   r   r   r   r   'test_format_checkers_come_with_defaultsJ   s    z9TestFormatChecker.test_format_checkers_come_with_defaultsc                 C   sT   t dd}|ddd  |ddd  |dd	d  | t|d
 d S )Nr   r   Zfooc                 S   s   dS NTr   r
   r   r   r   <lambda>U       z-TestFormatChecker.test_repr.<locals>.<lambda>barc                 S   s   dS r5   r   r
   r   r   r   r6   V   r7   Zbazc                 S   s   dS r5   r   r
   r   r   r   r6   W   r7   z.<FormatChecker checkers=['bar', 'baz', 'foo']>)r   r!   r   reprr   r   r   r   	test_reprS   s    
zTestFormatChecker.test_reprN)__name__
__module____qualname__r   r   r    r"   r0   r3   r4   r:   r   r   r   r   r      s   
	r   N)__doc__Zunittestr   Z
jsonschemar   r   Zjsonschema.exceptionsr   Zjsonschema.validatorsr   r1   r	   ZeroDivisionErrorr   r   r   r   r   r   r   <module>   s   