
#þîh‹  ã               @   s¢   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 Gd d „  d ƒ Z Gd	 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 j ƒ  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  j ƒ  |  _ |  j ƒ  d  S)N)ÚtempfileÚmkdtempÚdist_dirÚ_make_pkg_structure)ÚselfÚmethod© r   úI/tmp/pip-build-zijwfla7/setuptools/setuptools/tests/test_find_packages.pyÚsetup_method   s    zTestFindPackages.setup_methodc             C   s   t  j |  j ƒ d  S)N)ÚshutilÚrmtreer
   )r   r   r   r   r   Úteardown_method   s    z TestFindPackages.teardown_methodc             C   sî   |  j  d |  j ƒ |  _ |  j d |  j ƒ |  j  d |  j ƒ |  _ |  j  d |  j ƒ |  j  d |  j ƒ |  _ |  j d |  j ƒ |  j  d |  j ƒ |  _ |  j  d |  j ƒ |  _ |  j d	 |  j ƒ |  j d
 |  j ƒ |  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assetz__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 j | | ƒ } t  j | ƒ | S)N)ÚosÚpathÚjoinÚmkdir)r   r   Ú
parent_dirr   r   r   r   4   s    zTestFindPackages._mkdirc             C   s2   | r t  j j | | ƒ } t | d ƒ j ƒ  | S)NÚwb)r   r   r   ÚopenÚclose)r   r   Zdir_r   r   r   r   :   s    zTestFindPackages._touchc             C   s>   |  j  d |  j ƒ t |  j ƒ } | d d g k s: t ‚ d  S)Nz__init__.pyr   z
pkg.subpkg)r   r   r   r
   ÚAssertionError)r   Úpackagesr   r   r   Útest_regular_package@   s    z%TestFindPackages.test_regular_packagec             C   sA   |  j  d |  j ƒ t |  j d d ƒ} | d g k s= t ‚ d  S)Nz__init__.pyÚexcludeúpkg.*r   )r(   )r   r   r   r
   r$   )r   r%   r   r   r   Útest_excludeE   s    zTestFindPackages.test_excludec             C   sT   |  j  d |  j ƒ |  j  d |  j ƒ t |  j d d ƒ} | d g k sP t ‚ d S)zW
        Excluding a parent package should not exclude child packages as well.
        z__init__.pyr'   r   z
pkg.subpkgN)zpkg)r   r   r   r   r
   r$   )r   r%   r   r   r   Útest_exclude_recursiveJ   s    z'TestFindPackages.test_exclude_recursivec             C   si   |  j  d |  j ƒ |  j d |  j ƒ } |  j  d | ƒ t |  j d d g ƒ} | d g k se t ‚ d S)zM
        If include is specified, other packages should be excluded.
        z__init__.pyZ	other_pkgÚincludeN)r   r   r   r
   r   r$   )r   Zalt_dirr%   r   r   r   Útest_include_excludes_otherS   s
    z,TestFindPackages.test_include_excludes_otherc             C   sy   t  j t j j |  j d ƒ ƒ |  j d |  j ƒ } |  j d | ƒ |  j d | ƒ t	 |  j ƒ } d | k su t
 ‚ d  S)Nzpkg/subpkg/assetsz	some.dataz__init__.pyzfile.datzpkg.some.data)r   r   r   r   r   r
   r   r   r   r   r$   )r   Zdata_dirr%   r   r   r   Útest_dir_with_dot_is_skipped]   s    z-TestFindPackages.test_dir_with_dot_is_skippedc             C   s\   |  j  d |  j ƒ } |  j  d | ƒ } |  j d | ƒ t |  j ƒ } d | k sX t ‚ d S)zk
        Ensure that a package in a non-package such as build/pkg/__init__.py
        is excluded.
        Úbuildr   z__init__.pyz	build.pkgN)r   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_excludedÚreasonzSymlink support requiredc             C   sx   |  j  d |  j ƒ t j j |  j d ƒ } t j d | ƒ t j j | ƒ sS t ‚ t	 |  j ƒ } d | k st t ‚ 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.
        z__init__.pyZlpkgr   N)
r   r   r   r   r   r
   ÚsymlinkÚisdirr$   r   )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 t ‚ d  S)N)Úsetr$   )r   ÚactualÚexpectedr   r   r   Ú_assert_packages   s    z!TestFindPackages._assert_packagesc             C   s>   t  |  j d d g d d g ƒ} |  j | d d d g ƒ d  S)Nr+   zpkg*r'   zpkg.subpkg.assetsr   z	pkg.nspkgz
pkg.subpkg)r   r
   r8   )r   r%   r   r   r   Útest_pep420_ns_package‚   s    z'TestFindPackages.test_pep420_ns_packagec             C   s8   t  |  j d d g ƒ} |  j | d d d d g ƒ d  S)Nr'   zpkg.subpkg.assetsr   r   z	pkg.nspkgz
pkg.subpkg)r   r
   r8   )r   r%   r   r   r   Ú"test_pep420_ns_package_no_includesˆ   s    z3TestFindPackages.test_pep420_ns_package_no_includesc             C   s8   t  |  j ƒ } d d d d d g } |  j | | ƒ d  S)Nr   r   z	pkg.nspkgz
pkg.subpkgzpkg.subpkg.assets)r   r
   r8   )r   r%   r7   r   r   r   Ú.test_pep420_ns_package_no_includes_or_excludesŒ   s    z?TestFindPackages.test_pep420_ns_package_no_includes_or_excludesc             C   sK   |  j  d |  j ƒ t |  j d d d g ƒ} |  j | d d d g ƒ d  S)Nz__init__.pyr'   r   zpkg.subpkg.assetsr   z	pkg.nspkgz
pkg.subpkg)r   r   r   r
   r8   )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 |  j ƒ t  j t j j |  j d ƒ ƒ t |  j ƒ } |  j | d d d g ƒ d  S)Nzpkg/subpkg/assetsr   z	pkg.nspkgz
pkg.subpkg)	r   r   r   r   r   r   r
   r   r8   )r   r%   r   r   r   Ú*test_pep420_ns_package_no_non_package_dirs˜   s    z;TestFindPackages.test_pep420_ns_package_no_non_package_dirs)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r&   r)   r*   r,   r-   r0   ÚpytestÚmarkZskipifr   Zcan_symlinkr4   r8   r9   r:   r;   r<   r=   r   r   r   r   r      s$   	
+r   c               @   s	  e  Z d  Z d d d d g d d g f d d d	 g d d
 g f d d d d g g  f d d d d g d g f d d d d g d g f d d d d d d d g d d d g f d d d d d  d! d" d# d$ g d d% d& g f i Z e j j d' e j ƒ  ƒ d( d) „  ƒ Z d* S)+ÚTestFlatLayoutPackageFinderzhidden-foldersz.pkg/__init__.pyzpkg/__init__.pyzpkg/nested/file.txtr   z
pkg.nestedzprivate-packagesz_pkg/__init__.pyzpkg/_private/__init__.pyzpkg._privatezinvalid-namezinvalid-pkg/__init__.pyzother.pkg/__init__.pyzyet,another/file.pyr   zdocs/conf.pyzdocs/readme.rstÚtestsztests/test_pkg.pyztests/__init__.pyZexampleszexamples/__init__.pyzexamples/file.pyzexample/other_file.pyzpkg/example/__init__.pyzpkg/examples/__init__.pyzpkg.exampleszpkg.exampleztool-specificzhtmlcov/index.htmlztasks/__init__.pyztasks/subpackage/__init__.pyzfabfile/__init__.pyzfabfile/subpackage/__init__.pyzpkg/tasks/__init__.pyzpkg/fabfile/__init__.pyz	pkg.taskszpkg.fabfileÚexamplec             C   sW   |  j  | \ } } t | | ƒ t j t | ƒ ƒ } t | ƒ t | ƒ k sS t ‚ d  S)N)ÚEXAMPLESÚensure_filesr   ÚfindÚstrr5   r$   )r   Útmp_pathrE   ÚfilesZexpected_packagesZfound_packagesr   r   r   Ú&test_unwanted_directories_not_includedÎ   s    zBTestFlatLayoutPackageFinder.test_unwanted_directories_not_includedN)	r>   r?   r@   rF   rA   rB   ZparametrizeÚkeysrL   r   r   r   r   rC   Ÿ   s@   		rC   c             C   sB   x; | D]3 } |  | } | j  j d d d d ƒ | j ƒ  q Wd  S)NÚparentsTÚexist_ok)Úparentr   Ztouch)Ú	root_pathrK   Úfiler   r   r   r   rG   Ö   s    
rG   )Ú__doc__r   r   r   rA   Ú
setuptoolsr   r   Zsetuptools.discoveryr   Zcompat.py39r   r   rC   rG   r   r   r   r   Ú<module>   s   �7