
    }c
              	       l    d Z ddlZddlZddlmZmZmZ  G d d          Zdededed	ee         fd
Z	dS )zSphinx test comparer for pytest    N)AnyListUnionc                   P   e Zd ZdZdeeej        f         fdZdefdZ	defdZ
deeej        f         defdZdeeej        f         dee         fd	Zdeeej        f         dee         fd
Zdeeej        f         dee         fdZdej        dej        dee         fdZdS )PathComparera  
    OS-independent path comparison.

    Windows path sep and posix path sep:

    >>> '\to\index' == PathComparer('/to/index')
    True
    >>> '\to\index' == PathComparer('/to/index2')
    False

    Windows path with drive letters

    >>> 'C:\to\index' == PathComparer('/to/index')
    True
    >>> 'C:\to\index' == PathComparer('C:/to/index')
    True
    >>> 'C:\to\index' == PathComparer('D:/to/index')
    False
    pathc                 8    t          j        |          | _        dS )zP
        :param str path: path string, it will be cast as pathlib.Path.
        N)pathlibPathr   )selfr   s     7lib/python3.11/site-packages/sphinx/testing/comparer.py__init__zPathComparer.__init__   s     L&&			    returnc                 4    | j                                         S N)r   as_posixr   s    r   __str__zPathComparer.__str__!   s    y!!###r   c                 ,    d                     |           S )Nz<{0.__class__.__name__}: '{0}'>)formatr   s    r   __repr__zPathComparer.__repr__$   s    077===r   otherc                 H    t          |                     |                     S r   )boolldiffr   r   s     r   __eq__zPathComparer.__eq__'   s    

5))****r   c                 ,    |                      |          S )a  compare self and other.

        When different is not exist, return empty list.

        >>> PathComparer('/to/index').diff('C:\to\index')
        []

        When different is exist, return unified diff style list as:

        >>> PathComparer('/to/index').diff('C:\to\index2')
        [
           '- C:/to/index'
           '+ C:/to/index2'
           '?            +'
        ]
        )r   r   s     r   diffzPathComparer.diff*   s    " zz%   r   c                 \    |                      | j        t          j        |                    S r   )_diffr   r
   r   r   s     r   r   zPathComparer.ldiff=   s*    zzIL
 
 	
r   c                 \    |                      t          j        |          | j                  S r   )r"   r
   r   r   r   s     r   rdiffzPathComparer.rdiffC   s*    zzLI
 
 	
r   lhsrhsc                    ||k    rg S |j         s|j         rM|                                                                |                                                                }}n(|                                |                                }}||k    rg S d t          j                                        |g|g          D             S )Nc                 6    g | ]}|                                 S  )strip).0lines     r   
<listcomp>z&PathComparer._diff.<locals>.<listcomp>V   s     VVV

VVVr   )driveabsoluter   difflibDiffercompare)r   r%   r&   s_patho_paths        r   r"   zPathComparer._diffI   s    #: 	I9 	<	 	< \\^^44668O8O8Q8QFFF \\^^S\\^^FFV 	IVV)9)9)A)A6(VH)U)UVVVVr   N)__name__
__module____qualname____doc__r   strr
   r   r   r   r   r   r   r   r    r   r$   r"   r)   r   r   r   r      sy        &'U3#45 ' ' ' '$ $ $ $ $># > > > >+E#w|"34 + + + + +!%W\ 12 !tCy ! ! ! !&
5gl!23 
S	 
 
 
 

5gl!23 
S	 
 
 
 
W WGL WT#Y W W W W W Wr   r   opleftrightr   c                     t          |t                    r| dk    rdg|                    |          z   S t          |t                    r| dk    rdg|                    |          z   S g S )Nz==zComparing path:)
isinstancer   r   r$   )r:   r;   r<   s      r   pytest_assertrepr_comparer?   Y   su    $%% "* !"TZZ%6%666	E<	(	( R4Z !"U[[%6%666	r   )
r8   r0   r
   typingr   r   r   r   r9   r?   r)   r   r   <module>rA      s    % %   # # # # # # # # # #OW OW OW OW OW OW OW OWd# S  c      r   