3 ]%@sdZddlmZddlmZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z yddl m Z Wnek rdZ YnXddlmZmZmZmZmZmZmZmZmZddlmZddlmZmZddlZe jje jj ej!e jj"Z#e j$d e jje#d Z%e jj&e%se'd e jje%d Z(e jje%d dZ)e j*e j+e)dge j,dj-Z.ee. erpej/e.Z.ej0e.Z1WdQRXddZ2ddZ3de(dfddZ4Gddde5Z6Gddde5Z7ddZ8Gddde5Z9e j:d=krd#d$Z;nd%d$Z;e4d&e;d'd(e4d)e8ed*e4d+e4d,Gd-d.d.ejGd6d7d7e5Z?e4d'Gd8d9d9e?ej<Z@e4d0Gd:d;d;e?ej<ZAdS)>z Test runner for the JSON Schema official test suite Tests comprehensive correctness of each draft's validator. See https://github.com/json-schema/JSON-Schema-Test-Suite for details. )closing)DecimalN)pypy_version_info) FormatError SchemaErrorValidationErrorDraft3ValidatorDraft4Validator FormatCheckerdraft3_format_checkerdraft4_format_checkervalidate)PY3)mockunittestZJSON_SCHEMA_TEST_SUITEjsonzCan't find the JSON-Schema-Test-Suite directory. Set the 'JSON_SCHEMA_TEST_SUITE' environment variable or run the tests from alongside a checkout of the suite.testsbinZjsonschema_suiteZremotes)stdoutcs:|rfdd}nfdd}ts0|jd}||_|S)Ncs(t|di}tfd|ji|dS)Nvalidator_kwargscls)getattrr validator_class)selfkwargs)dataschema0/usr/lib/python3.6/test_jsonschema_test_suite.py test_case=s zmake_case..test_casec s>t|di}|jttfd|ji|WdQRXdS)Nrr)r assertRaisesrr r)rr)rrrrrAs  zutf-8)rencode__name__)rrvalidnamerr)rrr make_case;s r%cCs,|dk r(|||}|dk r(tj||}|S)N)rskip)r&rcasetestreasonrrr maybe_skipMs  r*cs(rtjjfdd}|S)Nc sttj}xtjtjjD]}||kr2q$tjjtjj|\}}tj d}t |}xzt j |D]l}xf|dD]Z}d|t |tjdd|df} t|d|d|d | d } t| ||} t|| | qxWqjWWdQRXq$W|S) Nrz test_%s_%s_%sz[\W ]+_ descriptionrrr#)rrr#r$)setglobZiglobospathjoinsplitextbasename itertoolscountopenrloadnextresubr%r*setattr) Z test_classZignoredfilenameZ validatingr-idZ test_filer'r(r$r)basedir ignore_globr& tests_globrradd_test_methodsYs*  "z)load_json_cases..add_test_methods)r1r2r3)rBrAr@r&rCr)r@rAr&rBrload_json_casesUsrDc@s eZdZejedddZdS) TypesMixinz-In Python 3 json.load always produces unicodecCs|jddijddS)Ntypestringsfoo)rr )rrrr$test_string_a_bytestring_is_a_string{sz/TypesMixin.test_string_a_bytestring_is_a_stringN)r" __module__ __qualname__rZskipIfrrHrrrrrEzsrEc@seZdZddZdS) DecimalMixinc Csddi}|j|dtttfid}x(ddtdtdgD]}|j|q8Wx6digddgD]$}|jt|j|WdQRXqZWdS) NrFZnumber)typesr,g?fooT)rintfloatrr r r)rr validatorr#Zinvalidrrr"test_it_can_validate_with_decimalss z/DecimalMixin.test_it_can_validate_with_decimalsN)r"rIrJrRrrrrrKsrKcsfdd}|S)NcsJ|djd}|jkr"dj|S|dkrFtdk rFtddd krFdSdS) NrformatzFormat checker {0!r} not found.z date-timer, z4datetime.datetime is broken on this version of PyPy.)r,rU)getZcheckersrSr)r'r(rS)checkerrrmissing_formats  z&missing_format..missing_formatr)rWrXr)rWrrXs rXc@s,eZdZddZddZddZddZd S) FormatMixincCs"|jdditd}|jddS)NrSZcarrot)format_checkerZbugs)rr r )rrQrrr7test_it_returns_true_for_formats_it_does_not_know_aboutszCFormatMixin.test_it_returns_true_for_formats_it_does_not_know_aboutcCs|ji}|j|jdS)N)rZ assertIsNonerZ)rrQrrr,test_it_does_not_validate_formats_by_defaults z8FormatMixin.test_it_does_not_validate_formats_by_defaultc Cstjtd}|jddi|d}|jd|jjddt}td|d|j_ |j t }|jdWdQRX|j |j j|dS)N)specrSrN)rZZbaraoeu)cause)rMockr rr checkassert_called_once_with ValueErrorr side_effectr rassertIs exceptionr_)rrWrQr_cmrrr2test_it_validates_formats_if_a_checker_is_provideds   z>FormatMixin.test_it_validates_formats_if_a_checker_is_providedc Cstjtd}|jddi|d}|jdddg|jjdddgdt}td|d |j_ |j t }|jdddgWdQRX|j |j j|dS) N)r]rSrN)rZr,rTr^)r_)rr`r rr rarbrcrrdr rrerfr_)rrWrQr_rgrrr%test_it_validates_formats_of_any_types  z1FormatMixin.test_it_validates_formats_of_any_typeN)r"rIrJr[r\rhrjrrrrrYsrYrTr,cCsd|dkrdSdS)Nzsupplementary Unicoder.z:Not running surrogate Unicode case, this Python is narrow.r)r'r(rrrnarrow_unicode_builds rlcCsdS)Nr)r'r(rrrrlsz draft3/*.jsonzdraft3/refRemote.json)r&rAzdraft3/optional/format.json)r&zdraft3/optional/bignum.jsonz)draft3/optional/zeroTerminatedFloats.jsonc@s0eZdZeZdeiZddZddZddZ dS) TestDraft3rZcCs |jddi}|jtjdS)NrFany)rr rr`)rrQrrr#test_any_type_is_valid_for_type_anysz.TestDraft3.test_any_type_is_valid_for_type_anyc Cs2|jttidddii|jdWdQRXdS)N propertiesr(T)r)r rr r)rrrrtest_invalid_propertiess z"TestDraft3.test_invalid_propertiesc Cs0|jttdgddi|jdWdQRXdS)Nr,minItems1)r)r rr r)rrrrtest_minItems_invalid_strings z'TestDraft3.test_minItems_invalid_stringN) r"rIrJrrr rrorqrtrrrrrms  rmz draft4/*.jsonzdraft4/refRemote.jsonzdraft4/optional/format.jsonzdraft4/optional/bignum.jsonz)draft4/optional/zeroTerminatedFloats.jsonc@s(eZdZeZdeiZddZddZdS) TestDraft4rZc Cs2|jttidddii|jdWdQRXdS)Nrpr(T)r)r rr r)rrrrrqs z"TestDraft4.test_invalid_propertiesc Cs0|jttdgddi|jdWdQRXdS)Nr,rrrs)r)r rr r)rrrrrt s z'TestDraft4.test_minItems_invalid_stringN) r"rIrJr rr rrqrtrrrrrus ruc@seZdZddZddZdS)RemoteRefResolutionMixincCs,tjd}|j}|j|j_|j|jdS)Nzjsonschema.validators.requests)rpatchstartresolverVrdZ addCleanupstop)rrwZrequestsrrrsetUps  zRemoteRefResolutionMixin.setUpcCs&|jd\}}}tjfdtj|iS)Nzhttp://localhost:1234/zjson.return_value) partitionrr`REMOTESrV)rZ referencer-rrrrysz RemoteRefResolutionMixin.resolveN)r"rIrJr{ryrrrrrvsrvc@seZdZeZdS)Draft3RemoteResolutionN)r"rIrJrrrrrrr~sr~c@seZdZeZdS)Draft4RemoteResolutionN)r"rIrJr rrrrrr srii)B__doc__ contextlibrZdecimalrr0rior6r1r; subprocesssysr ImportErrorZ jsonschemarrrrr r r r r Zjsonschema.compatrZjsonschema.tests.compatrrr2r3dirname__file__pardirZ REPO_ROOTgetenvZSUITEisdirrcZ TESTS_DIRZJSONSCHEMA_SUITEPopen executablePIPErZremotes_stdout TextIOWrapperr9r}r%r*rDobjectrErKrXrY maxunicoderlZTestCasermrurvr~rrrrrs   ,   %0