o
    LK&h                     @   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   V/var/www/html/venv/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__nspkgzmod.pysubpkgassetsasset__init__.pyzsetup.pyN)_mkdirr   docs_dir_touchpkg_dir
ns_pkg_dirsub_pkg_dir	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&   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/   r0   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   r3   r.   N)r    r!   r#   r   r   r0   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   	other_pkg)includeN)r    r!   r   r   r   )r   alt_dirr1   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_dirr1   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_dirbuild_pkg_dirr1   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   lpkgr   N)	r    r!   r%   r&   r'   r   symlinkisdirr   )r   
linked_pkgr1   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)r8   r4   r   	pkg.nspkgr.   r   r   rK   r0   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 )NrL   r3   )r   r   rN   r.   rO   r0   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   rN   r.   rL   rO   )r   r1   rJ   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   rL   r3   rM   )r    r!   r   r   rK   r0   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 )Nr;   rM   )	r   r   r   r%   r&   r'   r   r   rK   r0   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    r2   r5   r6   r:   r=   rA   pytestmarkskipifr   can_symlinkrG   rK   rP   rQ   rR   rS   rT   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)r]   zdocs/conf.pyzdocs/readme.rst)r]   ztests/test_pkg.pyztests/__init__.py)r]   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.htmlr]   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   testsexamplesztool-specificexamplec                 C   s>   | j | \}}t|| tt|}t|t|ksJ d S r   )EXAMPLESensure_filesr   findstrrH   )r   tmp_pathr`   filesexpected_packagesfound_packagesr   r   r   &test_unwanted_directories_not_included   s   
zBTestFlatLayoutPackageFinder.test_unwanted_directories_not_includedN)	rU   rV   rW   ra   rX   rY   parametrizekeysri   r   r   r   r   r\      s.    	.r\   c                 C   s.   |D ]}| | }|j jddd |  qd S )NT)parentsexist_ok)parentr(   touch)	root_pathrf   filer&   r   r   r   rb      s
   
rb   )__doc__r%   r   r	   rX   
setuptoolsr   r   setuptools.discoveryr   compat.py39r   r   r\   rb   r   r   r   r   <module>   s     7