a dæhƒã@sHddlZddlmZGdd„dƒZGdd„dejƒZedkrDe ¡dS)éN)Úmockc@seZdZdd„Zdd„ZdS)Ú SampleObjectcCsdS©N©©ÚselfrrúD/opt/imh-python/lib/python3.9/unittest/test/testmock/testsealable.pyÚmethod_sample1ózSampleObject.method_sample1cCsdSrrrrrrÚmethod_sample2 r zSampleObject.method_sample2N)Ú__name__Ú __module__Ú __qualname__r r rrrrrsrc@sœeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%S)&Ú TestSealablecCsDt ¡}| |jtj¡| | ¡tj¡| | ¡ ¡tj¡dSr)rÚMockZassertIsInstanceÚtestÚtest2©rÚmrrrÚ,test_attributes_return_more_mocks_by_defaultsz9TestSealable.test_attributes_return_more_mocks_by_defaultcCsvt ¡}t |¡| t¡|jWdƒn1s80Y| t¡|ƒWdƒn1sh0YdSr©rrÚsealÚ assertRaisesÚAttributeErrorrrrrrÚ.test_new_attributes_cannot_be_accessed_on_seals   $ z;TestSealable.test_new_attributes_cannot_be_accessed_on_sealcCsFt ¡}t |¡| t¡d|_Wdƒn1s80YdS©NérrrrrÚ)test_new_attributes_cannot_be_set_on_seals  z6TestSealable.test_new_attributes_cannot_be_set_on_sealcCs6t ¡}d|j_t |¡d|j_| |jjd¡dS)Nré)rrrrrÚ assertEqualrrrrÚ+test_existing_attributes_can_be_set_on_seal%s  z8TestSealable.test_existing_attributes_can_be_set_on_sealcCsPt ¡}d|j_t |¡| t¡d|j_Wdƒn1sB0YdSr)rrrrrrrÚtest3rrrrÚ2test_new_attributes_cannot_be_set_on_child_of_seal-s   z?TestSealable.test_new_attributes_cannot_be_set_on_child_of_sealcCs.t ¡}d|j_t |¡| | ¡d¡dS)Né)rrrÚ return_valuerrrrrrÚ+test_existing_attributes_allowed_after_seal5s z8TestSealable.test_existing_attributes_allowed_after_sealcCs(tjdd}t |¡| |jd¡dS)Nr)Ú test_value)rrrrr&rrrrÚ.test_initialized_attributes_allowed_after_seal=s  z;TestSealable.test_initialized_attributes_allowed_after_sealcCsFt ¡}t |¡| t¡|ƒWdƒn1s80YdSr)rrrrrrrrrÚtest_call_on_sealed_mock_failsCs  z+TestSealable.test_call_on_sealed_mock_failscCs(tjdd}t |¡| |ƒd¡dS)Né)r$)rrrrrrrrÚ)test_call_on_defined_sealed_mock_succeedsJs  z6TestSealable.test_call_on_defined_sealed_mock_succeedscCsžt ¡}d|j ¡_t |¡| |j ¡jd¡| t¡|j ¡j Wdƒn1s^0Y| t¡|jjWdƒn1s0YdS)Né) rrÚtest1rr!rrrrÚtest4rrrrÚ&test_seals_recurse_on_added_attributesPs   * z3TestSealable.test_seals_recurse_on_added_attributescCsÚt ¡}d|jjd_d|jjdd…_t |¡| |jjdjd¡| |jjdd…jd¡| t¡|jjdj Wdƒn1s0Y| t¡"|jjdd…j Wdƒn1sÌ0YdS)Nr+Úarr)) rZ MagicMockr,rr!rrrrr-rrrrÚ#test_seals_recurse_on_magic_methods\s  , z0TestSealable.test_seals_recurse_on_magic_methodscCsZtjdd}tjdd|j_d|jj_t |¡| |jjjd¡|jjjd|jj_dS)NZ root_mock©ÚnameZ not_sealedr+r)rrr,rr!rrr-rrrrÚ,test_seals_dont_recurse_on_manual_attributesjs    z9TestSealable.test_seals_dont_recurse_on_manual_attributescCspt t¡}d|_d|_t |¡| |jd¡| |jd¡| t¡|j Wdƒn1sb0YdS)z0You are not restricted when using mock with specrr#N) rrrZ attr_sample1Z attr_sample3rrrrZ attr_sample2rrrrÚ)test_integration_with_spec_att_definitionus   z6TestSealable.test_integration_with_spec_att_definitioncCsbt t¡}d|j_t |¡| | ¡d¡| t¡|  ¡Wdƒn1sT0YdS)z;You need to defin the methods, even if they are in the specrN) rrrr r$rrrrr rrrrÚ,test_integration_with_spec_method_definition‚s    z9TestSealable.test_integration_with_spec_method_definitioncCs@t t¡}| t¡d|j_Wdƒn1s20YdS)z)You cannot define methods out of the specr#N)rrrrrZmethod_sample3r$rrrrÚ:test_integration_with_spec_method_definition_respects_specs  zGTestSealable.test_integration_with_spec_method_definition_respects_speccCsXt ¡}t |¡| t¡}|jWdƒn1s80Y| dt|jƒ¡dS)NÚ SECRETE_name) rrrrrr7ÚassertInÚstrÚ exception©rrÚcmrrrÚ(test_sealed_exception_has_attribute_name”s   $z5TestSealable.test_sealed_exception_has_attribute_namecCsptjdd}|jjjjt |¡| t¡}|jjjjj Wdƒn1sP0Y|  dt |j ƒ¡dS)NZ mock_namer1z&mock_name.test1.test2.test3.test4.boom) rrr,rr!r-rrrZboomr8r9r:r;rrrÚ"test_attribute_chain_is_maintainedœs     ,z/TestSealable.test_attribute_chain_is_maintainedcCstt ¡}| ¡j ¡jt |¡| t¡"}| ¡j ¡ ¡Wdƒn1sT0Y|  dt |j ƒ¡dS)Nz mock.test1().test2.test3().test4) rrr,rr!r-rrrr8r9r:r;rrrÚtest_call_chain_is_maintained¥s   0z*TestSealable.test_call_chain_is_maintainedN)r r rrrrr r"r%r'r(r*r.r0r3r4r5r6r=r>r?rrrrr s$      rÚ__main__)ZunittestrrZTestCaserr ÚmainrrrrÚs  $