
    c                     F   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	 d dl	m
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Zd dlmZ d dlmZ d dlmZ d dlmZ ej2                  j5                  ej2                  j7                  eddd            Z G d	 d
ej<                        Z G d dej<                        Z  G d dej<                        Z! G d dej<                        Z" G d dejF                        Z$ G d dejF                        Z% G d dejF                        Z& G d dejF                        Z' G d dejP                        Z) G d dejF                        Z* G d dejF                        Z+ G d d ejF                        Z, G d! d"ejF                        Z- G d# d$ejF                        Z. G d% d&ejF                        Z/ G d' d(ejF                        Z0 G d) d*ejF                        Z1 G d+ d,ejF                        Z2d- Z3y# e$ r d dl
Z
Y w xY w).    N)mock)matchers)	wheelfile)git)	packaging)basez..c                   @     e Zd ZdZ fdZ fdZddZd Zd Z xZ	S )TestRepozA 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                 8    t         t        |           || _        y N)superr
   __init___basedir)selfbasedir	__class__s     :/usr/lib/python3/dist-packages/pbr/tests/test_packaging.pyr   zTestRepo.__init__O   s    h&(    c                     t         t        |           t        j                  g d| j
                         t        j                          t        j                  g d| j
                         y )N)r   init.)r   addr   )r   r
   setUpr   _run_cmdr   _config_gitr   r   s    r   r   zTestRepo.setUpS   sB    h#%*DMM:)4==9r   c                 :   t        t        j                  | j                              }| j                  d|z  z   }t	        |d      j                          t        j                  dd|g| j                         t        j                  ddd|g| j                         y )Nz/%dwtr   r   commit-m)lenoslistdirr   opencloser   r   )r   message_contentfilespaths       r   r   zTestRepo.commitY   sr    BJJt}}-.}}uu},T4 ueT*DMM:uho>Nr   c                 H    t        j                  g d| j                         y )N)r   resetz--hardzHEAD^r   r   r   )r   s    r   uncommitzTestRepo.uncommit`   s    94==Ir   c                 N    t        j                  dddd|g| j                         y )Nr   tagz-smztest tagr+   r   versions     r   r.   zTestRepo.tagc   s#    E5*g6	Gr   )ztest commit)
__name__
__module____qualname____doc__r   r   r   r,   r.   __classcell__r   s   @r   r
   r
   G   s$     :OJGr   r
   c                   "     e Zd ZdZ fdZ xZS )GPGKeyFixturezxCreates a GPG key for testing.

    It's recommended that this be used in concert with a unique home
    directory.
    c                 P   t         t        |           | j                  t	        j
                               }t        j                  d      }t        j                  ddg|j                        }|d   j                  d      D ]d  }|j                  |      }|st        |j                  d            t        |j                  d            t        |j                  d            f} n |d	}t        j                  j!                  |j                  d
      }t#        |d      5 }|d   dk(  r|d   dk\  r|j%                  d       |j%                  d       d d d        |d   dk(  rd}n|d   dk\  rd}nd}t        j                  ddd||g|j                         y # 1 sw Y   GxY w)Nz#^gpg\s.*\s([\d+])\.([\d+])\.([\d+])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   r8   r   
useFixturefixturesTempDirrecompiler   r   r(   splitmatchintgroupr"   joinr$   write)	r   tempdirgnupg_version_regnupg_versionlineconfig_filefgnupg_randomr   s	           r   r   zGPGKeyFixture.setUpo   s   mT(*//("2"2"45::&LMuk&:GLLI!!$**40 		*D,2248M!$]%8%8%;!<!$]%8%8%;!<!$]%8%8%;!<!> 		* $ )ggll7<<>+t$ 	Q1$q)9Q)>   GG  	& q +L1"1LLKL+FLL	5	 	s   #3FF%)r1   r2   r3   r4   r   r5   r6   s   @r   r8   r8   h   s    - -r   r8   c                       e Zd ZdZddZd Zy)VenvzCreate 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.
    Nc                 d    || _         |dk(  r
dddt        g}|| _        |
g d| _        y|| _        y)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.
         pipwheelbuildN)r    rV   z-vinstall)_reasonPBR_ROOTmodulespip_cmd)r   reasonr\   r]   s       r   r   zVenv.__init__   s:     b=gw9G?9DL"DLr   c                 T   | j                  t        j                               j                  }t	        j
                  |g       t        j                  j                  |dd      }|g| j                  z   dgz   }| j                  ret        | j                        dkD  rM|j                  | j                         | j                  t        j                  d| j                  z   |             | j                  t         | d       | j                  t         | d       || _        || _        ||fS )Nbinpythonz-Ur   zmkvenv-r(   )r@   rA   rB   r(   
virtualenvcli_runr"   rI   r]   r\   r!   extendr   CapturedSubprocessrZ   
addCleanupdelattrra   )r   r(   ra   commands       r   _setUpzVenv._setUp   s    x//1277D6"dE84(T\\)TF2<<C-1NN4<<(OOD33DLL('3 4v.x0	V|r   )rU   N)r1   r2   r3   r4   r   ri   rU   r   r   rS   rS      s    #&r   rS   c                       e Zd ZdZ ej
                   ej                  d             ej
                   ej                  d            dZd Z	d Z
d Zy)	CreatePackageszCreates 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                     || _         y)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   rp   s     r   r   zCreatePackages.__init__   s     !r   c                    t         j                  j                  t         j                  j                  ||            }t         j                  j	                  |      }t         j                  j                  |      s-|j                  |      rt        j                  |       nt        t        |d      5 }|j                  |       d d d        y # 1 sw Y   y xY w)Nr   )r"   r(   abspathrI   dirnameexists
startswithmakedirs
ValueErrorr$   rJ   )r   	directory	file_namecontentsr(   path_dirrP   s          r   
_writeFilezCreatePackages._writeFile   s    wwrww||IyAB77??4(ww~~h'""9-H%  $ 	GGH	 	 	s   5CCc                    | j                  t        j                               j                  }i }| j                  D ]  }t
        j                  j                  ||      }|||<   t        j                  |       dD ]d  }|| j                  |   v r| j                  |   j                  |      }n| j                  |   j                  |      }| j                  |||       f | j                  |   D ]%  }| j                  ||| j                  |   |          ' | j                  t        |            j                           | j                  t        | d       || _        |S )Nrl   )pkg_namepackage_dirs)r@   rA   rB   r(   rp   r"   rI   mkdirpopdefaultsformatr|   r
   r   rf   rg   r   )r   tmpdirr   r~   pkg_pathcfrz   s          r   ri   zCreatePackages._setUp   s:   !1!1!3499 	9Hww||FH5H%-L"HHX/ 8x00#}}X6::2>H#}}R0777JH"h78 mmH- K"dmmH.Eb.IJKOOHX./668	9 	~6(r   N)r1   r2   r3   r4   textwrapdedentsixur   r   r|   ri   rU   r   r   rk   rk      sa     $HOOECEE + %  %X__USUU , & H!	r   rk   c                   t     e Zd Zd ed      fd ed      fgZ fdZd Zd Zd	 Zd
 Z	d Z
d Zd Z xZS ) TestPackagingInGitRepoWithCommitpreversionedTr   postversionedFc                     t         t        |           | j                  t	        | j
                              | _        | j                  j                          y r   )r   r   r   r@   r
   package_dirrepor   r   s    r   r   z&TestPackagingInGitRepoWithCommit.setUp  s<    .;=OOHT-=-=$>?			r   c                     | j                  dd       t        t        j                  j	                  | j
                  d      d      5 }|j                         }d d d        | j                  d       y # 1 sw Y   xY w)NsdistF
allow_failAUTHORSrr?   	run_setupr$   r"   r(   rI   r   readassertNotEqualr   rP   bodys      r   test_authorsz-TestPackagingInGitRepoWithCommit.test_authors  sc    w51"'',,t//;SA 	Q668D	D"%	 	   A44A=c                     | j                  dd       t        t        j                  j	                  | j
                  d      d      5 }|j                         }d d d        | j                  d       y # 1 sw Y   xY w)Nr   Fr   	ChangeLogr   r?   r   r   s      r   test_changelogz/TestPackagingInGitRepoWithCommit.test_changelog  se    w51"'',,t//=sC 	q668D	 	D"%	 	r   c                 8   | j                   j                  d       | j                  dd       t        t        j
                  j                  | j                  d      d      5 }|j                         }d d d        | j                  d       y # 1 sw Y   xY w)	NzAllow *.openstack.org to workr&   r   Fr   r   r   z\*
r   r   r   r$   r"   r(   rI   r   r   assertInr   s      r   test_changelog_handles_astriskz?TestPackagingInGitRepoWithCommit.test_changelog_handles_astrisk%  sw    		)HIw51"'',,t//=sC 	q668D	eT"	 	   $BBc                    | j                   j                  d       | j                  dd       t        t        j
                  j                  | j                  d      d      5 }|j                         }d d d        | j                  d       | j                  d	|       | j                  d
|       y # 1 sw Y   @xY w)NzSee os_ for to_do about qemu_.r   r   Fr   r   r   zos\_zto\_dozqemu\_r   r   s      r   +test_changelog_handles_dead_links_in_commitzLTestPackagingInGitRepoWithCommit.test_changelog_handles_dead_links_in_commit,  s    		)IJw51"'',,t//=sC 	q668D	gt$i&i&		 	s   $B44B=c                 8   | j                   j                  d       | j                  dd       t        t        j
                  j                  | j                  d      d      5 }|j                         }d d d        | j                  d       y # 1 sw Y   xY w)	NzAllow `openstack.org` to `workr   r   Fr   r   r   z\`r   r   s      r    test_changelog_handles_backtickszATestPackagingInGitRepoWithCommit.test_changelog_handles_backticks5  sw    		)IJw51"'',,t//=sC 	q668D	eT"	 	r   c                    | j                  dd       t        t        j                  j	                  | j
                  d      d      5 }|j                         }d d d        | j                  t        j                  t        j                  d                   | j                  |t        j                  d             y # 1 sw Y   gxY w)Nr   Fr   z$pbr_testpackage.egg-info/SOURCES.txtr   zpbr_testpackage/extra.pyzpbr_testpackage/__init__.py)r   r$   r"   r(   rI   r   r   
assertThatr   NotContainsr   s      r   test_manifest_exclude_honouredz?TestPackagingInGitRepoWithCommit.test_manifest_exclude_honoured<  s    w51"'',,  689<> 	AB668D	 	(,,x001KLM	Oh//0MNO	 	s   B??Cc                     | j                  dd| j                  dz   d      \  }}}| j                  |t        j                  d             y NrY   --root	installedFr   zGenerating ChangeLogr   temp_dir
expectThatr   r   r   stdout_s      r   test_install_writes_changelogz>TestPackagingInGitRepoWithCommit.test_install_writes_changelogF  sJ    ~~x!< & 1 	 1 12H IJr   )r1   r2   r3   dict	scenariosr   r   r   r   r   r   r   r   r5   r6   s   @r   r   r     sP     
401	$E23I

&&#'#PKr   r   c                       e Zd Zd Zy)TestExtrafileInstallationc                     | j                  dd| j                  dz   d      \  }}}| j                  |t        j                  d             | j                  |t        j                  d             y )NrY   r   r   Fr   zcopying data_files/a.txtzcopying data_files/b.txtr   r   s      r   test_install_globz+TestExtrafileInstallation.test_install_globN  sl    ~~x!< & 1 	H%%&@A	CH%%&@A	Cr   N)r1   r2   r3   r   rU   r   r   r   r   M  s    Cr   r   c                   *     e Zd Z fdZd Zd Z xZS )#TestPackagingInGitRepoWithoutCommitc                     t         t        |           | j                  t	        | j
                               | j                  dd       y )Nr   Fr   )r   r   r   r@   r
   r   r   r   s    r   r   z)TestPackagingInGitRepoWithoutCommit.setUpZ  s8    14>@!1!123w51r   c                     t        t        j                  j                  | j                  d      d      5 }|j                         }d d d        | j                  d       y # 1 sw Y   xY w)Nr   r   r;   r$   r"   r(   rI   r   r   assertEqualr   s      r   r   z0TestPackagingInGitRepoWithoutCommit.test_authors_  sS    "'',,t//;SA 	Q668D	t$	 	   A!!A*c                     t        t        j                  j                  | j                  d      d      5 }|j                         }d d d        | j                  d       y # 1 sw Y   xY w)Nr   r   zCHANGES
=======

r   r   s      r   r   z2TestPackagingInGitRepoWithoutCommit.test_changeloge  sT    "'',,t//=sC 	q668D	/6	 	r   )r1   r2   r3   r   r   r   r5   r6   s   @r   r   r   X  s    2
%7r   r   c                   0     e Zd Z fdZd Zd Zd Z xZS )TestPackagingWheelsc                 \   t         t        |           | j                  t	        | j
                               | j                  dd       t        j                  j                  | j
                  d      }t        j                  |      d   }t        j                  j                  ||      }t        j                  |      }|j                  j                  d      }t        j                  j                  ||      | _        |j!                  | j                         |j#                          y )Nbdist_wheelFr   distr   namever)r   r   r   r@   r
   r   r   r"   r(   rI   r#   r   	WheelFileparsed_filenamerH   extracted_wheel_dir
extractallr%   )r   dist_dirrelative_wheel_filenameabsolute_wheel_filename
wheel_file
wheel_namer   s         r   r   zTestPackagingWheels.setUpn  s    !4.0!1!123}777<< 0 0&9"$**X"6q"9"$'',,-#/(()@A
//55i@
#%77<<*#E d667r   c                     t         j                  j                  | j                  d      }| j	                  t         j                  j                  |             y )Nz&pbr_testpackage-0.0.dist-info/pbr.json)r"   r(   rI   r   
assertTruert   )r   pbr_jsons     r   $test_metadata_directory_has_pbr_jsonz8TestPackagingWheels.test_metadata_directory_has_pbr_json  s:    77<<$$&NPx01r   c                 n   t         j                  j                  | j                  d      }| j	                  t         j                  j                  |             t        j                  |      }| j                  d|       | j                  d|       | j                  d|       | j                  d|       y )Nz pbr_testpackage-0.0.data/scriptspbr_test_wsgipbr_test_wsgi_with_classpbr_test_cmdpbr_test_cmd_with_class)	r"   r(   rI   r   r   rt   r#   r   assertNotIn)r   scripts_dirscriptss      r   $test_data_directory_has_wsgi_scriptsz8TestPackagingWheels.test_data_directory_has_wsgi_scripts  s    ggll$$&HJ{34**[)ow/0':12G<r   c                    t         j                  j                  | j                  d      }d}t	               }|rdj                  |      }t         j                  j                  ||      }| j                  t         j                  j                  |             | j                  t         j                  j                  |             y )Npbr_testpackagez
testext.soztestext.{0}.so)r"   r(   rI   r   	get_soabir   r   rt   )r   built_package_dirstatic_object_filenamesoabistatic_object_paths        r   test_generates_c_extensionsz/TestPackagingWheels.test_generates_c_extensions  s    GGLL$$&79!-%5%<%<U%C"WW\\57 	'89:'9:;r   )r1   r2   r3   r   r   r   r   r5   r6   s   @r   r   r   l  s    $2
=<r   r   c                       e Zd Zd Zd Zy)TestPackagingHelpersc                     d}t        j                  ddd      }d}d}t        j                  ||||      }d}| j	                  ||       y )	Nconsole_scriptstest-eppbr.packaging)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   rH   entry_pointheadertemplategenerated_scriptexpected_scripts          r   test_generate_scriptz)TestPackagingHelpers.test_generate_script  sg    !#..'*, 0( %44;26 	 	*:;r   c                    d}t        j                  dd      }d}d}| j                  t        t        j
                  ||||       t        j                  ddd      }| j                  t        t        j
                  ||||       y )	Nr   r   r   )r   r   r   r   )attr1attr2attr3r   )r   r   assertRaisesrw   r   r   )r   rH   r   r  r  s        r   +test_generate_script_validates_expectationsz@TestPackagingHelpers.test_generate_script_validates_expectations  s    !#..') 0(	115+v	 $..'-/ 		115+v	r   N)r1   r2   r3   r  r  rU   r   r   r   r     s    <&r   r   c                   0     e Zd Z fdZd Zd Zd Z xZS )TestPackagingInPlainDirectoryc                 *    t         t        |           y r   )r   r  r   r   s    r   r   z#TestPackagingInPlainDirectory.setUp  s    +T8:r   c                     | j                  dd       t        j                  j                  | j                  d      }| j                  t        j                  j                  |             y )Nr   Fr   r   r   r"   r(   rI   r   assertFalsert   r   filenames     r   r   z*TestPackagingInPlainDirectory.test_authors  sG    w5177<< 0 0)<12r   c                     | j                  dd       t        j                  j                  | j                  d      }| j                  t        j                  j                  |             y )Nr   Fr   r   r  r  s     r   r   z,TestPackagingInPlainDirectory.test_changelog  sG    w5177<< 0 0+>12r   c                     | j                  dd| j                  dz   d      \  }}}| j                  |t        j                  t        j
                  d                   y r   )r   r   r   r   r   r   r   s      r   test_install_no_ChangeLogz7TestPackagingInPlainDirectory.test_install_no_ChangeLog  sW    ~~x!< & 1 	HLL!2!23I!JK	Mr   )r1   r2   r3   r   r   r   r  r5   r6   s   @r   r  r    s    ;33Mr   r  c                       e Zd Zd Zd Zy)TestPresenceOfGitc                     t         j                  j                  t        d      5 }d|_        | j                  dt        j                                d d d        y # 1 sw Y   y xY w)N_run_shell_commandzgit version 1.8.4.1T)r   patchobjectr   return_valuer   _git_is_installedr   _commands     r   testGitIsInstalledz$TestPresenceOfGit.testGitIsInstalled  sR    ZZs35 	<8@$9H!T3#8#8#:;	< 	< 	<s   ,AA#c                     t         j                  j                  t        d      5 }t        |_        | j                  dt        j                                d d d        y # 1 sw Y   y xY w)Nr  F)r   r  r  r   OSErrorside_effectr   r  r  s     r   testGitIsNotInstalledz'TestPresenceOfGit.testGitIsNotInstalled  sR    ZZs35 	=8@#*H UC$9$9$;<	= 	= 	=s   0AA'N)r1   r2   r3   r!  r%  rU   r   r   r  r    s    <=r   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ParseRequirementsTestc                 R    t        j                  g       }| j                  g |       y r   )r   parse_requirementsr   )r   actuals     r   test_empty_requirementsz-ParseRequirementsTest.test_empty_requirements  s"    --b1V$r   c                    t        j                         }t        j                  j	                  |d      }t        |d      5 }|j                  d       ddd       t        j                  j                  t        d|f      5  t        j                         }ddd       | j                  dg       y# 1 sw Y   `xY w# 1 sw Y   )xY w)z/Ensure default files used if no files provided.requirements.txtwpbrNREQUIREMENTS_FILES)tempfilemkdtempr"   r(   rI   r$   rJ   r   r  r  r   r)  r   r   rK   requirementsrP   results        r   test_default_requirementsz/ParseRequirementsTest.test_default_requirements  s    ""$ww||G-?@,$ 	GGEN	
 ZZy*>A   	4113F	4 	%&)	 	
	4 	4s   B2B>2B;>Cc                 2   t        j                  dd      \  }}t        |d      5 }|j                  d       ddd       | j	                  t        j                  d|             | j                  dd	gt        j                                y# 1 sw Y   UxY w)
z6Ensure environment variable used if no files provided.	openstack.setupprefixsuffixr.  foo
barNPBR_REQUIREMENTS_FILESfoobar
r1  mkstempr$   rJ   r@   rA   EnvironmentVariabler   r   r)  r   r   tmp_filefhs       r   test_override_with_envz,ParseRequirementsTest.test_override_with_env  s    &&k(K8(C  	!BHHZ 	!(()A8L	N%"557	9		! 	!s   BBc                 8   t        j                  dd      \  }}t        |d      5 }|j                  d       d d d        | j	                  t        j                  dd|z                | j                  dd	gt        j                                y # 1 sw Y   XxY w)
Nr8  r9  r:  r.  r=  r>  zno-such-file,r?  r@  rA  rD  s       r   %test_override_with_env_multiple_filesz;ParseRequirementsTest.test_override_with_env_multiple_files  s    &&k(K8(C  	!BHHZ 	!(()A)88)CE	F 	%"557	9	! 	!s   BBc                    t        j                         }t        j                  j	                  |d      }t        |d      5 }|j                  d       |j                  d       |j                  d       |j                  d       |j                  d       d d d        t        j                  |g      }| j                  dg|       y # 1 sw Y   3xY w)	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
r1  r2  r"   r(   rI   r$   rJ   r   r)  r   r3  s        r   test_index_presentz(ParseRequirementsTest.test_index_present  s    ""$ww||G-?@,$ 	+GG01GG;<GG@AGG:;GG)*	+ --|n=-.7	+ 	+s   AC		Cc                    t        j                         }t        j                  j	                  |d      }t        j                  j	                  |d      }t        |d      5 }|j                  d|z          d d d        t        |d      5 }|j                  d       d d d        t        j                  |g      }| j                  dg|       y # 1 sw Y   YxY w# 1 sw Y   ?xY w)Nr-  z
nested.txtr.  z-r r/  rK  )r   rK   r4  nestedrP   r5  s         r   test_nested_requirementsz.ParseRequirementsTest.test_nested_requirements&  s    ""$ww||G-?@g|4,$ 	$GGEFN#	$&# 	!GGEN	--|n=%&)	$ 	$	 	s   !C
CCC#N)	r1   r2   r3   r+  r6  rG  rI  rL  rO  rU   r   r   r'  r'    s     %*99
8	*r   r'  c                      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j                  dddifdddifdddifgee      z   Ze ej                  ddddfgdddifdddifgee      z   Zd Zy )!ParseRequirementsTestScenariosznon-versionedFr@  )	versionedexpectedrR  Tz
bar>=1.2.3znon-subdirectoryhas_subdirectoryzhas-subdirectorynormalr=  r?  )urlrS  normal_with_commentsz-# this is a comment
foo
# and another one
barremoves_index_linesz	-f foobarssh_egg_urlrV  z!git+ssh://foo.com/zipball#egg=bargit_https_egg_urlz#git+https://foo.com/zipball#egg=barhttp_egg_urlzhttps://foo.com/zipball#egg=bargit_egg_urlgit://foo.com/zipball#egg=bar)rV  r   znon-editableeditablec                    t        j                         }| j                  }t        | d      r| j                  rd|z  }t        | d      r| j
                  rd|z  }t        | d      r| j                  rd|z  }t        |j                  d      5 }|j                  |       d d d        | j                  | j                  t        j                  |j                  g             y # 1 sw Y   DxY w)Nr^  z-e %srR  z%s-1.2.3rT  z%s&subdirectory=bazr.  )r1  NamedTemporaryFilerV  hasattrr^  rR  rT  r$   r   rJ   r   rS  r   r)  )r   rE  
req_stringrF  s       r   test_parse_requirementsz6ParseRequirementsTestScenarios.test_parse_requirementsV  s    ..0XX
4$!J.J4%$..$z1J4+,1F1F/*<J(--% 	!HHZ 	!"55x}}oF	H	! 	!s   C##C,N)	r1   r2   r3   versioned_scenariossubdirectory_scenariosr   testscenariosmultiply_scenariosrc  rU   r   r   rQ  rQ  2  sD    
E7CD	D|nEF 
0%89	0$78 
:E5>BC	E"( 	) 
 DEI <M<<	 CDE	u&KLM	%!BCD> 2	4 4I <M<<7GI	
 j%01*d+,
 	35 5IHr   rQ  c                   *     e Zd Z fdZd Zd Z xZS )ParseDependencyLinksTestc                 h    t         t        |           t        j                  dd      \  }| _        y )Nr8  r9  r:  )r   ri  r   r1  rB  rE  )r   r   r   s     r   r   zParseDependencyLinksTest.setUpg  s-    &35#++;3;=4=r   c                     t        | j                  d      5 }|j                  d       d d d        | j                  dgt	        j
                  | j                  g             y # 1 sw Y   ;xY w)Nr.  zhttp://test.com
zhttp://test.comr$   rE  rJ   r   r   parse_dependency_linksr   rF  s     r   test_parse_dependency_normalz5ParseDependencyLinksTest.test_parse_dependency_normall  s\    $--% 	*HH()	*,,dmm_=	?	* 	*   A##A,c                     t        | j                  d      5 }|j                  d       d d d        | j                  dgt	        j
                  | j                  g             y # 1 sw Y   ;xY w)Nr.  z -e git://foo.com/zipball#egg=barr]  rl  rn  s     r   &test_parse_dependency_with_git_egg_urlz?ParseDependencyLinksTest.test_parse_dependency_with_git_egg_urls  s\    $--% 	9HH78	9,-,,dmm_=	?	9 	9rp  )r1   r2   r3   r   ro  rr  r5   r6   s   @r   ri  ri  e  s    =
??r   ri  c                        e Zd Zd ed      fd ed      fgZ fdZd Zd Zd	 Zd
 Z	d Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Z fd!Z  xZ!S )"TestVersionsr   Tr   r   Fc                 
   t         t        |           | j                  t	        | j
                              | _        | j                  t                      | j                  t        j                  | j
                               y r   )
r   rt  r   r@   r
   r   r   r8   r   DiveDirr   s    r   r   zTestVersions.setUp  sT    lD')OOHT-=-=$>?	(T%5%567r   c                    t        j                         }t        j                  d|      5  t        j                  d      5 }t        j                  j                  d      ddig|_        t        j                  d      }d d d        d d d        | j                  j                         | j                         y # 1 sw Y   >xY w# 1 sw Y   BxY w)Nzpbr.packaging.openzemail.message_from_fileTestNamer   )r   	mock_openr  emailerrorsMessageErrorr$  r   _get_version_from_pkg_metadatar   calledassertIsNone)r   mocked_openmessage_from_filer0   s       r   %test_email_parsing_errors_are_handledz2TestVersions.test_email_parsing_errors_are_handled  s    nn&ZZ,k: 	'56 ':KLL--f5./11!- $BB%'	'	' 	)001'"' '	' 	's#   C>B<?C<C	CCc                    | j                   j                          | j                   j                  d       | j                   j                  d       t        j                         }| j                  |t        j                  d             y )N1.2.3Sem-Ver: api-break
2.0.0.dev1r   r   r.   r   _get_version_from_gitr   r   
StartsWithr/   s     r   test_capitalized_headersz%TestVersions.test_capitalized_headers  \    				g		-.113!4!4\!BCr   c                    | j                   j                          | j                   j                  d       | j                   j                  d       t        j                         }| j                  |t        j                  d             y )Nr  zSem-ver: api-breakr  r  r/   s     r    test_capitalized_headers_partialz-TestVersions.test_capitalized_headers_partial  r  r   c                    | j                   j                          | j                   j                  d       | j                   j                  d       t        j                         }| j                  |t        j                  d             y )Nr  zSem-ver: feature,api-breakr  r  r/   s     r   "test_multi_inline_symbols_no_spacez/TestVersions.test_multi_inline_symbols_no_space  \    				g		56113!4!4\!BCr   c                    | j                   j                          | j                   j                  d       | j                   j                  d       t        j                         }| j                  |t        j                  d             y )Nr  zSem-ver: feature, api-breakr  r  r/   s     r    test_multi_inline_symbols_spacedz-TestVersions.test_multi_inline_symbols_spaced  s\    				g		67113!4!4\!BCr   c                    | j                   j                          | j                   j                  d       | j                   j                  d       t        j                         }| j                  |t        j                  d             y )Nr  zSem-ver: api-break,featurer  r  r/   s     r   "test_multi_inline_symbols_reversedz/TestVersions.test_multi_inline_symbols_reversed  r  r   c                    | j                   j                          | j                   j                  d       | j                   j                  d       t        j                         }| j                  |t        j                  d             y )Nr  z   sem-ver: api-breakr  r  r/   s     r   test_leading_spacezTestVersions.test_leading_space  \    				g		01113!4!4\!BCr   c                    | j                   j                          | j                   j                  d       | j                   j                  d       t        j                         }| j                  |t        j                  d             y )Nr  z'   Some cool text
   sem-ver: api-breakr  r  r/   s     r   test_leading_space_multilinez)TestVersions.test_leading_space_multiline  sb    				g		(	
 113!4!4\!BCr   c                    | j                   j                          | j                   j                  d       | j                   j                  d       t        j                         }| j                  |t        j                  d             y )Nr  z  ssem-ver: api-break
1.2.4.dev1r  r/   s     r   (test_leading_characters_symbol_not_foundz5TestVersions.test_leading_characters_symbol_not_found  r  r   c                     | j                   j                          | j                   j                  d       t        j                  d      }| j                  d|       y )Nr  r   r   r.   r   r  r   r/   s     r   #test_tagged_version_has_tag_versionz0TestVersions.test_tagged_version_has_tag_version  sB    				g11':'*r   c                     | j                   j                          | j                   j                  d       t        j                         }| j                  d|       y )N	1.2.3-rc2z
1.2.3.0rc2r  r/   s     r   4test_tagged_version_with_semver_compliant_prereleasezATestVersions.test_tagged_version_with_semver_compliant_prerelease  s@    				k"113w/r   c                    | j                   j                          | j                   j                  d       | j                   j                  d       t        j                         }| j                  |t        j                  d             y )Nz1.4r  r  r  r/   s     r   &test_non_canonical_tagged_version_bumpz3TestVersions.test_non_canonical_tagged_version_bump  s\    				e		-.113!4!4\!BCr   c                    | j                   j                          | j                   j                  d       | j                   j                          t        j                         }| j                  |t        j                  d             y )Nr  r  r  r/   s     r   1test_untagged_version_has_dev_version_postversionz>TestVersions.test_untagged_version_has_dev_version_postversion  sY    				g		113!4!4\!BCr   c                    | j                   j                          | j                   j                  d       | j                   j                          t        j                         }| j                  |t        j                  d             y )N	1.2.3.0a11.2.3.0a2.dev1r  r/   s     r   9test_untagged_pre_release_has_pre_dev_version_postversionzFTestVersions.test_untagged_pre_release_has_pre_dev_version_postversion  sZ    				k"		113!4!45E!FGr   c                    | j                   j                          | j                   j                  d       | j                   j                  d       t        j                         }| j                  |t        j                  d             y )Nr  sem-ver: deprecationz
1.3.0.dev1r  r/   s     r    test_untagged_version_minor_bumpz-TestVersions.test_untagged_version_minor_bump  s\    				g		/0113!4!4\!BCr   c                    | j                   j                          | j                   j                  d       | j                   j                  d       t        j                         }| j                  |t        j                  d             y )Nr  sem-ver: api-breakr  r  r/   s     r    test_untagged_version_major_bumpz-TestVersions.test_untagged_version_major_bump  r  r   c                    | j                   j                          | j                   j                  d       | j                   j                          t        j                  d      }| j                  |t        j                  d             y )Nr  1.2.5
1.2.5.dev1r  r/   s     r   0test_untagged_version_has_dev_version_preversionz=TestVersions.test_untagged_version_has_dev_version_preversion  s[    				g		11':!4!4\!BCr   c                    | j                   j                          | j                   j                  d       | j                   j                          t        j                  d      }| j                  |t        j                  d             y )Nr  r  r  r  r/   s     r   :test_untagged_version_after_pre_has_dev_version_preversionzGTestVersions.test_untagged_version_after_pre_has_dev_version_preversion  s[    				k"		11':!4!4\!BCr   c                    | j                   j                          | j                   j                  d       | j                   j                          t        j                  d      }| j                  |t        j                  d             y )Nr  r  r  r  r/   s     r   9test_untagged_version_after_rc_has_dev_version_preversionzFTestVersions.test_untagged_version_after_rc_has_dev_version_preversion  s\    				k"		11':!4!45E!FGr   c                     | j                   j                          | j                   j                  d       | j                   j                          t        j                         }| j                  d|       y )Nr  z1.2.3.0rc3.dev1r  r/   s     r   ;test_untagged_version_after_semver_compliant_prerelease_tagzHTestVersions.test_untagged_version_after_semver_compliant_prerelease_tag  sQ    				k"		113*G4r   c                 P   | j                   j                          | j                   j                  d       | j                   j                          | j                  t        t
        j                  d      }| j                  |j                  d   t        j                  d             y )Nr  r   git historyr   r   r.   r
  rw   r   r  r   argsr   r  r   errs     r   test_preversion_too_low_simplez+TestVersions.test_preversion_too_low_simple  su     					g		 	77BX%8%8%GHr   c                 R   | j                   j                          | j                   j                  d       | j                   j                  d       | j                  t        t
        j                  d      }| j                  |j                  d   t        j                  d             y )Nr  sem-ver: featurez1.2.4r   r  r  r  s     r   &test_preversion_too_low_semver_headersz3TestVersions.test_preversion_too_low_semver_headers)  sx     					g		+, 	77BX%8%8%GHr   c                 t      fd fd} |d        j                   j                  d        |d       y )Nc                 b    j                   j                  dz   }t        j                  ||       S )Nz/.git)r   r   r   _get_increment_kwargs)r.   git_dirr   s     r   
get_kwargsz=TestVersions.test_get_kwargs_corner_cases.<locals>.get_kwargs8  s*    ii((72G227C@@r   c                 B   j                   j                          j                  t                |              j                   j                  d       j                  t                |              j                   j                  d       j                  t        d       |              j                   j	                          j                   j                  d       j                  t        d       |              j                   j	                          j                   j                  d       j                  t        d       |              j                   j                  d       j                  t        dd       |              y )	Nzsem-ver: bugfixr  T)minorr  r  )major)r  r  )r   r   r   r   r,   )r.   r  r   s    r   _check_combinationszFTestVersions.test_get_kwargs_corner_cases.<locals>._check_combinations<  s$   IITVZ_5II./TVZ_5II/0T-z#?II II34T-z#?II II12T-z#?II34TD9:c?Kr   r?   r  )r   r.   )r   r  r  s   ` @r   test_get_kwargs_corner_casesz)TestVersions.test_get_kwargs_corner_cases5  s1    	A	L 	B		gG$r   c                    | j                   j                          | j                   j                  d       | j                   j                          | j                   j                  d       t        j                         }| j                  |t        j                  d             | j                   j                          t        j                         }| j                  |t        j                  d             | j                   j                          | j                   j                  d       | j                   j                          | j                   j                  d       t        j                         }| j                  |t        j                  d             | j                   j                          | j                   j                  d       | j                   j                          | j                   j                  d	       t        j                         }| j                  |t        j                  d
             | j                   j                          | j                   j                  d       | j                   j                          | j                   j                  d       t        j                         }| j                  |t        j                  d             | j                   j                          | j                   j                  d       | j                   j                          | j                   j                  d       t        j                         }| j                  |t        j                  d             y )N1badverz
1.0.1.dev1z
1.0.1.dev2z1.2badver2z
1.2.1.dev1r  badver3r  z	1.2.4.0a1badver4z1.2.4.0a2.dev12znon-release-tag/2014.12.16-1z
2.0.1.dev1r  r/   s     r   test_invalid_tag_ignoredz%TestVersions.test_invalid_tag_ignoredO  s@    					c				h113!4!4\!BC		113!4!4\!BC				e				i 113!4!4\!BC				g				i 113!4!4\!BC				k"				i 113!4!45E!FG				c				45113!4!4\!BCr   c                     | j                   j                          | j                   j                  d       t        j                         }| j                  d|       y )Nz	1.3.0.0a1r  r/   s     r   test_valid_tag_honouredz$TestVersions.test_valid_tag_honouredz  sB     					k"113g.r   c                     | j                   j                          | j                   j                  d       dt        j                  d<   t        j                  d      }| j                  d|       y )Nr  r  SKIP_WRITE_GIT_CHANGELOG)r   r   r.   r"   environr   r  r   r/   s     r   test_skip_write_git_changelogz*TestVersions.test_skip_write_git_changelog  sQ    				g14

-.11':'*r   c                 j    t         t        |           t        j                  j                  dd        y )Nr  )r   rt  tearDownr"   r  r   r   s    r   r  zTestVersions.tearDown  s#    lD*,


148r   )"r1   r2   r3   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  r  r  r  r  r5   r6   s   @r   rt  rt  {  s     
401	$E23I
8#DDDDDD
DD+0DDHDDDDH5
I
I%4)DV/+9 9r   rt  c                       e Zd Zd Zy)TestRequirementParsingc                 b   dt        j                  d      t        j                  d      di}| j                  t        |            j                  }|d   }ddgdgdd	gd
gddgd}| j                  t        d            }|j                  }| j                  |dd|       t        j                  j                  |d      }t        j                  j                  |d      }t        |d      5 }	t        t        j                  |	            }
d d d        |j                         D ]r  \  }}|D cg c]!  }t        j                   j#                  |      # }}
|   D cg c]!  }t        j                   j#                  |      # }}| j%                  ||       t y # 1 sw Y   xY wc c}w c c}w )N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-  rn   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')reqParse)rm   r   Fr   cwdztest_reqparse.egg-infozrequires.txtrt)r   r   r@   rk   r   rS   ra   r   r"   r(   rI   r$   r   r   split_sectionsitemsRequirementparser   )r   pkgspkg_dirspkg_direxpected_requirementsvenv
bin_pythonegg_inforequires_txtrequiresgenerated_requirementssectionrS  s
exp_parsed
gen_parseds                   r   test_requirement_parsingz/TestRequirementParsing.test_requirement_parsing  s   (0 9 ) "* 	2 	"
* ??>$#78EE?+ /0)3)E)A)CG-6	,B!
 tJ/0[[
 	j"=!&G 	 	577<<)ABww||Hn=,% 	8%),,X6&8"	8 "7!<!<!> 		5GX " ))//2J  08 ))//2J  Z4		5	8 	8s   .F/&F'&F,F$N)r1   r2   r3   r  rU   r   r   r  r    s    =5r   r  c                       e Zd Zd Zy)TestPEP517Supportc                 r   dt        j                  d      t        j                  d      t        j                  d      t        j                  d      di}| j                  t        |            j                  }|d   }| j                  t        d            }| j                  |j                  dd	|
       y )N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-  rm   rn   zpyproject.tomlPEP517)r    rX   z--no-isolationr   Fr  )r   r   r@   rk   r   rS   r   ra   )r   r  r  r  r  s        r   test_pep_517_supportz&TestPEP517Support.test_pep_517_support  s     (0 9 )
 !) 1 !
 "* 2 "( '/oo 7 '?#&
N ??>$#78EE=)tH~. 	dkk#I!&G 	 	5r   N)r1   r2   r3   r  rU   r   r   r  r    s    45r   r  c                   0     e Zd Z fdZd Zd Zd Z xZS )TestRepositoryURLDependenciesc                 2   t         t        |           t        j                  j                  t        j                         d      | _        t        | j                  d      5 }|j                  dj                  g d             d d d        y # 1 sw Y   y xY w)Nr-  r.  r;   )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=Proj10git+https://git.project.org/Proj#egg=Proj2-0.0.1z+-e git+ssh://git.project.org/Proj#egg=Proj32svn+svn://svn.project.org/svn/Proj#egg=Proj4-0.0.2z;-e svn+http://svn.project.org/svn/Proj/trunk@2019#egg=Proj59hg+http://hg.project.org/Proj@da39a3ee5e6b#egg=Proj-0.0.3z.-e hg+http://hg.project.org/Proj@2019#egg=Proj1hg+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(   rI   r1  r2  r4  r$   rJ   )r   rP   r   s     r   r   z#TestRepositoryURLDependencies.setUp  sw    +T8:GGLL)9)9););=$##S) 	.QGGDII , - .	. 	. 	.s   !#BBc           	          g d}g d}t        |      D ]=  \  }}| j                  ||   t        j                  dt        j
                  |             ? y )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.4r  foo-bar>=1.2.4)/z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.3egg=Projzegg=Proj-0.0.4r  zegg=foo-bar-1.2.4zegg=([^&]+).*$)	enumerater   rC   subr   egg_fragment)r   rS  testsindexr  s        r   test_egg_fragmentz/TestRepositoryURLDependencies.test_egg_fragment&  s[    0
b0
b %U+ 	+KE4Xe_VV$5$-$:$:$(*+	+r   c                 l    t        j                  | j                  g      }| j                  g d|       y )N)zoslo.messaging>=1.0.0-rcr  r  r  r  r  zOdjango-thumborize2-beta>=1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okayr  r  r  r  r  r  r  r  r  r  r  r
  r  )r   r)  r4  r   r   r5  s     r    test_parse_repo_url_requirementsz>TestRepositoryURLDependencies.test_parse_repo_url_requirements  s3    --t/@/@.AB ( *0	1r   c                 l    t        j                  | j                  g      }| j                  g d|       y )N)zEgit+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=Projr  z6hg+http://hg.project.org/Proj@special_feature#egg=Projr	  )r   rm  r4  r   r$  s     r   $test_parse_repo_url_dependency_linkszBTestRepositoryURLDependencies.test_parse_repo_url_dependency_links  s5    1143D3D2EF8$ :@'	Ar   )r1   r2   r3   r   r"  r%  r'  r5   r6   s   @r   r  r  
  s    .4g+R1 Ar   r  c                     d } 	 t        j                  d      } t        j                  d      }| rrdt        j                         v r| d|} | mdt        j                         v rWt	        j
                         D ]@  \  }}}|j                  d      s|j                  d      s+|j                  d      d   }  | S  | S # t        $ r Y w xY w)	NSOABI	MULTIARCHpypy-z.pypyz.sor   r<   )		sysconfigget_config_varIOErrorget_scheme_namesimpget_suffixesru   endswithrE   )r   archr<  r   s       r   r   r     s    E((1''4 &I$>$>$@@ $'}9#=#=#??  ,,. 	LFAq  )fooe.DS)!,L		 L  s   *C   	CC)4r{  email.errorsr1  r"   rC   r-  r1  r   rA   unittestr   ImportErrorr   r   rf  	testtoolsr   rb   rW   r   r/  r   r   	pbr.testsr   r(   rr   rI   __file__r[   Fixturer
   r8   rS   rk   BaseTestCaser   r   r   r   TestCaser   r  r  r'  rQ  ri  rt  r  r  r  r   rU   r   r   <module>r>     s  R   
 	 	      
         77??277<<$dCDGx GB4H$$ 4n(8 (V>X%% >B?Kt'8'8 ?KDC 1 1 C7$*;*; 7(1<$++ 1<h'9-- 'TMD$5$5 M2=)) ==*D-- =*@0HT%6%6 0Hf?t00 ?,R94$$ R9j?5T.. ?5D55)) 55pjAD$5$5 jAZE$  s   H 	H H 