U .‘cƒã@sHddlZddlmZGdd„dƒZGdd„dejƒZedkrDe ¡dS)éN)Úmockc@seZdZdd„Zdd„ZdS)Ú SampleObjectcCsdS©N©©ÚselfrrúH/opt/alt/python38/lib64/python3.8/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_defaultc CsNt ¡}t |¡| t¡ |jW5QRX| t¡ |ƒW5QRXdSr©rrÚsealÚ assertRaisesÚAttributeErrorrrrrrÚ.test_new_attributes_cannot_be_accessed_on_seals    z;TestSealable.test_new_attributes_cannot_be_accessed_on_sealc Cs2t ¡}t |¡| t¡ d|_W5QRXdS©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_sealc Cs<t ¡}d|j_t |¡| t¡d|j_W5QRXdSr)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_sealc Cs2t ¡}t |¡| t¡ |ƒW5QRXdSr)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_succeedsc Csvt ¡}d|j ¡_t |¡| |j ¡jd¡| t¡|j ¡j W5QRX| t¡|jjW5QRXdS)Né) rrÚtest1rr!rrrrÚtest4rrrrÚ&test_seals_recurse_on_added_attributesPs    z3TestSealable.test_seals_recurse_on_added_attributesc Cs²t ¡}d|jjd_d|jjdd…_t |¡| |jjdjd¡| |jjdd…jd¡| t¡|jjdj W5QRX| t¡|jjdd…j W5QRXdS)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_attributesc Cs\t t¡}d|_d|_t |¡| |jd¡| |jd¡| t¡ |j W5QRXdS)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_definitionc CsNt t¡}d|j_t |¡| | ¡d¡| t¡|  ¡W5QRXdS)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_definitionc Cs,t t¡}| t¡d|j_W5QRXdS)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_specc CsDt ¡}t |¡| t¡ }|jW5QRX| 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_namec Cs\tjdd}|jjjjt |¡| t¡}|jjjjj W5QRX|  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_maintainedc Cs`t ¡}| ¡j ¡jt |¡| t¡}| ¡j ¡ ¡W5QRX|  dt |j ƒ¡dS)Nz mock.test1().test2.test3().test4) rrr,rr!r-rrrr8r9r:r;rrrÚtest_call_chain_is_maintained¥s   z*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  $