U
    7^“Q  ć                   @   s°   d Z ddlmZmZ ddlZddlZddlZddlmZ ddl	m
Z
 ddlmZmZ ddlmZmZ ddlmZ dd	lmZ d
ZdZdZdZG dd deZG dd deZdS )z
Tests for L{incremental}.
é    )ŚdivisionŚabsolute_importN)Śmkdtemp)ŚBytesIO)ŚgetVersionStringŚIncomparableVersions)ŚVersionŚ_inf)ŚFilePath)ŚTestCases  <?xml version="1.0" encoding="utf-8"?>
<wc-entries
   xmlns="svn:">
<entry
   committed-rev="18210"
   name=""
   committed-date="2006-09-21T04:43:09.542953Z"
   url="svn+ssh://svn.twistedmatrix.com/svn/Twisted/trunk/twisted"
   last-author="exarkun"
   kind="dir"
   uuid="bbbe8e31-12d6-0310-92fd-ac37d47ddeeb"
   repos="svn+ssh://svn.twistedmatrix.com/svn/Twisted"
   revision="18211"/>
</wc-entries>
s?   8

dir
22715
svn+ssh://svn.twistedmatrix.com/svn/Twisted/trunk
s?   9

dir
22715
svn+ssh://svn.twistedmatrix.com/svn/Twisted/trunk
s@   10

dir
22715
svn+ssh://svn.twistedmatrix.com/svn/Twisted/trunk
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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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]S )^ŚVersionsTestsc                 C   s,   t ddddddd}|  | ” | ” ” dS )zE
        The local version is the same as the short version.
        Śdummyé   r   é   ©Śrelease_candidateŚdevN)r   ŚassertEqualZlocalŚshort)ŚselfŚva© r   ś@/usr/lib/python3/dist-packages/incremental/tests/test_version.pyŚtest_localIsShortD   s    zVersionsTests.test_localIsShortc                 C   s   t dddd}t dddd}|  ||k” |  ||k ” |  ||k” |  ||k” |  ||k” |  |t ddddk” |  ||k” dS )zB
        Versions can be compared for equality and order.
        r   r   r   N©r   Ś
assertTrue©r   r   Zvbr   r   r   Śtest_versionComparisonK   s    z$VersionsTests.test_versionComparisonc                 C   s   t dddd}t dddd}|  ||k” |  ||k ” |  ||k” |  ||k” |  ||k” |  |t ddddk” |  ||k” dS )z=
        Version package names are case insensitive.
        r   r   r   ZDuMmYNr   r   r   r   r   Ś%test_versionComparisonCaseInsensitiveY   s    z3VersionsTests.test_versionComparisonCaseInsensitivec                 C   sH   t dddd}t dddd}|  ||k” |  ||k ” |  ||” dS )zI
        NEXT releases are always larger than numbered releases.
        ŚwhateverŚNEXTr   r   N©r   r   ŚassertFalseZassertNotEqualsr   r   r   r   Śtest_comparingNEXTReleasesg   s
    z(VersionsTests.test_comparingNEXTReleasesc              	   C   s¬   |   t” tddddddd W 5 Q R X |   t” tddddddd W 5 Q R X |   t” tddddddd W 5 Q R X |   t” tddddddd W 5 Q R X dS )zR
        NEXT releases must always have the rest of the numbers set to 0.
        r   r    r   r   r   N©ŚassertRaisesŚ
ValueErrorr   ©r   r   r   r   Śtest_NEXTMustBeAloneq   s    z"VersionsTests.test_NEXTMustBeAlonec                 C   s,   t dddd}t dddd}|  ||” dS )z8
        NEXT releases are equal to each other.
        r   r    r   N)r   ZassertEqualsr   r   r   r   Śtest_comparingNEXTReleasesEqual   s    z-VersionsTests.test_comparingNEXTReleasesEqualc                 C   sL   t dddddd}t dddd}|  ||k ” |  ||k” |  ||” dS )zP
        Prereleases are always less than versions without prereleases.
        r   r   r   ©Ś
prereleaseNr!   r   r   r   r   Ś%test_comparingPrereleasesWithReleases   s
    z3VersionsTests.test_comparingPrereleasesWithReleasesc                 C   sB   t dddddd |  ” }|  t|d” |  |d d d” dS )z@
        Passing 'prerelease' to Version is deprecated.
        r   r   r   r*   ŚmessagezvPassing prerelease to incremental.Version was deprecated in Incremental 16.9.0. Please pass release_candidate instead.N)r   ŚflushWarningsr   Ślen)r   Śwarningsr   r   r   Śtest_prereleaseDeprecated   s    
žz'VersionsTests.test_prereleaseDeprecatedc                 C   sH   t dddddd}|j |  ” }|  t|d” |  |d d d” dS )zD
        Accessing 'prerelease' on a Version is deprecated.
        r   r   r   ©r   r-   zuAccessing incremental.Version.prerelease was deprecated in Incremental 16.9.0. Use Version.release_candidate instead.N)r   r+   r.   r   r/   )r   r   r0   r   r   r   Ś"test_prereleaseAttributeDeprecated   s    
žz0VersionsTests.test_prereleaseAttributeDeprecatedc                 C   sL   t dddddd}t dddd}|  ||k ” |  ||k” |  ||” dS )zf
        Release Candidates are always less than versions without release
        candidates.
        r   r   r   r2   Nr!   r   r   r   r   Ś+test_comparingReleaseCandidatesWithReleases¬   s
    z9VersionsTests.test_comparingReleaseCandidatesWithReleasesc                 C   sL   t dddddd}t dddd}|  ||k ” |  ||k” |  ||” dS )zR
        Dev releases are always less than versions without dev releases.
        r   r   r   ©r   Nr!   r   r   r   r   Ś%test_comparingDevReleasesWithReleases·   s
    z3VersionsTests.test_comparingDevReleasesWithReleasesc                 C   sD   t dddddd}t dddddd}|  ||k” |  ||k” dS )z>
        Release Candidates are equal to prereleases.
        r   r   r   r2   r*   N)r   r   r"   r   r   r   r   Śtest_rcEqualspreĮ   s    zVersionsTests.test_rcEqualsprec              	   C   s.   |   t” tddddddd W 5 Q R X dS )zG
        Release Candidate and prerelease can't both be given.
        r   r   r   )r+   r   Nr$   r'   r   r   r   Śtest_rcOrpreButNotBothŹ   s
    
 ’z$VersionsTests.test_rcOrpreButNotBothc              
   C   s   t dddddd}t dddddd}|  ||k ” |  ||k” |  ||k” |  ||k” |  ||k” |  |t ddddddk” |  ||k” dS )zf
        The value specified as the release candidate is used in version
        comparisons.
        r   r   r   r2   é   Nr   r   r   r   r   Śtest_comparingReleaseCandidatesŅ   s    ’
z-VersionsTests.test_comparingReleaseCandidatesc              
   C   s   t dddddd}t dddddd}|  ||k ” |  ||k” |  ||k” |  ||k” |  ||k” |  |t ddddddk” |  ||k” dS )zX
        The value specified as the dev release is used in version comparisons.
        r   r   r   r5   r9   Nr   r   r   r   r   Śtest_comparingDevā   s    ’
zVersionsTests.test_comparingDevc                 C   s   t ddddddd}t ddddddd}|  ||k ” |  ||k” |  ||k” |  ||k” |  ||k” |  |t dddddddk” |  ||k” dS ©zv
        The value specified as the dev release and release candidate is used in
        version comparisons.
        r   r   r   r   r9   Nr   r   r   r   r   Śtest_comparingDevAndRCń   s     ’
z$VersionsTests.test_comparingDevAndRCc                 C   s   t ddddddd}t ddddddd}|  ||k ” |  ||k” |  ||k” |  ||k” |  ||k” |  |t dddddddk” |  ||k” dS r<   r   r   r   r   r   Śtest_comparingDevAndRCDifferent  s     ’
z-VersionsTests.test_comparingDevAndRCDifferentc                 C   s   |   tt” dS )zR
        L{_inf} is equal to L{_inf}.

        This is a regression test.
        N)r   r	   r'   r   r   r   Śtest_infComparison  s    z VersionsTests.test_infComparisonc              
   C   s*   |   ttjtddddtdddd” dS )zO
        The package names of the Version objects need to be the same.
        r   r   r   ZdumymN)r%   r   ŚoperatorŚeqr   r'   r   r   r   Śtest_disallowBuggyComparisons  s
    żz+VersionsTests.test_disallowBuggyComparisonsc                 C   s(   t dddd}d}|  | |”t” dS )zh
        Comparing a L{Version} to some other object type results in
        C{NotImplemented}.
        r   r   r   )r   r   r   r   N)r   r   Z__cmp__ŚNotImplementedr   r   r   r   Śtest_notImplementedComparisons"  s    z,VersionsTests.test_notImplementedComparisonsc                 C   s   |   ttddddd” dS )zu
        Calling C{repr} on a version returns a human-readable string
        representation of the version.
        r   r   r9   r   zVersion('dummy', 1, 2, 3)N©r   Śreprr   r'   r   r   r   Ś	test_repr+  s    ’zVersionsTests.test_reprc              
   C   s"   |   ttddddddd” dS )	zĄ
        Calling C{repr} on a version with a prerelease returns a human-readable
        string representation of the version including the prerelease as a
        release candidate..
        r   r   r9   r   é   r*   ś.Version('dummy', 1, 2, 3, release_candidate=4)NrE   r'   r   r   r   Śtest_reprWithPrerelease3  s    ’z%VersionsTests.test_reprWithPrereleasec              
   C   s"   |   ttddddddd” dS )	z
        Calling C{repr} on a version with a release candidate returns a
        human-readable string representation of the version including the rc.
        r   r   r9   r   rH   r2   rI   NrE   r'   r   r   r   Śtest_reprWithReleaseCandidate<  s    ’z+VersionsTests.test_reprWithReleaseCandidatec              
   C   s"   |   ttddddddd” dS )	zŖ
        Calling C{repr} on a version with a dev release returns a
        human-readable string representation of the version including the dev
        release.
        r   r   r9   r   rH   r5   z Version('dummy', 1, 2, 3, dev=4)NrE   r'   r   r   r   Śtest_devWithReleaseCandidateD  s    ’z*VersionsTests.test_devWithReleaseCandidatec                 C   s   |   ttddddd” dS )zt
        Calling C{str} on a version returns a human-readable string
        representation of the version.
        r   r   r9   r   z[dummy, version 1.2.3]N©r   Śstrr   r'   r   r   r   Śtest_strM  s    ’zVersionsTests.test_strc              
   C   s"   |   ttddddddd” dS )zw
        Calling C{str} on a version with a prerelease includes the prerelease
        as a release candidate.
        r   r   r   r*   ś[dummy, version 1.0.0rc1]NrM   r'   r   r   r   Śtest_strWithPrereleaseU  s    ’z$VersionsTests.test_strWithPrereleasec              
   C   s"   |   ttddddddd” dS )zn
        Calling C{str} on a version with a release candidate includes the
        release candidate.
        r   r   r   r2   rP   NrM   r'   r   r   r   Śtest_strWithReleaseCandidate]  s    ’z*VersionsTests.test_strWithReleaseCandidatec                 C   s$   |   ttdddddddd” dS )z
        Calling C{str} on a version with a release candidate and dev release
        includes the release candidate and the dev release.
        r   r   r   r9   r   z[dummy, version 1.0.0rc1dev2]NrM   r'   r   r   r   Ś"test_strWithDevAndReleaseCandidatee  s     ’žz0VersionsTests.test_strWithDevAndReleaseCandidatec              
   C   s"   |   ttddddddd” dS )zb
        Calling C{str} on a version with a dev release includes the dev
        release.
        r   r   r   r5   z[dummy, version 1.0.0dev1]NrM   r'   r   r   r   Śtest_strWithDevn  s    ’zVersionsTests.test_strWithDevc                 C   s   |   tdddd ” d” d S )Nr   r   r9   r   z1.2.3)r   r   r   r'   r   r   r   Ś	testShortv  s    zVersionsTests.testShortc                 C   s(   t dddd}|  | tt”d” dS )zO
        Version should be able to parse an SVN format 4 entries file.
        r   r   r   ó   18211N)r   r   Z_parseSVNEntries_4r   ŚVERSION_4_ENTRIES©r   Śversionr   r   r   Śtest_goodSVNEntries_4y  s
     ’z#VersionsTests.test_goodSVNEntries_4c                 C   s(   t dddd}|  | tt”d” dS )zO
        Version should be able to parse an SVN format 8 entries file.
        r   r   r   ó   22715N)r   r   Z_parseSVNEntries_8r   ŚVERSION_8_ENTRIESrX   r   r   r   Śtest_goodSVNEntries_8  s
     ’z#VersionsTests.test_goodSVNEntries_8c                 C   s(   t dddd}|  | tt”d” dS )zO
        Version should be able to parse an SVN format 9 entries file.
        r   r   r   r[   N)r   r   Z_parseSVNEntries_9r   ŚVERSION_9_ENTRIESrX   r   r   r   Śtest_goodSVNEntries_9  s
     ’z#VersionsTests.test_goodSVNEntries_9c                 C   s(   t dddd}|  | tt”d” dS )zP
        Version should be able to parse an SVN format 10 entries file.
        r   r   r   r[   N)r   r   Z_parseSVNEntriesTenPlusr   ŚVERSION_10_ENTRIESrX   r   r   r   Śtest_goodSVNEntriesTenPlus  s
    žz(VersionsTests.test_goodSVNEntriesTenPlusc              	   C   s   |   dttdddd” dS )zr
        L{getVersionString} returns a string with the package name and the
        short version number.
        zTwisted 8.0.0ZTwistedé   r   N©r   r   r   r'   r   r   r   Śtest_getVersionString  s     ’z#VersionsTests.test_getVersionStringc              
   C   s"   |   ttddddddd” dS )ze
        L{getVersionString} includes the prerelease as a release candidate, if
        any.
        r   rb   r   r   r*   śwhatever 8.0.0rc1Nrc   r'   r   r   r   Ś#test_getVersionStringWithPrerelease¢  s    žz1VersionsTests.test_getVersionStringWithPrereleasec              
   C   s"   |   ttddddddd” dS )zM
        L{getVersionString} includes the release candidate, if any.
        r   rb   r   r   r2   re   Nrc   r'   r   r   r   Ś)test_getVersionStringWithReleaseCandidate«  s    ’żz7VersionsTests.test_getVersionStringWithReleaseCandidatec              
   C   s"   |   ttddddddd” dS )zG
        L{getVersionString} includes the dev release, if any.
        r   rb   r   r   r5   zwhatever 8.0.0dev1Nrc   r'   r   r   r   Śtest_getVersionStringWithDev“  s    ’żz*VersionsTests.test_getVersionStringWithDevc                 C   s$   |   ttdddddddd” dS )	ze
        L{getVersionString} includes the dev release and release candidate, if
        any.
        r   rb   r   r9   r   r   zwhatever 8.0.0rc2dev1Nrc   r'   r   r   r   Ś!test_getVersionStringWithDevAndRC½  s     ’żz/VersionsTests.test_getVersionStringWithDevAndRCc                 C   s   |   tdddd ” d” dS )zX
        The C{base} method returns just "NEXT" when NEXT is the major version.
        Śfoor    r   N©r   r   Śbaser'   r   r   r   Śtest_baseWithNEXTĒ  s    zVersionsTests.test_baseWithNEXTc                 C   s   |   tdddd ” d” dS )zY
        The C{base} method returns a very simple representation of the version.
        rj   r   r   z1.0.0Nrk   r'   r   r   r   Ś	test_baseĶ  s    zVersionsTests.test_basec              	   C   s"   |   tdddddd ” d” dS )śP
        The base version includes 'rcX' for versions with prereleases.
        rj   r   r   rb   r*   ś1.0.0rc8Nrk   r'   r   r   r   Śtest_baseWithPrereleaseÓ  s    ’z%VersionsTests.test_baseWithPrereleasec              	   C   s"   |   tdddddd ” d” dS )zR
        The base version includes 'devX' for versions with dev releases.
        rj   r   r   rb   r5   z	1.0.0dev8Nrk   r'   r   r   r   Śtest_baseWithDevŚ  s    ’zVersionsTests.test_baseWithDevc              	   C   s"   |   tdddddd ” d” dS )ro   rj   r   r   rb   r2   rp   Nrk   r'   r   r   r   Śtest_baseWithReleaseCandidateį  s    ’z+VersionsTests.test_baseWithReleaseCandidatec              
   C   s$   |   tddddddd ” d” dS )	zu
        The base version includes 'rcXdevX' for versions with dev releases and
        a release candidate.
        rj   r   r   r9   rb   r   z1.0.0rc2dev8Nrk   r'   r   r   r   Śtest_baseWithDevAndRCč  s     ’žz#VersionsTests.test_baseWithDevAndRCc                 C   sr   t |  ” }| ”  | d” d” | d” d”}| ”  | d” d” tddd	d	}|  | |j”d
” d S )NZHEADs   ref: refs/heads/master
ZrefsŚheadsZmasters)   a96d61d94949c0dc097d6e1c3515792e99a724d5
rj   r   r   Z(a96d61d94949c0dc097d6e1c3515792e99a724d5)	r
   ZmktempŚmakedirsŚchildŚ
setContentr   r   Z_parseGitDirŚpath)r   ZgitDirru   rY   r   r   r   Śtest_gitń  s    
’’zVersionsTests.test_gitN)1Ś__name__Ś
__module__Ś__qualname__r   r   r   r#   r(   r)   r,   r1   r3   r4   r6   r7   r8   r:   r;   r=   r>   r?   rB   rD   rG   rJ   rK   rL   rO   rQ   rR   rS   rT   rU   rZ   r]   r_   ra   rd   rf   rg   rh   ri   rm   rn   rq   rr   rs   rt   rz   r   r   r   r   r   B   s\   


										
	r   c                   @   sh   e Zd Z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S )ŚFormatDiscoveryTestszT
    Tests which discover the parsing method based on the imported module name.
    c                 C   st   t t | _|  | jj” tj ” | _tj	 
| jj	” | j d”}| ”  | d” d” | d”| _| j ”  dS )zN
        Create a temporary directory with a package structure in it.
        Śincremental_test_packagez__init__.pysW   from incremental import Version
version = Version('incremental_test_package', 1, 0, 0)
z.svnN)r
   r   ŚentryZ
addCleanupŚremoveŚsysŚmodulesŚcopyŚpreTestModulesry   Śappendrw   rv   rx   Ś
svnEntries)r   Śpkgr   r   r   ŚsetUp  s    
’zFormatDiscoveryTests.setUpc                 C   s,   t j ”  t j | j” t j | jj” dS )zI
        Remove the imported modules and sys.path modifications.
        N)r   r   ŚclearŚupdater   ry   r   r   r'   r   r   r   ŚtearDown  s    
zFormatDiscoveryTests.tearDownc                 C   s@   | j  d” |d ” | j  d” |” |  |  ”  ” |” dS )z
        Check for the given revision being detected after setting the SVN
        entries text and format version of the test directory structure.
        Śformató   
ŚentriesN)r   rw   rx   r   Ś
getVersionŚ_getSVNVersion)r   ZformatVersionZentriesTextZexpectedRevisionr   r   r   ŚcheckSVNFormat  s    z#FormatDiscoveryTests.checkSVNFormatc                 C   s   ddl }|jS )zf
        Import and retrieve the Version object from our dynamically created
        package.
        r   N)r   rY   )r   r   r   r   r   r   '  s    zFormatDiscoveryTests.getVersionc                 C   s   |   dtd” dS )zY
        Verify that version 4 format file will be properly detected and parsed.
        ó   4rV   N)r   rW   r'   r   r   r   Śtest_detectVersion4/  s    z(FormatDiscoveryTests.test_detectVersion4c                 C   s   |   dtd” dS )zb
        Verify that version 8 format files will be properly detected and
        parsed.
        ó   8r[   N)r   r\   r'   r   r   r   Śtest_detectVersion85  s    z(FormatDiscoveryTests.test_detectVersion8c                 C   s   |   dtd” dS )zb
        Verify that version 9 format files will be properly detected and
        parsed.
        ó   9r[   N)r   r^   r'   r   r   r   Śtest_detectVersion9<  s    z(FormatDiscoveryTests.test_detectVersion9c                 C   s   |   ddd” dS )z
        Verify that the result is C{b"Unknown"} for an apparently supported
        version for which parsing of the entries file fails.
        r   s   some unsupported stuffó   UnknownN©r   r'   r   r   r   Śtest_unparseableEntriesC  s    z,FormatDiscoveryTests.test_unparseableEntriesc                 C   s*   | j  d” t” |  |  ”  ” d” dS )a  
        Verify that version 10 format files will be properly detected and
        parsed.

        Differing from previous formats, the version 10 format lacks a
        I{format} file and B{only} has the version information on the first
        line of the I{entries} file.
        r   r[   N)r   rw   rx   r`   r   r   r   r'   r   r   r   Śtest_detectVersion10J  s    	z)FormatDiscoveryTests.test_detectVersion10c                 C   s   |   ddd” dS )zY
        Verify that a new version of SVN will result in the revision 'Unknown'.
        s   some-random-new-versions   ooga booga!r   Nr   r'   r   r   r   Śtest_detectUnknownVersionV  s    ’z.FormatDiscoveryTests.test_detectUnknownVersionc                 C   sT   | j  d” d” | j  d” t” t|  ” }|  d|” |  t|t	d” dS )zN
        L{getVersionString} includes the discovered revision number.
        r   s   9
r   z%incremental_test_package 1.0.0+r22715Ś N)
r   rw   rx   r`   r   r   r   r   Ś
isinstanceŚtyperX   r   r   r   Ś!test_getVersionStringWithRevision]  s    žz6FormatDiscoveryTests.test_getVersionStringWithRevisionN)r{   r|   r}   Ś__doc__r   r   r   r   r   r   r   r   r   r   r”   r   r   r   r   r~     s   	r~   )r¢   Z
__future__r   r   r   r@   ZunittestZtempfiler   Śior   Zincrementalr   r   r   r	   Ztwisted.python.filepathr
   Ztwisted.trial.unittestr   rW   r\   r^   r`   r   r~   r   r   r   r   Ś<module>   s&   	   B