3
VmWA                 @   s,  d Z ddl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	m
Z
mZ ddl	mZ ddlmZ ddlmZ d	d
lmZmZmZmZmZ edd Zedd Zedd	fddZd'ddZdd Zedd Zedd Zedd Zedd Zedd  Z ed!d" Z!ed#d$ Z"ed%d& Z#dS )(a  
    weasyprint.tests.test_pdf
    -------------------------

    Test PDF-related code, including metadata, bookmarks and hyperlinks.

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

    )divisionunicode_literalsN   )CSS
Attachment)pdf)CAIRO_HAS_MIME_DATA)path2url   )assert_no_logsresource_filenameTestHTMLcapture_logstemp_directoryc              C   sp   t j } tj| dd}x$dD ]\}}|j|| |j  qW |j  dd tj| j	D }|d	d
dgkslt
d S )Nr
   d      
   Q	@h:c             S   s   g | ]}|j d dj qS )ZMediaBoxz	\[(.+?)\])	get_valuestrip).0page r   Y/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/weasyprint/tests/test_pdf.py
<listcomp>+   s   z#test_pdf_parser.<locals>.<listcomp>s   0 0 100 100s
   0 0 200 10s   0 0 3.14 987654321r   r   r   r   r   r   )r   r   r   )ioBytesIO	cairocffiZ
PDFSurfaceZset_sizeZ	show_pagefinishr   ZPDFFileZpagesAssertionError)fileobjZsurfacewidthheightZsizesr   r   r   test_pdf_parser   s      r'   c              C   s<   t ddj } d| kstt ddjdd} d| ks8td S )Nz<style>@page{size:3in 4in)strings   /MediaBox [ 0 0 216 288 ]g      ?)zooms   /MediaBox [ 0 0 324 432 ])r   	write_pdfr#   )	pdf_bytesr   r   r   test_page_size0   s
    
r,   z<inline HTML>c             C   s,   t jt| |djtddgdd|d dS )N)r(   base_urlz*@page { size: 500pt 1000pt; margin: 50pt })r(   )Zstylesheetsr   g      ?)Zbookmark_root_idZscale)r   Zprepare_metadatar   renderr   )htmlr-   r)   r   r   r   get_metadata:   s    r0   Fc       
      K   sj   t | f|\}}}xN|D ]F}|r6|jd |jd q|d \}}}	|t|dt|	df|d< qW ||fS )Ntargetlabel   )r0   popround)
r/   structure_onlykwargsroot	bookmarksZ_linksZbookmarkpxyr   r   r   get_bookmarksA   s    

r=   c             K   s   t | f|\}}}xp|D ]h}xbt|D ]V\}\}}}	|dkr\|\}
}}|
t|dt|df}tdd |	D }	|||	f||< q&W qW |S )Ninternalr3   c             s   s   | ]}t |d V  qdS )r3   N)r5   )r   vr   r   r   	<genexpr>V   s    zget_links.<locals>.<genexpr>)r0   	enumerater5   tuple)r/   r7   Z_rootZ
_bookmarkslinksZ
page_linksiZ	link_typer1   Z	rectangler   r;   r<   r   r   r   	get_linksO   s    

rE   c              C   s  t ddd\} }| tddddks&t|tddd	dd
ddtd
ddddddtd
ddd	dddtd
ddddddtd
dddd
ddgkstt d\} }| td
dkst|g kstt d\} }| tddddkst|td
dddd
ddd3dtd	dddd
ddd4dtd
ddd	dddd5dtdddddddd6dtd
dddd	ddd7dtd
ddddd	d!d8dtdd"d"dd
dd#d9dtdd$d$dddd%d:dtd
dddd"dd&d;dtddddd
dd'd<dtd
dddddd)d=dgkstt d+dd\} }| tddddks t|tddddd
ddtd
ddddddtdd	d	dd
ddtdddddddtd
dddd	ddgkshtt d,dd\} }| td$dd$dkst|tddddd
ddtd
ddddddtdd	d	ddddtd
ddddddtdddd$d
ddtd
ddddddtdd"d"ddddtd
ddddddtd
dddd
ddg	ks@tt d-\} }| tddddksdt|td
dddd
dd.d>dgkstt d-d/d0\} }| tddddkst|td
dddd
dd.d?dgkstdS )@zqTest the structure of the document bookmarks.

    Warning: the PDF output of this structure is not tested.

    zy
        <h1>a</h1>  #
        <h4>b</h4>  ####
        <h3>c</h3>  ###
        <h2>d</h2>  ##
        <h1>e</h1>  #
    T)r6      r
   )CountFirstLast   r      r   N)rG   rH   rI   NextParentPrevz<body>)rG   a  
        <style>
            * { height: 90pt; margin: 0 0 10pt 0 }
        </style>
        <h1>Title 1</h1>
        <h1>Title 2</h1>
        <h2 style="position: relative; left: 20pt">Title 3</h2>
        <h2>Title 4</h2>
        <h3>Title 5</h3>
        <span style="display: block; page-break-before: always"></span>
        <h2>Title 6</h2>
        <h1>Title 7</h1>
        <h2>Title 8</h2>
        <h3>Title 9</h3>
        <h1>Title 10</h1>
        <h2>Title 11</h2>
       r   zTitle 12     )rG   rH   rI   rL   rM   rN   r2   r1   r3      zTitle 2R  zTitle 3F     zTitle 4  zTitle 5&  zTitle 6   zTitle 7	   zTitle 8zTitle 9zTitle 10  zTitle 11^  z
        <h2>1</h2> level 1
        <h4>2</h4> level 2
        <h2>3</h2> level 1
        <h3>4</h3> level 2
        <h4>5</h4> level 3
    a  
        <h2>1</h2> h2 level 1
        <h4>2</h4> h4 level 2
        <h3>3</h3> h3 level 2
        <h5>4</h5> h5 level 3
        <h1>5</h1> h1 level 1
        <h2>6</h2> h2 level 2
        <h2>7</h2> h2 level 2
        <h4>8</h4> h4 level 3
        <h1>9</h1> h1 level 1
    z
<h2>a</h2>ag      ?)r)   K     )r   rP   rQ   )r   rP   rS   )r   rT   rU   )r   rP   rV   )r   rP   rW   )r
   rP   rS   )r
   rP   rU   )r
   rP   rV   )r
   rP   rW   )r
   rP   rZ   )r
   rP   r[   )r   rP   rQ   )r   r]   r^   )r=   dictr#   )r8   r9   r   r   r   test_bookmarks[   s    

r`   c           
   C   sX   t d} | g gkstt d} | dddd!gd$ggks8tt ddd} | d&ggksTtd S )'Nz<body>a{  
        <style>
            body { margin: 0; font-size: 10pt; line-height: 2 }
            p { display: block; height: 90pt; margin: 0 0 10pt 0 }
            img { width: 30pt; vertical-align: top }
        </style>
        <p><a href="http://weasyprint.org"><img src=pattern.png></a></p>
        <p style="padding: 0 10pt"><a
            href="#lipsum"><img style="border: solid 1pt"
                                src=pattern.png></a></p>
        <p id=hello>Hello, World</p>
        <p id=lipsum>
            <a style="display: block; page-break-before: always; height: 30pt"
               href="#hel%6Co"></a>
        </p>
    externalhttp://weasyprint.orgrP     P       r>   r
   <   R  \   >  2  r       z+<a href="../lipsum" style="display: block">zhttp://weasyprint.org/foo/bar/)r-    http://weasyprint.org/foo/lipsumrP   rc   rd   re   )ra   rb   ro   rP   rc   rd   rf   )ra   rb   rp   r
   rP   rc   rg   rh   ri   rj   )r>   rq   rr   r
   rP   rc   rg   rh   ri   rk   )r>   rs   rt   r   rP   rl   rP   rc   rm   rf   )r>   ru   rv   rP   rc   rm   rc   )ra   rn   rw   )rE   r#   )rC   r   r   r   
test_links   s      rx   c              C   s   t  } tdd d}W d Q R X |g gks,tt| dks<td| d ksLtt  } tdd d}W d Q R X |g gksxtt| dkstd| d kstd| d ksttd	d d}|dggksttdd d}|dggk std S )Nz+<a href="../lipsum" style="display: block">)r-   r
   z2WARNING: Relative URI reference without a base URIr   z)<div style="-weasy-link: url(../lipsum)">z.WARNING: Ignored `-weasy-link: url(../lipsum)`z)Relative URI reference without a base URIz5<a href="#lipsum" id="lipsum" style="display: block">r>   rP       z3<div style="-weasy-link: url(#lipsum)" id="lipsum">r   rP   ry   rP   ry   rz   ry   )r>   r{   r|   r   rP   ry   rP   ry   rz   ry   )r>   r}   r~   )r   rE   r#   len)logsrC   r   r   r   test_relative_links  s.    r   c              C   sR   t  } tdd d}W d Q R X |dggks.tt| d	ks>td
| d ksNtd S )Nz
            <style> a { display: block; height: 15pt; } </style>
            <body>
                <a href="#lipsum"></a>
                <a href="#missing" id="lipsum"></a>
        )r-   r>   r   rP         r
   z6WARNING: No anchor #missing for internal URI referencer   rP   r   rP   r   r   r   )r>   r   r   )r   rE   r#   r   )r   rC   r   r   r   test_missing_links!  s    r   c              C   s8   t stj  dd } d| dks$td| dks4td S )Nc             S   s   t td| dj S )Nz
dummy.html)r-   r(   )r   r   r*   )r/   r   r   r   r.   4  s    ztest_jpeg.<locals>.renders   /Filter /DCTDecodez<img src="pattern.gif">z<img src="blue.jpg">)r   pytestZxfailr#   )r.   r   r   r   	test_jpeg/  s
    r   c              C   sf   t ddj } d| kstd| ks&td| ks2td| ks>td| ksJtd| ksVtd	| ksbtd S )
Nu  
        <meta name=author content="I Me &amp; Myself">
        <title>Test document</title>
        <h1>Another title</h1>
        <meta name=generator content="Human after all">
        <meta name=keywords content="html ,	css,
                                     pdf,css">
        <meta name=description content="Blah… ">
        <meta name=dcterms.created content=2011-04>
        <meta name=dcterms.modified content=2013-07-21T23:46+01:00>
    )r(   s&   /Author ( I   M e   &   M y s e l f)s%   /Title ( T e s t   d o c u m e n t)s+   /Creator ( H u m a n  a f t e r  a l l)s*   /Keywords ( h t m l ,   c s s ,   p d f)s   /Subject ( B l a h &  )s   /CreationDate (D:201104)s"   /ModDate (D:20130721234600+01'00'))r   r*   r#   )r+   r   r   r   test_document_info<  s    




r   c        
   !   C   s  t  } tjj| d}d}t|d}|j| W d Q R X t|}|jdsPtt  p}tjj|d}d}t|d}|j| W d Q R X t	dj
|tjj||djtd	d
ddtjdgd}	W d Q R X W d Q R X dtjdj jd d |	kstd|	kstd|	kstd|	ks$ttj|j jd|	ksBttjj|jd|	ks^ttj|j jd|	ks|ttjj|jd|	ksttjdj jd|	kstd|	ksttjdj jd|	ksttjdj jd|	ks td|	kstd|	kstt	ddj }	tjdj jd|	ksHtd|	ksVtd|	ksdtt	ddj }	d|	kstd|	kstt	d dj }	d|	kstd|	kstd S )!Nzsome_file.txts   12345678wbzfile://u
   äöü.txts   abcdefghu  
                    <title>Test document</title>
                    <meta charset="utf-8">
                    <link
                        rel="attachment"
                        title="some file attachment äöü"
                        href="data:,hi%20there">
                    <link rel="attachment" href="{0}">
                    <link rel="attachment" href="{1}">
                    <h1>Heading 1</h1>
                    <h2>Heading 2</h2>
                )r(   r-   zdata:,oob attachmentZHello)descriptionzdata:,raw URLs   file like obj)attachments   <s   hi thereascii   >s   /F ()s$   /UF ( a t t a c h m e n t . b i n)s:   /Desc ( s o m e   f i l e   a t t a c h m e n t     )z	utf-16-bes   oob attachments   /Desc ( H e l l o)s   raw URLs   /EmbeddedFiless	   /Outlinesz
        <title>Test document 2</title>
        <meta charset="utf-8">
        <link
            rel="attachment"
            href="data:,some data">
    )r(   s	   some datazd
        <title>Test document 3</title>
        <meta charset="utf-8">
        <h1>Heading</h1>
    zK
        <title>Test document 4</title>
        <meta charset="utf-8">
    )r   ospathjoinopenwriter	   
startswithr#   r   formatbasenamer*   r   r   r    hashlibmd5	hexdigestencode)
Zabsolute_tmp_dirZabsolute_tmp_fileZadataZafileZabsolute_urlZrelative_tmp_dirZrelative_tmp_fileZrdataZrfiler+   r   r   r   test_embedded_filesV  sj    
$r   c              C   sF   t ddj } tjdj jd| ks*td| ks6td| ksBtd S )Nz
        <title>Test document</title>
        <meta charset="utf-8">
        <a
            rel="attachment"
            href="data:,some data"
            download>A link that lets you download an attachment</a>
    )r(   s	   some datar   s   /FileAttachments   /EmbeddedFiles)r   r*   r   r   r   r   r#   )r+   r   r   r   test_annotation_files  s
    r   )F)$__doc__
__future__r   r   r   r   r   r!   r    r   r   r   Zimagesr   Zurlsr	   Ztesting_utilsr   r   r   r   r   r'   r,   r0   r=   rE   r`   rx   r   r   r   r   r   r   r   r   r   r   <module>   s0   

x. `