o
    Zh                     @   st   d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZ G dd dZG d	d
 d
Zdd ZdS )z%Tests for automatic package discovery    N)find_namespace_packagesfind_packages)FlatLayoutPackageFinder   )	os_helperc                   @   s   e Zd Zdd Zdd Zdd Zd(dd	Zd(d
dZdd Zdd Z	dd Z
dd Zdd Zdd Zejje  dddd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' ZdS ))TestFindPackagesc                 C   s   t  | _|   d S N)tempfilemkdtempdist_dir_make_pkg_structureselfmethod r   Z/var/www/html/lang_env/lib/python3.10/site-packages/setuptools/tests/test_find_packages.pysetup_method   s   
zTestFindPackages.setup_methodc                 C   s   t | j d S r   )shutilrmtreer   r   r   r   r   teardown_method   s   z TestFindPackages.teardown_methodc                 C   s   |  d| j| _| d| j |  d| j| _|  d| j |  d| j| _| d| j |  d| j| _|  d| j| _| d	| j | d
| j | d| j dS )aG  Make basic package structure.

        dist/
            docs/
                conf.py
            pkg/
                __pycache__/
                nspkg/
                    mod.py
                subpkg/
                    assets/
                        asset
                    __init__.py
            setup.py

        docszconf.pypkg__pycache__Znspkgzmod.pyZsubpkgZassetsZasset__init__.pyzsetup.pyN)_mkdirr   docs_dir_touchpkg_dirZ
ns_pkg_dirsub_pkg_dirZ	asset_dir)r   r   r   r   r      s   z$TestFindPackages._make_pkg_structureNc                 C   s    |r	t j||}t | |S r   )ospathjoinmkdir)r   r    
parent_dirr   r   r   r   4   s   
zTestFindPackages._mkdirc                 C   s$   |r	t j||}t|d  |S )Nwb)r   r    r!   openclose)r   r    Zdir_r   r   r   r   :   s   zTestFindPackages._touchc                 C   s,   |  d| j t| j}|ddgksJ d S )Nr   r   
pkg.subpkgr   r   r   r   r   packagesr   r   r   test_regular_package@   s   
z%TestFindPackages.test_regular_packagec                 C   s.   |  d| j t| jdd}|dgksJ d S )Nr   )zpkg.*excluder   r(   r)   r   r   r   test_excludeE   s   zTestFindPackages.test_excludec                 C   s<   |  d| j |  d| j t| jdd}|dgksJ dS )zW
        Excluding a parent package should not exclude child packages as well.
        r   )r   r,   r'   N)r   r   r   r   r   r)   r   r   r   test_exclude_recursiveJ   s   z'TestFindPackages.test_exclude_recursivec                 C   sJ   |  d| j | d| j}|  d| t| jdgd}|dgks#J dS )zM
        If include is specified, other packages should be excluded.
        r   Z	other_pkg)includeN)r   r   r   r   r   )r   Zalt_dirr*   r   r   r   test_include_excludes_otherS   s
   z,TestFindPackages.test_include_excludes_otherc                 C   sV   t tj| jd | d| j}| d| | d| t	| j}d|vs)J d S )Npkg/subpkg/assetsz	some.datar   zfile.datzpkg.some.data)
r   r   r   r    r!   r   r   r   r   r   )r   data_dirr*   r   r   r   test_dir_with_dot_is_skipped]   s   
z-TestFindPackages.test_dir_with_dot_is_skippedc                 C   s@   |  d| j}|  d|}| d| t| j}d|vsJ dS )zk
        Ensure that a package in a non-package such as build/pkg/__init__.py
        is excluded.
        buildr   r   z	build.pkgN)r   r   r   r   )r   	build_dirZbuild_pkg_dirr*   r   r   r   ,test_dir_with_packages_in_subdir_is_excludede   s
   
z=TestFindPackages.test_dir_with_packages_in_subdir_is_excludedzSymlink support required)reasonc                 C   sT   |  d| j tj| jd}td| tj|sJ t| j}d|v s(J dS )z
        A symbolically-linked directory should be treated like any other
        directory when matched as a package.

        Create a link from lpkg -> pkg.
        r   Zlpkgr   N)	r   r   r   r    r!   r   symlinkisdirr   )r   Z
linked_pkgr*   r   r   r   $test_symlinked_packages_are_includedp   s   
z5TestFindPackages.test_symlinked_packages_are_includedc                 C   s   t |t |ks
J d S r   )set)r   actualexpectedr   r   r   _assert_packages   s   z!TestFindPackages._assert_packagesc                 C   s(   t | jdgdgd}| |g d d S )Nzpkg*pkg.subpkg.assets)r0   r-   r   	pkg.nspkgr'   r   r   r?   r)   r   r   r   test_pep420_ns_package   s   z'TestFindPackages.test_pep420_ns_packagec                 C   s$   t | jdgd}| |g d d S )Nr@   r,   )r   r   rB   r'   rC   r)   r   r   r   "test_pep420_ns_package_no_includes   s   z3TestFindPackages.test_pep420_ns_package_no_includesc                 C   s"   t | j}g d}| || d S )N)r   r   rB   r'   r@   rC   )r   r*   r>   r   r   r   .test_pep420_ns_package_no_includes_or_excludes   s   
z?TestFindPackages.test_pep420_ns_package_no_includes_or_excludesc                 C   s4   |  d| j t| jddgd}| |g d d S )Nr   r   r@   r,   rA   )r   r   r   r   r?   r)   r   r   r   3test_regular_package_with_nested_pep420_ns_packages   s
   
zDTestFindPackages.test_regular_package_with_nested_pep420_ns_packagesc                 C   s@   t | j t tj| jd t| j}| |g d d S )Nr2   rA   )	r   r   r   r   r    r!   r   r   r?   r)   r   r   r   *test_pep420_ns_package_no_non_package_dirs   s   
z;TestFindPackages.test_pep420_ns_package_no_non_package_dirsr   )__name__
__module____qualname__r   r   r   r   r   r+   r.   r/   r1   r4   r7   pytestmarkZskipifr   Zcan_symlinkr;   r?   rD   rE   rF   rG   rH   r   r   r   r   r      s(    

	

r   c                	   @   s   e Zd Zg dddgfddgddgfg dg fg ddgfg d	dgfg d
g dfg dg dfdZejde dd ZdS )TestFlatLayoutPackageFinder)z.pkg/__init__.pypkg/__init__.pyzpkg/nested/file.txtr   z
pkg.nestedz_pkg/__init__.pyzpkg/_private/__init__.pyzpkg._private)zinvalid-pkg/__init__.pyzother.pkg/__init__.pyzyet,another/file.py)rO   zdocs/conf.pyzdocs/readme.rst)rO   ztests/test_pkg.pyztests/__init__.py)rO   zexamples/__init__.pyzexamples/file.pyzexample/other_file.pyzpkg/example/__init__.pyzpkg/examples/__init__.py)r   zpkg.exampleszpkg.example)zhtmlcov/index.htmlrO   ztasks/__init__.pyztasks/subpackage/__init__.pyzfabfile/__init__.pyzfabfile/subpackage/__init__.pyzpkg/tasks/__init__.pyzpkg/fabfile/__init__.py)r   z	pkg.taskszpkg.fabfile)zhidden-folderszprivate-packageszinvalid-namer   ZtestsZexamplesztool-specificexamplec                 C   s>   | j | \}}t|| tt|}t|t|ksJ d S r   )EXAMPLESensure_filesr   findstrr<   )r   Ztmp_pathrP   filesZexpected_packagesZfound_packagesr   r   r   &test_unwanted_directories_not_included   s   
zBTestFlatLayoutPackageFinder.test_unwanted_directories_not_includedN)	rI   rJ   rK   rQ   rL   rM   ZparametrizekeysrV   r   r   r   r   rN      s.    	.rN   c                 C   s.   |D ]}| | }|j jddd |  qd S )NT)parentsexist_ok)parentr"   touch)	root_pathrU   filer    r   r   r   rR      s
   
rR   )__doc__r   r   r	   rL   
setuptoolsr   r   Zsetuptools.discoveryr   Zcompat.py39r   r   rN   rR   r   r   r   r   <module>   s     7