
    wgH                     p   d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlZddlmZ ddlmZmZ ddlmZ ddlZddlZdej,                  dk(  z  dz   Z G d	 d
e      Z G d de      Zej4                  d        Zej8                  ej:                  j=                  d      ej:                  j=                  d       G d dej>                                             Z ej:                  j=                  d      ej:                  j=                  d       G d dej>                                      Z!y)zTests for distutils.dist.    N)Command)Distributionfix_help_options)support.posixzpydistutils.cfgc                       e Zd ZdZdgZd Zy)	test_distz#Sample distutils extension command.)zsample-option=Sz	help textc                     d | _         y N)sample_optionselfs    j/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/setuptools/_distutils/tests/test_dist.pyinitialize_optionsztest_dist.initialize_options   s
    !    N)__name__
__module____qualname____doc__user_optionsr    r   r   r
   r
      s    - 	-L"r   r
   c                       e Zd ZdZd Zy)TestDistributionzDistribution subclasses that avoids the default search for
    configuration files.

    The ._config_files attribute must be set before
    .parse_config_files() is called.
    c                     | j                   S r   )_config_filesr   s    r   find_config_filesz"TestDistribution.find_config_files*   s    !!!r   N)r   r   r   r   r   r   r   r   r   r   "   s    "r   r   c                  *    t         j                  dd = y )N   )sysargvr   r   r   
clear_argvr#   .   s    r   save_env	save_argvc                       e Zd ZddZd Zd Zej                  j                  de	j                  j                  vd      d        Zd Zd	 Zd
 Zd Zd Zd Zej                  j                  dd      d        Zy)TestDistributionBehaviorc                 h    t               }||_        |j                          |j                          |S r   )r   r   parse_config_filesparse_command_line)r   configfilesds      r   create_distributionz,TestDistributionBehavior.create_distribution7   s.    %		r   c                     t         j                  j                  d       | j                         }|j	                         dgk(  sJ y )Nbuilddistutils.command)r!   r"   appendr-   get_command_packages)r   r#   r,   s      r   !test_command_packages_unspecifiedz:TestDistributionBehavior.test_command_packages_unspecified>   s;     $$&%%',?+@@@@r   c                     ddl m} t        j                  j	                  g d       | j                         }|j                         g dk(  sJ |j                  d      }t        ||      sJ |j                  dk(  sJ y )Nr   )r
   )--command-packageszfoo.bar,distutils.testsr
   z
-Ssometext)r0   foo.barzdistutils.testsr
   sometext)
distutils.tests.test_distr
   r!   r"   extendr-   r2   get_command_obj
isinstancer   )r   r#   r
   r,   cmds        r   test_command_packages_cmdlinez6TestDistributionBehavior.test_command_packages_cmdlineC   s    7 
 	 $$&%%' ,
 
 	
 

 ,#y)))  J...r   	distutilsz;Cannot test when virtualenv has monkey-patched Distribution)reasonc                    t         j                  j                  d       t        |dz        }d}t        j
                  j                  |d| d| d| d| d| d	| d
| d| d| d| d| d| d| di       t        j                  j                  t         dd      5  | j                  |g      }d d d        ||f}|||||||||||||d}t        j                  j                  d      j                               t        |j                               k(  sJ |j                  j                  d      j                         D ]  \  }}	|	||   k(  rJ  t        j                  j                  t         dd      5  | j                  |g      }d d d        |j                         D ]"  }||j                  j                  di       vr"J  y # 1 sw Y   xY w# 1 sw Y   LxY w)Ninstallfilez/somedirzB
                    [install]
                    install-base = z(
                    install-platbase = z#
                    install-lib = z'
                    install-platlib = z'
                    install-purelib = z'
                    install-headers = z'
                    install-scripts = z$
                    install-data = z
                    prefix = z#
                    exec-prefix = z
                    home = z
                    user = z
                    root = z
                    z/a)prefixbase_prefix)install_baseinstall_platbaseinstall_libinstall_platlibinstall_purelibinstall_headersinstall_scriptsinstall_datarC   exec_prefixhomeuserrootz/b)r!   r"   r1   strjaracopathr/   mockpatchmultipler-   sortedcommand_optionsgetkeysitems)
r   tmp_pathr#   rB   fakepathr,   option_tupleresult_dictkeyvalues
             r   test_venv_install_optionsz2TestDistributionBehavior.test_venv_install_optionsW   sU   
 		"8f$% $$,: .((0z 2##+* -''/j 1''/j 1''/j 1''/j 1$$,: .&Z (##+* -$: &$: &$: &
 	( ZZ  Tt D 	1(($0A	1 h' ) ,'++++("'   
  a''++I6;;=>&C
 
 	
 
 ++//	:@@B 	-JCK,,,,	- ZZ  Tt D 	1(($0A	1 ##% 	CCa//33IrBBBB	CA	1 	1:	1 	1s   G=GGG$c                    t         j                  j                  d       t        |dz        }t        j
                  j                  |di       | j                  |g      }|j                         g dk(  sJ g dt         j                  dd  | j                  |g      }|j                         ddgk(  sJ g d	t         j                  dd  | j                  |g      }|j                         dgk(  sJ y )
Nr/   rB   zh
                    [global]
                    command_packages = foo.bar, splat
                    )r0   r6   splat)r5   sporkr/   r    r0   re   )r5    r/   )	r!   r"   r1   rQ   rR   rS   r/   r-   r2   )r   r\   r#   rB   r,   s        r    test_command_packages_configfilez9TestDistributionBehavior.test_command_packages_configfile   s     8f$% 
 	 $$dV,%%'+TTTT @$$dV,%%',?+IIII ;$$dV,%%',?+@@@@r   c                    g fd}|j                  t        j                  t        t        dt        j
                               |t        _        t        ddddi d      }t              dk(  sJ dt        |      vsJ y )	Nc                 (    j                  |        y r   )r1   )msgwarnss    r   _warnz:TestDistributionBehavior.test_empty_options.<locals>._warn   s    LLr   warnxxxxxxx)authornameversionurloptionsattrsr   rt   )	addfinalizer	functoolspartialsetattrwarningsrm   r   lendir)r   requestrl   distrk   s       @r   test_empty_optionsz+TestDistributionBehavior.test_empty_options   s    
 	 	gxG	
  
 5zQD	)))r   c                 l   ddd}t        |      }|j                          |j                  j                  ddgk(  sJ |j                  j                  ddgk(  sJ ddd}t        |      }|j                          |j                  j                  dgk(  sJ |j                  j                  dgk(  sJ y )None,two)keywords	platformsru   onetwozfoo bar)r   finalize_optionsmetadatar   r   r   rv   r   s      r   test_finalize_optionsz.TestDistributionBehavior.test_finalize_options   s    &Y?%( }}&&5%.888}}%%%777&Y?%(}}&&9+555}}%%)444r   c                     t               }|j                  J |j                         }|dgk(  sJ |j                  dgk(  sJ d|_        |j                         }|g dk(  sJ y )Nr0   r   )r0   r   r   )r   command_packagesr2   )r   r   cmdss      r   test_get_command_packagesz2TestDistributionBehavior.test_get_command_packages   sx    ~$$,,,((*+,,,,$$)<(==== )((*::::r   c                     t               }t        j                  t              5  |j	                  dd       d d d        y # 1 sw Y   y xY w)Nokok2)level)r   pytestraises	TypeErrorannounce)r   r   s     r   test_announcez&TestDistributionBehavior.test_announce   s:    ~]]9% 	-MM$eM,	- 	- 	-s   AA
c                     t         j                  j                  t        di|       t	               }|j                         }t	        ddgi      }|j                         }t        |      dz
  t        |      k(  sJ y )Nz[distutils]
script_argsz--no-user-cfgru   r    )rR   rS   r/   pydistutils_cfgr   r   r|   )r   	temp_homer,   	all_filesfiless        r   test_find_config_files_disablez7TestDistributionBehavior.test_find_config_files_disable   sm    ?O<iHN'')	/@AB##% 9~!SZ///r   zplatform.system() == "Windows"z Windows does not honor chmod 000c                     |j                  t              j                  dd       |j                  d       t	               j                          y)zV
        Finding config files should not fail when directory is inaccessible.
        rf   zutf-8)encodingr   N)joinpathr   
write_textchmodr   r   )r   	fake_homes     r   'test_find_config_files_permission_errorz@TestDistributionBehavior.test_find_config_files_permission_error   s<     	?+66rG6L((*r   N)r   )r   r   r   r-   r3   r=   r   markskipifr   r)   rb   rg   r   r   r   r   r   r   r   r   r   r'   r'   3   s    A
/( [[<::EEEL  ;C	;CzA0*65 	;-0 [[(1  +	+r   r'   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestMetadatac                     t        j                         }|j                  j                  |       |j	                         S r   )ioStringIOr   write_pkg_filegetvalue)r   r   sios      r   format_metadatazTestMetadata.format_metadata	  s+    kkm$$S)||~r   c                     ddd}t        |      }| j                  |      }d|v sJ d|j                         vsJ d|j                         vsJ d|j                         vsJ y )Npackage1.0)rq   rr   zMetadata-Version: 1.0	provides:	requires:
obsoletes:)r   r   lowerr   rv   r   metas       r   test_simple_metadataz!TestMetadata.test_simple_metadata  sp    "u5E"##D)&$...$**,...$**,...4::<///r   c                    ddddgd}t        |      }|j                  j                         ddgk(  sJ |j                         ddgk(  sJ | j                  |      }d|v sJ d|j	                         vsJ d|j	                         vsJ y )Nr   r   zpackage.subrq   rr   providesMetadata-Version: 1.1r   r   )r   r   get_providesr   r   r   s       r   test_provideszTestMetadata.test_provides  s    "M2

 E"}}))+	=/IIII  "y-&@@@@##D)&$...$**,...4::<///r   c                     t        j                  t              5  t        dddgd       d d d        y # 1 sw Y   y xY w)Nr   r   my.pkg (splat)r   r   r   
ValueErrorr   r   s    r   test_provides_illegalz"TestMetadata.test_provides_illegal%  9    ]]:& 	"uCSBTU	 	 	   4=c                 0   ddddgd}t        |      }|j                  j                         ddgk(  sJ |j                         ddgk(  sJ | j                  |      }d|v sJ d|j	                         vsJ d|v sJ d	|v sJ d
|j	                         vsJ y )Nr   r   otherzanother (==1.0)rq   rr   requiresr   r   zRequires: otherzRequires: another (==1.0)r   )r   r   get_requiresr   r   r   s       r   test_requireszTestMetadata.test_requires+  s     "34

 E"}}))+9J/KKKK  "w0A&BBBB##D)&$...$**,... D(((*d2224::<///r   c                     t        j                  t              5  t        dddgd       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   r   s    r   test_requires_illegalz"TestMetadata.test_requires_illegal;  r   r   c                     dt        dg      d}t        |      }t        |j                  j                  t
              sJ y )Nr   r   )rq   r   )iterr   r;   r   r   listr   s      r   test_requires_to_listz"TestMetadata.test_requires_to_listA  s6    "gY@E"$--00$777r   c                 0   ddddgd}t        |      }|j                  j                         ddgk(  sJ |j                         ddgk(  sJ | j                  |      }d|v sJ d|j	                         vsJ d|j	                         vsJ d	|v sJ d
|v sJ y )Nr   r   r   zanother (<1.0)rq   rr   	obsoletesr   r   r   zObsoletes: otherzObsoletes: another (<1.0))r   r   get_obsoletesr   r   r   s       r   test_obsoleteszTestMetadata.test_obsoletesF  s    !#34

 E"}}**,:J0KKKK!!#1A'BBBB##D)&$...$**,...$**,...!T)))*d222r   c                     t        j                  t              5  t        dddgd       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   r   s    r   test_obsoletes_illegalz#TestMetadata.test_obsoletes_illegalV  s9    ]]:& 	"uDTCUV	 	 	r   c                     dt        dg      d}t        |      }t        |j                  j                  t
              sJ y )Nr   r   )rq   r   )r   r   r;   r   r   r   r   s      r   test_obsoletes_to_listz#TestMetadata.test_obsoletes_to_list\  s6    "wiAE"$--114888r   c                     dddgd}t        |      }|j                         dgk(  sJ | j                  |      }d|v sJ y )NBoa3.0#Programming Language :: Python :: 3rq   rr   classifiersr   )r   get_classifiersr   r   s       r   test_classifierzTestMetadata.test_classifiera  sZ    AB

 E"##%*O)PPPP##D)&$...r   c                     dddd}t        |      }d|j                  d   v sJ t        |j                  j                  t
              sJ |j                  j                  t        |d         k(  sJ y )Nr   r   )r   r   should be a listr   r   )r   messagesr;   r   r   r   r   caplogrv   r,   s       r   test_classifier_invalid_typez)TestMetadata.test_classifier_invalid_typel  sq    C

 !V__Q%7777!**00$777zz%%eM.B)CCCCr   c                 X    ddg dd}t        |      }|j                         g dk(  sJ y )NMontyr   spameggszlife of brianrq   rr   r   )r   get_keywordsr   s      r   test_keywordszTestMetadata.test_keywordsy  s6    9

 E"  "&GGGGr   c                     dddd}t        |      }d|j                  d   v sJ t        |j                  j                  t
              sJ |j                  j                  t        |d         k(  sJ y )Nr   r   r   r   r   r   r   )r   r   r;   r   r   r   r   s       r   test_keywords_invalid_typez'TestMetadata.test_keywords_invalid_type  sq    9

 !V__Q%7777!**--t444zz""d5+<&====r   c                 X    ddddgd}t        |      }|j                         ddgk(  sJ y )Nr   r   	GNU/LinuxSome Evil Platformrq   rr   r   )r   get_platformsr   s      r   test_platformszTestMetadata.test_platforms  sA    %';<

 E"!!#5I'JJJJr   c                     dddd}t        |      }d|j                  d   v sJ t        |j                  j                  t
              sJ |j                  j                  t        |d         k(  sJ y )Nr   r   )r   r   r   r   r   r   )r   r   r;   r   r   r   r   s       r   test_platforms_invalid_typesz)TestMetadata.test_platforms_invalid_types  sq    <

 !V__Q%7777!**..555zz##tE+,>'????r   c                 T    dddd}t        |      }| j                  |      }d|v sJ y )Nr   r   zhttp://example.org/boa)rq   rr   download_urlr   )r   r   r   s       r   test_download_urlzTestMetadata.test_download_url  s<    4

 E"##D)&$...r   c                     t        j                  d      }dd|d}t        |      }| j                  |      }|j	                  dd      }||v sJ y )Nzc        example::
              We start here
            and continue here
          and end here.r   r   rq   rr   long_descriptionz	
        
)textwrapdedentr   r   replace)r   	long_descrv   r   r   s        r   test_long_descriptionz"TestMetadata.test_long_description  s[    OO
	 #u)TE"##D)||ND1D   r   c                     t         j                  j                  t        di|       |t        z  }t	        |      t               j                         v sJ y)z*
        pydistutils.cfg is found
        rf   N)rR   rS   r/   r   rQ   r   r   )r   r   config_paths      r   test_custom_pydistutilsz$TestMetadata.test_custom_pydistutils  sE     	?B/;/1;<>#C#C#EEEEr   c                     t         j                  j                  ddi|       |dz  }|j                  dt	        |             t	        |      t               j                         v sJ y )Nzoverrides.cfgrf   DIST_EXTRA_CONFIG)rR   rS   r/   setenvrQ   r   r   )r   monkeypatchr\   filenames       r   test_extra_pydistutilsz#TestMetadata.test_extra_pydistutils  sW    ?B/:o-.H>8} @ @ BBBBr   c                 J    ddg}t        |      }|d   dk(  sJ |d   dk(  sJ y )N)abcr,   )r             r   )r  r  r  r    )r    r  r  )r   )r   help_tuplesfancy_optionss      r   test_fix_help_optionsz"TestMetadata.test_fix_help_options  s<    +\:(5Q?222Q9,,,r   c                    t               }g t        _        d|_        d|_        |j                          |j                         j                  j                  d      D cg c]  }|j                         dk7  s| }}|sJ y c c}w )NTzsetup.pyr  rf   )
r   r!   r"   helpscript_namer*   
readouterroutsplitstrip)r   r~   capsysr   lineoutputs         r   test_show_helpzTestMetadata.test_show_help  s}    ~	%! $..044::4@
DJJLTVDVD
 
 v
s   B8Bc                    dddddddgdgd	}t        |      }|j                  }t        j                         }|j	                  |       |j                  d
       |j                  |       |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  ddgk(  sJ |j                  J |j                  J |j                  dgk(  sJ y )Nr   r   descrn   zhttp://example.comr   r   foo)rq   rr   r  descriptionr   r   r   r   )r   r   r   r   r   seekread_pkg_filerq   rr   r*  r   r   r   r   r   )r   rv   r   r   PKG_INFOs        r   test_read_metadatazTestMetadata.test_read_metadata  s    & 0
 E"== ;;=)ax(}}	)))5(((##u,,,$$(<<<<  UEN222!!)))!!)))  UG+++r   c                    dddd}t        |      }|j                  }t        j                         5 }|j	                  |       |j                         }ddd       t        j                        }t        j                  j                  ddd	      }t        j                         5 }t        j                  j                  ||
      j                  |       |j                  d       t        j                  |      }ddd       t        |d   j!                               }	t        d   j!                               }
|
|	k(  sJ y# 1 sw Y   xY w# 1 sw Y   UxY w)z
        In pypa/setuptools#4033, it was shown that once PKG-INFO is
        re-generated using ``email.generator.Generator``, some control
        characters might cause problems.
        r   r   zhello
world
r  NTFr   )utf8mangle_from_max_line_length)policyDescription)r   r   r   r   r   r   emailmessage_from_stringr3  EmailPolicy	generator	Generatorflattenr+  message_from_fileset
splitlines)r   rv   r   r   bufferrj   origr3  regen	orig_desc
regen_descs              r   'test_round_trip_through_email_generatorz4TestMetadata.test_round_trip_through_email_generator  s6     4

 E"==[[] 	$f##F+//#C	$
 ((-)) * 

 [[] 	4fOO%%fV%<DDTJKKN++F3E		4 ]+6689	}-88:;
Y&&&+	$ 	$	4 	4s   "E'AEEEN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r&  r.  rC  r   r   r   r   r     s    
000 8
3 9
	/DH>K@/!FC-,:$'r   r   )"r   r5  email.generatoremail.policyrx   r   osr!   r  unittest.mockrT   r{   distutils.cmdr   distutils.distr   r   distutils.testsr   jaraco.pathrR   r   rq   r   r
   r   fixturer#   combine_markersr   usefixturesTempdirManagerr'   r   r   r   r   <module>rP     s!        	 	 
    ! 9 #  G+,/@@" "	"| 	"   	$%M+w55 M+ & % M+` $%Y'7)) Y' & %Y'r   