U
    
W[ö  ã                   @   s„   d dl mZm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ZG dd„ de
ƒZG d	d
„ d
e
ƒZdS )é    )ÚdivisionÚabsolute_importN)Úimplementer)ÚFailure)ÚSynchronousTestCaseÚPyUnitResultAdapter)Ú	IReporterÚ	ITestCasec                   @   s.   e Zd ZG dd„ dejƒZdd„ Zdd„ ZdS )ÚPyUnitTestTestsc                   @   s   e Zd Zdd„ ZdS )zPyUnitTestTests.PyUnitTestc                 C   s   d S ©N© ©Úselfr   r   úF/usr/lib/python3/dist-packages/twisted/trial/test/test_pyunitcompat.pyÚ	test_pass   s    z$PyUnitTestTests.PyUnitTest.test_passN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   Ú
PyUnitTest   s   r   c                 C   s   |   d¡| _t| jƒ| _d S )Nr   )r   Zoriginalr	   Útestr   r   r   r   ÚsetUp   s    zPyUnitTestTests.setUpc                 C   s   |   t| jƒd| jf ¡ dS )zW
        Tests must be callable in order to be used with Python's unittest.py.
        z%r is not callable.N)Ú
assertTrueÚcallabler   r   r   r   r   Útest_callable   s    
ÿzPyUnitTestTests.test_callableN)r   r   r   ÚpyunitZTestCaser   r   r   r   r   r   r   r
      s   r
   c                   @   sp   e Zd ZdZG dd„ deƒ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 )ÚPyUnitResultTestsz¹
    Tests to show that PyUnitResultAdapter wraps TestResult objects from the
    standard library 'unittest' module in such a way as to make them usable and
    useful from Trial.
    c                   @   s   e Zd ZdZdZdd„ ZdS )zPyUnitResultTests.ErrorTestz™
        A test case which has a L{test_foo} which will raise an error.

        @ivar ran: boolean indicating whether L{test_foo} has been run.
        Fc                 C   s   d| _ dd  dS )zR
            Set C{self.ran} to True and raise a C{ZeroDivisionError}
            Té   r   N©Úranr   r   r   r   Útest_foo9   s    z$PyUnitResultTests.ErrorTest.test_fooN)r   r   r   Ú__doc__r   r   r   r   r   r   Ú	ErrorTest1   s   r!   c                 C   sH   t tƒG dd„ dtƒƒ}|  d¡}|ƒ }| |¡ |  |jd t¡ dS )zƒ
        The L{PyUnitResultAdapter} is only used when the result passed to
        C{run} does *not* provide L{IReporter}.
        c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )zXPyUnitResultTests.test_dontUseAdapterWhenReporterProvidesIReporter.<locals>.StubReporterzÆ
            A reporter which records data about calls made to it.

            @ivar errors: Errors passed to L{addError}.
            @ivar failures: Failures passed to L{addFailure}.
            c                 S   s   g | _ g | _d S r   )ÚerrorsÚfailuresr   r   r   r   Ú__init__O   s    zaPyUnitResultTests.test_dontUseAdapterWhenReporterProvidesIReporter.<locals>.StubReporter.__init__c                 S   s   dS ©z-
                Do nothing.
                Nr   ©r   r   r   r   r   Ú	startTestS   s    zbPyUnitResultTests.test_dontUseAdapterWhenReporterProvidesIReporter.<locals>.StubReporter.startTestc                 S   s   dS r%   r   r&   r   r   r   ÚstopTestX   s    zaPyUnitResultTests.test_dontUseAdapterWhenReporterProvidesIReporter.<locals>.StubReporter.stopTestc                 S   s   | j  |¡ dS )z3
                Record the error.
                N)r"   Úappend)r   r   Úerrorr   r   r   ÚaddError]   s    zaPyUnitResultTests.test_dontUseAdapterWhenReporterProvidesIReporter.<locals>.StubReporter.addErrorN)r   r   r   r    r$   r'   r(   r+   r   r   r   r   ÚStubReporterF   s
   r,   r   r   N)r   r   Úobjectr!   ÚrunZassertIsInstancer"   r   )r   r,   r   Úresultr   r   r   Ú0test_dontUseAdapterWhenReporterProvidesIReporterA   s    

zBPyUnitResultTests.test_dontUseAdapterWhenReporterProvidesIReporterc                 C   sV   G dd„ dt ƒ}|dƒ}t ¡ }| |¡ |  |j¡ |  d|j¡ |  | ¡ ¡ d S )Nc                   @   s   e Zd ZdZdd„ ZdS )z3PyUnitResultTests.test_success.<locals>.SuccessTestFc                 S   s
   d| _ d S ©NTr   ©Úsr   r   r   r   l   s    z<PyUnitResultTests.test_success.<locals>.SuccessTest.test_fooN©r   r   r   r   r   r   r   r   r   ÚSuccessTestj   s   r5   r   r   )	r   r   Ú
TestResultr.   r   r   ÚassertEqualÚtestsRunÚwasSuccessful)r   r5   r   r/   r   r   r   Útest_successi   s    
zPyUnitResultTests.test_successc                 C   sh   G dd„ dt ƒ}|dƒ}t ¡ }| |¡ |  |j¡ |  d|j¡ |  dt|j	ƒ¡ |  
| ¡ ¡ d S )Nc                   @   s   e Zd ZdZdd„ ZdS )z3PyUnitResultTests.test_failure.<locals>.FailureTestFc                 S   s   d| _ |  d¡ d S )NTzboom!)r   Zfailr2   r   r   r   r   y   s    z<PyUnitResultTests.test_failure.<locals>.FailureTest.test_fooNr4   r   r   r   r   ÚFailureTestw   s   r;   r   r   )r   r   r6   r.   r   r   r7   r8   Úlenr#   ÚassertFalser9   )r   r;   r   r/   r   r   r   Útest_failurev   s    
zPyUnitResultTests.test_failurec                 C   sZ   |   d¡}t ¡ }| |¡ |  |j¡ |  d|j¡ |  dt|j	ƒ¡ |  
| ¡ ¡ d S )Nr   r   )r!   r   r6   r.   r   r   r7   r8   r<   r"   r=   r9   )r   r   r/   r   r   r   Ú
test_error…   s    

zPyUnitResultTests.test_errorc                 C   sh   G dd„ dt ƒ}|dƒ}t ¡ }| |¡ |  |j¡ |  d|j¡ |  dt|j	ƒ¡ |  | 
¡ ¡ d S )Nc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )z4PyUnitResultTests.test_setUpError.<locals>.ErrorTestFc                 S   s   dd  d S ©Nr   r   r   r   r   r   r   r   ’   s    z:PyUnitResultTests.test_setUpError.<locals>.ErrorTest.setUpc                 S   s
   d| _ d S r1   r   r2   r   r   r   r   ”   s    z=PyUnitResultTests.test_setUpError.<locals>.ErrorTest.test_fooN)r   r   r   r   r   r   r   r   r   r   r!      s   r!   r   r   )r   r   r6   r.   r=   r   r7   r8   r<   r"   r9   )r   r!   r   r/   r   r   r   Útest_setUpError   s    
z!PyUnitResultTests.test_setUpErrorc                 C   sr   zdd  W n" t k
r.   t ¡ }tƒ }Y nX t ¡ }t|ƒ}| | |¡ |  |j	d d d 
tj|Ž ¡¡ dS )z‘
        Errors added through the L{PyUnitResultAdapter} have the same traceback
        information as if there were no adapter at all.
        r   r   Ú N)ÚZeroDivisionErrorÚsysÚexc_infor   r   r6   r   r+   r7   r"   ÚjoinÚ	tracebackÚformat_exception©r   rE   ÚfZpyresultr/   r   r   r   Útest_tracebackFromFailureŸ   s    ÿz+PyUnitResultTests.test_tracebackFromFailurec                 C   s†   G dd„ dt ƒ}|dƒ}t ¡ }| |¡ d t |jd ¡¡}d |jd d  	¡ d	d
… ¡}|  
| ¡ |t|ƒ d	…  ¡ ¡ d	S )zG
        As test_tracebackFromFailure, but covering more code.
        c                   @   s   e Zd ZdZdd„ ZdS )z3PyUnitResultTests.test_traceback.<locals>.ErrorTestNc                 S   s2   zdd  W n  t k
r,   t ¡ | _‚ Y nX d S r@   )rC   rD   rE   r   r   r   r   r   ¶   s
    
z<PyUnitResultTests.test_traceback.<locals>.ErrorTest.test_foo)r   r   r   rE   r   r   r   r   r   r!   ´   s   r!   r   rB   é   Ú
r   r   Néÿÿÿÿ)r   r   r6   r.   rF   rG   Ú	format_tbrE   r"   Ú
splitlinesr7   Ústripr<   )r   r!   r   r/   Zexpected_stackZobserved_stackr   r   r   Útest_traceback°   s    
	 
ÿz PyUnitResultTests.test_tracebackc                 C   sz   zdd  W n" t k
r.   t ¡ }tƒ }Y nX | ¡  t ¡ }t|ƒ}| | |¡ |  	|j
d d d tj|Ž ¡¡ dS )zÙ
        Errors added through the L{PyUnitResultAdapter} have the same
        traceback information as if there were no adapter at all, even
        if the Failure that held the information has been cleaned.
        r   r   rB   N)rC   rD   rE   r   ZcleanFailurer   r6   r   r+   r7   r"   rF   rG   rH   rI   r   r   r   Útest_tracebackFromCleanFailureÎ   s    ÿz0PyUnitResultTests.test_tracebackFromCleanFailurec                 C   sB   G dd„ dt ƒ}|dƒ}t ¡ }| |¡ |  |j|dfg¡ dS )zw
        Skips using trial's skipping functionality are reported as skips in
        the L{pyunit.TestResult}.
        c                   @   s   e Zd Zdd„ Zde_dS )z2PyUnitResultTests.test_trialSkip.<locals>.SkipTestc                 S   s   dd  d S r@   r   r   r   r   r   Ú	test_skipç   s    z<PyUnitResultTests.test_trialSkip.<locals>.SkipTest.test_skipúLet's skip!N)r   r   r   rT   Úskipr   r   r   r   ÚSkipTestæ   s   rW   rT   rU   N©r   r   r6   r.   r7   Zskipped©r   rW   r   r/   r   r   r   Útest_trialSkipá   s
    
z PyUnitResultTests.test_trialSkipc                 C   sB   G dd„ dt ƒ}|dƒ}t ¡ }| |¡ |  |j|dfg¡ dS )zx
        Skips using pyunit's skipping functionality are reported as skips in
        the L{pyunit.TestResult}.
        c                   @   s   e Zd Ze d¡dd„ ƒZdS )z3PyUnitResultTests.test_pyunitSkip.<locals>.SkipTestÚskippyc                 S   s   dd  d S r@   r   r   r   r   r   rT   ÷   s    z=PyUnitResultTests.test_pyunitSkip.<locals>.SkipTest.test_skipN)r   r   r   r   rV   rT   r   r   r   r   rW   ö   s   rW   rT   r[   NrX   rY   r   r   r   Útest_pyunitSkipñ   s
    
z!PyUnitResultTests.test_pyunitSkipN)r   r   r   r    r   r!   r0   r:   r>   r?   rA   rK   rR   rS   rZ   r\   r   r   r   r   r   (   s   (
r   )Z
__future__r   r   rD   rG   Zzope.interfacer   Ztwisted.python.failurer   Ztwisted.trial.unittestr   r   Ztwisted.trial.itrialr   r	   Zunittestr   r
   r   r   r   r   r   Ú<module>   s   