
    7 f                    2   d Z ddl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mZ ddlZddlmZmZ erddlmZ dd	lmZ d
dgZd Z ej        d          d9d            Z G d d          Z ej                    d:d            Z edd          Z ej                    d;d            Z ej                    d<d%            Z ej                    d=d)            Z ej                    d=d*            Z  ej                    d>d-            Z! ej                    d?d.            Z" ej        d/d01          d@d3            Z# ej                    dAd4            Z$ ej        d          dBd7            Z% ej                    d8             Z&dS )CzSphinx test fixtures for pytest    )annotationsN)
namedtuple)StringIO)TYPE_CHECKINGAnyCallable)SphinxTestApp#SphinxTestAppWrapperForSkipBuilding)	Generator)Pathzsphinx(builder, testroot=None, freshenv=False, confoverrides=None, tags=None, docutilsconf=None, parallel=0): arguments to initialize the sphinx test application.z0test_params(shared_result=...): test parameters.c                F    t           D ]}|                     d|           dS )zRegister custom markersmarkersN)DEFAULT_ENABLED_MARKERSaddinivalue_line)configmarkers     M/var/www/equiseq/venv/lib/python3.11/site-packages/sphinx/testing/fixtures.pypytest_configurer      s4    ) 3 3	622223 3    session)scopereturn
str | Nonec                     d S N r   r   r   rootdirr   #   s    4r   c                  .    e Zd ZU i Zded<   dd	ZddZdS )SharedResultzdict[str, dict[str, str]]cachekeystrapp_r	   r   r   c                    || j         v rd S |j                                        |j                                        d}|| j         |<   d S )Nstatuswarning)r    _statusgetvalue_warning)selfr!   r#   datas       r   storezSharedResult.store+   sS    $*Fl++--}--//
 
 
3r   dict[str, StringIO]c                    || j         vri S | j         |         }t          |d                   t          |d                   dS )Nr&   r'   r%   )r    r   )r+   r!   r,   s      r   restorezSharedResult.restore4   sL    dj  Iz#tH~..Y00
 
 	
r   N)r!   r"   r#   r	   r   r   )r!   r"   r   r.   )__name__
__module____qualname__r    __annotations__r-   r0   r   r   r   r   r   (   sO         ')E))))   
 
 
 
 
 
r   r   requestr   test_paramsdictshared_resultsphinx_test_tempdirr"   r   _app_paramsc                   i i }t          t          | j                            d                              D ];}t	          |j                  D ]
\  }}||<   |                    |j                   <fdt          	                                          D             }	|d         rUd|v rd}
t          j        |
          |d         |d<   |                    |d                   }|                    |           |                    dd          }||                    d|          z  x|d<   }|r1|                                s|d|z   z  }t!          j        ||           t%          |	|          S )	zp
    Parameters that are specified by 'pytest.mark.sphinx' for
    sphinx.application.Sphinx initialization
    sphinxc                     g | ]
}|         S r   r   ).0ipargss     r   
<listcomp>zapp_params.<locals>.<listcomp>Q   s    333E!H333r   r8   srcdirz:You can not specify shared_result and srcdir in same time.testrootrootztest-)reversedlistnodeiter_markers	enumerateargsupdatekwargssortedkeyspytest	Exceptionr0   popgetexistsshutilcopytreer:   )r5   r6   r8   r9   r   rL   infor?   arJ   msgr0   rC   rB   testroot_pathr@   s                  @r   
app_paramsrZ   >   s    EF gl77AABBCC # #di(( 	 	DAqE!HHdk""""3333fUZZ\\22333D ?# vNC"3'''&7x''O(DEEg zz*f--H 3fjj86T6T TTF8v  /v}} /7X#56v...tV$$$r   zargs,kwargsc                    | j                             d          }|r|j        ni }ddi}|                    |           |d         r1t	          |d         t
                    sd}t          j        |          |S )au  
    Test parameters that are specified by 'pytest.mark.test_params'

    :param Union[str] shared_result:
       If the value is provided, app._status and app._warning objects will be
       shared in the parametrized test functions and/or test functions that
       have same 'shared_result' value.
       **NOTE**: You can not specify both shared_result and srcdir.
    r6   r8   Nz?You can only provide a string type of value for "shared_result")rG   get_closest_markerrL   rK   
isinstancer"   rO   rP   )r5   envrL   resultrX   s        r   r6   r6   l   s     ,
)
)-
8
8C&SZZBFF MM&o $z&2I3'O'O $Os###Mr   rZ   tuple[dict, dict]make_appr   $Generator[SphinxTestApp, None, None]c              #    K   |\  }} ||i |}|V  t          d|                    dd                     t          d|j        j                   t          d|j                   t          d|j                   t          dd|j                                        z              t          d	d|j                                        z              | d
         r|	                    | d
         |           dS dS )z9
    Provides the 'sphinx.application.Sphinx' object
    z# testroot:rC   rD   z
# builder:z	# srcdir:z	# outdir:z	# status:
z
# warning:r8   N)
printrR   buildernamerB   outdirr(   r)   r*   r-   )r6   rZ   ra   r8   rJ   rL   r#   s          r   appri      s      LD&8T$V$$D
JJJ	-J77888	,)***	+t{###	+t{###	+tdl33555666	,t}55777888?# @K8$?????@ @r   ri   r	   r   c                    | j         S zJ
    Back-compatibility for testing with previous @with_app decorator
    )r(   ri   s    r   r&   r&      s    
 ;r   c                    | j         S rk   )r*   rl   s    r   r'   r'      s    
 <r   monkeypatchGenerator[Callable, None, None]c              #      K   g t           j        dd         } fd}|V  |t           j        dd<   t                    D ]}|                                 dS )z
    Provides make_app function to initialize SphinxTestApp instance.
    if you want to initialize 'app' in your test function. please use this
    instead of using SphinxTestApp class directory.
    Nc                    t                      t                      }}|                    d|           |                    d|           t          | i |}                    |           d         rt	          |          }|S )Nr&   r'   r8   )r   
setdefaultr	   appendr
   )rJ   rL   r&   r'   r#   appsr6   s        r   makezmake_app.<locals>.make   s    "**hjj(F+++)W---!42622D' 	=6t<<Dr   )syspathrE   cleanup)r6   rn   syspathru   r#   rt   s   `    @r   ra   ra      s       DhqqqkG      JJJCHQQQK   r   c                     t                      S r   )r   r   r   r   r8   r8      s    >>r   moduleT)r   autouseNonec                 B    t           j                                         d S r   )r   r    clearr   r   r   _shared_result_cacher      s    r   c                    t          | j        dd          }	 |rt          j        |dgd           dS n# t          $ r Y nw xY wt          j        d           dS )zt
    The test will be skipped when using 'if_graphviz_found' fixture and graphviz
    dot command is not found.
    graphviz_dot z-VT)capture_outputNzgraphviz "dot" is not available)getattrr   
subprocessrunOSErrorrO   skip)ri   r   s     r   if_graphviz_foundr      s     3:~r::L 	NL$/EEEEF	     K122222s   5 
AAtmp_path_factoryr   c                *    |                                  S )zTemporary directory.)getbasetemp)r   s    r   r9   r9      s     '')))r   c               #  L  K   	 t          t          j                  } dV  t          t          j                  D ]%}|| vrt          j                            |           &dS # t          t          j                  D ]%}|| vrt          j                            |           &w xY w)z
    Rollback sys.modules to its value before testing to unload modules
    during tests.

    For example, used in test_ext_autosummary.py to permit unloading the
    target module to clear its cache.
    N)rF   rv   modulesrQ   )
sysmodulesmodnames     r   rollback_sysmodulesr      s      )#+&&
CK(( 	) 	)Gj(((((	) 	)tCK(( 	) 	)Gj(((((	)s   A" "AB#)r   r   )r5   r   r6   r7   r8   r   r9   r"   r   r"   r   r:   )r5   r   r   r7   )
r6   r7   rZ   r`   ra   r   r8   r   r   rb   )ri   r	   r   r   )r6   r7   rn   r   r   ro   )r   r   )r   r}   )ri   r	   r   r}   )r   r   r   r   )'__doc__
__future__r   rT   r   rv   collectionsr   ior   typingr   r   r   rO   sphinx.testing.utilr	   r
   collections.abcr   pathlibr   r   r   fixturer   r   rZ   r:   r6   ri   r&   r'   ra   r8   r   r   r9   r   r   r   r   <module>r      sF   % % " " " " " "      



 " " " " " "       / / / / / / / / / /  R R R R R R R R ))))))	` 7 3 3 3 i      ! 
 
 
 
 
 
 
 
, '% '% '% '%T j66    . @ @ @ @(            2     h---   .- 3 3 3 3  i   * * * ! *
 ) ) ) ) )r   