Ë
    ùmxií^  ã                   ó¼   — d dl mZ d dlZd dl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«      Z
 G d„ de«      Z G d„ de«      Z G d„ de«      Zy)é    )ÚTestCaseN)Ú
exceptions)Ú_LATEST_VERSIONc                   ó„   — 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d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestBestMatchc                 óf  — t        t        |«      j                  |«      «      }d|› d|›d�}| j                  ||¬«       t	        j
                  t        |«      «      }t	        j
                  t        |«      «      }| j                  |j                  «       |j                  «       d|› d|› �«       |S )NzNo errors found for z under ú!)ÚmsgzNo consistent best match!
Got: z

Then: )
Úlistr   Úiter_errorsÚ
assertTruer   Ú
best_matchÚiterÚreversedÚassertEqualÚ	_contents)ÚselfÚinstanceÚschemaÚerrorsr
   ÚbestÚreversed_bests          úW/home/htdocs/ttos/venv/lib/python3.12/site-packages/jsonschema/tests/test_exceptions.pyÚbest_match_ofzTestBestMatch.best_match_of   s¤   € Ü”o fÓ-×9Ñ9¸(ÓCÓDˆØ% h Z¨w°v°jÀÐBˆØ�‰˜ CˆÔ(ä×$Ñ$¤T¨&£\Ó2ˆÜ"×-Ñ-¬h°vÓ.>Ó?ˆà×ÑØ�N‰NÓØ×#Ñ#Ó%Ø.¨t¨f°J¸}¸oÐNô	
ð
 ˆó    c                 ó„   — ddddddiidœii}| j                  ddg ii|¬«      }| j                  |j                  d	«       y )
NÚ
propertiesÚfooé   ÚbarÚtypeÚobject)ÚminPropertiesr   ©r   r   r#   ©r   r   Ú	validator©r   r   r   s      r   Ú(test_shallower_errors_are_better_matchesz6TestBestMatch.test_shallower_errors_are_better_matches   s]   € àØØ%&Ø#(¨6°8Ð*<Ð"=ñðð
ˆð ×!Ñ!¨E°E¸2°;Ð+?ÈÐ!ÓOˆØ×Ñ˜Ÿ™¨Õ9r   c                 ó†   — dddiddigddiddigdœ}| j                  i |¬«      }| j                  |j                  d«       y)	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$   r#   Nr%   r'   s      r   Ú%test_oneOf_and_anyOf_are_weak_matchesz3TestBestMatch.test_oneOf_and_anyOf_are_weak_matches&   s]   € ð Ø˜xÐ(¨6°8Ð*<Ð=Ø˜xÐ(¨6°8Ð*<Ð=ñ
ˆð
 ×!Ñ!¨2°fÐ!Ó=ˆØ×Ñ˜Ÿ™¨Õ9r   c                 óŽ   — dddddiddddiiigiii}| j                  dddii|¬	«      }| j                  |j                  d«       y
)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é   r$   N©r   r   Úvalidator_valuer'   s      r   Ú8test_if_the_most_relevant_error_is_anyOf_it_is_traversedzFTestBestMatch.test_if_the_most_relevant_error_is_anyOf_it_is_traversed4   ós   € ð ØØØ Ð*Ø%¨°¸Ð/@Ð'AÐBðððð	
ˆð ×!Ñ!¨E°E¸2°;Ð+?ÈÐ!ÓOˆØ×Ñ˜×-Ñ-¨wÕ7r   c                 ó|   — dddiddiddigi}| j                  g |¬«      }| j                  |j                  d«       y)z’
        We don't traverse into an anyOf (as above) if all of its context errors
        seem to be equally "wrong" against the instance.
        r,   r!   r*   Úintegerr"   r$   Nr%   r'   s      r   Ú3test_no_anyOf_traversal_for_equally_relevant_errorszATestBestMatch.test_no_anyOf_traversal_for_equally_relevant_errorsK   óV   € ð Ø˜Ð"Ø˜Ð#Ø˜Ð"ðð
ˆð ×!Ñ!¨2°fÐ!Ó=ˆØ×Ñ˜Ÿ™¨Õ1r   c                 óp   — dddigi}| j                  g |¬«      }| j                  |j                  d«       y)z„
        We *do* traverse anyOf with a single nested error, even though it is
        vacuously equally relevant to itself.
        r,   r!   r*   r$   Nr%   r'   s      r   Ú6test_anyOf_traversal_for_single_equally_relevant_errorzDTestBestMatch.test_anyOf_traversal_for_single_equally_relevant_error[   óF   € ð Ø˜Ð"ðð
ˆð
 ×!Ñ!¨2°fÐ!Ó=ˆØ×Ñ˜Ÿ™¨Õ0r   c                 óx   — ddddiigi}| j                  ddg|¬«      }| j                  |j                  d«       y)z|
        We *do* traverse anyOf with a single subschema that fails multiple
        times (e.g. on multiple items).
        r,   ÚitemsÚconsté%   r1   r$   Nr%   r'   s      r   Ú.test_anyOf_traversal_for_single_sibling_errorsz<TestBestMatch.test_anyOf_traversal_for_single_sibling_errorsi   óN   € ð Ø˜7 B˜-Ð(ðð
ˆð
 ×!Ñ!¨B°¨8¸FÐ!ÓCˆØ×Ñ˜Ÿ™¨Õ1r   c                 ó~   — dddidddiigi}| j                  ddg|¬«      }| j                  |j                  d«       y	)
zg
        We *do* traverse anyOf with multiple subschemas when one does not type
        match.
        r,   r!   r"   r>   r?   r@   r1   r$   Nr%   r'   s      r   Ú9test_anyOf_traversal_for_non_type_matching_sibling_errorszGTestBestMatch.test_anyOf_traversal_for_non_type_matching_sibling_errorsw   óV   € ð Ø˜Ð"Ø˜7 B˜-Ð(ðð
ˆð ×!Ñ!¨B°¨8¸FÐ!ÓCˆØ×Ñ˜Ÿ™¨Õ1r   c                 óŽ   — dddddiddddiiigiii}| j                  dddii|¬	«      }| j                  |j                  d«       y
)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    r0   r1   r$   Nr2   r'   s      r   Ú8test_if_the_most_relevant_error_is_oneOf_it_is_traversedzFTestBestMatch.test_if_the_most_relevant_error_is_oneOf_it_is_traversed†   r5   r   c                 ó|   — dddiddiddigi}| j                  g |¬«      }| j                  |j                  d«       y)z’
        We don't traverse into an oneOf (as above) if all of its context errors
        seem to be equally "wrong" against the instance.
        r-   r!   r*   r7   r"   r$   Nr%   r'   s      r   Ú3test_no_oneOf_traversal_for_equally_relevant_errorszATestBestMatch.test_no_oneOf_traversal_for_equally_relevant_errors�   r9   r   c                 óp   — dddigi}| j                  g |¬«      }| j                  |j                  d«       y)z„
        We *do* traverse oneOf with a single nested error, even though it is
        vacuously equally relevant to itself.
        r-   r!   r*   r$   Nr%   r'   s      r   Ú6test_oneOf_traversal_for_single_equally_relevant_errorzDTestBestMatch.test_oneOf_traversal_for_single_equally_relevant_error­   r<   r   c                 óx   — ddddiigi}| j                  ddg|¬«      }| j                  |j                  d«       y)z|
        We *do* traverse oneOf with a single subschema that fails multiple
        times (e.g. on multiple items).
        r-   r>   r?   r@   r1   r$   Nr%   r'   s      r   Ú.test_oneOf_traversal_for_single_sibling_errorsz<TestBestMatch.test_oneOf_traversal_for_single_sibling_errors»   rB   r   c                 ó~   — dddidddiigi}| j                  ddg|¬«      }| j                  |j                  d«       y	)
zg
        We *do* traverse oneOf with multiple subschemas when one does not type
        match.
        r-   r!   r"   r>   r?   r@   r1   r$   Nr%   r'   s      r   Ú9test_oneOf_traversal_for_non_type_matching_sibling_errorszGTestBestMatch.test_oneOf_traversal_for_non_type_matching_sibling_errorsÉ   rE   r   c                 óŽ   — dddddiddddiiigiii}| j                  dddii|¬	«      }| j                  |j                  d«       y
)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   ÚallOfr!   r*   r    r0   r1   r$   Nr2   r'   s      r   Ú8test_if_the_most_relevant_error_is_allOf_it_is_traversedzFTestBestMatch.test_if_the_most_relevant_error_is_allOf_it_is_traversedØ   ss   € ð ØØØ Ð*Ø%¨°¸Ð/@Ð'AÐBðððð	
ˆð ×!Ñ!¨E°E¸2°;Ð+?ÈÐ!ÓOˆØ×Ñ˜×-Ñ-¨xÕ8r   c           
      óš   — dddddidddiddddiiigigiii}| j                  dddii|¬	«      }| j                  |j                  d«       y
)zp
        We traverse into nested contexts (a oneOf containing an error in a
        nested oneOf here).
        r   r   r-   r!   r*   r    r0   r1   r$   Nr2   r'   s      r   Útest_nested_context_for_oneOfz+TestBestMatch.test_nested_context_for_oneOfë   s�   € ð ØØØ Ð*à#Ø!'¨Ð 2à$0Ø(-°¸Ð/@ð3&ð!"ð&ð	ðððð
ˆð& ×!Ñ!¨E°E¸2°;Ð+?ÈÐ!ÓOˆØ×Ñ˜×-Ñ-¨wÕ7r   c                 ó  — ddddddœddd	œgiii}| j                  dd
i|¬«      }| j                  |j                  d«       dddddd	œdddœgiii}| j                  dd
i|¬«      }| j                  |j                  d«       y )Nr   r   r,   r0   r   ©r!   ÚminItemsr*   é
   ©r!   Ú	minLengthr    r$   rZ   r%   ©r   r   r   Ú	reordereds       r   Ú"test_it_prioritizes_matching_typesz0TestBestMatch.test_it_prioritizes_matching_types  sÀ   € àØØØ!(°aÑ8Ø!)¸Ñ;ðððð	
ˆð ×!Ñ!¨E°5¨>À&Ð!ÓIˆØ×Ñ˜Ÿ™¨Ô5ð ØØØ!)¸Ñ;Ø!(°aÑ8ðððð	
ˆ	ð ×!Ñ!¨E°5¨>À)Ð!ÓLˆØ×Ñ˜Ÿ™¨Õ5r   c                 ó  — dddddgddœdd	gd
dœgiii}| j                  ddi|¬«      }| j                  |j                  d«       dddd	d
dœdddœgiii}| j                  ddi|¬«      }| j                  |j                  d«       y )Nr   r   r,   r0   r"   r   rV   r7   r*   rX   rY   r    r$   rZ   r%   r[   s       r   Ú(test_it_prioritizes_matching_union_typesz6TestBestMatch.test_it_prioritizes_matching_union_types"  sÊ   € àØØØ")¨8Ð!4À!ÑDØ"+¨XÐ!6ÀRÑHðððð	
ˆð ×!Ñ!¨E°5¨>À&Ð!ÓIˆØ×Ñ˜Ÿ™¨Ô5ð ØØØ!)¸Ñ;Ø!(°aÑ8ðððð	
ˆ	ð ×!Ñ!¨E°5¨>À)Ð!ÓLˆØ×Ñ˜Ÿ™¨Õ5r   c                 óp   — dddii}| j                  ddi|¬«      }| j                  |j                  «       y )Nr   r   Fr    r$   )r   ÚassertIsNoner&   r'   s      r   Útest_boolean_schemasz"TestBestMatch.test_boolean_schemas=  s;   € Ø ¨ Ð/ˆØ×!Ñ!¨E°5¨>À&Ð!ÓIˆØ×Ñ˜$Ÿ.™.Õ)r   c                 ó¼   — t        ddi«      }|j                  i «       | j                  t        j                  |j                  i «      «      j
                  d«       y )Nr#   r   )r   r   r   r   r   r&   ©r   r&   s     r   Útest_one_errorzTestBestMatch.test_one_errorB  sO   € Ü# _°aÐ$8Ó9ˆ	Ø×Ñ˜bÔ!Ø×ÑÜ×!Ñ! )×"7Ñ"7¸Ó";Ó<×FÑFØõ	
r   c                 ó€   — t        i «      }| j                  t        j                  |j	                  i «      «      «       y )N)r   ra   r   r   r   rd   s     r   Útest_no_errorszTestBestMatch.test_no_errorsJ  s0   € Ü# BÓ'ˆ	Ø×Ñœ*×/Ñ/°	×0EÑ0EÀbÓ0IÓJÕKr   N)Ú__name__Ú
__module__Ú__qualname__r   r(   r.   r4   r8   r;   rA   rD   rG   rI   rK   rM   rO   rR   rT   r]   r_   rb   re   rg   © r   r   r   r   
   sg   „ òò
:ò:ò8ò.2ò 1ò2ò2ò8ò.2ò 1ò2ò2ò9ò&8ò86ò66ò6*ò

óLr   r   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚTestByRelevancec                 ó"  — t        j                  ddg¬«      }t        j                  dddg¬«      }t        ||gt         j                  ¬«      }| j	                  ||«       t        ||gt         j                  ¬«      }| j	                  ||«       y )NúOh no!Úbaz©ÚpathúOh yes!r   r    ©Úkey)r   ÚValidationErrorÚmaxÚ	relevanceÚassertIs)r   ÚshallowÚdeepÚmatchs       r   Ú#test_short_paths_are_better_matchesz3TestByRelevance.test_short_paths_are_better_matchesP  st   € Ü×,Ñ,¨X¸U¸GÔDˆÜ×)Ñ)¨)¸5À%¸.ÔIˆÜ�W˜d�O¬×)=Ñ)=Ô>ˆØ�‰�e˜WÔ%ä�T˜7�O¬×)=Ñ)=Ô>ˆØ�‰�e˜WÕ%r   c                 óÂ  — t        j                  dg ¬«      }t        j                  ddg¬«      }t        ||gt         j                  ¬«      }| j	                  |D �cg c]  }t        |j                  «      ‘Œ c}dgg g«       t        ||gt         j                  ¬«      }| j	                  |D �cg c]  }t        |j                  «      ‘Œ c}dgg g«       y c c}w c c}w )Nro   rq   rs   r   rt   )r   rv   Úsortedrx   r   r   rr   )r   rz   r{   r   Úerrors        r   Ú*test_global_errors_are_even_better_matchesz:TestByRelevance.test_global_errors_are_even_better_matchesY  s¼   € Ü×,Ñ,¨X¸BÔ?ˆÜ×)Ñ)¨)¸5¸'ÔBˆä˜ $˜¬Z×-AÑ-AÔBˆØ×ÑØ+1Ö2 %ŒT�%—*‘*ÕÒ2ØˆW�bˆMô	
ô
 ˜˜w˜¬Z×-AÑ-AÔBˆØ×ÑØ+1Ö2 %ŒT�%—*‘*ÕÒ2ØˆW�bˆMõ	
ùò 3ùò 3s   ÁCÂ/Cc                 ó  — t        j                  dg d¬«      }t        j                  dg d¬«      }t        j                  d¬«      }t        ||g|¬«      }| j	                  ||«       t        ||g|¬«      }| j	                  ||«       y )Nro   Úa©rr   r&   rs   Úb)Úweakrt   ©r   rv   Úby_relevancerw   ry   )r   r†   Únormalr   r|   s        r   Ú%test_weak_keywords_are_lower_priorityz5TestByRelevance.test_weak_keywords_are_lower_priorityi  sv   € Ü×)Ñ)¨(¸ÀsÔKˆÜ×+Ñ+¨I¸BÈ#ÔNˆä×,Ñ,°#Ô6ˆ
ä�T˜6�N¨
Ô3ˆØ�‰�e˜VÔ$ä�V˜T�N¨
Ô3ˆØ�‰�e˜VÕ$r   c                 óJ  — t        j                  dg d¬«      }t        j                  dg d¬«      }t        j                  dg d¬«      }t        j                  dd¬«      }t        |||g|¬	«      }| j	                  ||«       t        |||g|¬	«      }| j	                  ||«       y )
Nro   rƒ   r„   rs   r…   zOh fine!Úc)r†   Ústrongrt   r‡   )r   r†   r‰   r�   r   r|   s         r   Ú(test_strong_keywords_are_higher_priorityz8TestByRelevance.test_strong_keywords_are_higher_priorityu  s’   € Ü×)Ñ)¨(¸ÀsÔKˆÜ×+Ñ+¨I¸BÈ#ÔNˆÜ×+Ñ+¨J¸RÈ3ÔOˆä×,Ñ,°#¸cÔBˆ
ä�T˜6 6Ð*°
Ô;ˆØ�‰�e˜VÔ$ä�V˜V TÐ*°
Ô;ˆØ�‰�e˜VÕ$r   N)rh   ri   rj   r}   r�   rŠ   rŽ   rk   r   r   rm   rm   O  s   „ ò&ò
ò 
%ó%r   rm   c                   óZ   — 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y)ÚTestErrorTreec                 óÊ   — t        d«      D �cg c]  }t        j                  d|¬«      ‘Œ }}t        j                  |«      }| j	                  |j
                  d«       y c c}w )Né   Ú	Something©r&   )Úranger   rv   Ú	ErrorTreer   Útotal_errors)r   Úir   Útrees       r   Ú/test_it_knows_how_many_total_errors_it_containsz=TestErrorTree.test_it_knows_how_many_total_errors_it_contains„  s_   € ô ˜1“Xö
àô ×&Ñ& {¸aÖ@ð
ˆð 
ô ×#Ñ# FÓ+ˆØ×Ñ˜×*Ñ*¨AÕ.ùò
s   ŽA c                 ó„   — t        j                  ddg¬«      g}t        j                  |«      }| j                  d|«       y )Nú	a messager    rq   )r   rv   r–   ÚassertIn©r   r   r™   s      r   Ú1test_it_contains_an_item_if_the_item_had_an_errorz?TestErrorTree.test_it_contains_an_item_if_the_item_had_an_error�  s7   € Ü×,Ñ,¨[À¸wÔGÐHˆÜ×#Ñ# FÓ+ˆØ�‰�e˜TÕ"r   c                 ó„   — t        j                  ddg¬«      g}t        j                  |«      }| j                  d|«       y )Nrœ   r    rq   r   )r   rv   r–   ÚassertNotInrž   s      r   Ú9test_it_does_not_contain_an_item_if_the_item_had_no_errorzGTestErrorTree.test_it_does_not_contain_an_item_if_the_item_had_no_error’  s9   € Ü×,Ñ,¨[À¸wÔGÐHˆÜ×#Ñ# FÓ+ˆØ×Ñ˜ Õ%r   c                 óš   — t        j                  dd¬«      }t        j                  |g«      }| j                  |j                  d|i«       y )Nrœ   r   r”   ©r   rv   r–   r   r   ©r   r€   r™   s      r   Ú/test_keywords_that_failed_appear_in_errors_dictz=TestErrorTree.test_keywords_that_failed_appear_in_errors_dict—  s>   € Ü×*Ñ*¨;À%ÔHˆÜ×#Ñ# U GÓ,ˆØ×Ñ˜Ÿ™ u¨e nÕ5r   c                 óä   — t        j                  ddg¬«      t        j                  dddg¬«      g}t        j                  |«      }| j                  d|d   «       | j	                  d|d   «       y )Nza bar messager    rq   za bar -> 0 messager   é   )r   rv   r–   r�   r¡   rž   s      r   Ú1test_it_creates_a_child_tree_for_each_nested_pathz?TestErrorTree.test_it_creates_a_child_tree_for_each_nested_pathœ  sh   € ä×&Ñ& ¸e¸WÔEÜ×&Ñ&Ð';À5È!À*ÔMð
ˆô ×#Ñ# FÓ+ˆØ�‰�a˜˜e™Ô%Ø×Ñ˜˜D ™KÕ(r   c                 óä   — t        j                  ddddg¬«      t        j                  ddddg¬«      }}t        j                  ||g«      }| j                  |d   d   j                  ||dœ«       y )	NÚ1r   r    r   )r&   rr   Ú2Úquux)r   r­   r¤   ©r   Úe1Úe2r™   s       r   Ú+test_children_have_their_errors_dicts_builtz9TestErrorTree.test_children_have_their_errors_dicts_built¥  sn   € ä×&Ñ& s°eÀ5È!À*ÔMÜ×&Ñ& s°fÀEÈ1À:ÔNð ˆô ×#Ñ# R¨ HÓ-ˆØ×Ñ˜˜e™ Q™×.Ñ.¸ÀBÑ0GÕHr   c                 óž   — t        j                  ddddgd¬«      t        j                  ddd	d
gd¬«      }}t        j                  ||g«       y ©Nr«   r   r    Úbar2Úi1©r&   rr   r   r¬   r­   Úfoobarr   Úi2)r   rv   r–   )r   r¯   r°   s      r   Ú"test_multiple_errors_with_instancez0TestErrorTree.test_multiple_errors_with_instance­  s[   € ä×&Ñ&ØØØ˜V�_Øô	ô
 ×&Ñ&ØØ Ø �]Øô	ð ˆô 	×Ñ˜b "˜XÕ&r   c                 ó¾   — t        j                  ddg ¬«      }t        j                  |g«      }| j                  t        «      5  |d    d d d «       y # 1 sw Y   y xY w)NÚ123r   )r&   r   r   )r   rv   r–   ÚassertRaisesÚ
IndexErrorr¥   s      r   Ú>test_it_does_not_contain_subtrees_that_are_not_in_the_instancezLTestErrorTree.test_it_does_not_contain_subtrees_that_are_not_in_the_instance¼  sR   € Ü×*Ñ*¨5¸EÈBÔOˆÜ×#Ñ# U GÓ,ˆà×ÑœzÓ*ñ 	Ø�ŠG÷	÷ 	ñ 	ús   ÁAÁAc                 óª   — t        j                  ddi dg¬«      }t        j                  |g«      }| j                  |d   t         j                  «       y)zŒ
        If a keyword refers to a path that isn't in the instance, the
        tree still properly returns a subtree for that path.
        rœ   r   )r&   r   rr   N)r   rv   r–   ÚassertIsInstancer¥   s      r   Ú9test_if_its_in_the_tree_anyhow_it_does_not_raise_an_errorzGTestErrorTree.test_if_its_in_the_tree_anyhow_it_does_not_raise_an_errorÃ  sM   € ô ×*Ñ*Ø 5°2¸U¸Gô
ˆô ×#Ñ# U GÓ,ˆØ×Ñ˜d 5™k¬:×+?Ñ+?Õ@r   c                 óØ   — t        j                  ddddgd¬«      t        j                  ddd	d
gd¬«      }}t        j                  ||g«      }| j                  t	        |«      dd	h«       y r³   )r   rv   r–   r   Úsetr®   s       r   Ú	test_iterzTestErrorTree.test_iterÏ  sv   € ä×&Ñ&ØØØ˜V�_Øô	ô
 ×&Ñ&ØØ Ø �]Øô	ð ˆô ×#Ñ# R¨ HÓ-ˆØ×Ñœ˜T› U¨HÐ$5Õ6r   c                 óœ   — t        j                  ddddgd¬«      }t        j                  |g«      }| j                  t	        |«      d«       y )Nr«   r   r    r´   rµ   r¶   z<ErrorTree (1 total error)>©r   rv   r–   r   Úreprr¥   s      r   Útest_repr_singlezTestErrorTree.test_repr_singleß  sK   € Ü×*Ñ*ØØØ˜�Øô	
ˆô ×#Ñ# U GÓ,ˆØ×Ñœ˜d›Ð%BÕCr   c                 óÔ   — t        j                  ddddgd¬«      t        j                  ddd	d
gd¬«      }}t        j                  ||g«      }| j                  t	        |«      d«       y )Nr«   r   r    r´   rµ   r¶   r¬   r­   r·   r   r¸   z<ErrorTree (2 total errors)>rÆ   r®   s       r   Útest_repr_multiplez TestErrorTree.test_repr_multipleé  sr   € ä×&Ñ&ØØØ˜V�_Øô	ô
 ×&Ñ&ØØ Ø �]Øô	ð ˆô ×#Ñ# R¨ HÓ-ˆØ×Ñœ˜d›Ð%CÕDr   c                 ód   — t        j                  g «      }| j                  t        |«      d«       y )Nz<ErrorTree (0 total errors)>)r   r–   r   rÇ   )r   r™   s     r   Útest_repr_emptyzTestErrorTree.test_repr_emptyù  s'   € Ü×#Ñ# BÓ'ˆØ×Ñœ˜d›Ð%CÕDr   N)rh   ri   rj   rš   rŸ   r¢   r¦   r©   r±   r¹   r¾   rÁ   rÄ   rÈ   rÊ   rÌ   rk   r   r   r�   r�   ƒ  sH   „ ò/ò#ò
&ò
6ò
)òIò'òò
Aò7ò DòEó Er   r�   c                   óN   — 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y)ÚTestErrorInitReprStrc                 ór   — t        ddddddi¬«      }|j                  |«       t        j                  di |¤ŽS )NÚhellor!   r*   é   )Úmessager&   r3   r   r   rk   )ÚdictÚupdater   rv   )r   ÚkwargsÚdefaultss      r   Ú
make_errorzTestErrorInitReprStr.make_errorÿ  sB   € ÜØØØ$ØØ˜HÐ%ô
ˆð 	�‰˜ÔÜ×)Ñ)Ñ5¨HÑ5Ð5r   c                 ó  — t        j                  |«      j                  d«      } | j                  di |¤Ž}t	        |«      j                  d«      \  }}}| j                  ||j                  «       | j                  ||«       y )Nú
rk   )ÚtextwrapÚdedentÚrstripr×   ÚstrÚ	partitionr   rÒ   )r   ÚexpectedrÕ   r€   Úmessage_lineÚ_Úrests          r   ÚassertShowsz TestErrorInitReprStr.assertShows
  sm   € Ü—?‘? 8Ó,×3Ñ3°DÓ9ˆà�—‘Ñ) &Ñ)ˆÜ # E£
× 4Ñ 4°TÓ :Ñˆ�a˜Ø×Ñ˜ u§}¡}Ô5Ø×Ñ˜˜xÕ(r   c                 ón   — | j                  «       }| j                  t        |j                  «      d«       y )Nr¨   )r×   ÚassertGreaterÚlenÚargs)r   r€   s     r   Ú!test_it_calls_super_and_sets_argsz6TestErrorInitReprStr.test_it_calls_super_and_sets_args  s&   € Ø—‘Ó!ˆØ×Ñœ3˜uŸz™z›?¨AÕ.r   c                 ób   — | j                  t        t        j                  d¬«      «      d«       y )NzHello!©rÒ   z<ValidationError: 'Hello!'>)r   rÇ   r   rv   ©r   s    r   Ú	test_reprzTestErrorInitReprStr.test_repr  s&   € Ø×ÑÜ”×+Ñ+°HÔ=Ó>Ø)õ	
r   c                 ó   — t        j                  d«      }| j                  t        |«      d«       dddddidœ}|D ]@  }t	        |«      }||= t        j                  di |¤Ž}| j                  t        |«      d«       ŒB y )NrÒ   r!   r*   rÑ   )r&   r3   r   r   rê   )r   rv   r   rÝ   rÓ   )r   r€   rÕ   ÚattrÚks        r   Útest_unset_errorz%TestErrorInitReprStr.test_unset_error  sˆ   € Ü×*Ñ*¨9Ó5ˆØ×Ñœ˜U› YÔ/ð  Ø'ØØ˜xÐ(ñ	
ˆð ò 	4ˆDÜ�V“ˆAØ�$�Ü×.Ñ.Ñ>¸AÑ>ˆEØ×ÑœS ›Z¨Õ3ñ		4r   c                 ó,   — | j                  dg g ¬«       y )NzŒ
            Failed validating 'type' in schema:
                {'type': 'string'}

            On instance:
                5
            ©rr   Úschema_path©rã   rë   s    r   Útest_empty_pathsz%TestErrorInitReprStr.test_empty_paths-  s"   € Ø×Ñðð Øð 	õ 
	
r   c                 ó0   — | j                  ddgdg¬«       y )Nz�
            Failed validating 'type' in schema:
                {'type': 'string'}

            On instance[0]:
                5
            r   r>   rò   rô   rë   s    r   Útest_one_item_pathsz(TestErrorInitReprStr.test_one_item_paths:  s&   € Ø×Ñðð �Ø ˜	ð 	õ 
	
r   c                 ó4   — | j                  dddgg d¢¬«       y )Nz 
            Failed validating 'type' in schema['items'][0]:
                {'type': 'string'}

            On instance[0]['a']:
                5
            r   rƒ   )r>   r   r¨   rò   rô   rë   s    r   Útest_multiple_item_pathsz-TestErrorInitReprStr.test_multiple_item_pathsG  s&   € Ø×Ñðð �S�Ú'ð 	õ 
	
r   c                 óœ   — | j                  dt        t        d«      «      t        t	        t        d«      t        d«      «      «      d¬«       y )Na?  
            Failed validating '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]
            é   é   Ú	maxLength)r   r   r&   )rã   r   r•   rÓ   Úziprë   s    r   Útest_uses_pprintz%TestErrorInitReprStr.test_uses_pprintT  sC   € Ø×Ñð1ôd œ% ›)“_ÜœœE "›I¤u¨R£yÓ1Ó2Ø!ðk 	õ 6	
r   c           	      ó@   — | j                  ddddddœdddddœ¬«       y )	NzÐ
            Failed validating 'type' in schema:
                {'do': 3, 'not': 7, 'sort': 37, 'me': 73}

            On instance:
                {'here': 73, 'too': 37, 'no': 7, 'sorting': 3}
            é   é   r@   éI   )ÚdoÚnotÚsortÚme)ÚhereÚtooÚnoÚsorting)r   r   rô   rë   s    r   Útest_does_not_reorder_dictsz0TestErrorInitReprStr.test_does_not_reorder_dicts�  s@   € Ø×Ñðð ØØØñ	ð ØØØñ	ð 	õ 	
r   c                 ó¨   ‡ —  G ˆ fd„d«      } |«       }t        j                  dd|dd¬«      }‰ j                  t        |«      t	        |«      «       y)	z´
        Check for #164 which rendered exceptions unusable when a
        `ValidationError` involved instances with an `__eq__` method
        that returned truthy values.
        c                   ó"   •— e Zd Zˆ fd„Zˆ fd„Zy)údTestErrorInitReprStr.test_str_works_with_instances_having_overriden_eq_operator.<locals>.DontEQMeBroc                 ó(   •— ‰j                  d«       y ©NzDon't!©Úfail©ÚthisÚotherr   s     €r   Ú__eq__zkTestErrorInitReprStr.test_str_works_with_instances_having_overriden_eq_operator.<locals>.DontEQMeBro.__eq__¬  ó   ø€ Ø—	‘	˜(Õ#r   c                 ó(   •— ‰j                  d«       y r  r  r  s     €r   Ú__ne__zkTestErrorInitReprStr.test_str_works_with_instances_having_overriden_eq_operator.<locals>.DontEQMeBro.__ne__¯  r  r   N)rh   ri   rj   r  r  rë   s   €r   ÚDontEQMeBror  «  s   ø„ ô$õ$r   r  rœ   r   Úsomer   )r&   r   r3   r   N)r   rv   r�   rÇ   rÝ   )r   r  r   r€   s   `   r   Ú:test_str_works_with_instances_having_overriden_eq_operatorzOTestErrorInitReprStr.test_str_works_with_instances_having_overriden_eq_operator¤  sM   ø€ ÷	$ó 	$ñ “=ˆÜ×*Ñ*ØØØØ"Øô
ˆð 	�‰”d˜8“n¤c¨%£jÕ1r   N)rh   ri   rj   r×   rã   rè   rì   rð   rõ   r÷   rù   rÿ   r  r  rk   r   r   rÎ   rÎ   þ  s:   „ ò	6ò)ò/ò
ò4ò"
ò
ò
ò7
òr
ó.2r   rÎ   c                   ó   — e Zd Zd„ Zy)ÚTestHashablec                 ó\   — t        j                  d«      h t        j                  d«      h y )NÚ )r   rv   ÚSchemaErrorrë   s    r   Útest_hashablezTestHashable.test_hashable¾  s$   € Ü	×	#Ñ	# BÓ	'Ñ(Ü	×	Ñ	 Ó	#Ò$r   N)rh   ri   rj   r#  rk   r   r   r  r  ½  s   „ ó%r   r  c                   ó`   — 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d„ Zy)ÚTestJsonPathRenderingc                 óð   — t        j                  |gddd¬«      }|j                  }| j                  ||«       t	        j
                  |«      j                  j                  d   }| j                  ||«       y )Nr«   r   rµ   )rr   rÒ   r&   r   r   )r   rv   Ú	json_pathr   Újsonpath_ngÚparseÚrightÚfields)r   Úproperty_nameÚexpected_pathr€   Úrendered_json_pathÚre_parsed_names         r   Úvalidate_json_path_renderingz2TestJsonPathRendering.validate_json_path_renderingÄ  so   € Ü×*Ñ*Ø�ØØØô	
ˆð #Ÿ_™_ÐØ×ÑÐ+¨]Ô;ä$×*Ñ*Ð+=Ó>×DÑD×KÑKÈAÑNˆØ×Ñ˜¨Õ7r   c                 ó(   — | j                  dd«       y )NÚxz$.x©r0  rë   s    r   Ú
test_basicz TestJsonPathRendering.test_basicÒ  s   € Ø×)Ñ)¨#¨uÕ5r   c                 ó(   — | j                  dd«       y )Nr!  z$['']r3  rë   s    r   Ú
test_emptyz TestJsonPathRendering.test_emptyÕ  s   € Ø×)Ñ)¨"¨gÕ6r   c                 ó(   — | j                  dd«       y )Nr«   z$['1']r3  rë   s    r   Útest_numberz!TestJsonPathRendering.test_numberØ  ó   € Ø×)Ñ)¨#¨xÕ8r   c                 ó(   — | j                  dd«       y )Nú.z$['.']r3  rë   s    r   Útest_periodz!TestJsonPathRendering.test_periodÛ  r9  r   c                 ó(   — | j                  dd«       y )Nú'z$['\'']r3  rë   s    r   Útest_single_quotez'TestJsonPathRendering.test_single_quoteÞ  s   € Ø×)Ñ)¨#¨zÕ:r   c                 ó(   — | j                  dd«       y )Nú z$[' ']r3  rë   s    r   Ú
test_spacez TestJsonPathRendering.test_spaceá  r9  r   c                 ó(   — | j                  dd«       y )Nú\z$['\\']r3  rë   s    r   Útest_backslashz$TestJsonPathRendering.test_backslashä  s   € Ø×)Ñ)¨$°
Õ;r   c                 ó(   — | j                  dd«       y )Nz\'z	$['\\\'']r3  rë   s    r   Útest_backslash_single_quotez1TestJsonPathRendering.test_backslash_single_quoteç  s   € Ø×)Ñ)¨%°Õ>r   c                 ó(   — | j                  dd«       y )Nrá   z$['_']r3  rë   s    r   Útest_underscorez%TestJsonPathRendering.test_underscoreê  s   € Ø×)Ñ)¨#¨yÕ9r   c                 ó(   — | j                  dd«       y )Nú"z$['"']r3  rë   s    r   Útest_double_quotez'TestJsonPathRendering.test_double_quoteí  s   € Ø×)Ñ)¨#¨|Õ<r   c                 ó(   — | j                  dd«       y )Nú-z$['-']r3  rë   s    r   Útest_hyphenz!TestJsonPathRendering.test_hyphenð  r9  r   c                 ó(   — | j                  dd«       y )Nza[0]z	$['a[0]']r3  rë   s    r   Útest_json_path_injectionz.TestJsonPathRendering.test_json_path_injectionó  s   € Ø×)Ñ)¨&°+Õ>r   c                 ó(   — | j                  dd«       y )Nú[z$['[']r3  rë   s    r   Útest_open_bracketz'TestJsonPathRendering.test_open_bracketö  r9  r   N)rh   ri   rj   r0  r4  r6  r8  r<  r?  rB  rE  rG  rI  rL  rO  rQ  rT  rk   r   r   r%  r%  Ã  sH   „ ò8ò6ò7ò9ò9ò;ò9ò<ò?ò:ò=ò9ò?ó9r   r%  )Úunittestr   rÚ   r(  Ú
jsonschemar   Újsonschema.validatorsr   r   rm   r�   rÎ   r  r%  rk   r   r   ú<module>rX     sj   ðÝ Û ã å !Ý 1ôBL�Hô BLôJ
1%�hô 1%ôhxE�Hô xEôv|2˜8ô |2ô~%�8ô %ô49˜Hõ 49r   