o
    Zb8                     @   s   d Z ddlmZ ddlm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	Z	ddl
mZ ddl
mZ ddlZddlZG dd	 d	e	jZejd
d Ze	jZe	jZe	jZdS )z"Utilities for Python Fire's tests.    )absolute_import)division)print_functionN)core)tracec                       s@   e Zd ZdZejd
ddZ fddZejddd	Z  Z	S )BaseTestCasez'Shared test case for Python Fire tests..*Tc           
   
   c   s<   t  }t  }zGtjtd|# tjtd| dV  W d   n1 s)w   Y  W d   n1 s8w   Y  W |sPtj|  tj	|  n|sdtj|  tj	|  w w d||fd||ffD ],\}}}| }	|du r|	rt
d||	f qot||	tjtjB st
d||	|f qodS )a  Asserts that the context generates stdout and stderr matching regexps.

    Note: If wrapped code raises an exception, stdout and stderr will not be
      checked.

    Args:
      stdout: (str) regexp to match against stdout (None will check no stdout)
      stderr: (str) regexp to match against stderr (None will check no stderr)
      capture: (bool, default True) do not bubble up stdout or stderr

    Yields:
      Yields to the wrapped context.
    stdoutstderrNz%s: Expected no output. Got: %rz%s: Expected %r to match %r)sixStringIOmockpatchobjectsysr	   writegetvaluer
   AssertionErrorresearchDOTALL	MULTILINE)
selfr	   r
   captureZ	stdout_fpZ	stderr_fpnameregexpfpvalue r   >D:\Projects\ConvertPro\env\Lib\site-packages\fire\testutils.pyassertOutputMatches%   sF   z BaseTestCase.assertOutputMatchesc                    s8   t jjdkrtt| j|i |S tt| j|i |S )N   )r   version_infomajorsuperr   assertRaisesRegexpassertRaisesRegex)r   argskwargs	__class__r   r   r&   K   s   zBaseTestCase.assertRaisesRegexc                 c   s    | j |dQ | tj2 zdV  W n$ tjy8 } z|j|kr+td|j|f | |jtj  d}~ww W d   n1 sCw   Y  W d   dS W d   dS 1 s[w   Y  dS )a^  Asserts that a FireExit error is raised in the context.

    Allows tests to check that Fire's wrapper around SystemExit is raised
    and that a regexp is matched in the output.

    Args:
      code: The status code that the FireExit should contain.
      regexp: stdout must match this regex.

    Yields:
      Yields to the wrapped context.
    )r
   NzIncorrect exit code: %r != %r)	r    assertRaisesr   ZFireExitcoder   assertIsInstancer   Z	FireTrace)r   r,   r   excr   r   r   assertRaisesFireExitQ   s&   

"z!BaseTestCase.assertRaisesFireExit)r   r   T)r   )
__name__
__module____qualname____doc__
contextlibcontextmanagerr    r&   r/   __classcell__r   r   r)   r   r   "   s    %r   c              	   c   s8    t  }t |  z| V  W t | dS t | w )z>Context manager to mock a directory change and revert on exit.N)osgetcwdchdir)	directoryZcwdirr   r   r   ChangeDirectoryk   s   
r;   )r3   Z
__future__r   r   r   r4   r7   r   r   Zunittestfirer   r   r   r   TestCaser   r5   r;   mainskipskipIfr   r   r   r   <module>   s&   I

