U
    \Sh
                     @  sR   d Z ddlmZ ddlZddlZddlmZ G dd dZdddd	d
ddZdS )zSphinx test comparer for pytest    )annotationsN)Anyc                   @  s   e Zd ZdZddddZdddd	Zddd
dZdddddZdddddZdddddZ	dddddZ
ddddd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
    zstr | pathlib.Path)pathc                 C  s   t || _dS )zP
        :param str path: path string, it will be cast as pathlib.Path.
        N)pathlibPathr   )selfr    r	   J/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/testing/comparer.py__init__   s    zPathComparer.__init__str)returnc                 C  s
   | j  S N)r   as_posixr   r	   r	   r
   __str__#   s    zPathComparer.__str__c                 C  s   d| j j d|  dS )N<z: 'z'>)	__class____name__r   r	   r	   r
   __repr__&   s    zPathComparer.__repr__bool)otherr   c                 C  s   t | | S r   )r   ldiffr   r   r	   r	   r
   __eq__)   s    zPathComparer.__eq__	list[str]c                 C  s
   |  |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   r	   r	   r
   diff,   s    zPathComparer.diffc                 C  s   |  | jt|S r   )_diffr   r   r   r   r	   r	   r
   r   ?   s    zPathComparer.ldiffc                 C  s   |  t|| jS r   )r   r   r   r   r   r	   r	   r
   rdiffE   s    zPathComparer.rdiffzpathlib.Path)lhsrhsr   c                 C  sp   ||krg S |j s|j r4|  |   }}n| |  }}||krRg S dd t |g|gD S )Nc                 S  s   g | ]}|  qS r	   )strip).0liner	   r	   r
   
<listcomp>X   s     z&PathComparer._diff.<locals>.<listcomp>)driveabsoluter   difflibZDiffercompare)r   r   r    Zs_pathZo_pathr	   r	   r
   r   K   s    zPathComparer._diffN)r   
__module____qualname____doc__r   r   r   r   r   r   r   r   r	   r	   r	   r
   r   	   s   r   r   r   r   )opleftrightr   c                 C  sL   t |tr"| dkr"dg|| S t |trD| dkrDdg|| S g S d S )Nz==zComparing path:)
isinstancer   r   r   )r,   r-   r.   r	   r	   r
   pytest_assertrepr_compare[   s
    r0   )	r+   
__future__r   r'   r   typingr   r   r0   r	   r	   r	   r
   <module>   s   R