
    z%i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    Q/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/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      }y )Nzdistinfo-pkg)r   	from_name)selfdists     r   test_retrieves_version_of_selfz)BasicTests.test_retrieves_version_of_self'   s    %%n5    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       y# 1 sw Y   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   s     r   (test_package_not_found_mentions_metadataz3BasicTests.test_package_not_found_mentions_metadata0   s9     34 	5""#34	5 	5 	5r)   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   r2   s     r    test_invalid_inputs_to_from_namez+BasicTests.test_invalid_inputs_to_from_nameC   s5    
 z* 	)""4(	) 	) 	)r)   )__name__
__module____qualname__version_patternr!   r(   r+   r   AssertionErrorr   r0   r   parameterizedictr7    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loadr8   r   eps     r   test_resolvezImportTests.test_resolveS   s-    	*62++V4r"   c                 Z    t        d      d   }| j                  |j                  d       y )NrI   rJ   zns:subzmod:main)r   rM   valuerO   s     r   "test_entrypoint_with_colon_in_namez.ImportTests.test_entrypoint_with_colon_in_nameW   s%    	*84:.r"   c                      t        ddd      }y )NrP   zimportlib.metadatagrpr2   rS   rK   r   rO   s     r   test_resolve_without_attrz%ImportTests.test_resolve_without_attr[   s    &
r"   N)r8   r9   r:   rG   rQ   rT   rY   r?   r"   r   rA   rA   L   s    65//r"   rA   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.
        z
.dist-infoMETADATAzVERSION: 1.0
r?   r1   s    r   make_pkgzNameNormalizationTests.make_pkge   s#     fJ,"
 	
r"   c                 b    t        j                  | j                  d      | 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_pkgNr   build_filesr^   site_dirr'   s    r   -test_dashes_in_dist_name_found_as_underscoreszDNameNormalizationTests.test_dashes_in_dist_name_found_as_underscoresq   s!    
 	T]]84dmmDr"   c                 f    d}t        j                  | j                  |      | j                         y)zG
        Ensure the metadata loads when queried with any case.
        CherryPyNra   )r   pkg_names     r    test_dist_name_found_as_any_casez7NameNormalizationTests.test_dist_name_found_as_any_casey   s&     T]]84dmmDr"   c                    t        j                  | j                  d      | j                         t	        t        t                           }| j                   j                  t        j                               }| j                   j                  | j                  |             t        j                  | j                  d      |       t	        t        t                           }y)z~
        Two distributions varying only by non-normalized name on
        the file system should resolve as the same.
        abcABCN)
r   rb   r^   rc   listr
   r   enter_contexttempdiradd_sys_path)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]_-.r"   N)r8   r9   r:   staticmethodr^   rd   rh   rs   r?   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-infor]   u   Description: pôrˈtendportendr   rb   rc   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.
        rx   r]   u:   
                Name: portend

                pôrˈtendry   rz   r{   s     r   'pkg_with_non_ascii_description_egg_infoz5NonASCIITests.pkg_with_non_ascii_description_egg_info   s0       "
 	Xx0r"   c                 P    | j                  | j                        }t        |      }y r5   )r}   rc   r   r   rg   metas      r   test_metadata_loadsz!NonASCIITests.test_metadata_loads   s     66t}}E!r"   c                 P    | j                  | j                        }t        |      }y r5   )r   rc   r   r   s      r   test_metadata_loads_egg_infoz*NonASCIITests.test_metadata_loads_egg_info   s     ??N!r"   N)r8   r9   r:   rt   r}   r   r   r   r?   r"   r   rv   rv      s2        3
3r"   rv   c                       e Zd Zd Zd Zy)DiscoveryTestsc                 *    t        t                     }y r5   )rl   r   )r   distss     r   test_package_discoveryz%DiscoveryTests.test_package_discovery   s    ]_%r"   c                     | j                  t              5  t        t        dd             d d d        y # 1 sw Y   y xY w)N	somethingelse)contextr2   )r&   r6   rl   r   r'   s    r   test_invalid_usagez!DiscoveryTests.test_invalid_usage   s8    z* 	B{@A	B 	B 	Bs   6?N)r8   r9   r:   r   r   r?   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)rc   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)rc   r   r   ro   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)r8   r9   r:   r   r   r?   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)rE   r   r   r'   s    r   test_discoveryzMissingSysPath.test_discovery   s    
 	((*r"   N)r8   r9   r:   rc   r   r?   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_dirrc   )r   	__class__s    r   r   zInaccessibleSysPath.setUp   s3    4==C8r"   c                 R    t        t        j                  j                                yr   )rl   rE   r   r   r'   s    r   r   z"InaccessibleSysPath.test_discovery   s    
 	Y--/0r"   )r8   r9   r:   rc   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 )Nr2   rS   rK   rW   )r   __init__rE   r   r   rP   )r   argsr   s     r   r   zTestEntryPoints.__init__   s4    $$$//wg 0 
r"   c                 h    t        j                  t        j                  | j                              }y r5   )pickleloadsdumpsrP   )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.
        r2   rS   rK   NrX   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&   AttributeErrorrP   r2   r'   s    r   test_immutablezTestEntryPoints.test_immutable  s0    ~. 	&%DGGL	& 	& 	&s   1:c                      y r5   r?   r'   s    r   	test_reprzTestEntryPoints.test_repr      r"   c                 .    t        | j                         y)zEntryPoints should be hashableN)hashrP   r'   s    r   test_hashablezTestEntryPoints.test_hashable  s    TWWr"   c                      y r5   r?   r'   s    r   test_modulezTestEntryPoints.test_module  r   r"   c                      y r5   r?   r'   s    r   	test_attrzTestEntryPoints.test_attr!  r   r"   c                 N    t        t        ddd      t        ddd      g       y)zK
        EntryPoint objects are sortable, but result is undefined.
        bvalrK   rW   aN)sortedr   r'   s    r   test_sortablezTestEntryPoints.test_sortable$  s)     	5@5@	
r"   )r8   r9   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   rb   unicode_filenamerc   rl   r   r'   s    r   test_unicode_dir_on_sys_pathz'FileSystem.test_unicode_dir_on_sys_path3  s6    
 	""$b)==	
 	]_r"   N)r8   r9   r:   r   r?   r"   r   r   r   0  s    	r"   r   c                       e Zd Zd Zd Zy)!PackagesDistributionsPrebuiltTestc                 &    | j                  d       y )Nzexample-21.12-py3-none-any.whl_fixture_on_pathr'   s    r   #test_packages_distributions_examplezEPackagesDistributionsPrebuiltTest.test_packages_distributions_example@  s    >?r"   c                 &    | j                  d       y)zT
        Test packages_distributions on a wheel built
        by trampolim.
        zexample2-1.0.0-py3-none-any.whlNr   r'   s    r   $test_packages_distributions_example2zFPackagesDistributionsPrebuiltTest.test_packages_distributions_example2D  s    
 	?@r"   N)r8   r9   r:   r   r   r?   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-infor]   zS
                Name: trim_example
                Version: 1.0.0
                r   N)r   rb   rc   r   r'   s    r   6test_packages_distributions_neither_toplevel_nor_fileszPPackagesDistributionsTest.test_packages_distributions_neither_toplevel_nor_filesP  s8     	. !1 ==
	
 	 r"   c                    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 ]  } y)zW
        Test top-level modules detected on a package without 'top-level.txt'.
        zX
                Name: all_distributions
                Version: 1.0.0
                )r]   z!all_distributions-1.0.0.dist-infozimportable-name r3   in_namespace_modin_package_z__init__.py)RECORDr   N)rE   	machineryall_suffixesr>   	enumerateupdater   build_recordrb   rc   r   rangelen)r   suffixesr   filesisuffixr   s          r   ,test_packages_distributions_all_module_typeszFPackagesDistributionsTest.test_packages_distributions_all_module_typesa  s     &&335
 0
 #8, 	IAvLL&qc&2B#A3'fX* "!%%rfX(		 	x44U;<U4==9.0s8}% 	MA 	Mr"   N)r8   r9   r:   r   r   r?   r"   r   r   r   M  s    !"%Nr"   r   c                       e Zd Zd Zy)PackagesDistributionsEggTestc                 $    t               fd}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 r5   )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   *N)r   )r   r   r   s     @r   #test_packages_distributions_on_eggsz@PackagesDistributionsEggTest.test_packages_distributions_on_eggs  s    
 /0	r"   N)r8   r9   r:   r   r?   r"   r   r   r     s    Yr"   r   )3rer   unittestr   importlib.metadatarE   
contextlib	itertools!pyfakefs.fake_filesystem_unittestr   ffsrD   stubsr3   r   _contextr   r   r   r	   r
   r   r   r   r   r   contextmanagerr   DistInfoPkgTestCaser   rA   	OnSysPathSiteDirr[   rv   
EggInfoPkg EggInfoPkgPipInstalledNoToplevelEggInfoPkgPipInstalledNoModulesEggInfoPkgSourcesFallbackr   r   r   r   r   FileBuilderr   ZipFixturesr   r   r   r?   r"   r   <module>r     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