U
    1eh                     @   s   d Z ddlmZ ddlmZ ddlZddlmZ ddlm	Z	m
Z
 ddlmZ ejdd	d
gdd Zedd Ze	d	d
ejdddgdd Zdd ZeefddZejdeegejdddgdd Ze
dd Zdd  Zd!d" Zd#d$ Ze
e	d	d
d%d& Zd'd( ZdS ))zTests for IPython.utils.path.py    )contextmanager)patchN)
latextools)onlyif_cmds_existskipif_not_matplotlibFindCmdErrorcommandZlatexdvipngc              	      s>    fdd}t td| tddd ks0tW 5 Q R X d S )Nc                    s   |  krt d S Nr   )argr	    E/tmp/pip-unpacked-wheel-3hxk2k58/IPython/lib/tests/test_latextools.pymock_find_cmd   s    zGtest_check_latex_to_png_dvipng_fails_when_no_cmd.<locals>.mock_find_cmdZfind_cmdZwhateverT)r   objectr   latex_to_png_dvipngAssertionError)r	   r   r   r   r   0test_check_latex_to_png_dvipng_fails_when_no_cmd   s    r   c                  o   s
   d V  d S r   r   )argskwargsr   r   r   no_op   s    r   zs, wrap)z$$x^2$$F)x^2Tc              	   C   s8   dd }t | | t| t | | W 5 Q R X dS )z@
    Test that latex_to_png_dvipng just runs without error.
    c                 S   s   | dkst d S N	breqn.styr   filenamer   r   r   mock_kpsewhich'   s    z5test_latex_to_png_dvipng_runs.<locals>.mock_kpsewhichN)r   r   patch_latextool)swrapr   r   r   r   test_latex_to_png_dvipng_runs!   s    
r"   c                 C   s   | dkst d S r   r   r   r   r   r   r   1   s    r   c              	   c   s$   t td|  d V  W 5 Q R X d S )NZ	kpsewhich)r   r   r   )Zmockr   r   r   r   5   s    r   contexts_wrap)$x^2$Fc              	   C   sX   zddl }W n  tk
r,   td Y dS X | \}}|  t|| W 5 Q R X dS )z=
    Test that latex_to_png_mpl just runs without error.
    r   Nz%This needs matplotlib to be available)
matplotlibImportErrorpytestskipr   latex_to_png_mpl)r$   r#   r&   r    r!   r   r   r   test_latex_to_png_mpl_runs:   s    
r+   c                  C   s   t d} d| kstd S )Nr%   zdata:image/png;base64,iVBOR)r   Zlatex_to_htmlr   )imgr   r   r   test_latex_to_htmlI   s    
r-   c               	   C   s:   dd } t |   dtdddks,tW 5 Q R X dS )z)
    Test genelatex with wrap=False.
    c                 S   s   dst d| d S )NFz0kpsewhich should not be called (called with {0}))r   formatr   r   r   r   r   S   s    
z.test_genelatex_no_wrap.<locals>.mock_kpsewhich
z	body textFz\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{bm}
\pagestyle{empty}
\begin{document}
body text
\end{document}Nr   joinr   Z	genelatexr   r   r   r   r   test_genelatex_no_wrapO   s    
r3   c               	   C   s:   dd } t |   dtdddks,tW 5 Q R X dS )zL
    Test genelatex with wrap=True for the case breqn.sty is installed.
    c                 S   s   | dkst dS )Nr   zpath/to/breqn.styr   r   r   r   r   r   g   s    z6test_genelatex_wrap_with_breqn.<locals>.mock_kpsewhichr/   r   Tz\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{bm}
\usepackage{breqn}
\pagestyle{empty}
\begin{document}
\begin{dmath*}
x^2
\end{dmath*}
\end{document}Nr0   r2   r   r   r   test_genelatex_wrap_with_breqnc   s    
r4   c               	   C   s:   dd } t |   dtdddks,tW 5 Q R X dS )zP
    Test genelatex with wrap=True for the case breqn.sty is not installed.
    c                 S   s   | dkst d S r   r   r   r   r   r   r   ~   s    z9test_genelatex_wrap_without_breqn.<locals>.mock_kpsewhichr/   r   Tz\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{bm}
\pagestyle{empty}
\begin{document}
$$x^2$$
\end{document}Nr0   r2   r   r   r   !test_genelatex_wrap_without_breqnz   s    
r5   c                  C   s  d} t j| dd}t j| ddd}t | d}t | dd}||ksHtt | d}t | dd}||ksnt|||fks~t|||fkstt | dd}||kstt | dd}||kstt | dd}	t | dd	}
|	|
kstt | ddd
}|	|kstdS )z/
    Test color settings for latex_to_png.
    r%   F)r!   z#000000)r!   colorZBlackZMaroonWhitez#FFFFFFg333333?N)r   latex_to_pngr   r   r*   )latex_stringdefault_valueZdefault_hexblackZdvipng_defaultZdvipng_blackZmpl_defaultZ	mpl_blackZdvipng_maroonZ
mpl_maroonZ	mpl_whiteZmpl_hexwhiteZmpl_white_scaler   r   r   test_latex_to_png_color   s6     r;   c                      s0   d t t fdd t t fdd dS )zM
    Test that invalid hex colors provided to dvipng gives an exception.
    r%   c                      s   t j dddS )Nr
   z#f00barbackendr6   r   r8   r   r9   r   r   <lambda>   s     z6test_latex_to_png_invalid_hex_colors.<locals>.<lambda>c                      s   t j dddS )Nr
   z#f00r<   r>   r   r?   r   r   r@          N)r(   Zraises
ValueErrorr   r   r?   r   $test_latex_to_png_invalid_hex_colors   s    

rC   )__doc__
contextlibr   Zunittest.mockr   r(   ZIPython.libr   ZIPython.testing.decoratorsr   r   ZIPython.utils.processr   markZparametrizer   r   r"   r   r   r+   r-   r3   r4   r5   r;   rC   r   r   r   r   <module>   s8   
	

"