a :êdgˆJã@sdZddlZddlZddlZddlZddlZddlZddlmZddlm Z m Z ddl m Z ddl mZmZmZmZddlmZddlmZGd d „d e ƒZGd d „d e ƒZGd d„dejejejejƒZGdd„dejejejƒZdd„ZedkrþeeƒƒdS)zTests for distutils.dist.éN)Úmock)Ú DistributionÚfix_help_options)ÚCommand)ÚTESTFNÚcaptured_stdoutÚcaptured_stderrÚ run_unittest)Úsupport)Úlogc@seZdZdZdgZdd„ZdS)Ú test_distz#Sample distutils extension command.)zsample-option=ÚSz help textcCs d|_dS©N)Ú sample_option©Úself©rú5/usr/local/lib/python3.9/distutils/tests/test_dist.pyÚinitialize_optionssztest_dist.initialize_optionsN)Ú__name__Ú __module__Ú __qualname__Ú__doc__Z user_optionsrrrrrr sÿr c@seZdZdZdd„ZdS)ÚTestDistributionz²Distribution subclasses that avoids the default search for configuration files. The ._config_files attribute must be set before .parse_config_files() is called. cCs|jSr)Ú _config_filesrrrrÚfind_config_files(sz"TestDistribution.find_config_filesN)rrrrrrrrrr srcszeZdZ‡fdd„Z‡fdd„Zddd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Z‡ZS)ÚDistributionTestCasecs4tt|ƒ ¡tjtjdd…f|_tjdd…=dS)Né)ÚsuperrÚsetUpÚsysÚargvr©Ú __class__rrr1szDistributionTestCase.setUpcs2|jdt_|jdtjdd…<tt|ƒ ¡dS©Nrr)r!r rrÚtearDownrr"rrr%6s zDistributionTestCase.tearDownrcCs tƒ}||_| ¡| ¡|Sr)rrZparse_config_filesÚparse_command_line)rZ configfilesÚdrrrÚcreate_distribution;s z(DistributionTestCase.create_distributioncCs*tj d¡| ¡}| | ¡dg¡dS)NÚbuildúdistutils.command)r r!Úappendr(Ú assertEqualÚget_command_packages)rr'rrrÚ!test_command_packages_unspecifiedBs z6DistributionTestCase.test_command_packages_unspecifiedcCs`ddlm}tj gd¢¡| ¡}| | ¡gd¢¡| d¡}|  ||¡| |j d¡dS)Nr)r )ú--command-packageszfoo.bar,distutils.testsr z -Ssometext)r*úfoo.barzdistutils.testsr Zsometext) Zdistutils.tests.test_distr r r!Úextendr(r,r-Zget_command_objÚassertIsInstancer)rr r'ÚcmdrrrÚtest_command_packages_cmdlineGs  ÿ  z2DistributionTestCase.test_command_packages_cmdlinec Csxtj d¡| tjt¡d}ttdƒ"}td  |¡|dWdƒn1sP0Yt j j tddd}|  tg¡}Wdƒn1sŽ0Yt|f}|||||||||||||dœ }| t|j d¡ ¡ƒt| ¡ƒ¡|j d¡ ¡D]\}}| |||¡qôt j j tdd d}|  tg¡}Wdƒn1sD0Y| ¡D]}| ||j di¡¡qVdS) NÚinstallz/somedirÚwzð[install] install-base = {0} install-platbase = {0} install-lib = {0} install-platlib = {0} install-purelib = {0} install-headers = {0} install-scripts = {0} install-data = {0} prefix = {0} exec-prefix = {0} home = {0} user = {0} root = {0}©Úfilez/a)ÚprefixÚ base_prefix) Z install_baseZinstall_platbaseZ install_libZinstall_platlibZinstall_purelibZinstall_headersZinstall_scriptsZ install_datar9Ú exec_prefixÚhomeÚuserÚrootz/b)r r!r+Ú addCleanupÚosÚunlinkrÚopenÚprintÚformatrZpatchZmultipler(r,ÚsortedZcommand_optionsÚgetÚkeysÚitemsÚ assertNotIn) rZfakepathÚfÚvaluesr'Ú option_tupleZ result_dictÚkeyÚvaluerrrÚtest_venv_install_optionsVsH   ó ó$*ó þ, z.DistributionTestCase.test_venv_install_optionscCsÚtj d¡| tjt¡ttdƒ}z$td|dtd|dW|  ¡n |  ¡0|  tg¡}|  |  ¡gd¢¡gd¢tjdd…<|  tg¡}|  |  ¡d d g¡gd ¢tjdd…<|  tg¡}|  |  ¡d g¡dS) Nr)r6z[global]r7z!command_packages = foo.bar, splat)r*r0Zsplat)r/Úsporkr)rr*rP)r/Úr)) r r!r+r?r@rArrBrCÚcloser(r,r-)rrJr'rrrÚ test_command_packages_configfiles&     ÿ  ÿ z5DistributionTestCase.test_command_packages_configfilecsbg‰‡fdd„}| ttdtj¡|t_tddddidœd}| tˆƒd¡| d t|ƒ¡dS) Ncsˆ |¡dSr)r+)Úmsg©ZwarnsrrÚ_warn±sz6DistributionTestCase.test_empty_options.._warnÚwarnÚxxxZxxxx)ZauthorÚnameÚversionÚurlÚoptions©Úattrsrr\) r?ÚsetattrÚwarningsrWrr,ÚlenrIÚdir)rrVÚdistrrUrÚtest_empty_optionsªs þ z'DistributionTestCase.test_empty_optionscCsˆdddœ}t|d}| ¡| |jjddg¡| |jjddg¡dddœ}t|d}| ¡| |jjdg¡| |jjdg¡dS)Núone,two)ÚkeywordsÚ platformsr]ÚoneÚtwozfoo bar)rZfinalize_optionsr,Úmetadatargrf©rr^rcrrrÚtest_finalize_options½sÿ ÿ z*DistributionTestCase.test_finalize_optionscCs\tƒ}| |jd¡| ¡}| |dg¡| |jdg¡d|_| ¡}| |gd¢¡dS)Nr*re)r*rhri)rr,Zcommand_packagesr-)rrcZcmdsrrrÚtest_get_command_packagesÏsÿz.DistributionTestCase.test_get_command_packagescCs(tƒ}d}ddi}| t|j||¡dS)N)ÚokÚlevelZok2)rÚ assertRaisesÚ ValueErrorZannounce)rrcÚargsÚkwargsrrrÚ test_announceÛsz"DistributionTestCase.test_announcecsÚ| ¡‰tjdkr"tj ˆd¡}ntj ˆd¡}t|dƒ}| d¡Wdƒn1sZ0Y‡fdd„}tjj}|tj_z2tƒ}|  ¡}tdd gid }|  ¡}W|tj_n |tj_0|  t |ƒd t |ƒ¡dS) NÚposixú.pydistutils.cfgúpydistutils.cfgr6z [distutils] csˆSrr)Úpath©Z temp_homerrÚ _expanderîszFDistributionTestCase.test_find_config_files_disable.._expanderZ script_argsz --no-user-cfgr]r) Úmkdtempr@rYrxÚjoinrBÚwriteÚ expanduserrrr,ra)rÚ user_filenamerJrzZ old_expanderr'Z all_filesÚfilesrryrÚtest_find_config_files_disableãs   (  z3DistributionTestCase.test_find_config_files_disable)r)rrrrr%r(r.r4rOrSrdrlrmrtrÚ __classcell__rrr"rr,s   : rcsØeZdZ‡fdd„Z‡fdd„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%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Z‡ZS)1ÚMetadataTestCasecs(tt|ƒ ¡tjtjdd…f|_dSr)rrƒrr r!rr"rrrszMetadataTestCase.setUpcs2|jdt_|jdtjdd…<tt|ƒ ¡dSr$)r!r rrƒr%rr"rrr%s zMetadataTestCase.tearDowncCst ¡}|j |¡| ¡Sr)ÚioÚStringIOrjÚwrite_pkg_fileÚgetvalue)rrcÚsiorrrÚformat_metadata s z MetadataTestCase.format_metadatacCs\dddœ}t|ƒ}| |¡}| d|¡| d| ¡¡| d| ¡¡| d| ¡¡dS)NÚpackageú1.0)rYrZzMetadata-Version: 1.0ú provides:ú requires:ú obsoletes:)rr‰ÚassertInrIÚlower©rr^rcÚmetarrrÚtest_simple_metadatasÿ  z%MetadataTestCase.test_simple_metadatacCs|ddddgdœ}t|ƒ}| |j ¡ddg¡| | ¡ddg¡| |¡}| d|¡| d| ¡¡| d| ¡¡dS)NrŠr‹z package.sub©rYrZZprovidesúMetadata-Version: 1.1rrŽ)rr,rjZ get_providesr‰rrIrr‘rrrÚ test_providessþ ÿ ÿ  zMetadataTestCase.test_providescCs| ttdddgdœ¡dS)NrŠr‹úmy.pkg (splat)r”©rprqrrrrrÚtest_provides_illegal(s þÿz&MetadataTestCase.test_provides_illegalcCs”ddddgdœ}t|ƒ}| |j ¡ddg¡| | ¡ddg¡| |¡}| d|¡| d| ¡¡| d|¡| d |¡| d | ¡¡dS) NrŠr‹Úotherzanother (==1.0)©rYrZÚrequiresr•rŒzRequires: otherzRequires: another (==1.0)rŽ)rr,rjZ get_requiresr‰rrIrr‘rrrÚ test_requires.s"þ ÿ ÿ    zMetadataTestCase.test_requirescCs| ttdddgdœ¡dS)NrŠr‹r—r›r˜rrrrÚtest_requires_illegal>s þÿz&MetadataTestCase.test_requires_illegalcCs,dtdgƒdœ}t|ƒ}| |jjt¡dS)NrŠrš)rYrœ)Úiterrr2rjrœÚlistrkrrrÚtest_requires_to_listDs ÿz&MetadataTestCase.test_requires_to_listcCs”ddddgdœ}t|ƒ}| |j ¡ddg¡| | ¡ddg¡| |¡}| d|¡| d| ¡¡| d| ¡¡| d |¡| d |¡dS) NrŠr‹ršzanother (<1.0)©rYrZÚ obsoletesr•rŒrzObsoletes: otherzObsoletes: another (<1.0))rr,rjZ get_obsoletesr‰rrIrr‘rrrÚtest_obsoletesKs"þ ÿ ÿ   zMetadataTestCase.test_obsoletescCs| ttdddgdœ¡dS)NrŠr‹r—r¢r˜rrrrÚtest_obsoletes_illegal[s þÿz'MetadataTestCase.test_obsoletes_illegalcCs,dtdgƒdœ}t|ƒ}| |jjt¡dS)NrŠrš)rYr£)rŸrr2rjr£r rkrrrÚtest_obsoletes_to_listas ÿz'MetadataTestCase.test_obsoletes_to_listcCsBdddgdœ}t|ƒ}| | ¡dg¡| |¡}| d|¡dS)NÚBoaú3.0ú#Programming Language :: Python :: 3©rYrZÚ classifiersr•)rr,Zget_classifiersr‰rr‘rrrÚtest_classifiergsÿ ÿ z MetadataTestCase.test_classifiercCsvddddœ}tƒ}t|ƒ}Wdƒn1s00Y| d| ¡¡| |jjt¡| |jjt|dƒ¡dS)Nr§r¨)r©rªúshould be a listr«) rrrr‡r2rjr«r r,©rr^Úerrorr'rrrÚtest_classifier_invalid_typepsÿ&  ÿz-MetadataTestCase.test_classifier_invalid_typecCs0ddgd¢dœ}t|ƒ}| | ¡gd¢¡dS)NÚMontyr‹©ZspamZeggsz life of brian©rYrZrf)rr,Z get_keywordsrkrrrÚ test_keywords|sÿ ÿzMetadataTestCase.test_keywordscCsvddddœ}tƒ}t|ƒ}Wdƒn1s00Y| d| ¡¡| |jjt¡| |jjt|dƒ¡dS)Nr±r‹r²r³r­rf) rrrr‡r2rjrfr r,r®rrrÚtest_keywords_invalid_typeƒsÿ&z+MetadataTestCase.test_keywords_invalid_typecCs0ddddgdœ}t|ƒ}| | ¡ddg¡dS)Nr±r‹ú GNU/LinuxúSome Evil Platform©rYrZrg)rr,Z get_platformsrkrrrÚtest_platformsŽsÿ ÿzMetadataTestCase.test_platformscCsvddddœ}tƒ}t|ƒ}Wdƒn1s00Y| d| ¡¡| |jjt¡| |jjt|dƒ¡dS)Nr±r‹)r¶r·r¸r­rg) rrrr‡r2rjrgr r,r®rrrÚtest_platforms_invalid_types•sÿ&z-MetadataTestCase.test_platforms_invalid_typescCs.ddddœ}t|ƒ}| |¡}| d|¡dS)Nr§r¨zhttp://example.org/boa)rYrZÚ download_urlr•)rr‰rr‘rrrÚtest_download_url s ÿ z"MetadataTestCase.test_download_urlcCsDt d¡}dd|dœ}t|ƒ}| |¡}| dd¡}| ||¡dS)Nzc example:: We start here and continue here and end here.rŠr‹)rYrZÚlong_descriptionz Ú )ÚtextwrapÚdedentrr‰Úreplacer)rZ long_descr^rcr’rrrÚtest_long_description§s þ  z&MetadataTestCase.test_long_descriptionc CsÖtjdkrd}nd}| ¡}tj ||¡}t|dƒ}z| d¡W| ¡n | ¡0zntƒ}t j dvr†|tj d<|  ¡}|  ||¡t j dkr¸|tj d <|  ¡}|  ||d ||f¡Wt |¡n t |¡0dS) Nrurvrwr6Ú.)ÚlinuxÚdarwinÚHOMEÚwin32Ú USERPROFILEz%r not found in %r)r@rYr{rxr|rBr}rRrr ÚplatformÚenvironrrÚremove)rrZtemp_dirrJrcr€rrrÚtest_custom_pydistutils¶s,         ÿz(MetadataTestCase.test_custom_pydistutilscCs4ddg}t|ƒ}| |dd¡| |dd¡dS)N)ÚaÚbÚcr')rééér)rÍrÎrÏr)rrÐrÑ)rr,)rZ help_tuplesZ fancy_optionsrrrÚtest_fix_help_optionsÙsz&MetadataTestCase.test_fix_help_optionscCs~| tjtjj¡tƒ}gt_d|_d|_ t ƒ}|  ¡Wdƒn1sN0Ydd„|  ¡  d¡Dƒ}| |¡dS)Nrzsetup.pycSsg|]}| ¡dkr|‘qS)rQ)Ústrip)Ú.0ÚlinerrrÚ és ÿz3MetadataTestCase.test_show_help..r¾)r?r Z set_thresholdZ _global_logZ thresholdrr r!ÚhelpZ script_namerr&r‡ÚsplitZ assertTrue)rrcÚsÚoutputrrrÚtest_show_helpßs&zMetadataTestCase.test_show_helpcCsÊdddddddgdgd œ}t|ƒ}|j}t ¡}| |¡| d ¡| |¡| |jd¡| |j d¡| |j d¡| |j d¡| |j ddg¡| |j d g¡| |jd¡| |jdg¡dS) NrŠr‹ZdescrXzhttp://example.comrhriZfoo)rYrZr½Ú descriptionr»rfrœrZUNKNOWN)rrjr„r…r†ÚseekZ read_pkg_filer,rYrZrÝr»rfrgr£rœ)rr^rcrjZPKG_INFOrrrÚtest_read_metadataîs,ú   z#MetadataTestCase.test_read_metadata)rrrrr%r‰r“r–r™rržr¡r¤r¥r¦r¬r°r´rµr¹rºr¼rÂrÌrÓrÜrßr‚rrr"rrƒÿs0       #rƒcCs,t ¡}| t t¡¡| t t¡¡|Sr)ÚunittestZ TestSuiteZaddTestZ makeSuiterrƒ)ZsuiterrrÚ test_suite sráÚ__main__) rr@r„r ràr`r¿rZdistutils.distrrZ distutils.cmdrZ test.supportrrrr Zdistutils.testsr Z distutilsr r rZLoggingSilencerZTempdirManagerZ EnvironGuardZTestCaserrƒrárrrrrÚs8      ýTÿ