U
    ®[Öe÷Ç  ã                   @   sD  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Zd dlZzd dl	m
Z
 W n ek
rt   d dl
Z
Y nX d dlZd dlZd dlZd dlZd dlm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 ej ej eddd¡¡ZG d	d
„ d
ejƒZG dd„ dejƒZ G dd„ dejƒZ!G dd„ dejƒZ"G dd„ dej#ƒZ$G dd„ dej#ƒZ%G dd„ dej#ƒZ&G dd„ dej#ƒZ'G dd„ dej(ƒZ)G dd„ dej#ƒZ*G dd„ dej#ƒZ+G dd „ d ej#ƒZ,G d!d"„ d"ej#ƒZ-G d#d$„ d$ej#ƒZ.G d%d&„ d&ej#ƒZ/G d'd(„ d(ej#ƒZ0G d)d*„ d*ej#ƒZ1G d+d,„ d,ej#ƒZ2d-d.„ Z3dS )/é    N)Úmock)Úmatchers)Ú	wheelfile)Úgit)Ú	packaging)Úbasez..c                       sF   e Zd ZdZ‡ fdd„Z‡ fdd„Zddd„Zd	d
„ Zdd„ Z‡  Z	S )ÚTestRepozäA git repo for testing with.

    Use of TempHomeDir with this fixture is strongly recommended as due to the
    lack of config --local in older gits, it will write to the users global
    configuration without TempHomeDir.
    c                    s   t t| ƒ ¡  || _d S ©N)Úsuperr   Ú__init__Ú_basedir)ÚselfZbasedir©Ú	__class__© úZ/var/www/html/services/stratfitenv/lib/python3.8/site-packages/pbr/tests/test_packaging.pyr   O   s    zTestRepo.__init__c                    sB   t t| ƒ ¡  t dddg| j¡ t ¡  t dddg| j¡ d S )Nr   ÚinitÚ.Úadd)r
   r   ÚsetUpr   Ú_run_cmdr   Z_config_git©r   r   r   r   r   S   s    zTestRepo.setUpútest commitc                 C   sZ   t t | j¡ƒ}| jd|  }t|dƒ ¡  t dd|g| j¡ t ddd|g| j¡ d S )Nz/%dÚwtr   r   Úcommitú-m)ÚlenÚosÚlistdirr   ÚopenÚcloser   r   )r   Úmessage_contentÚfilesÚpathr   r   r   r   Y   s
    zTestRepo.commitc                 C   s   t  ddddg| j¡ d S )Nr   Úresetz--hardzHEAD^©r   r   r   r   r   r   r   Úuncommit`   s    zTestRepo.uncommitc                 C   s   t  dddd|g| j¡ d S )Nr   Útagz-smztest tagr%   ©r   Úversionr   r   r   r'   c   s     ÿzTestRepo.tag)r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r&   r'   Ú__classcell__r   r   r   r   r   G   s   
r   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚGPGKeyFixturezxCreates a GPG key for testing.

    It's recommended that this be used in concert with a unique home
    directory.
    c              	      s*  t t| ƒ ¡  |  t ¡ ¡}t d¡}t 	ddg|j
¡}|d  d¡D ]>}| |¡}|rFt| d¡ƒt| d¡ƒt| d¡ƒf} q’qF|d kr’d	}tj
 |j
d
¡}t|dƒ2}|d dkrÐ|d dkrÐ| d¡ | d¡ W 5 Q R X |d dkröd}n|d dkr
d}nd}t 	ddd||g|j
¡ d S )Nz#^gpg\s.*\s([\d+])\.([\d+])\.([\d+])Zgpgz	--versionr   Ú
é   é   é   )r   r   r   z
key-configr   zO
                %no-protection
                %transient-key
                zã
            %no-ask-passphrase
            Key-Type: RSA
            Name-Real: Example Key
            Name-Comment: N/A
            Name-Email: example@example.com
            Expire-Date: 2d
            %commit
            z--quick-randomz--debug-quick-randomÚ z	--gen-keyz--batch)r
   r/   r   Ú
useFixtureÚfixturesÚTempDirÚreÚcompiler   r   r#   ÚsplitÚmatchÚintÚgroupr   Újoinr   Úwrite)r   ÚtempdirZgnupg_version_reZgnupg_versionÚlineÚconfig_fileÚfZgnupg_randomr   r   r   r   o   s8    

þ
þzGPGKeyFixture.setUp)r*   r+   r,   r-   r   r.   r   r   r   r   r/   h   s   r/   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )	ÚVenvzªCreate a virtual environment for testing with.

    :attr path: The path to the environment root.
    :attr python: The path to the python binary in the environment.
    r   Nc                 C   sB   || _ |dkrdddtg}|| _|dkr8ddddg| _n|| _dS )	až  Create a Venv fixture.

        :param reason: A human readable string to bake into the venv
            file path to aid diagnostics in the case of failures.
        :param modules: A list of modules to install, defaults to latest
            pip, wheel, and the working copy of PBR.
        :attr pip_cmd: A list to override the default pip_cmd passed to
            python for installing base packages.
        r   ÚpipÚwheelÚbuildNr   z-vÚinstall)Ú_reasonÚPBR_ROOTÚmodulesÚpip_cmd)r   ÚreasonrK   rL   r   r   r   r   ¦   s    
zVenv.__init__c                 C   s¦   |   t ¡ ¡j}t |g¡ tj |dd¡}|g| j dg }| j	rvt
| j	ƒdkrv| | j	¡ |   t d| j |¡¡ |  t| d¡ |  t| d¡ || _|| _||fS )NÚbinÚpythonz-Ur   zmkvenv-r#   )r5   r6   r7   r#   Ú
virtualenvZcli_runr   r>   rL   rK   r   Úextendr   ZCapturedSubprocessrI   Ú
addCleanupÚdelattrrO   )r   r#   rO   Úcommandr   r   r   Ú_setUp¹   s     ÿzVenv._setUp)r   N)r*   r+   r,   r-   r   rU   r   r   r   r   rD   Ÿ   s   
rD   c                   @   sJ   e Zd ZdZe e d¡¡e e d¡¡dœZdd„ Z	dd„ Z
d	d
„ ZdS )ÚCreatePackageszÆCreates packages from dict with defaults

        :param package_dirs: A dict of package name to directory strings
        {'pkg_a': '/tmp/path/to/tmp/pkg_a', 'pkg_b': '/tmp/path/to/tmp/pkg_b'}
    z¶            #!/usr/bin/env python
            import setuptools
            setuptools.setup(
                setup_requires=['pbr'],
                pbr=True,
            )
        z=            [metadata]
            name = {pkg_name}
        ©úsetup.pyú	setup.cfgc                 C   s
   || _ dS )aX  Creates packages from dict with defaults

            :param packages: a dict where the keys are the package name and a
            value that is a second dict that may be empty, containing keys of
            filenames and a string value of the contents.
            {'package-a': {'requirements.txt': 'string', 'setup.cfg': 'string'}
        N)Úpackages)r   rZ   r   r   r   r   à   s    zCreatePackages.__init__c              	   C   sl   t j t j ||¡¡}t j |¡}t j |¡sH| |¡rDt  |¡ nt‚t	|dƒ}| 
|¡ W 5 Q R X d S )Nr   )r   r#   Úabspathr>   ÚdirnameÚexistsÚ
startswithÚmakedirsÚ
ValueErrorr   r?   )r   Ú	directoryÚ	file_nameÚcontentsr#   Zpath_dirrC   r   r   r   Ú
_writeFileê   s    
zCreatePackages._writeFilec                 C   sÜ   |   t ¡ ¡j}i }| jD ]¨}tj ||¡}|||< t |¡ dD ]D}|| j| krf| j|  |¡}n| j	| j
|d}|  |||¡ qB| j| D ]}|  ||| j| | ¡ q’|   t|ƒ¡ ¡  q|  t| d¡ || _|S )NrW   )Úpkg_nameÚpackage_dirs)r5   r6   r7   r#   rZ   r   r>   ÚmkdirÚpopÚdefaultsÚformatrd   r   r   rR   rS   rf   )r   Ztmpdirrf   re   Zpkg_pathÚcfrc   r   r   r   rU   õ   s"    

zCreatePackages._setUpN)r*   r+   r,   r-   ÚtextwrapÚdedentÚsixÚuri   r   rd   rU   r   r   r   r   rV   Ê   s   ÷
rV   c                       sp   e Zd ZdeddfdeddfgZ‡ fdd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Z‡  ZS )Ú TestPackagingInGitRepoWithCommitÚpreversionedT©rq   ÚpostversionedFc                    s.   t t| ƒ ¡  |  t| jƒ¡| _| j ¡  d S r	   )r
   rp   r   r5   r   Úpackage_dirÚrepor   r   r   r   r   r     s    z&TestPackagingInGitRepoWithCommit.setUpc              	   C   sH   | j ddd ttj | jd¡dƒ}| ¡ }W 5 Q R X |  |d¡ d S )NÚsdistF©Ú
allow_failÚAUTHORSÚrr4   ©Ú	run_setupr   r   r#   r>   rt   ÚreadZassertNotEqual©r   rC   Úbodyr   r   r   Útest_authors  s    z-TestPackagingInGitRepoWithCommit.test_authorsc              	   C   sH   | j ddd ttj | jd¡dƒ}| ¡ }W 5 Q R X |  |d¡ d S )Nrv   Frw   Ú	ChangeLogrz   r4   r{   r~   r   r   r   Útest_changelog  s    z/TestPackagingInGitRepoWithCommit.test_changelogc              	   C   sV   | j jdd | jddd ttj | jd¡dƒ}| ¡ }W 5 Q R X |  	d|¡ d S )	NzAllow *.openstack.org to work©r!   rv   Frw   r   rz   z\*©
ru   r   r|   r   r   r#   r>   rt   r}   ÚassertInr~   r   r   r   Útest_changelog_handles_astrisk%  s
    z?TestPackagingInGitRepoWithCommit.test_changelog_handles_astriskc              	   C   sn   | j jdd | jddd ttj | jd¡dƒ}| ¡ }W 5 Q R X |  	d|¡ |  	d	|¡ |  	d
|¡ d S )NzSee os_ for to_do about qemu_.rƒ   rv   Frw   r   rz   zos\_zto\_dozqemu\_r„   r~   r   r   r   Ú+test_changelog_handles_dead_links_in_commit,  s    zLTestPackagingInGitRepoWithCommit.test_changelog_handles_dead_links_in_commitc              	   C   sV   | j jdd | jddd ttj | jd¡dƒ}| ¡ }W 5 Q R X |  	d|¡ d S )	NzAllow `openstack.org` to `workrƒ   rv   Frw   r   rz   z\`r„   r~   r   r   r   Ú test_changelog_handles_backticks5  s
    zATestPackagingInGitRepoWithCommit.test_changelog_handles_backticksc              	   C   sf   | j ddd ttj | jd¡dƒ}| ¡ }W 5 Q R X |  |t 	t 
d¡¡¡ |  |t 
d¡¡ d S )Nrv   Frw   z$pbr_testpackage.egg-info/SOURCES.txtrz   zpbr_testpackage/extra.pyzpbr_testpackage/__init__.py)r|   r   r   r#   r>   rt   r}   Ú
assertThatr   ÚNotÚContainsr~   r   r   r   Útest_manifest_exclude_honoured<  s    þþ ÿz?TestPackagingInGitRepoWithCommit.test_manifest_exclude_honouredc                 C   s4   | j dd| jd dd\}}}|  |t d¡¡ d S ©NrH   ú--rootÚ	installedFrw   zGenerating ChangeLog©r|   Útemp_dirÚ
expectThatr   r‹   ©r   ÚstdoutÚ_r   r   r   Útest_install_writes_changelogF  s      þz>TestPackagingInGitRepoWithCommit.test_install_writes_changelog)r*   r+   r,   ÚdictÚ	scenariosr   r€   r‚   r†   r‡   rˆ   rŒ   r–   r.   r   r   r   r   rp     s   þ	
rp   c                   @   s   e Zd Zdd„ ZdS )ÚTestExtrafileInstallationc                 C   sF   | j dd| jd dd\}}}|  |t d¡¡ |  |t d¡¡ d S )NrH   rŽ   r   Frw   zcopying data_files/a.txtzcopying data_files/b.txtr   r“   r   r   r   Útest_install_globN  s      þ ÿ ÿz+TestExtrafileInstallation.test_install_globN)r*   r+   r,   rš   r   r   r   r   r™   M  s   r™   c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )Ú#TestPackagingInGitRepoWithoutCommitc                    s0   t t| ƒ ¡  |  t| jƒ¡ | jddd d S )Nrv   Frw   )r
   r›   r   r5   r   rt   r|   r   r   r   r   r   Z  s    z)TestPackagingInGitRepoWithoutCommit.setUpc              	   C   s:   t tj | jd¡dƒ}| ¡ }W 5 Q R X |  d|¡ d S )Nry   rz   r0   ©r   r   r#   r>   rt   r}   ÚassertEqualr~   r   r   r   r€   _  s    z0TestPackagingInGitRepoWithoutCommit.test_authorsc              	   C   s:   t tj | jd¡dƒ}| ¡ }W 5 Q R X |  d|¡ d S )Nr   rz   zCHANGES
=======

rœ   r~   r   r   r   r‚   e  s    z2TestPackagingInGitRepoWithoutCommit.test_changelog)r*   r+   r,   r   r€   r‚   r.   r   r   r   r   r›   X  s   r›   c                       s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	ÚTestPackagingWheelsc                    s–   t t| ƒ ¡  |  t| jƒ¡ | jddd tj 	| jd¡}t 
|¡d }tj 	||¡}t |¡}|j d¡}tj 	||¡| _| | j¡ | ¡  d S )NÚbdist_wheelFrw   Údistr   Znamever)r
   rž   r   r5   r   rt   r|   r   r#   r>   r   r   Z	WheelFileZparsed_filenamer=   Úextracted_wheel_dirÚ
extractallr    )r   Údist_dirZrelative_wheel_filenameZabsolute_wheel_filenameÚ
wheel_fileÚ
wheel_namer   r   r   r   n  s     ÿ
zTestPackagingWheels.setUpc                 C   s&   t j | jd¡}|  t j |¡¡ d S )Nz&pbr_testpackage-0.0.dist-info/pbr.json)r   r#   r>   r¡   Ú
assertTruer]   )r   Zpbr_jsonr   r   r   Ú$test_metadata_directory_has_pbr_json€  s
     ÿz8TestPackagingWheels.test_metadata_directory_has_pbr_jsonc                 C   s`   t j | jd¡}|  t j |¡¡ t  |¡}|  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )Nz pbr_testpackage-0.0.data/scriptsZpbr_test_wsgiZpbr_test_wsgi_with_classZpbr_test_cmdZpbr_test_cmd_with_class)	r   r#   r>   r¡   r¦   r]   r   r…   ZassertNotIn)r   Zscripts_dirÚscriptsr   r   r   Ú$test_data_directory_has_wsgi_scripts†  s     ÿ
z8TestPackagingWheels.test_data_directory_has_wsgi_scriptsc                 C   s^   t j | jd¡}d}tƒ }|r(d |¡}t j ||¡}|  t j |¡¡ |  t j |¡¡ d S )NÚpbr_testpackagez
testext.soztestext.{0}.so)r   r#   r>   r¡   Ú	get_soabirj   r¦   r]   )r   Zbuilt_package_dirZstatic_object_filenameÚsoabiZstatic_object_pathr   r   r   Útest_generates_c_extensions’  s     ÿ
 ÿz/TestPackagingWheels.test_generates_c_extensions)r*   r+   r,   r   r§   r©   r­   r.   r   r   r   r   rž   l  s   rž   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestPackagingHelpersc                 C   s@   d}t jdddd}d}d}t ||||¡}d}|  ||¡ d S )	NÚconsole_scriptsútest-epúpbr.packaging)ZLocalInstallScripts©ÚnameÚmodule_nameÚattrsú#!/usr/bin/env fake-header
ú=%(group)s %(module_name)s %(import_target)s %(invoke_target)sz`#!/usr/bin/env fake-header
console_scripts pbr.packaging LocalInstallScripts LocalInstallScripts)Úpkg_resourcesÚ
EntryPointr   Úgenerate_scriptr   )r   r=   Úentry_pointÚheaderÚtemplateZgenerated_scriptZexpected_scriptr   r   r   Útest_generate_script¢  s"    ý   ÿÿz)TestPackagingHelpers.test_generate_scriptc                 C   sZ   d}t jddd}d}d}|  ttj||||¡ t jdddd}|  ttj||||¡ d S )	Nr¯   r°   r±   )r³   r´   r¶   r·   )Zattr1Zattr2Zattr3r²   )r¸   r¹   ÚassertRaisesr`   r   rº   )r   r=   r»   r¼   r½   r   r   r   Ú+test_generate_script_validates_expectationsµ  s8    þ    þý    þz@TestPackagingHelpers.test_generate_script_validates_expectationsN)r*   r+   r,   r¾   rÀ   r   r   r   r   r®      s   r®   c                       s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	ÚTestPackagingInPlainDirectoryc                    s   t t| ƒ ¡  d S r	   )r
   rÁ   r   r   r   r   r   r   Ì  s    z#TestPackagingInPlainDirectory.setUpc                 C   s4   | j ddd tj | jd¡}|  tj |¡¡ d S )Nrv   Frw   ry   ©r|   r   r#   r>   rt   ZassertFalser]   ©r   Úfilenamer   r   r   r€   Ï  s    z*TestPackagingInPlainDirectory.test_authorsc                 C   s4   | j ddd tj | jd¡}|  tj |¡¡ d S )Nrv   Frw   r   rÂ   rÃ   r   r   r   r‚   Õ  s    z,TestPackagingInPlainDirectory.test_changelogc                 C   s:   | j dd| jd dd\}}}|  |t t d¡¡¡ d S r   )r|   r‘   r’   r   rŠ   r‹   r“   r   r   r   Útest_install_no_ChangeLogÛ  s      þ ÿz7TestPackagingInPlainDirectory.test_install_no_ChangeLog)r*   r+   r,   r   r€   r‚   rÅ   r.   r   r   r   r   rÁ   Ê  s   rÁ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestPresenceOfGitc              	   C   s4   t j td¡}d|_|  dt ¡ ¡ W 5 Q R X d S )NÚ_run_shell_commandzgit version 1.8.4.1T)r   ÚpatchÚobjectr   Zreturn_valuer   Ú_git_is_installed©r   Z_commandr   r   r   ÚtestGitIsInstalledå  s    ÿz$TestPresenceOfGit.testGitIsInstalledc              	   C   s4   t j td¡}t|_|  dt ¡ ¡ W 5 Q R X d S )NrÇ   F)r   rÈ   rÉ   r   ÚOSErrorÚside_effectr   rÊ   rË   r   r   r   ÚtestGitIsNotInstalledë  s    ÿz'TestPresenceOfGit.testGitIsNotInstalledN)r*   r+   r,   rÌ   rÏ   r   r   r   r   rÆ   ã  s   rÆ   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚParseRequirementsTestc                 C   s   t  g ¡}|  g |¡ d S r	   )r   Úparse_requirementsr   )r   Úactualr   r   r   Útest_empty_requirementsô  s    
z-ParseRequirementsTest.test_empty_requirementsc              	   C   sn   t  ¡ }tj |d¡}t|dƒ}| d¡ W 5 Q R X tj 	t
d|f¡ t
 ¡ }W 5 Q R X |  dg|¡ dS )z/Ensure default files used if no files provided.úrequirements.txtÚwÚpbrZREQUIREMENTS_FILESN)ÚtempfileÚmkdtempr   r#   r>   r   r?   r   rÈ   rÉ   r   rÑ   r   ©r   r@   ÚrequirementsrC   Úresultr   r   r   Útest_default_requirementsø  s    
ÿz/ParseRequirementsTest.test_default_requirementsc              	   C   s\   t jddd\}}t|dƒ}| d¡ W 5 Q R X |  t d|¡¡ |  ddgt 	¡ ¡ d	S )
z6Ensure environment variable used if no files provided.Ú	openstackú.setup©ÚprefixÚsuffixrÕ   úfoo
barÚPBR_REQUIREMENTS_FILESÚfooÚbarN©
r×   Úmkstempr   r?   r5   r6   ZEnvironmentVariabler   r   rÑ   ©r   r•   Útmp_fileÚfhr   r   r   Útest_override_with_env  s    
ÿ
ÿz,ParseRequirementsTest.test_override_with_envc              	   C   s`   t jddd\}}t|dƒ}| d¡ W 5 Q R X |  t dd| ¡¡ |  dd	gt 	¡ ¡ d S )
NrÝ   rÞ   rß   rÕ   râ   rã   zno-such-file,rä   rå   ræ   rè   r   r   r   Ú%test_override_with_env_multiple_files  s    ÿÿ
ÿz;ParseRequirementsTest.test_override_with_env_multiple_filesc              	   C   s|   t  ¡ }tj |d¡}t|dƒ8}| d¡ | d¡ | d¡ | d¡ | d¡ W 5 Q R X t |g¡}|  	dg|¡ d S )	NrÔ   rÕ   z-i https://myindex.local
z$  --index-url https://myindex.local
z) --extra-index-url https://myindex.local
z#--find-links https://myindex.local
zarequirement>=1.0
zarequirement>=1.0©
r×   rØ   r   r#   r>   r   r?   r   rÑ   r   rÙ   r   r   r   Útest_index_present  s    



z(ParseRequirementsTest.test_index_presentc              	   C   s†   t  ¡ }tj |d¡}tj |d¡}t|dƒ}| d| ¡ W 5 Q R X t|dƒ}| d¡ W 5 Q R X t |g¡}|  	dg|¡ d S )NrÔ   z
nested.txtrÕ   z-r rÖ   rí   )r   r@   rÚ   ÚnestedrC   rÛ   r   r   r   Útest_nested_requirements&  s    z.ParseRequirementsTest.test_nested_requirementsN)	r*   r+   r,   rÓ   rÜ   rë   rì   rî   rð   r   r   r   r   rÐ   ò  s   

rÐ   c                   @   sà   e Zd ZdddgdœfdddgdœfgZdd	difd
d	difgZddddgdœfddddgdœfddg dœfgZee dddifdddifdddifgee¡ Zee ddddœfgdddifdddifgee¡ Zdd „ Zd!S )"ÚParseRequirementsTestScenariosznon-versionedFrå   )Ú	versionedÚexpectedrò   Tz
bar>=1.2.3znon-subdirectoryÚhas_subdirectoryzhas-subdirectoryÚnormalrâ   rä   )Úurlró   Znormal_with_commentsz-# this is a comment
foo
# and another one
barZremoves_index_linesz	-f foobarZssh_egg_urlrö   z!git+ssh://foo.com/zipball#egg=barZgit_https_egg_urlz#git+https://foo.com/zipball#egg=barZhttp_egg_urlzhttps://foo.com/zipball#egg=barZgit_egg_urlúgit://foo.com/zipball#egg=bar)rö   r³   znon-editableÚeditablec              	   C   s”   t  ¡ }| j}t| dƒr&| jr&d| }t| dƒr>| jr>d| }t| dƒrV| jrVd| }t|jdƒ}| 	|¡ W 5 Q R X |  
| jt |jg¡¡ d S )Nrø   z-e %srò   z%s-1.2.3rô   z%s&subdirectory=bazrÕ   )r×   ÚNamedTemporaryFilerö   Úhasattrrø   rò   rô   r   r³   r?   r   ró   r   rÑ   )r   ré   Ú
req_stringrê   r   r   r   Útest_parse_requirementsV  s    ÿz6ParseRequirementsTestScenarios.test_parse_requirementsN)	r*   r+   r,   Zversioned_scenariosZsubdirectory_scenariosr˜   ÚtestscenariosZmultiply_scenariosrü   r   r   r   r   rñ   2  sB   þ

þþû


ý üÿÿ

þ ø
rñ   c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )ÚParseDependencyLinksTestc                    s&   t t| ƒ ¡  tjddd\}| _d S )NrÝ   rÞ   rß   )r
   rþ   r   r×   rç   ré   )r   r•   r   r   r   r   g  s    ÿzParseDependencyLinksTest.setUpc              	   C   s>   t | jdƒ}| d¡ W 5 Q R X |  dgt | jg¡¡ d S )NrÕ   zhttp://test.com
zhttp://test.com©r   ré   r?   r   r   Úparse_dependency_links©r   rê   r   r   r   Útest_parse_dependency_normall  s    þz5ParseDependencyLinksTest.test_parse_dependency_normalc              	   C   s>   t | jdƒ}| d¡ W 5 Q R X |  dgt | jg¡¡ d S )NrÕ   z -e git://foo.com/zipball#egg=barr÷   rÿ   r  r   r   r   Ú&test_parse_dependency_with_git_egg_urls  s    þz?ParseDependencyLinksTest.test_parse_dependency_with_git_egg_url)r*   r+   r,   r   r  r  r.   r   r   r   r   rþ   e  s   rþ   c                       s  e Zd ZdeddfdeddfgZ‡ fdd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z‡ fd<d=„Z ‡  Z!S )>ÚTestVersionsrq   Trr   rs   Fc                    sB   t t| ƒ ¡  |  t| jƒ¡| _|  tƒ ¡ |  t 	| j¡¡ d S r	   )
r
   r  r   r5   r   rt   ru   r/   r   ZDiveDirr   r   r   r   r   ‚  s    zTestVersions.setUpc              
   C   sp   t  ¡ }t  d|¡< t  d¡&}tj d¡ddig|_t d¡}W 5 Q R X W 5 Q R X |  	|j
¡ |  |¡ d S )Nzpbr.packaging.openzemail.message_from_fileZTestÚNamerª   )r   Z	mock_openrÈ   ÚemailÚerrorsÚMessageErrorrÎ   r   Z_get_version_from_pkg_metadatar¦   ÚcalledZassertIsNone)r   Zmocked_openÚmessage_from_filer)   r   r   r   Ú%test_email_parsing_errors_are_handledˆ  s    
þÿz2TestVersions.test_email_parsing_errors_are_handledc                 C   s@   | j  ¡  | j  d¡ | j  d¡ t ¡ }|  |t d¡¡ d S )Nú1.2.3úSem-Ver: api-breakú
2.0.0.dev1©ru   r   r'   r   Ú_get_version_from_gitr‰   r   Ú
StartsWithr(   r   r   r   Útest_capitalized_headers•  s
    
z%TestVersions.test_capitalized_headersc                 C   s@   | j  ¡  | j  d¡ | j  d¡ t ¡ }|  |t d¡¡ d S )Nr  zSem-ver: api-breakr  r  r(   r   r   r   Ú test_capitalized_headers_partialœ  s
    
z-TestVersions.test_capitalized_headers_partialc                 C   s@   | j  ¡  | j  d¡ | j  d¡ t ¡ }|  |t d¡¡ d S )Nr  zSem-ver: feature,api-breakr  r  r(   r   r   r   Ú"test_multi_inline_symbols_no_space£  s
    
z/TestVersions.test_multi_inline_symbols_no_spacec                 C   s@   | j  ¡  | j  d¡ | j  d¡ t ¡ }|  |t d¡¡ d S )Nr  zSem-ver: feature, api-breakr  r  r(   r   r   r   Ú test_multi_inline_symbols_spacedª  s
    
z-TestVersions.test_multi_inline_symbols_spacedc                 C   s@   | j  ¡  | j  d¡ | j  d¡ t ¡ }|  |t d¡¡ d S )Nr  zSem-ver: api-break,featurer  r  r(   r   r   r   Ú"test_multi_inline_symbols_reversed±  s
    
z/TestVersions.test_multi_inline_symbols_reversedc                 C   s@   | j  ¡  | j  d¡ | j  d¡ t ¡ }|  |t d¡¡ d S )Nr  z   sem-ver: api-breakr  r  r(   r   r   r   Útest_leading_space¸  s
    
zTestVersions.test_leading_spacec                 C   s@   | j  ¡  | j  d¡ | j  d¡ t ¡ }|  |t d¡¡ d S )Nr  z'   Some cool text
   sem-ver: api-breakr  r  r(   r   r   r   Útest_leading_space_multiline¿  s    
þz)TestVersions.test_leading_space_multilinec                 C   s@   | j  ¡  | j  d¡ | j  d¡ t ¡ }|  |t d¡¡ d S )Nr  z  ssem-ver: api-breakú
1.2.4.dev1r  r(   r   r   r   Ú(test_leading_characters_symbol_not_foundË  s
    
z5TestVersions.test_leading_characters_symbol_not_foundc                 C   s0   | j  ¡  | j  d¡ t d¡}|  d|¡ d S )Nr  ©ru   r   r'   r   r  r   r(   r   r   r   Ú#test_tagged_version_has_tag_versionÒ  s    

z0TestVersions.test_tagged_version_has_tag_versionc                 C   s.   | j  ¡  | j  d¡ t ¡ }|  d|¡ d S )Nú	1.2.3-rc2z
1.2.3.0rc2r  r(   r   r   r   Ú4test_tagged_version_with_semver_compliant_prereleaseØ  s    
zATestVersions.test_tagged_version_with_semver_compliant_prereleasec                 C   s@   | j  ¡  | j  d¡ | j  d¡ t ¡ }|  |t d¡¡ d S )Nz1.4r  r  r  r(   r   r   r   Ú&test_non_canonical_tagged_version_bumpÞ  s
    
z3TestVersions.test_non_canonical_tagged_version_bumpc                 C   s>   | j  ¡  | j  d¡ | j  ¡  t ¡ }|  |t d¡¡ d S )Nr  r  r  r(   r   r   r   Ú1test_untagged_version_has_dev_version_postversionå  s
    

z>TestVersions.test_untagged_version_has_dev_version_postversionc                 C   s>   | j  ¡  | j  d¡ | j  ¡  t ¡ }|  |t d¡¡ d S )Nú	1.2.3.0a1ú1.2.3.0a2.dev1r  r(   r   r   r   Ú9test_untagged_pre_release_has_pre_dev_version_postversionì  s
    

zFTestVersions.test_untagged_pre_release_has_pre_dev_version_postversionc                 C   s@   | j  ¡  | j  d¡ | j  d¡ t ¡ }|  |t d¡¡ d S )Nr  úsem-ver: deprecationz
1.3.0.dev1r  r(   r   r   r   Ú test_untagged_version_minor_bumpó  s
    
z-TestVersions.test_untagged_version_minor_bumpc                 C   s@   | j  ¡  | j  d¡ | j  d¡ t ¡ }|  |t d¡¡ d S )Nr  úsem-ver: api-breakr  r  r(   r   r   r   Ú test_untagged_version_major_bumpú  s
    
z-TestVersions.test_untagged_version_major_bumpc                 C   s@   | j  ¡  | j  d¡ | j  ¡  t d¡}|  |t d¡¡ d S )Nr  ú1.2.5ú
1.2.5.dev1r  r(   r   r   r   Ú0test_untagged_version_has_dev_version_preversion  s
    


z=TestVersions.test_untagged_version_has_dev_version_preversionc                 C   s@   | j  ¡  | j  d¡ | j  ¡  t d¡}|  |t d¡¡ d S )Nr!  r(  r)  r  r(   r   r   r   Ú:test_untagged_version_after_pre_has_dev_version_preversion  s
    


zGTestVersions.test_untagged_version_after_pre_has_dev_version_preversionc                 C   s@   | j  ¡  | j  d¡ | j  ¡  t d¡}|  |t d¡¡ d S )Nr!  r  r"  r  r(   r   r   r   Ú9test_untagged_version_after_rc_has_dev_version_preversion  s
    


zFTestVersions.test_untagged_version_after_rc_has_dev_version_preversionc                 C   s8   | j  ¡  | j  d¡ | j  ¡  t ¡ }|  d|¡ d S )Nr  z1.2.3.0rc3.dev1r  r(   r   r   r   Ú;test_untagged_version_after_semver_compliant_prerelease_tag  s
    

zHTestVersions.test_untagged_version_after_semver_compliant_prerelease_tagc                 C   sL   | j  ¡  | j  d¡ | j  ¡  |  ttjd¡}|  |jd t	 
d¡¡ d S )Nr  r   úgit history©ru   r   r'   r¿   r`   r   r  r‰   Úargsr   r  ©r   Úerrr   r   r   Útest_preversion_too_low_simple  s    

  ÿz+TestVersions.test_preversion_too_low_simplec                 C   sN   | j  ¡  | j  d¡ | j  d¡ |  ttjd¡}|  |jd t	 
d¡¡ d S )Nr  úsem-ver: featurez1.2.4r   r.  r/  r1  r   r   r   Ú&test_preversion_too_low_semver_headers)  s    
  ÿz3TestVersions.test_preversion_too_low_semver_headersc                    s:   ‡fdd„‰ ‡ ‡fdd„}|dƒ ˆj  d¡ |dƒ d S )Nc                    s   ˆ j jd }t || ¡S )Nz/.git)ru   r   r   Z_get_increment_kwargs)r'   Úgit_dirr   r   r   Ú
get_kwargs8  s    z=TestVersions.test_get_kwargs_corner_cases.<locals>.get_kwargsc                    sÜ   ˆj  ¡  ˆ tƒ ˆ | ƒ¡ ˆj  d¡ ˆ tƒ ˆ | ƒ¡ ˆj  d¡ ˆ tddˆ | ƒ¡ ˆj  ¡  ˆj  d¡ ˆ tddˆ | ƒ¡ ˆj  ¡  ˆj  d¡ ˆ tddˆ | ƒ¡ ˆj  d¡ ˆ tdddˆ | ƒ¡ d S )	Nzsem-ver: bugfixr4  T)Úminorr$  r&  )Úmajor)r9  r8  )ru   r   r   r—   r&   )r'   ©r7  r   r   r   Ú_check_combinations<  s    


zFTestVersions.test_get_kwargs_corner_cases.<locals>._check_combinationsr4   r  )ru   r'   )r   r;  r   r:  r   Útest_get_kwargs_corner_cases5  s
    z)TestVersions.test_get_kwargs_corner_casesc                 C   s†  | j  ¡  | j  d¡ | j  ¡  | j  d¡ t ¡ }|  |t d¡¡ | j  ¡  t ¡ }|  |t d¡¡ | j  ¡  | j  d¡ | j  ¡  | j  d¡ t ¡ }|  |t d¡¡ | j  ¡  | j  d¡ | j  ¡  | j  d	¡ t ¡ }|  |t d
¡¡ | j  ¡  | j  d¡ | j  ¡  | j  d¡ t ¡ }|  |t d¡¡ | j  ¡  | j  d¡ | j  ¡  | j  d¡ t ¡ }|  |t d¡¡ d S )NÚ1Zbadverz
1.0.1.dev1z
1.0.1.dev2z1.2Zbadver2z
1.2.1.dev1r  Zbadver3r  z	1.2.4.0a1Zbadver4z1.2.4.0a2.dev1Ú2znon-release-tag/2014.12.16-1z
2.0.1.dev1r  r(   r   r   r   Útest_invalid_tag_ignoredO  sB    










z%TestVersions.test_invalid_tag_ignoredc                 C   s.   | j  ¡  | j  d¡ t ¡ }|  d|¡ d S )Nz	1.3.0.0a1r  r(   r   r   r   Útest_valid_tag_honouredz  s    
z$TestVersions.test_valid_tag_honouredc                 C   s:   | j  ¡  | j  d¡ dtjd< t d¡}|  d|¡ d S )Nr  r=  ÚSKIP_WRITE_GIT_CHANGELOG)ru   r   r'   r   Úenvironr   r  r   r(   r   r   r   Útest_skip_write_git_changelogƒ  s
    


z*TestVersions.test_skip_write_git_changelogc                    s    t t| ƒ ¡  tj dd ¡ d S )NrA  )r
   r  ÚtearDownr   rB  rh   r   r   r   r   rD  ‹  s    zTestVersions.tearDown)"r*   r+   r,   r—   r˜   r   r  r  r  r  r  r  r  r  r  r  r  r  r   r#  r%  r'  r*  r+  r,  r-  r3  r5  r<  r?  r@  rC  rD  r.   r   r   r   r   r  {  s>   þ+	r  c                   @   s   e Zd Zdd„ ZdS )ÚTestRequirementParsingc              	   C   sú   dt  d¡t  d¡dœi}|  t|ƒ¡j}|d }ddgdgdd	gd
gddgdœ}|  tdƒ¡}|j}| j|dd|d tj	 
|d¡}tj	 
|d¡}t|dƒ}	tt |	¡ƒ}
W 5 Q R X | ¡ D ]4\}}dd„ |D ƒ}dd„ |
| D ƒ}|  ||¡ qÀd S )NZtest_reqparseaD                          bar
                        quux<1.0; python_version=='2.6'
                        requests-aws>=0.1.4    # BSD License (3 clause)
                        Routes>=1.12.3,!=2.0,!=2.1;python_version=='2.7'
                        requests-kerberos>=0.6;python_version=='2.7' # MIT
                    aP                          [metadata]
                        name = test_reqparse

                        [extras]
                        test =
                            foo
                            baz>3.2 :python_version=='2.7' # MIT
                            bar>3.3 :python_version=='2.7' # MIT # Apache
                    )rÔ   rY   rå   zrequests-aws>=0.1.4zquux<1.0zRoutes!=2.0,!=2.1,>=1.12.3zrequests-kerberos>=0.6rä   zbaz>3.2zbar>3.3)Nz:(python_version=='2.6')z:(python_version=='2.7')Útestztest:(python_version=='2.7')ZreqParse)rX   rŸ   F©rx   Úcwdztest_reqparse.egg-infozrequires.txtÚrtc                 S   s   g | ]}t j |¡‘qS r   ©r¸   ÚRequirementÚparse©Ú.0Úsr   r   r   Ú
<listcomp>Ç  s   ÿzCTestRequirementParsing.test_requirement_parsing.<locals>.<listcomp>c                 S   s   g | ]}t j |¡‘qS r   rJ  rM  r   r   r   rP  Ë  s   ÿ)rl   rm   r5   rV   rf   rD   rO   r   r   r#   r>   r   r—   r¸   Úsplit_sectionsÚitemsr   )r   ÚpkgsÚpkg_dirsÚpkg_dirZexpected_requirementsÚvenvZ
bin_pythonÚegg_infoZrequires_txtÚrequiresZgenerated_requirementsÚsectionró   Z
exp_parsedZ
gen_parsedr   r   r   Útest_requirement_parsing’  sF    øþÿú ÿÿþþz/TestRequirementParsing.test_requirement_parsingN)r*   r+   r,   rZ  r   r   r   r   rE    s   rE  c                   @   s   e Zd Zdd„ ZdS )ÚTestPEP517Supportc                 C   sh   dt  d¡t  d¡t  d¡t  d¡dœi}|  t|ƒ¡j}|d }|  tdƒ¡}| j|jdd	|d
 d S )NZtest_pep517zS                        sphinx
                        iso8601
                    zŸ                        #!/usr/bin/env python
                        import setuptools
                        setuptools.setup(pbr=True)
                    a7                          [metadata]
                        name = test_pep517
                        summary = A tiny test project
                        author = PBR Team
                        author-email = foo@example.com
                        home-page = https://example.com/
                        classifier =
                            Intended Audience :: Information Technology
                            Intended Audience :: System Administrators
                            License :: OSI Approved :: Apache Software License
                            Operating System :: POSIX :: Linux
                            Programming Language :: Python
                            Programming Language :: Python :: 2
                            Programming Language :: Python :: 2.7
                            Programming Language :: Python :: 3
                            Programming Language :: Python :: 3.6
                            Programming Language :: Python :: 3.7
                            Programming Language :: Python :: 3.8
                    z¹                        [build-system]
                        requires = ["pbr", "setuptools>=36.6.0", "wheel"]
                        build-backend = "pbr.build"
                    )rÔ   rX   rY   zpyproject.tomlZPEP517)r   rG   z--no-isolationr   FrG  )rl   rm   r5   rV   rf   rD   r   rO   )r   rS  rT  rU  rV  r   r   r   Útest_pep_517_supportÓ  s    áþ'
 ÿz&TestPEP517Support.test_pep_517_supportN)r*   r+   r,   r\  r   r   r   r   r[  Ò  s   r[  c                       s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	ÚTestRepositoryURLDependenciesc                    sv   t t| ƒ ¡  tj t ¡ d¡| _t	| jdƒ>}| 
d dddddd	d
dddddddddddddg¡¡ W 5 Q R X d S )NrÔ   rÕ   r0   zH-e git+git://git.pro-ject.org/oslo.messaging#egg=oslo.messaging-1.0.0-rczE-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborizezJ-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize-betazK-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-betazQ-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-4.0.1z^-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-1.0.0-alpha.beta.1z‚-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okayz`-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-2.0.0-rc.1+build.123z+-e git+git://git.project.org/Proj#egg=Proj1ú0git+https://git.project.org/Proj#egg=Proj2-0.0.1z+-e git+ssh://git.project.org/Proj#egg=Proj3ú2svn+svn://svn.project.org/svn/Proj#egg=Proj4-0.0.2z;-e svn+http://svn.project.org/svn/Proj/trunk@2019#egg=Proj5ú9hg+http://hg.project.org/Proj@da39a3ee5e6b#egg=Proj-0.0.3z.-e hg+http://hg.project.org/Proj@2019#egg=Projú1hg+http://hg.project.org/Proj@v1.0#egg=Proj-0.0.4z9-e hg+http://hg.project.org/Proj@special_feature#egg=Projú'git://foo.com/zipball#egg=foo-bar-1.2.4ú
pypi-proj1ú
pypi-proj2)r
   r]  r   r   r#   r>   r×   rØ   rÚ   r   r?   )r   rC   r   r   r   r     s6    ÿ íz#TestRepositoryURLDependencies.setUpc              /   C   sö   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d,d.g/}d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[dZd\g/}t |ƒD ]$\}}|  || t d]tj|¡¡ qÌd S )^Núdjango-thumborizeúdjango-thumborize-betaúdjango-thumborize2-betaúdjango-thumborize2-beta>=4.0.1ú+django-thumborize2-beta>=1.0.0-alpha.beta.1zFdjango-thumborize2-beta>=1.0.0-alpha-a.b-c-long+build.1-aef.1-its-okayú-django-thumborize2-beta>=2.0.0-rc.1+build.123zdjango-thumborize-beta>=0.0.4zdjango-thumborize-beta>=1.2.3z django-thumborize-beta>=10.20.30z-django-thumborize-beta>=1.1.2-prerelease+metaz"django-thumborize-beta>=1.1.2+metaz(django-thumborize-beta>=1.1.2+meta-validz#django-thumborize-beta>=1.0.0-alphaz"django-thumborize-beta>=1.0.0-betaz(django-thumborize-beta>=1.0.0-alpha.betaz*django-thumborize-beta>=1.0.0-alpha.beta.1z%django-thumborize-beta>=1.0.0-alpha.1z*django-thumborize-beta>=1.0.0-alpha0.validz*django-thumborize-beta>=1.0.0-alpha.0validzNdjango-thumborize-beta>=1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okayz*django-thumborize-beta>=1.0.0-rc.1+build.1z,django-thumborize-beta>=2.0.0-rc.1+build.123z"django-thumborize-beta>=1.2.3-betaz+django-thumborize-beta>=10.2.3-DEV-SNAPSHOTz*django-thumborize-beta>=1.2.3-SNAPSHOT-123zdjango-thumborize-beta>=1.0.0zdjango-thumborize-beta>=2.0.0zdjango-thumborize-beta>=1.1.7z(django-thumborize-beta>=2.0.0+build.1848z(django-thumborize-beta>=2.0.1-alpha.1227z(django-thumborize-beta>=1.0.0-alpha+betaz<django-thumborize-beta>=1.2.3----RC-SNAPSHOT.12.9.1--.12+788z5django-thumborize-beta>=1.2.3----R-S.12.9.1--.12+metaz8django-thumborize-beta>=1.2.3----RC-SNAPSHOT.12.9.1--.12z:django-thumborize-beta>=1.0.0+0.build.1-rc.10000aaa-kk-0.1zGdjango-thumborize-beta>=999999999999999999.99999999999999.9999999999999ÚProj1úProj2>=0.0.1ÚProj3úProj4>=0.0.2ÚProj5úProj>=0.0.3ÚProjúProj>=0.0.4úfoo-bar>=1.2.4zegg=django-thumborizezegg=django-thumborize-betazegg=django-thumborize2-betaz!egg=django-thumborize2-beta-4.0.1z.egg=django-thumborize2-beta-1.0.0-alpha.beta.1zIegg=django-thumborize2-beta-1.0.0-alpha-a.b-c-long+build.1-aef.1-its-okayz0egg=django-thumborize2-beta-2.0.0-rc.1+build.123z egg=django-thumborize-beta-0.0.4z egg=django-thumborize-beta-1.2.3z#egg=django-thumborize-beta-10.20.30z0egg=django-thumborize-beta-1.1.2-prerelease+metaz%egg=django-thumborize-beta-1.1.2+metaz+egg=django-thumborize-beta-1.1.2+meta-validz&egg=django-thumborize-beta-1.0.0-alphaz%egg=django-thumborize-beta-1.0.0-betaz+egg=django-thumborize-beta-1.0.0-alpha.betaz-egg=django-thumborize-beta-1.0.0-alpha.beta.1z(egg=django-thumborize-beta-1.0.0-alpha.1z-egg=django-thumborize-beta-1.0.0-alpha0.validz-egg=django-thumborize-beta-1.0.0-alpha.0validzQegg=django-thumborize-beta-1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okayz-egg=django-thumborize-beta-1.0.0-rc.1+build.1z/egg=django-thumborize-beta-2.0.0-rc.1+build.123z%egg=django-thumborize-beta-1.2.3-betaz.egg=django-thumborize-beta-10.2.3-DEV-SNAPSHOTz-egg=django-thumborize-beta-1.2.3-SNAPSHOT-123z egg=django-thumborize-beta-1.0.0z egg=django-thumborize-beta-2.0.0z egg=django-thumborize-beta-1.1.7z+egg=django-thumborize-beta-2.0.0+build.1848z+egg=django-thumborize-beta-2.0.1-alpha.1227z+egg=django-thumborize-beta-1.0.0-alpha+betaz?egg=django-thumborize-beta-1.2.3----RC-SNAPSHOT.12.9.1--.12+788z8egg=django-thumborize-beta-1.2.3----R-S.12.9.1--.12+metaz;egg=django-thumborize-beta-1.2.3----RC-SNAPSHOT.12.9.1--.12z=egg=django-thumborize-beta-1.0.0+0.build.1-rc.10000aaa-kk-0.1zJegg=django-thumborize-beta-999999999999999999.99999999999999.9999999999999z	egg=Proj1zegg=Proj2-0.0.1z	egg=Proj3zegg=Proj4-0.0.2z	egg=Proj5zegg=Proj-0.0.3zegg=Projzegg=Proj-0.0.4zegg=foo-bar-1.2.4zegg=([^&]+).*$)Ú	enumerater   r8   Úsubr   Úegg_fragment)r   ró   ÚtestsÚindexrF  r   r   r   Útest_egg_fragment&  sÎ    Ñ2Ñ1
þÿz/TestRepositoryURLDependencies.test_egg_fragmentc                 C   sF   t  | jg¡}|  ddddddddd	d
ddddddddddg|¡ d S )Nzoslo.messaging>=1.0.0-rcre  rf  rg  rh  ri  zOdjango-thumborize2-beta>=1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okayrj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rc  rd  )r   rÑ   rÚ   r   ©r   rÛ   r   r   r   Ú test_parse_repo_url_requirements  s0           ôôz>TestRepositoryURLDependencies.test_parse_repo_url_requirementsc                 C   sB   t  | jg¡}|  ddddddddd	d
ddddddddg|¡ d S )NzEgit+git://git.pro-ject.org/oslo.messaging#egg=oslo.messaging-1.0.0-rczBgit+git://git.pro-ject.org/django-thumborize#egg=django-thumborizezGgit+git://git.pro-ject.org/django-thumborize#egg=django-thumborize-betazHgit+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-betazNgit+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-4.0.1z[git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-1.0.0-alpha.beta.1zgit+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okayz]git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-2.0.0-rc.1+build.123z(git+git://git.project.org/Proj#egg=Proj1r^  z(git+ssh://git.project.org/Proj#egg=Proj3r_  z8svn+http://svn.project.org/svn/Proj/trunk@2019#egg=Proj5r`  z+hg+http://hg.project.org/Proj@2019#egg=Projra  z6hg+http://hg.project.org/Proj@special_feature#egg=Projrb  )r   r   rÚ   r   rz  r   r   r   Ú$test_parse_repo_url_dependency_linksŸ  s.    îízBTestRepositoryURLDependencies.test_parse_repo_url_dependency_links)r*   r+   r,   r   ry  r{  r|  r.   r   r   r   r   r]  
  s   ir]  c                  C   s¤   d } zt  d¡} t  d¡}W n tk
r0   Y nX | rR|rRdt  ¡ krRd| |f } | d kr dt  ¡ kr t ¡ D ]0\}}}| d¡rn| d¡rn| d¡d }  q qn| S )	NÚSOABIÚ	MULTIARCHÚpypyz%s-%sz.pypyz.sor   r1   )	Ú	sysconfigÚget_config_varÚIOErrorÚget_scheme_namesÚimpZget_suffixesr^   Úendswithr:   )r¬   Úarchrá   r•   r   r   r   r«   ·  s    
r«   )4r  Zemail.errorsr„  r   r8   r€  r×   rl   r6   Zunittestr   ÚImportErrorr¸   rn   rý   Z	testtoolsr   rP   rF   r   rÖ   r   r   Z	pbr.testsr   r#   r[   r>   Ú__file__rJ   ZFixturer   r/   rD   rV   ZBaseTestCaserp   r™   r›   rž   ZTestCaser®   rÁ   rÆ   rÐ   rñ   rþ   r  rE  r[  r]  r«   r   r   r   r   Ú<module>)   sZ   !7+AB4*@3  B8 .