a 5źdguć@sØddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z m Z mZmZddlZddlZddlZddlZddlZddlmZmZmZz ddlZWneyŹdZYn0dZeeddƒZdZd d „Zd d „Z e ”Z!eee!e"eƒƒZ#d Z$dZ%dZ&ej' (d”Z)ej' (d”Z*ej+ ,e$d”Z-dZ.Gdd„dej/ƒZ0Gdd„de0ƒZ1e  2”Gdd„de1ƒƒZ3Gdd„dej/ƒZ4dd„Z5e6dkr¤e5ƒdS)éN)Śsupport)ŚZipFileŚZipInfoŚ ZIP_STOREDŚ ZIP_DEFLATED)Ś extract_tbŚ extract_stackŚprint_tbzHdef get_name(): return __name__ def get_file(): return __file__ śŚexecz def do_raise(): raise TypeError cCsdt |”}t|ƒtdƒur<|dkr,t|ƒ}ntdt|ƒƒ}tjjt ddt|ƒ|d@”|}|S)Ngi’’’lż’’’z„Z'd?d@„Z(dAdB„Z)dCdD„Z*dEdF„Z+dGdH„Z,e -e.j/dIudJ”dKdL„ƒZ0dMdN„Z1dOdP„Z2dQdR„Z3dSdT„Z4dIS)UŚUncompressedZipImportTestCasecCs t ”tj ”t |”dSr&)Ś linecacheŚ clearcacheŚ zipimportŚ_zip_directory_cacher+r%r/r-rrrr/Us z#UncompressedZipImportTestCase.setUpc Cs²| tj|”| ”D]–\}\}}tj ||”}|dtjkrVtj |”s¬t  |”qtj  |”}tj |”sxt  |”t |dƒ}|  |”Wdƒq1s¢0YqdS)Né’’’’Śwb) Ś addCleanuprŚrmtreeŚitemsrr!Śjoinr ŚisdirŚmakedirsŚdirnameŚopenŚwrite) r.ŚfilesZdirNameŚnamerrr!ZdnameŚfprrrŚmakeTree\s      z&UncompressedZipImportTestCase.makeTreec Ks| tj|”t|dƒd}| ”D]0\}\}}t|t |”ƒ}|j|_ |  ||”q"|  dd”} | durn| |_ Wdƒn1s‚0Y|  dd”} | durt |dƒ} |  ”}Wdƒn1sŹ0Yt |dƒ$} |  | ”|  |”Wdƒn1s 0YdS)NŚwŚcommentŚstuffŚrbr:)r;rŚunlinkrr=rŚtimeŚ localtimeŚ compressionŚ compress_typeŚwritestrŚgetrIrBŚreadrC) r.rDZzipNameŚkwŚzrErrŚzinforIrJŚfrrrŚmakeZipms   $   &  z%UncompressedZipImportTestCase.makeZipcOsz|j|fi|¤Žtj dt”t d |””}| d”}|durJ||ƒ|rv|  ”}|  |t jjtg|¢RŽ|”dS)NrrŚcall) rXr'r!ŚinsertŚTEMP_ZIPrŚ import_moduler>rRZget_fileŚ assertEqualr)r.Z expected_extrDŚmodulesrTŚmodrYŚfilerrrŚdoTest…s ’’z$UncompressedZipImportTestCase.doTestcCs„dtjvr| d”dtjvr&tjd=dttfi}z| d|d”Wn&tyj|jt krf|  d”Yn0|jt kr€|  d”dS)NŚzlibzzlib is a builtin modulezzlib.pyr#z&expected test to not raise ImportErrorz"expected test to raise ImportError) r'Śbuiltin_module_namesZskipTestr^ŚNOWŚtest_srcraŚ ImportErrorrOrŚfailr©r.rDrrrŚ testAFakeZlib•s       z+UncompressedZipImportTestCase.testAFakeZlibcCs"tdttfi}| d|t”dS©Nr#©ŚTESTMODrdrerarhrrrŚtestPyµsz$UncompressedZipImportTestCase.testPycCs"ttttfi}| t|t”dSr&)rlŚpyc_extrdŚtest_pycrarhrrrŚtestPyc¹sz%UncompressedZipImportTestCase.testPyccCs.tdttfttttfi}| t|t”dSrj)rlrdrernrorarhrrrŚtestBoth½s  ’z&UncompressedZipImportTestCase.testBothcsjd}tj |”}tj t|ddƒ|d”}tdtdftdtd|fi}‡fd d „}ˆjd|t|d dS) Nó state = 'old'ś???r Fr#ś state = 'new'r$écsˆ |jd”dS)NŚold©r]Śstate©r_r-rrŚcheckĢszFUncompressedZipImportTestCase.testUncheckedHashBasedPyc..check©rY© rrŚ source_hashŚ_bootstrap_externalŚ_code_to_hash_pycŚcompilerlrdra©r.Śsourcer}ŚbytecoderDrzrr-rŚtestUncheckedHashBasedPycĀs  ż ’ z7UncompressedZipImportTestCase.testUncheckedHashBasedPycz_imp.check_hash_based_pycsŚalwayscsjd}tj |”}tj t|ddƒ|d”}tdtdftdtd|fi}‡fd d „}ˆjd|t|d dS) Nrrrsr Fr#rtr$rucsˆ |jd”dS)NŚnewrwryr-rrrzŪszOUncompressedZipImportTestCase.test_checked_hash_based_change_pyc..checkr{r|rrr-rŚ"test_checked_hash_based_change_pycŠs  ż ’ z@UncompressedZipImportTestCase.test_checked_hash_based_change_pyccCs"tdtdfi}| d|t”dS)Nr#Ś)rlrdrarhrrrŚ testEmptyPyßsz)UncompressedZipImportTestCase.testEmptyPycCsFttƒ}|ddN<tdttfttt|fi}| d|t”dS)Nrér#©Ś bytearrayrorlrdrernra©r.Z badmagic_pycrDrrrŚ testBadMagicćs   ’z*UncompressedZipImportTestCase.testBadMagiccCs\ttƒ}|ddN<ttt|fi}z| d|t”WntyLYn 0| d”dS)NrrŠr#z)expected ImportError; import from bad pyc)rŒrorlrnrdrarfrgrrrrŚ testBadMagic2ės z+UncompressedZipImportTestCase.testBadMagic2cCsFttƒ}|ddN<tdttfttt|fi}| d|t”dS)Né ér#r‹)r.Z badtime_pycrDrrrŚ testBadMTime÷s   ’z*UncompressedZipImportTestCase.testBadMTimecCsBttj}|dtttf|ttttfi}| t|tt”dS©NŚ__init__)ŚTESTPACKrr rnrdrorlra)r.ŚpackdirrDrrrŚ testPackages  ’z)UncompressedZipImportTestCase.testPackagecCsbttj}|ttj}|dtttf|dtttf|ttttfi}| t|ttt”dSr“) r•rr Ś TESTPACK2rnrdrorlra©r.r–Śpackdir2rDrrrŚtestSubPackages žz,UncompressedZipImportTestCase.testSubPackagecCsRttj}|ttj}|tdf|tdf|ttttfi}| t|ttt”dS©Nrˆ) r•rr r˜rdrlrnrorar™rrrŚtestSubNamespacePackages žz5UncompressedZipImportTestCase.testSubNamespacePackagec CsRttj}|ttj}|tdtj}|tdf|ttttf|tdf|tdf|ttttf|tdtttf|ttttfi}|tdf|tdtttf|tdf|tdtttf|ttttfi}tj  d”}|  ||”t }|  ||”t j d|”t j d|”t t”}| dt|jƒ”|j\} } | tj t ”|  tj”d”| d|  tj”d”t | tjd”dd …”}| d t|jƒ”t|jƒd dtj”d } | |dd …| ”t d ttf””}| d|j tj”d ”t d ttdf””}| tj t ”|j tj”d ”d ttf”} t | ”}| dt|jƒ”|j\} } | tj t ”|  tj”d ”| d|  tj”d ”t d | tf””}| tj t ”|j tj”d ”t d | tdf””}| tj t ”|j tj”d ”t d | tdf””}| d|j tj”d ”dS) NŚ3rˆŚ2ś path1.ziprr‘éž’’’rr9ééż’’’éü’’’)r•rr r˜rdrlrnror!ŚabspathrXŚTEMP_DIRrGr'rZrr\r]ŚlenŚ__path__ŚbasenameŚsplitrŚlistr>Ś__file__) r.r–ršŚpackdir3Śfiles1Śfiles2Śzip1Śzip2r_Śp1Śp2ŚmpathŚsubpkgrrrŚtestMixedNamespacePackagesl śü      ’   ’’z7UncompressedZipImportTestCase.testMixedNamespacePackagec Cs2ttj}|ttj}|tdtj}|tdf|ttttf|tdf|tdf|ttttf|tdtttf|ttttfi}tj  d”}|  ||”|tdf|tdtttf|tdf|tdtttf|ttttfi}tj  d”}|  ||”t j  d|”t j  d|”t  t”}| dt|jƒ”|j\} } | d|  tj”d”| d|  tj”d”t  | tjd ”dd …”}| d t|jƒ”t|jƒd dtj”d } | |dd …| ”t  d  ttf””}| d|j tj”d ”t  d  ttdf””}| d|j tj”d ”d  ttf”} t  | ”}| dt|jƒ”|j\} } | d|  tj”d ”| d|  tj”d ”t  d  | tf””}| d|j tj”d ”t  d  | tdf””}| d|j tj”d ”t  d  | tdf””}| d|j tj”d ”dS)Nržrˆr rŸz path2.ziprr‘r”rr9r¢r£r¤)r•rr r˜rdrlrnror!r„rXr'rZrr\r]r§rØrŖrr«r>r¬) r.r–ršr­r®r°rÆr±r_r²r³r“rµrrrŚtestNamespacePackagehs` ś  ü      z2UncompressedZipImportTestCase.testNamespacePackagec Csœttj}|ttj}|dtttf|dtttf|ttttfdtttfi}| t j t ”t t dƒP}|  ”D]6\}\}}t|t |”ƒ}|j|_d|_| ||”qzWdƒn1sĘ0Yt t ”} | | jt ”| |  t”d”|  d”} | | ”| | tj”| |  d””|  d”} | |  d”| j ”|  t”} | |  t”| j ”t! "t”j#d} tj$ %t t”}| | |”| |  |d”d”| |  |t”d”| |  |t”d”|t}t&|ƒ}t! "|”} | '|t(j)v”| |  *t”d”| |  *|”d”| |  |”| j ”| j+}| | *|”d”| | |”| j ”t t tjt”}| |jt ”| |j,ttj”dS)Nr”ZspamrHsspamTrF)-r•rr r˜rnrdrorlr;rrLr[rr=rrMrNrOrPrIrQr7Ś zipimporterr]ŚarchiveŚ is_packageŚ find_moduleŚassertIsNotNoneŚassertIsInstanceŚ assertFalseŚ load_moduleŚ get_filenamer¬rr\rØr!r>r"Ś assertTruer'r^Ś get_sourceŚ __loader__Śprefix)r.r–ršrDrUrErrrVŚziZfind_modŚload_modr_Zexisting_pack_pathZexpected_path_pathŚmod_pathŚmod_nameŚloaderŚzi2rrrŚtestZipImporterMethods±sX  ż ,       z4UncompressedZipImportTestCase.testZipImporterMethodscCsPttj}|ttj}|dtttf|ttttfi}| t j t ”t t dƒP}|  ”D]6\}\}}t|t |”ƒ}|j|_d|_| ||”q^Wdƒn1sŖ0Yt t tj|”} | | jt ”| | j|”| |  t”d”|  t”} | |  t”| j”| |  ttjd”d”| |  ttjt”d”t tj|t} t | ”} |  t”} | | ”|  | tj”| !|  t””|  t”}| |  t”|j”ttjt}t"|ƒ}t# $|”} | %|t&j'v”| |  (t”d”| |  (|”d”| |  |”| j”| j)}| | (|”d”| | |”| j”dS)Nr”rHseggsTF)*r•rr r˜rnrdrorlr;rrLr[rr=rrMrNrOrPrIrQr7rør]r¹rÄrŗrærĄr¬r»r¼r½r¾r"rr\rĮr'r^rĀrĆ)r.r–ršrDrUrErrrVrÅr_Zpkg_pathrŹZfind_mod_dottedrĘrĒrČrÉrrrŚ$testZipImporterMethodsInSubDirectoryésX ’ , ’’     ’ zBUncompressedZipImportTestCase.testZipImporterMethodsInSubDirectorycCs–| tjt”ttdƒ>}|j|_d}tdd„tdƒDƒƒ}| ||”Wdƒn1s\0Yt   t”}|  ||  |””|  dt|ƒ”dS)NrHz testdata.datcss|] }|VqdSr&r)Ś.0ŚxrrrŚ óz.ézzipimporter object)r;rrLr[rrOŚbytesŚrangerQr7rør]Śget_dataZassertInŚrepr)r.rUrErrÅrrrŚ testGetDatas * z)UncompressedZipImportTestCase.testGetDatacCsFd}tt|ddƒtt|ƒƒ}ttt|fdtdfi}| t|t”dS)Nz³if 1: # indent hack def get_file(): return __file__ if __loader__.get_data("some.data") != b"some data": raise AssertionError("bad data") r r z some.dataz some data)rr€rdr§rlrnra)r.ŚsrcrrDrrrŚtestImporterAttr&s  ’z.UncompressedZipImportTestCase.testImporterAttrcCs\d}tdt|fi}| |”tj dt”t t”}|  |  d”d”|  t |j d”dS)Nz[if 1: # indent hack def test(val): assert(val) return val r#rr¢F) rlrdrXr'r!rZr[rr\r]ŚtestŚ assertRaisesŚAssertionError)r.r×rDr_rrrŚtestDefaultOptimizationLevel1s  z:UncompressedZipImportTestCase.testDefaultOptimizationLevelcCs&tdttfi}|jd|tdddS)Nr#s6Some StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome StuffSome Stuff)rJrkrhrrrŚtestImport_WithStuff>s ’z2UncompressedZipImportTestCase.testImport_WithStuffcCs| t |”t”dSr&)r]ŚinspectZ getsourcere)r.ŚmodulerrrŚassertModuleSourceEsz0UncompressedZipImportTestCase.assertModuleSourcecCs(tdttfi}|jd|t|jddS©Nr#r{)rlrdrerarąrhrrrŚ testGetSourceHsz+UncompressedZipImportTestCase.testGetSourcecCsLtttddƒtttƒƒ}tdttfttt|fi}|jt|t|jddS)Nr r r#r{) rr€rerdr§rlrnrarą)r.rrDrrrŚtestGetCompiledSourceLs   ’z3UncompressedZipImportTestCase.testGetCompiledSourcecCs.tdttfdtdfi}|jd|t|ddS)Nr#śxyz.txtz>>> log.append(True) r{rk)r.ŚcallbackrDrrrŚ runDoctestRs ’z(UncompressedZipImportTestCase.runDoctestcCsLg}tjd}t_ztjd|dtƒdW|t_n|t_0| |dg”dS©NräT)ŚpackageZmodule_relativeZglobs)ŚdoctestZmasterZtestfileŚlocalsr])r.rߌlogZ old_masterrrrŚ doDoctestFileWsžz+UncompressedZipImportTestCase.doDoctestFilecCs| |j”dSr&)ręrģr-rrrŚtestDoctestFilecsz-UncompressedZipImportTestCase.testDoctestFilecCs.g}tjd|dtƒd ”| |dg”dSrē)réZ DocFileTestrźŚrunr])r.rßrėrrrŚdoDoctestSuitefs ž z,UncompressedZipImportTestCase.doDoctestSuitecCs| |j”dSr&)ręrļr-rrrŚtestDoctestSuitensz.UncompressedZipImportTestCase.testDoctestSuitecCsŖz | ”Wnt ”dj}t|dƒd\}}}}| |t ””t|j dƒd\}}}}| |t ””t   ”}t |d|ƒ|  | ” t””Yn 0tdƒ‚dS)Nr‘r¢rzThis ought to be impossible)Zdo_raiser'Śexc_infoŚtb_nextrr]Ś raise_srcŚstriprŚtb_frameŚioŚStringIOr rĮŚgetvalueŚendswithrŪ)r.rߌtbrWŚlnoŚnŚlineŚsrrrŚ doTracebackqs  z)UncompressedZipImportTestCase.doTracebackcCs(tdttfi}|jd|t|jddSrį)rlrdrórar’rhrrrŚ testTracebackƒsz+UncompressedZipImportTestCase.testTracebackNzneed an unencodable filenamecCs~tjd}| tj|”t|dƒ8}ttdt t ”ƒ}|j |_ |  |t ”Wdƒn1s`0Yt |” t”dS©Nz.ziprHr#)rŚTESTFN_UNENCODABLEr;rLrrrlrMrNrdrOrPrQrer7røræ©r.ŚfilenamerUrVrrrŚtestUnencodable‡s  *z-UncompressedZipImportTestCase.testUnencodablecCstjd}| tj|”t|dƒ8}ttdt t ”ƒ}|j |_ |  |t ”Wdƒn1s`0Yt |”t t |””| t”$t tt |”ƒ”Wdƒn1sø0Y| t”$t tt |”ƒ”Wdƒn1sö0YdSr)rZTESTFNr;rLrrrlrMrNrdrOrPrQrer7rørŚfsencoderŚŚ TypeErrorrŒŚ memoryviewrrrrŚ testBytesPath’s  *  2 z+UncompressedZipImportTestCase.testBytesPathcCs&tdttfi}|jd|tdddS)Nr#scomment©rIrkrhrrrŚ testComment”sz)UncompressedZipImportTestCase.testCommentcCs(tdttfi}|jd|tddddS)Nr#s@cruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftcruftshi)rJrIrkrhrrrŚtestBeginningCruftAndComment„sz:UncompressedZipImportTestCase.testBeginningCruftAndCommentcCs*tdttfi}|jd|tddddS)Nr#óci’’r rkrhrrrŚtestLargestPossibleComment©sz8UncompressedZipImportTestCase.testLargestPossibleComment)5r1r2r3rrOr/r¦rGr[rXrarirmrprqr„ŚunittestZmockZpatchr‡r‰rŽrr’r—r›rr¶r·rĖrĢrÖrŲrÜrŻrąrārćręrģrķrļršr’rZskipIfrrrr r r rrrrrr4QsZ         MI81     ’ r4c@seZdZeZdS)ŚCompressedZipImportTestCaseN)r1r2r3rrOrrrrr®src@sTeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dS)ŚBadFileZipImportTestCasecCs| tjtj|”dSr&)rŚr7ŚZipImportErrorrø)r.rrrrŚassertZipFailure“s’z)BadFileZipImportTestCase.assertZipFailurecCs| d”dS)NZAdfjdkFJKDFJjdklfjs©rr-rrrŚ testNoFileøsz#BadFileZipImportTestCase.testNoFilecCs| d”dSrœrr-rrrŚtestEmptyFilename»sz*BadFileZipImportTestCase.testEmptyFilenamecCsB| ttjd”|jttjtdd| ttjtt t”ƒ”dS)N)Zkwd)rŚrr7rørlr«rrr-rrrŚ testBadArgs¾s   ’z$BadFileZipImportTestCase.testBadArgscCs| dd”dS)NŚAič€rr-rrrŚtestFilenameTooLongÄsz,BadFileZipImportTestCase.testFilenameTooLongcCs"t t”t t”| t”dSr&)rrLrlZcreate_empty_filerr-rrrŚ testEmptyFileĒs  z&BadFileZipImportTestCase.testEmptyFilec Cs’t t”t ttjd”}zZt |”| tj ”}t  t”Wdƒn1sR0YWt  td”t t”nt  td”t t”0dS)Nri¶) rrLrlrrBŚO_CREATŚcloserŚr7rrøŚchmod)r.ŚfdŚcmrrrŚtestFileUnreadableĢs  *  ’ z+BadFileZipImportTestCase.testFileUnreadablecCs4t t”ttdƒ}| d”| ”| t”dS)Nśw+Zaaaaaaaaaaaaaaaaaaaaaa)rrLrlrBrCrr)r.rFrrrŚtestNotZipFileŚs    z'BadFileZipImportTestCase.testNotZipFilecCs*t t”ttdƒ}| t dd””| d”| ”t  t”}zÖ|  t |j d”|  t |j d”|  t |jd”|  t |jd”|  t |jd”|  t |jd”tj}| |  d”d”|  ||j d”|  ||jd”|  t|jd”|  ||jd”|  ||jd”Wtj ”n tj ”0dS)Nr!z=IiPKZaaaaaaaaaaaaaaaaaaŚabc)rrLrlrBrCrrrr7rørŚrr»rærŗŚget_coderŌrĀrr]ŚOSErrorr8r+)r.rFrUŚerrorrrrŚ_testBogusZipFileās*    z*BadFileZipImportTestCase._testBogusZipFileN) r1r2r3rrrrrrr r"r'rrrrr³src Cs.zt ttt”Wt t”n t t”0dSr&)rZ run_unittestr4rrrLrlrrrrŚ test_mainžsżr(Ś__main__)7r'rr rŚimportlib.utilrrMrZ unittest.mockrŁrŚzipfilerrrrr7r5rérŽröŚ tracebackrrr rbrfrer€Ztest_corórr"rdr§rorlr•r˜r!r„r¦r[rŚcache_from_sourceZpyc_filernZTestCaser%r4Z requires_zlibrrr(r1rrrrŚs\        aK