
    daf7              
          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mZ ddlmZ d dlmZmZmZmZmZmZmZmZmZ ej4                  d        Z G d d	ej8                  ej:                        Z G d
 dej8                  ej:                        Z G d dej@                  ejB                  ej:                        Z" G d dej@                  ejB                  ej:                        Z# G d dejH                  ejJ                  ejL                  ejN                  ej8                  ej:                        Z( G d dej@                  ejB                  ej:                        Z) G d dej@                  ej:                        Z* G d dej@                  e
j:                        Z+ G d dej:                        Z, G d dej@                  ejB                  ejZ                  ej:                        Z. G d dej^                  ej:                        Z0 G d dej@                  ejB                  ej:                        Z1 G d  d!ejH                  ejJ                  ejL                  ejN                  ej:                        Z2y# e$ r
 ddlm	Z
 Y gw xY w)"    N   )fake_filesystem_unittest)fixtures)suppress)	Distribution
EntryPointPackageNotFoundError_uniquedistributionsentry_pointsmetadatapackages_distributionsversionc               #      K   t        j                  d      5 } t        j                  dt               |  d d d        y # 1 sw Y   y xY ww)NT)recorddefault)category)warningscatch_warningssimplefilterDeprecationWarning)ctxs    8/root/Python-3.12.4/Lib/test/test_importlib/test_main.pysuppress_known_deprecationr      s@     		 	 	- i2DE	  s   A A	AAAc                       e Zd ZdZd Zd Zd Z ee       e	       d               Z
 ej                   ed       ed            d	        Zy)

BasicTestsz\d+\.\d+(\.\d)?c                     t        j                  d      }t        |j                  t              sJ t        j                  | j                  |j                        sJ y )Ndistinfo-pkg)r   	from_name
isinstancer   strrematchversion_pattern)selfdists     r   test_retrieves_version_of_selfz)BasicTests.test_retrieves_version_of_self'   sD    %%n5$,,,,,xx,,dll;;;    c                     | j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY w)Ndoes-not-exist)assertRaisesr	   r   r   r%   s    r   test_for_name_does_not_existz'BasicTests.test_for_name_does_not_exist,   s5    34 	5""#34	5 	5 	5   5>c                     | j                  t              5 }t        j                  d       ddd       dt	        j
                        v sJ y# 1 sw Y   #xY w)z
        When a package is not found, that could indicate that the
        package is not installed or that it is installed without
        metadata. Ensure the exception mentions metadata to help
        guide users toward the cause. See #124.
        r*   Nr   )r+   r	   r   r   r!   	exception)r%   r   s     r   (test_package_not_found_mentions_metadataz3BasicTests.test_package_not_found_mentions_metadata0   sR     34 	5""#34	5 S////	5 	5s   AAc                     | j                  t              5   t        dt        fi               d d d        y # 1 sw Y   y xY w)NDistributionSubclass)r+   	TypeErrortyper   r,   s    r   test_abc_enforcedzBasicTests.test_abc_enforced=   s?     y) 	@=D',"=?	@ 	@ 	@s	   7A Nname c                     | j                  t              5  t        j                  |       d d d        y # 1 sw Y   y xY wN)r+   
ValueErrorr   r   )r%   r8   s     r    test_invalid_inputs_to_from_namez+BasicTests.test_invalid_inputs_to_from_nameC   s5    
 z* 	)""4(	) 	) 	)r.   )__name__
__module____qualname__r$   r'   r-   r1   r   AssertionErrorr   r6   r   parameterizedictr=    r(   r   r   r   $   sk    (O<
5
0 n!@ " @ X$")	)r(   r   c                   $    e Zd Zd Zd Zd Zd Zy)ImportTestsc                     | j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY w)Ndoes_not_exist)r+   ImportError	importlibimport_moduler,   s    r   test_import_nonexistent_modulez*ImportTests.test_import_nonexistent_moduleM   s6     {+ 	6##$45	6 	6 	6r.   c                 v    t        d      d   }| j                  |j                         j                  d       y )Nentriesgroupmain)r   assertEqualloadr>   r%   eps     r   test_resolvezImportTests.test_resolveS   s-    	*62++V4r(   c                 Z    t        d      d   }| j                  |j                  d       y )NrN   rO   zns:subzmod:main)r   rR   valuerT   s     r   "test_entrypoint_with_colon_in_namez.ImportTests.test_entrypoint_with_colon_in_nameW   s%    	*84:.r(   c                 d    t        ddd      }|j                         t        j                  u sJ y )NrU   zimportlib.metadatagrpr8   rX   rP   )r   rS   rJ   r   rT   s     r   test_resolve_without_attrz%ImportTests.test_resolve_without_attr[   s1    &

 wwyI.....r(   N)r>   r?   r@   rL   rV   rY   r]   rD   r(   r   rF   rF   L   s    65//r(   rF   c                   .    e Zd Zed        Zd Zd Zd Zy)NameNormalizationTestsc                     |  dddiiS )zu
        Create minimal metadata for a dist-info package with
        the indicated name on the file system.
        
.dist-infoMETADATAzVERSION: 1.0
rD   r7   s    r   make_pkgzNameNormalizationTests.make_pkge   s#     fJ,"
 	
r(   c                     t        j                  | j                  d      | j                         t	        d      dk(  sJ y)z
        For a package with a dash in the name, the dist-info metadata
        uses underscores in the name. Ensure the metadata loads.
        my_pkgzmy-pkg1.0N)r   build_filesrc   site_dirr   r,   s    r   -test_dashes_in_dist_name_found_as_underscoreszDNameNormalizationTests.test_dashes_in_dist_name_found_as_underscoresq   s4    
 	T]]84dmmDx E)))r(   c                     d}t        j                  | j                  |      | j                         t	        |      dk(  sJ t	        |j                               dk(  sJ t	        |j                               dk(  sJ y)zG
        Ensure the metadata loads when queried with any case.
        CherryPyrf   N)r   rg   rc   rh   r   lowerupper)r%   pkg_names     r    test_dist_name_found_as_any_casez7NameNormalizationTests.test_dist_name_found_as_any_casey   sm     T]]84dmmDx E)))x~~'(E111x~~'(E111r(   c                    t        j                  | j                  d      | j                         t	        t        t                           }| j                   j                  t        j                               }| j                   j                  | j                  |             t        j                  | j                  d      |       t	        t        t                           }t        |      t        |      k(  sJ y)z~
        Two distributions varying only by non-normalized name on
        the file system should resolve as the same.
        abcABCN)r   rg   rc   rh   listr
   r   enter_contexttempdiradd_sys_pathlen)r%   beforealt_site_dirafters       r   test_unique_distributionsz0NameNormalizationTests.test_unique_distributions   s    
 	T]]514==Agmo./}}2283C3C3EF##D$5$5l$CDT]]51<@W]_-.5zS[(((r(   N)r>   r?   r@   staticmethodrc   ri   ro   r{   rD   r(   r   r_   r_   d   s#    	
 	
*2)r(   r_   c                   8    e Zd Zed        Zed        Zd Zd Zy)NonASCIITestsc                 <    dddii}t        j                  ||        y)zb
        Create minimal metadata for a package with non-ASCII in
        the description.
        portend.dist-inforb   u   Description: pôrˈtendportendr   rg   rh   contentss     r   pkg_with_non_ascii_descriptionz,NonASCIITests.pkg_with_non_ascii_description   s.      5"

 	Xx0r(   c                 <    dddii}t        j                  ||        y)zl
        Create minimal metadata for an egg-info package with
        non-ASCII in the description.
        r   rb   u:   
                Name: portend

                pôrˈtendr   r   r   s     r   'pkg_with_non_ascii_description_egg_infoz5NonASCIITests.pkg_with_non_ascii_description_egg_info   s0       "
 	Xx0r(   c                 d    | j                  | j                        }t        |      }|d   dk(  sJ y NDescriptionu
   pôrˈtend)r   rh   r   r%   rn   metas      r   test_metadata_loadsz!NonASCIITests.test_metadata_loads   s3    66t}}E!M"l222r(   c                 d    | j                  | j                        }t        |      }|d   dk(  sJ y r   )r   rh   r   r   s      r   test_metadata_loads_egg_infoz*NonASCIITests.test_metadata_loads_egg_info   s3    ??N!M"l222r(   N)r>   r?   r@   r|   r   r   r   r   rD   r(   r   r~   r~      s2        3
3r(   r~   c                       e Zd Zd Zd Zy)DiscoveryTestsc                    t        t                     }t        d |D              sJ t        d |D              sJ t        d |D              sJ t        d |D              sJ t        d |D              sJ t        d |D              sJ y )Nc              3   <   K   | ]  }t        |t                y wr;   )r    r   .0r&   s     r   	<genexpr>z8DiscoveryTests.test_package_discovery.<locals>.<genexpr>   s     Dd:dL1Ds   c              3   @   K   | ]  }|j                   d    dk(    yw)Nameegginfo-pkgNr   r   s     r   r   z8DiscoveryTests.test_package_discovery.<locals>.<genexpr>   s     Ld4==(M9L   c              3   @   K   | ]  }|j                   d    dk(    yw)r   egg_with_module-pkgNr   r   s     r   r   z8DiscoveryTests.test_package_discovery.<locals>.<genexpr>   s     Td4==(,AATr   c              3   @   K   | ]  }|j                   d    dk(    yw)r   egg_with_no_modules-pkgNr   r   s     r   r   z8DiscoveryTests.test_package_discovery.<locals>.<genexpr>   s     X$4==(,EEXr   c              3   @   K   | ]  }|j                   d    dk(    yw)r   sources_fallback-pkgNr   r   s     r   r   z8DiscoveryTests.test_package_discovery.<locals>.<genexpr>   s     Ut4==(,BBUr   c              3   @   K   | ]  }|j                   d    dk(    yw)r   r   Nr   r   s     r   r   z8DiscoveryTests.test_package_discovery.<locals>.<genexpr>   s     Mt4==(N:Mr   )rs   r   allany)r%   distss     r   test_package_discoveryz%DiscoveryTests.test_package_discovery   s    ]_%DeDDDDLeLLLLTeTTTTXRWXXXXUuUUUUMuMMMMr(   c                     | j                  t              5  t        t        dd             d d d        y # 1 sw Y   y xY w)N	somethingelse)contextr8   )r+   r<   rs   r   r,   s    r   test_invalid_usagez!DiscoveryTests.test_invalid_usage   s8    z* 	B{@A	B 	B 	Bs   6?N)r>   r?   r@   r   r   rD   r(   r   r   r      s    NBr(   r   c                       e Zd Zd Zd Zy)DirectoryTestc                     | j                   j                  d      j                          | j                  t              5  t        d       d d d        y # 1 sw Y   y xY w)NzEGG-INFOzunknown-package)rh   joinpathmkdirr+   r	   r   r,   s    r   test_egg_infozDirectoryTest.test_egg_info   sJ    z*00234 	'%&	' 	' 	's   AAc                    | j                   j                  d      }|j                          | j                  |      5  | j	                  t
              5  t        d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzfoo-3.6.eggfoo)rh   r   r   rv   r+   r	   r   )r%   eggs     r   test_eggzDirectoryTest.test_egg   sr    mm$$]3		s# 	""#78 	 	 	 	s#   A<A0A<0A9	5A<<BN)r>   r?   r@   r   r   rD   r(   r   r   r      s    'r(   r   c                       e Zd ZdZd Zy)MissingSysPathz/does-not-existc                 @    t         j                  j                          yzp
        Discovering distributions should succeed even if
        there is an invalid path on sys.path.
        N)rJ   r   r   r,   s    r   test_discoveryzMissingSysPath.test_discovery   s    
 	((*r(   N)r>   r?   r@   rh   r   rD   r(   r   r   r      s     H+r(   r   c                   (     e Zd ZdZ fdZd Z xZS )InaccessibleSysPathz/access-deniedc                     t         |           | j                          | j                  j	                  | j
                  d       y )Nr   )	perm_bits)supersetUpsetUpPyfakefsfs
create_dirrh   )r%   	__class__s    r   r   zInaccessibleSysPath.setUp   s3    4==C8r(   c                 R    t        t        j                  j                                yr   )rs   rJ   r   r   r,   s    r   r   z"InaccessibleSysPath.test_discovery   s    
 	Y--/0r(   )r>   r?   r@   rh   r   r   __classcell__r   s   @r   r   r      s    H9
1r(   r   c                   N     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Z xZS )
TestEntryPointsc                 l    t        |   |  t        j                  j	                  ddd      | _        y )Nr8   rX   rP   r\   )r   __init__rJ   r   r   rU   )r%   argsr   s     r   r   zTestEntryPoints.__init__   s4    $$$//wg 0 
r(   c                     t        j                  t        j                  | j                              }|| j                  k(  sJ y r;   )pickleloadsdumpsrU   )r%   reviveds     r   test_entry_point_pickleablez+TestEntryPoints.test_entry_point_pickleable  s/    ,,v||DGG45$''!!!r(   c                     t        ddd       y)zH
        Capture legacy (namedtuple) construction, discouraged.
        r8   rX   rP   N)r   r,   s    r   test_positional_argsz$TestEntryPoints.test_positional_args
  s     	67G,r(   c                 z    | j                  t              5  d| j                  _        ddd       y# 1 sw Y   yxY w)zEntryPoints should be immutablebadactorN)r+   AttributeErrorrU   r8   r,   s    r   test_immutablezTestEntryPoints.test_immutable  s0    ~. 	&%DGGL	& 	& 	&s   1:c                     dt        | j                        v sJ dt        | j                        v sJ dt        | j                        v sJ y )Nr   zname=z'name')reprrU   r,   s    r   	test_reprzTestEntryPoints.test_repr  sD    tDGG},,,$tww-'''4=(((r(   c                 .    t        | j                         y)zEntryPoints should be hashableN)hashrU   r,   s    r   test_hashablezTestEntryPoints.test_hashable  s    TWWr(   c                 :    | j                   j                  dk(  sJ y )NrX   )rU   moduler,   s    r   test_modulezTestEntryPoints.test_module  s    ww~~(((r(   c                 4    | j                   j                  J y r;   )rU   attrr,   s    r   	test_attrzTestEntryPoints.test_attr!  s    ww||###r(   c                 N    t        t        ddd      t        ddd      g       y)zK
        EntryPoint objects are sortable, but result is undefined.
        bvalrP   r\   aN)sortedr   r,   s    r   test_sortablezTestEntryPoints.test_sortable$  s)     	5@5@	
r(   )r>   r?   r@   r   r   r   r   r   r   r   r   r   r   r   s   @r   r   r      s0    
"-&
)
)$	
r(   r   c                       e Zd Zd Zy)
FileSystemc                     t        j                  | j                         i i| j                         t	        t                      y)zb
        Ensure a Unicode subdirectory of a directory on sys.path
        does not crash.
        prefixN)r   rg   unicode_filenamerh   rs   r   r,   s    r   test_unicode_dir_on_sys_pathz'FileSystem.test_unicode_dir_on_sys_path3  s6    
 	""$b)==	
 	]_r(   N)r>   r?   r@   r   rD   r(   r   r   r   0  s    	r(   r   c                       e Zd Zd Zd Zy)!PackagesDistributionsPrebuiltTestc                 L    | j                  d       t               d   dgk(  sJ y )Nzexample-21.12-py3-none-any.whlexample_fixture_on_pathr   r,   s    r   #test_packages_distributions_examplezEPackagesDistributionsPrebuiltTest.test_packages_distributions_example@  s)    >?%'	2ykAAAr(   c                 L    | j                  d       t               d   dgk(  sJ y)zT
        Test packages_distributions on a wheel built
        by trampolim.
        zexample2-1.0.0-py3-none-any.whlexample2Nr   r,   s    r   $test_packages_distributions_example2zFPackagesDistributionsPrebuiltTest.test_packages_distributions_example2D  s+    
 	?@%'
3
|CCCr(   N)r>   r?   r@   r   r   rD   r(   r   r   r   ?  s    BDr(   r   c                       e Zd Zd Zd Zy)PackagesDistributionsTestc                 b    t        j                  dddii| j                         t                y)zN
        Test a package built without 'top-level.txt' or a file list.
        ztrim_example-1.0.0.dist-inforb   zS
                Name: trim_example
                Version: 1.0.0
                r   N)r   rg   rh   r   r,   s    r   6test_packages_distributions_neither_toplevel_nor_fileszPPackagesDistributionsTest.test_packages_distributions_neither_toplevel_nor_filesP  s8     	. !1 ==
	
 	 r(   c                 2   t         j                  j                         }t        d      }d|i}t	        |      D ]3  \  }}|j                  d| | dd| d| did| d	dd| dii       5  |j
                  t        j                  |      
       t        j                  || j                         t               }t        t        |            D ],  }|d|    dgk(  sJ |d|    dgk(  sJ |d|    dgk(  r,J  t        d |D              rJ y)zW
        Test top-level modules detected on a package without 'top-level.txt'.
        zX
                Name: all_distributions
                Version: 1.0.0
                )rb   z!all_distributions-1.0.0.dist-infozimportable-name r9   in_namespace_modin_package_z__init__.py)RECORDr   all_distributionsc              3   >   K   | ]  }|j                  d         yw)ra   N)endswith)r   r8   s     r   r   zYPackagesDistributionsTest.test_packages_distributions_all_module_types.<locals>.<genexpr>  s     Mtt}}\2Ms   N)rJ   	machineryall_suffixesrC   	enumerateupdater   build_recordrg   rh   r   rangerw   r   )r%   suffixesr   filesisuffixr   s          r   ,test_packages_distributions_all_module_typeszFPackagesDistributionsTest.test_packages_distributions_all_module_typesa  sp    &&335
 0
 #8, 	IAvLL&qc&2B#A3'fX* "!%%rfX(		 	x44U;<U4==9.0s8}% 	MA #3A3!78=P<QQQQ =!45:M9NNNN ;qc!238K7LLLL	M
 M}MMMMMr(   N)r>   r?   r@   r   r  rD   r(   r   r   r   M  s    !"%Nr(   r   c                       e Zd Zd Zy)PackagesDistributionsEggTestc                     t               fd} |d      dhk(  sJ  |d      dhk(  sJ  |d      t               k(  sJ  |d      dhk(  sJ y	)
z
        Test old-style egg packages with a variation of 'top_level.txt',
        'SOURCES.txt', and 'installed-files.txt', available.
        c                 `     j                          D ch c]  \  }}| |v r| c}}S c c}}w r;   )items)package_nameimport_namepackage_namesr   s      r   import_names_from_packagezcPackagesDistributionsEggTest.test_packages_distributions_on_eggs.<locals>.import_names_from_package  s=     3F-2E2E2G.K=0   s   *r   r  r   egg_with_moduler   r   sources_fallbackN)r   set)r%   r  r   s     @r   #test_packages_distributions_on_eggsz@PackagesDistributionsEggTest.test_packages_distributions_on_eggs  su    
 /0	 )7E7BBB ))>?DUCVVVV ))BCsuLLL ))?@EWDXXXXr(   N)r>   r?   r@   r  rD   r(   r   r  r    s    Yr(   r  )3r"   r   unittestr   importlib.metadatarJ   
contextlib	itertools!pyfakefs.fake_filesystem_unittestr   ffsrI   stubsr9   r   _contextr   r   r   r	   r
   r   r   r   r   r   contextmanagerr   DistInfoPkgTestCaser   rF   	OnSysPathSiteDirr_   r~   
EggInfoPkg EggInfoPkgPipInstalledNoToplevelEggInfoPkgPipInstalledNoModulesEggInfoPkgSourcesFallbackr   r   r   r   r   FileBuilderr   ZipFixturesr   r   r  rD   r(   r   <module>r3     s5   	      73  
 
 
  %)%%x'8'8 %)P/(&&(9(9 /0,)X//1A1A8CTCT ,)^(3H&&(8(8(:K:K (3VB--,,&&B,H&&(8(8(:K:K  +X''):): +1(,,cll 1 .
h'' .
b(((*>*>@Q@QD(<(<h>O>O D9N(((*;*;9Nx"Y--,,&&"Y}  7667s   I= =JJ