U
    [e;                     @   s   d dl mZ d dlZd dlmZmZ d dlmZ G dd deZG dd deZ	G d	d
 d
eZ
G dd deZG dd deZdS )    )TestCaseN)Draft4Validator
exceptions)PY3c                   @   sT   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d ZdS )TestBestMatchc                 C   sH   t |}t|}tt|}d}| j| | |||d |S )Nz:Didn't return a consistent best match!
Got: {0}

Then: {1})msg)listr   
best_matchreversedassertEqualZ	_contentsformat)selferrorsbestZreversed_bestr    r   b/var/www/html/services/stratfitenv/lib/python3.8/site-packages/jsonschema/tests/test_exceptions.pyr	   	   s    
 
zTestBestMatch.best_matchc                 C   sH   t ddddddiidii}| |ddg ii}| |jd d S )	N
propertiesfoo   bartypeobject)minPropertiesr   r   r   r	   iter_errorsr   	validatorr   r   r   r   r   r   (test_shallower_errors_are_better_matches   s    

z6TestBestMatch.test_shallower_errors_are_better_matchesc                 C   sJ   t dddiddigddiddigd}| |i }| |jd dS )zn
        A property you *must* match is probably better than one you have to
        match a part of.
        r   r   stringnumber)r   anyOfoneOfr   Nr   r   r   r   r   %test_oneOf_and_anyOf_are_weak_matches"   s    z3TestBestMatch.test_oneOf_and_anyOf_are_weak_matchesc              	   C   sR   t dddddiddddiiigiii}| |dddii}| |jd d	S )
aL  
        If the most relevant error is an anyOf, then we traverse its context
        and select the otherwise *least* relevant error, since in this case
        that means the most specific, deep, error inside the instance.

        I.e. since only one of the schemas must match, we look for the most
        relevant one.
        r   r   r    r   r   r   array   Nr   r	   r   r   validator_valuer   r   r   r   8test_if_the_most_relevant_error_is_anyOf_it_is_traversed2   s    
zFTestBestMatch.test_if_the_most_relevant_error_is_anyOf_it_is_traversedc              	   C   sR   t dddddiddddiiigiii}| |dddii}| |jd d	S )
aL  
        If the most relevant error is an oneOf, then we traverse its context
        and select the otherwise *least* relevant error, since in this case
        that means the most specific, deep, error inside the instance.

        I.e. since only one of the schemas must match, we look for the most
        relevant one.
        r   r   r!   r   r   r   r#   r$   Nr%   r   r   r   r   8test_if_the_most_relevant_error_is_oneOf_it_is_traversedK   s    
zFTestBestMatch.test_if_the_most_relevant_error_is_oneOf_it_is_traversedc              	   C   sR   t dddddiddddiiigiii}| |dddii}| |jd d	S )
z
        Now, if the error is allOf, we traverse but select the *most* relevant
        error from the context, because all schemas here must match anyways.
        r   r   ZallOfr   r   r   r#   r$   Nr%   r   r   r   r   8test_if_the_most_relevant_error_is_allOf_it_is_traversedd   s    zFTestBestMatch.test_if_the_most_relevant_error_is_allOf_it_is_traversedc                 C   s^   t dddddidddiddddiiigigiii}| |dddii}| |jd d S )	Nr   r   r!   r   r   r   r#   r$   r%   r   r   r   r   test_nested_context_for_oneOfy   s*     z+TestBestMatch.test_nested_context_for_oneOfc                 C   s6   t ddi}|i \}| t|i jd d S )Nr   r   )r   r   r   r   r	   r   )r   r   errorr   r   r   test_one_error   s    zTestBestMatch.test_one_errorc                 C   s"   t i }| t|i  d S )N)r   ZassertIsNoner   r	   r   )r   r   r   r   r   test_no_errors   s    zTestBestMatch.test_no_errorsN)__name__
__module____qualname__r	   r   r"   r'   r(   r)   r*   r,   r-   r   r   r   r   r      s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestByRelevancec                 C   sb   t jddgd}t jdddgd}t||gt jd}| || t||gt jd}| || d S )NOh no!ZbazpathOh yes!r   r   key)r   ValidationErrormax	relevanceassertIs)r   shallowdeepmatchr   r   r   #test_short_paths_are_better_matches   s    z3TestByRelevance.test_short_paths_are_better_matchesc                 C   s~   t jdg d}t jddgd}t||gt jd}| dd |D dgg g t||gt jd}| dd |D dgg g d S )	Nr2   r3   r5   r   r6   c                 S   s   g | ]}t |jqS r   r   r4   .0r+   r   r   r   
<listcomp>   s     zNTestByRelevance.test_global_errors_are_even_better_matches.<locals>.<listcomp>c                 S   s   g | ]}t |jqS r   r@   rA   r   r   r   rC      s     )r   r8   sortedr:   r   )r   r<   r=   r   r   r   r   *test_global_errors_are_even_better_matches   s    z:TestByRelevance.test_global_errors_are_even_better_matchesc                 C   sh   t jdg dd}t jdg dd}t jdd}t||g|d}| || t||g|d}| || d S )Nr2   ar4   r   r5   b)weakr6   r   r8   Zby_relevancer9   r;   )r   rI   normalr	   r>   r   r   r   'test_weak_validators_are_lower_priority   s    z7TestByRelevance.test_weak_validators_are_lower_priorityc                 C   s~   t jdg dd}t jdg dd}t jdg dd}t jddd}t|||g|d	}| || t|||g|d	}| || d S )
Nr2   rF   rG   r5   rH   zOh fine!c)rI   strongr6   rJ   )r   rI   rK   rN   r	   r>   r   r   r   *test_strong_validators_are_higher_priority   s    z:TestByRelevance.test_strong_validators_are_higher_priorityN)r.   r/   r0   r?   rE   rL   rO   r   r   r   r   r1      s   	r1   c                   @   sT   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d ZdS )TestErrorTreec                 C   s.   dd t dD }t|}| |jd d S )Nc                 S   s   g | ]}t jd |dqS )Z	Somethingr   )r   r8   )rB   ir   r   r   rC      s   zQTestErrorTree.test_it_knows_how_many_total_errors_it_contains.<locals>.<listcomp>   )ranger   	ErrorTreer   Ztotal_errorsr   r   treer   r   r   /test_it_knows_how_many_total_errors_it_contains   s
    
z=TestErrorTree.test_it_knows_how_many_total_errors_it_containsc                 C   s,   t jddgdg}t |}| d| d S )N	a messager   r3   )r   r8   rU   assertInrV   r   r   r   1test_it_contains_an_item_if_the_item_had_an_error   s    
z?TestErrorTree.test_it_contains_an_item_if_the_item_had_an_errorc                 C   s,   t jddgdg}t |}| d| d S )NrY   r   r3   r   )r   r8   rU   assertNotInrV   r   r   r   9test_it_does_not_contain_an_item_if_the_item_had_no_error   s    
zGTestErrorTree.test_it_does_not_contain_an_item_if_the_item_had_no_errorc                 C   s0   t jddd}t |g}| |jd|i d S )NrY   r   rQ   r   r8   rU   r   r   r   r+   rW   r   r   r   1test_validators_that_failed_appear_in_errors_dict   s    z?TestErrorTree.test_validators_that_failed_appear_in_errors_dictc                 C   sP   t jddgdt jdddgdg}t |}| d|d  | d|d  d S )Nza bar messager   r3   za bar -> 0 messager      )r   r8   rU   rZ   r\   rV   r   r   r   1test_it_creates_a_child_tree_for_each_nested_path   s    
z?TestErrorTree.test_it_creates_a_child_tree_for_each_nested_pathc                 C   sX   t jddddgdt jddddgd }}t ||g}| |d d j||d d S )	N1r   r   r   )r   r4   2quux)r   re   r^   )r   e1e2rW   r   r   r   +test_children_have_their_errors_dicts_built   s
    z9TestErrorTree.test_children_have_their_errors_dicts_builtc                 C   s@   t jddddgddt jddd	d
gdd }}t ||g d S )Nrc   r   r   Zbar2i1)r   r4   instancerd   re   Zfoobarr   i2)r   r8   rU   )r   rf   rg   r   r   r   "test_multiple_errors_with_instance   s    z0TestErrorTree.test_multiple_errors_with_instancec              	   C   s>   t jddg d}t |g}| t |d  W 5 Q R X d S )NZ123r   )r   rj   r   )r   r8   rU   assertRaises
IndexErrorr_   r   r   r   >test_it_does_not_contain_subtrees_that_are_not_in_the_instance  s    zLTestErrorTree.test_it_does_not_contain_subtrees_that_are_not_in_the_instancec                 C   s6   t jddi dgd}t |g}| |d t j dS )z
        If a validator is dumb (like :validator:`required` in draft 3) and
        refers to a path that isn't in the instance, the tree still properly
        returns a subtree for that path.
        rY   r   )r   rj   r4   N)r   r8   rU   ZassertIsInstancer_   r   r   r   9test_if_its_in_the_tree_anyhow_it_does_not_raise_an_error  s       zGTestErrorTree.test_if_its_in_the_tree_anyhow_it_does_not_raise_an_errorN)r.   r/   r0   rX   r[   r]   r`   rb   rh   rl   ro   rp   r   r   r   r   rP      s   		rP   c                   @   s\   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d Zdd ZdS )TestErrorInitReprStrc                 K   s,   t ddddddid}|| tjf |S )NZhellor   r      )messager   r&   rj   schema)dictupdater   r8   )r   kwargsdefaultsr   r   r   
make_error"  s    
zTestErrorInitReprStr.make_errorc                 K   s^   t r|dd}t|d}| jf |}t|d\}}}| ||j	 | || d S )Nzu''
)
r   replacetextwrapdedentrstripry   str	partitionr   rs   )r   expectedrw   r+   Zmessage_line_restr   r   r   assertShows-  s    z TestErrorInitReprStr.assertShowsc                 C   s   |   }| t|jd d S )Nra   )ry   ZassertGreaterlenargs)r   r+   r   r   r   !test_it_calls_super_and_sets_args7  s    z6TestErrorInitReprStr.test_it_calls_super_and_sets_argsc                 C   s    |  ttjdddd  d S )NzHello!)rs   z<ValidationError: %r>)r   reprr   r8   r   r   r   r   	test_repr;  s    zTestErrorInitReprStr.test_reprc                 C   sd   t d}| t|d dddddid}|D ].}t|}||= t jd|}| t|d q0d S )Nrs   r   r   rr   )r   r&   rj   rt   )rs   )r   r8   r   r   ru   )r   r+   rw   attrkr   r   r   test_unset_errorA  s    
z%TestErrorInitReprStr.test_unset_errorc                 C   s   | j dg g d d S )Nz
            Failed validating u'type' in schema:
                {u'type': u'string'}

            On instance:
                5
            r4   Zschema_pathr   r   r   r   r   test_empty_pathsR  s
    z%TestErrorInitReprStr.test_empty_pathsc                 C   s   | j ddgdgd d S )Nz
            Failed validating u'type' in schema:
                {u'type': u'string'}

            On instance[0]:
                5
            r   itemsr   r   r   r   r   r   test_one_item_paths_  s
    z(TestErrorInitReprStr.test_one_item_pathsc                 C   s   | j dddgdddgd d S )Nz
            Failed validating u'type' in schema[u'items'][0]:
                {u'type': u'string'}

            On instance[0][u'a']:
                5
            r   rF   r   ra   r   r   r   r   r   r   test_multiple_item_pathsl  s
    z-TestErrorInitReprStr.test_multiple_item_pathsc                 C   s0   | j dttdtttdtddd d S )Na@  
            Failed validating u'maxLength' in schema:
                {0: 0,
                 1: 1,
                 2: 2,
                 3: 3,
                 4: 4,
                 5: 5,
                 6: 6,
                 7: 7,
                 8: 8,
                 9: 9,
                 10: 10,
                 11: 11,
                 12: 12,
                 13: 13,
                 14: 14,
                 15: 15,
                 16: 16,
                 17: 17,
                 18: 18,
                 19: 19}

            On instance:
                [0,
                 1,
                 2,
                 3,
                 4,
                 5,
                 6,
                 7,
                 8,
                 9,
                 10,
                 11,
                 12,
                 13,
                 14,
                 15,
                 16,
                 17,
                 18,
                 19,
                 20,
                 21,
                 22,
                 23,
                 24]
                  Z	maxLength)rj   rt   r   )r   r   rT   ru   zipr   r   r   r   test_uses_pprinty  s    2
z%TestErrorInitReprStr.test_uses_pprintc                    sF   G  fdddt }| }tjdd|ddd} t|t| dS )	z
        Check for https://github.com/Julian/jsonschema/issues/164 which
        rendered exceptions unusable when a `ValidationError` involved
        instances with an `__eq__` method that returned truthy values.
        c                       s$   e Zd Z fddZ fddZdS )zdTestErrorInitReprStr.test_str_works_with_instances_having_overriden_eq_operator.<locals>.DontEQMeBroc                    s     d d S NzDon't!Zfailthisotherr   r   r   __eq__  s    zkTestErrorInitReprStr.test_str_works_with_instances_having_overriden_eq_operator.<locals>.DontEQMeBro.__eq__c                    s     d d S r   r   r   r   r   r   __ne__  s    zkTestErrorInitReprStr.test_str_works_with_instances_having_overriden_eq_operator.<locals>.DontEQMeBro.__ne__N)r.   r/   r0   r   r   r   r   r   r   DontEQMeBro  s   r   rY   r   Zsomert   )r   rj   r&   rt   N)r   r   r8   rZ   r   r   )r   r   rj   r+   r   r   r   :test_str_works_with_instances_having_overriden_eq_operator  s    zOTestErrorInitReprStr.test_str_works_with_instances_having_overriden_eq_operatorN)r.   r/   r0   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   rq   !  s   
9rq   c                   @   s   e Zd Zdd ZdS )TestHashablec                 C   s$   t tdg t tdg d S )N )setr   r8   ZSchemaErrorr   r   r   r   test_hashable  s    zTestHashable.test_hashableN)r.   r/   r0   r   r   r   r   r   r     s   r   )Zunittestr   r}   Z
jsonschemar   r   Zjsonschema.compatr   r   r1   rP   rq   r   r   r   r   r   <module>   s    4N +