B
    ÿ‹d£
  ã               @   sR   d Z ddlZddlZddlmZmZmZ G dd„ dƒZeeeee dœdd„Z	dS )	zSphinx test comparer for pytesté    N)ÚAnyÚListÚUnionc               @   sÒ   e Zd ZdZeeejf dœdd„Zedœdd„Z	edœdd	„Z
eeejf ed
œdd„Zeeejf ee d
œdd„Zeeejf ee d
œdd„Zeeejf ee d
œdd„Zejejee 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
    )Úpathc             C   s   t  |¡| _dS )zP
        :param str path: path string, it will be cast as pathlib.Path.
        N)ÚpathlibÚPathr   )Úselfr   © r
   úd/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sphinx/testing/comparer.pyÚ__init__   s    zPathComparer.__init__)Úreturnc             C   s
   | j  ¡ S )N)r   Úas_posix)r	   r
   r
   r   Ú__str__!   s    zPathComparer.__str__c             C   s
   d  | ¡S )Nz<{0.__class__.__name__}: '{0}'>)Úformat)r	   r
   r
   r   Ú__repr__$   s    zPathComparer.__repr__)Úotherr   c             C   s   t |  |¡ƒ S )N)ÚboolÚldiff)r	   r   r
   r
   r   Ú__eq__'   s    zPathComparer.__eq__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
   r   Údiff*   s    zPathComparer.diffc             C   s   |   | jt |¡¡S )N)Ú_diffr   r   r   )r	   r   r
   r
   r   r   =   s    zPathComparer.ldiffc             C   s   |   t |¡| j¡S )N)r   r   r   r   )r	   r   r
   r
   r   ÚrdiffC   s    zPathComparer.rdiff)Ú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>V   s    z&PathComparer._diff.<locals>.<listcomp>)ÚdriveÚabsoluter   ÚdifflibZDifferÚcompare)r	   r   r   Zs_pathZo_pathr
   r
   r   r   I   s    zPathComparer._diffN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   r   r   r   r   r   r   r   r   r   r   r   r
   r
   r
   r   r      s   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_compareY   s
    r,   )
r&   r!   r   Útypingr   r   r   r   r'   r,   r
   r
   r
   r   Ú<module>   s
   R