3
VmW                 @   s  d Z ddlmZmZmZ ddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlmZmZ ddlmZ dZeejjejjedd	d
dZG dd deZdd ZG dd dejZe	jdd Z dd Z!dd Z"e	jdd Z#e	jdd Z$dS )z
    weasyprint.tests.testing_utils
    ------------------------------

    Helpers for tests.

    :copyright: Copyright 2011-2014 Simon Sapin and contributors, see AUTHORS.
    :license: BSD, see LICENSE for details.

    )divisionunicode_literalsprint_functionN   )HTMLCSS)LOGGERzLiberation Sans, Arialz..cssztests_ua.css)filenamec               @   s   e Zd ZdZdd ZdS )TestHTMLz7Like weasyprint.HTML, but with a lighter UA stylesheet.c             C   s   t gS )N)TEST_UA_STYLESHEET)self r   ^/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/weasyprint/tests/testing_utils.py_ua_stylesheets'   s    zTestHTML._ua_stylesheetsN)__name__
__module____qualname____doc__r   r   r   r   r   r   %   s   r   c             C   s   t jjt jjtd| S )z=Return the absolute path of the resource called ``basename``.Z	resources)ospathjoindirname__file__)basenamer   r   r   resource_filename+   s    r   c               @   s   e Zd ZdZdd ZdS )CallbackHandlerz:A logging handler that calls a function for every message.c             C   s   t jj|  || _d S )N)loggingHandler__init__emit)r   callbackr   r   r   r   2   s    zCallbackHandler.__init__N)r   r   r   r   r   r   r   r   r   r   0   s   r   c              #   sF   t } g   fdd}| j}g | _| jt| z
 V  W d|| _X dS )z;Return a context manager that captures all logged messages.c                s$   d| j j | j f } j| d S )Nz%s: %s)	levelnameupper
getMessageappend)recordmessage)messagesr   r   r    =   s    zcapture_logs.<locals>.emitN)r   handlers
addHandlerr   )loggerr    Zprevious_handlersr   )r(   r   capture_logs7   s    
r,   c                s   t j  fdd}|S )z<Decorator that asserts that nothing is logged in a function.c                 s   t  }y | | W nL tk
rb   |r\tdt| tjd x|D ]}t|tjd qFW  Y n2X |rx|D ]}t|tjd qnW tdt| W d Q R X d S )Nz%i errors logged:)filez%i errors logged)r,   	ExceptionprintlensysstderrAssertionError)argskwargsZlogsr'   )functionr   r   wrapperL   s    

zassert_no_logs.<locals>.wrapper)	functoolswraps)r6   r7   r   )r6   r   assert_no_logsJ   s    r:   c             C   s   t | trt |ts(t | trPt |trPt| t|koNtdd t| |D S t | tsdt |trztt| | ddkS | |kS )Nc             s   s   | ]\}}t ||V  qd S )N)almost_equal).0aaZbbr   r   r   	<genexpr>c   s    zalmost_equal.<locals>.<genexpr>   r   )	
isinstancelisttupler0   allzipfloatroundabs)abr   r   r   r;   _   s    r;   c          
   #   sf    fdd}t jjdd|}|jj \}}tj|jd}|j  zd| V  W d |j	  |j
  X d S )Nc                sV    j | d }|r6td}|| \}}dd |D }ntd}d}g }||| |gS )NZ	PATH_INFOz200 OKc             S   s    g | ]\}}t |t |fqS r   )str)r<   namevaluer   r   r   
<listcomp>p   s    z1http_server.<locals>.wsgi_app.<locals>.<listcomp>z404 Not Found    )getrJ   )environZstart_responsehandlerstatusresponseheaders)r)   r   r   wsgi_appk   s    
zhttp_server.<locals>.wsgi_appz	127.0.0.1r   )targetzhttp://127.0.0.1:%s)wsgirefZsimple_serverZmake_serversocketgetsockname	threadingThreadZserve_foreverstartshutdownr   )r)   rU   serverZ_hostportthreadr   )r)   r   http_serveri   s    ra   c              c   s$   t j } z
| V  W dtj|  X dS )zvContext manager that gives the path to a new temporary directory.

    Remove everything on exiting the context.

    N)tempfilemkdtempshutilrmtree)	directoryr   r   r   temp_directory   s    
rg   )%r   
__future__r   r   r   r1   os.pathr   r   
contextlibr8   Zwsgiref.simple_serverrW   rZ   rd   rb    r   r   r+   r   ZFONTSr   r   r   r   r   r   r   r   r   contextmanagerr,   r:   r;   ra   rg   r   r   r   r   <module>   s.   
