o
    ~¨Êh�J  ã                   @   sÔ  d dl mZmZ d dlZd dlZd dlm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 d d	lmZ d d
lmZmZ d dlmZmZmZ d dlmZ d dlmZ d dl m!Z!m"Z" d dl#m$Z$ d dl%m&Z& dd„ Z'dd„ Z(G dd„ de)ƒZ*G dd„ de)ƒZ+ej, -ej, .ej, /e0¡¡¡Z1G dd„ deƒZ2edddd�G dd „ d eƒƒZ3G d!d"„ d"eƒZ4edd#�G d$d%„ d%e3ƒƒZ5G d&d'„ d'e3ƒZ6G d(d)„ d)eƒZ7G d*d+„ d+eƒZ8G d,d-„ d-eƒZ9G d.d/„ d/eƒZ:dS )0é    )Úwith_statementÚunicode_literalsN)Úmkdtemp)ÚrmtreeÚcopytree©ÚBeautifulSoup)Úlocmem)ÚSimpleTestCase)Úoverride_settings©Úcache)ÚSOURCE_FILEÚSOURCE_HUNK)Úget_cachekeyÚget_precompiler_cachekeyÚget_hexdigest)Úsettings)ÚCssCompressor)ÚFilterDoesNotExistÚFilterError)ÚJsCompressor)ÚDefaultStoragec                 C   s
   t | dƒS )Nzhtml.parserr   )Úmarkup© r   úL/var/www/html/env/lib/python3.10/site-packages/compressor/tests/test_base.pyÚ	make_soup   ó   
r   c                 K   s(   d  dd„ | ¡ D ƒ¡}d}|| |f S )NÚ c                 S   s   g | ]
\}}d ||f ‘qS )z%s="%s" r   )Ú.0ÚkÚvr   r   r   Ú
<listcomp>   s    zcss_tag.<locals>.<listcomp>z5<link rel="stylesheet" href="%s" type="text/css" %s/>)ÚjoinÚitems)ÚhrefÚkwargsÚrendered_attrsÚtemplater   r   r   Úcss_tag   s   r)   c                   @   ó&   e Zd ZdZ		ddd„Zdd„ ZdS )ÚTestPrecompilerz4A filter whose output is always the string 'OUTPUT' Nc                 C   s   d S ©Nr   ©ÚselfÚcontentÚattrsÚfilter_typeÚfilenameÚcharsetr   r   r   Ú__init__#   s   zTestPrecompiler.__init__c                 K   s   dS )NÚOUTPUTr   ©r.   r&   r   r   r   Úinput'   s   zTestPrecompiler.input©NNN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r4   r7   r   r   r   r   r+   !   ó    
ÿr+   c                   @   r*   )ÚPassthroughPrecompilerz,A filter whose outputs the input unmodified Nc                 C   s
   || _ d S r,   ©r/   r-   r   r   r   r4   -   s   
zPassthroughPrecompiler.__init__c                 K   s   | j S r,   r@   r6   r   r   r   r7   1   s   zPassthroughPrecompiler.inputr8   r9   r   r   r   r   r?   +   r>   r?   c                   @   s.   e Zd Zdd„ Zdd„ Zedd�dd„ ƒZd	S )
Ú$PrecompilerAndAbsoluteFilterTestCasec                 C   s"   d| _ d| _d| _d| _d| _d S )NzM<link rel="stylesheet" href="/static/css/relative_url.css" type="text/css" />z`<link rel="stylesheet" href="/static/CACHE/css/relative_url.e8602322bfa6.css" type="text/css" />z`<link rel="stylesheet" href="/static/CACHE/css/relative_url.376db5682982.css" type="text/css" />z+p { background: url('../img/python.png'); }z=p { background: url('/static/img/python.png?ccb38978f900'); })Ú	html_origÚhtml_link_to_precompiled_cssÚhtml_link_to_absolutized_cssÚcss_origÚcss_absolutized©r.   r   r   r   ÚsetUp:   s
   
z*PrecompilerAndAbsoluteFilterTestCase.setUpc           	      C   st   |rdnd}|r
dnd}| j |||d�� t| jƒ}t| ¡ ƒd }|  ||¡ W d   ƒ d S 1 s3w   Y  d S )N))ztext/cssz1compressor.tests.test_base.PassthroughPrecompilerr   )z0compressor.filters.css_default.CssAbsoluteFilter)ÚCOMPRESS_ENABLEDÚCOMPRESS_PRECOMPILERSÚCOMPRESS_CSS_FILTERSr   )r   r   rB   ÚlistÚhunksÚassertEqual)	r.   ÚenabledÚuse_precompilerÚuse_absolute_filterÚexpected_outputÚprecompilerÚfiltersÚcss_nodeÚoutputr   r   r   ÚhelperA   s   
"ýz+PrecompilerAndAbsoluteFilterTestCase.helperr/   )ÚCOMPRESS_CSS_HASHING_METHODc                 C   s¤   | j ddd| jd� | j ddd| jd� | j ddd| jd� | j ddd| jd� | j ddd| jd� | j ddd| jd� | j ddd| jd� | j ddd| jd� dS )a3  
        Tests whether specifying a precompiler also runs the CssAbsoluteFilter even if
        compression is disabled, but only if the CssAbsoluteFilter is actually contained
        in the filters setting.
        While at it, ensure that everything runs as expected when compression is enabled.
        F)rO   rP   rQ   rR   TN)rW   rB   rC   rD   rE   rF   rG   r   r   r   Ú!test_precompiler_enables_absoluteJ   s   zFPrecompilerAndAbsoluteFilterTestCase.test_precompiler_enables_absoluteN)r:   r;   r<   rH   rW   r   rY   r   r   r   r   rA   8   s
    	rA   Tr   Ú
nocompress)rI   rJ   ÚCOMPRESS_DEBUG_TOGGLEc                   @   s8  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
edd�dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zed#dd$�d%d&„ ƒZd'd(„ Zed)d*�d+d,„ ƒZed-d*�d.d/„ ƒZed0d*�d1d2„ ƒZed3d4d$�d5d6„ ƒZed7d4d$�d8d9„ ƒZed:d4d$�d;d<„ ƒZed=d4d$�d>d?„ ƒZd@S )AÚCompressorTestCasec                 C   s(   d| _ t| j ƒ| _d| _t| jƒ| _d S )NzÅ<link rel="stylesheet" href="/static/css/one.css" type="text/css" />
<style type="text/css">p { border:5px solid green;}</style>
<link rel="stylesheet" href="/static/css/two.css" type="text/css" />z}<script src="/static/js/one.js" type="text/javascript"></script>
<script type="text/javascript">obj.value = "value";</script>)Úcssr   rU   Újsr   Újs_noderG   r   r   r   rH   c   s   zCompressorTestCase.setUpc                 C   ó    dd„ }|   ||ƒ||ƒ¡ dS )zr
        assertEqual with internal newlines collapsed to single, and
        trailing whitespace removed.
        c                 S   s   t  dd| ¡ ¡ S )Nz\n+Ú
)ÚreÚsubÚrstrip)Úxr   r   r   Ú<lambda>t   s    z9CompressorTestCase.assertEqualCollapsed.<locals>.<lambda>N©rN   )r.   ÚaÚbÚcollapser   r   r   ÚassertEqualCollapsedo   ó   z'CompressorTestCase.assertEqualCollapsedc                 C   r`   )zz
        assertEqual for splits, particularly ignoring the presence of
        a trailing newline on the content.
        c                 S   s   dd„ | D ƒS )Nc                 S   s,   g | ]}|d  |d |d |d   ¡ f‘qS ©r   é   é   é   )rd   ©r   re   r   r   r   r"   |   s   , zJCompressorTestCase.assertEqualSplits.<locals>.<lambda>.<locals>.<listcomp>r   )Úsplitr   r   r   rf   |   s    z6CompressorTestCase.assertEqualSplits.<locals>.<lambda>Nrg   )r.   rh   ri   Úmangler   r   r   ÚassertEqualSplitsw   rl   z$CompressorTestCase.assertEqualSplitsc                    sj   t tj tjdd¡ddftdd dft tj tjdd¡dd	fg}ˆ j ¡ }‡ fd
d„|D ƒ}ˆ  	||¡ d S )Nr]   úone.csszcss/one.cssúD<link rel="stylesheet" href="/static/css/one.css" type="text/css" />úp { border:5px solid green;}z;<style type="text/css">p { border:5px solid green;}</style>ztwo.csszcss/two.csszD<link rel="stylesheet" href="/static/css/two.css" type="text/css" />c              	      ó2   g | ]}|d  |d |d ˆ j j |d ¡f‘qS rm   )rU   ÚparserÚelem_strrq   rG   r   r   r"   ”   ó   2 z5CompressorTestCase.test_css_split.<locals>.<listcomp>)
r   ÚosÚpathr#   r   ÚCOMPRESS_ROOTr   rU   Úsplit_contentsrt   ©r.   Úoutrr   r   rG   r   Útest_css_split   s$   ýüüô
z!CompressorTestCase.test_css_splitc                 C   s"   g d¢}|   |t| j ¡ ƒ¡ d S )N)zbody { background:#990; }rw   zbody { color:#fff; })rN   rL   rU   rM   ©r.   r�   r   r   r   Útest_css_hunks—   ó   z!CompressorTestCase.test_css_hunksc                 C   s.   d}d  dd„ | j ¡ D ƒ¡}|  ||¡ d S )NzKbody { background:#990; }
p { border:5px solid green;}
body { color:#fff; }ra   c                 S   ó   g | ]}|‘qS r   r   ©r   Úhr   r   r   r"   �   ó    z6CompressorTestCase.test_css_output.<locals>.<listcomp>)r#   rU   rM   rN   )r.   r�   rM   r   r   r   Útest_css_output›   s   z"CompressorTestCase.test_css_outputc                 C   s8   d}d}t |ƒ}d dd„ | ¡ D ƒ¡}|  ||¡ d S )Nz6body { background:#990; }
.compress-test {color: red;}zœ<link rel="stylesheet" href="/static/css/one.css" type="text/css" />
        <link rel="stylesheet" href="/static/css/utf-8_with-BOM.css" type="text/css" />ra   c                 S   r†   r   r   r‡   r   r   r   r"   ¥   r‰   zECompressorTestCase.test_css_output_with_bom_input.<locals>.<listcomp>)r   r#   rM   rN   )r.   r�   r]   Úcss_node_with_bomrM   r   r   r   Útest_css_output_with_bom_input    s
   z1CompressorTestCase.test_css_output_with_bom_inputc                 C   s:   t  d¡}| jjD ]}|  | tt|ƒƒ¡d| ¡ q	d S )Nz^\d{10}[\.\d]+$z?mtimes is returning something that doesn't look like a date: %s)rb   ÚcompilerU   ÚmtimesÚ
assertTrueÚmatchÚstrÚfloat)r.   Úis_dateÚdater   r   r   Útest_css_mtimes¨   s   
ÿÿz"CompressorTestCase.test_css_mtimesF)rI   c                 C   ó   |   | j| j ¡ ¡ d S r,   )rk   r]   rU   rV   rG   r   r   r   Útest_css_return_if_off®   ó   z)CompressorTestCase.test_css_return_if_offc                 C   s$   t  d¡}|  | | jj¡d¡ d S )Nz\w{12}z@cachekey is returning something that doesn't look like r'\w{12}')rb   r�   r�   r�   rU   Úcachekey)r.   Úis_cachekeyr   r   r   Útest_cachekey²   s   
ÿz CompressorTestCase.test_cachekeyc                 C   s"   t dƒ}|  || j ¡  ¡ ¡ d S )Nú"/static/CACHE/css/58a8c0714e59.css)r)   rN   rU   rV   Ústrip©r.   rV   r   r   r   Útest_css_return_if_on·   r…   z(CompressorTestCase.test_css_return_if_onc                    sR   t tj tjdd¡ddftdd dfg}ˆ j ¡ }‡ fdd„|D ƒ}ˆ  	||¡ d S )	Nr^   zone.jsz	js/one.jsz@<script src="/static/js/one.js" type="text/javascript"></script>úobj.value = "value";z<<script type="text/javascript">obj.value = "value";</script>c              	      rx   rm   )r_   ry   rz   rq   rG   r   r   r"   Ë   r{   z4CompressorTestCase.test_js_split.<locals>.<listcomp>)
r   r|   r}   r#   r   r~   r   r_   r   rt   r€   r   rG   r   Útest_js_split»   s   üüù
z CompressorTestCase.test_js_splitc                 C   s"   ddg}|   |t| j ¡ ƒ¡ d S )Nz	obj = {};r    )rN   rL   r_   rM   rƒ   r   r   r   Útest_js_hunksÎ   r…   z CompressorTestCase.test_js_hunksc                 C   ó   d}|   || j ¡ ¡ d S ©NúO<script type="text/javascript" src="/static/CACHE/js/74e158ccb432.js"></script>©rN   r_   rV   rƒ   r   r   r   Útest_js_outputÒ   ó   z!CompressorTestCase.test_js_outputc                 C   s,   | j j ddi¡ d}|  || j  ¡ ¡ d S )NÚurlúThis is not a url, just a textr¥   )r_   ÚcontextÚupdaterN   rV   rƒ   r   r   r   Útest_js_override_urlÖ   s   z'CompressorTestCase.test_js_override_urlc                 C   s4   | j j ddi¡ tdƒ}|  || j  ¡  ¡ ¡ d S )Nr©   rª   rœ   )rU   r«   r¬   r)   rN   rV   r�   rž   r   r   r   Útest_css_override_urlÛ   s   z(CompressorTestCase.test_css_override_urlr   ©rJ   rI   c                 C   r–   r,   )rk   r^   r_   rV   rG   r   r   r   Útest_js_return_if_offà   r˜   z(CompressorTestCase.test_js_return_if_offc                 C   r£   r¤   r¦   rž   r   r   r   Útest_js_return_if_onä   r¨   z'CompressorTestCase.test_js_return_if_onÚcustom)ÚCOMPRESS_OUTPUT_DIRc                 C   ó   d}|   |t| jƒ ¡ ¡ d S )NzP<script type="text/javascript" src="/static/custom/js/74e158ccb432.js"></script>©rN   r   r^   rV   rž   r   r   r   Útest_custom_output_dir1è   ó   z*CompressorTestCase.test_custom_output_dir1r   c                 C   r´   )NzI<script type="text/javascript" src="/static/js/74e158ccb432.js"></script>rµ   rž   r   r   r   Útest_custom_output_dir2í   r·   z*CompressorTestCase.test_custom_output_dir2z/custom/nested/c                 C   r´   )NzW<script type="text/javascript" src="/static/custom/nested/js/74e158ccb432.js"></script>rµ   rž   r   r   r   Útest_custom_output_dir3ò   r·   z*CompressorTestCase.test_custom_output_dir3))útext/foobarz*compressor.tests.test_base.TestPrecompilerTc                 C   ó,   d}t |ƒ}t| d¡ƒ}|  |jd¡ d S )Nú=<style type="text/foobar">p { border:10px solid red;}</style>Úinliner5   ©r   r   rV   rN   Útext©r.   r]   rU   rV   r   r   r   Útest_precompiler_class_used÷   ó   z.CompressorTestCase.test_precompiler_class_used))rº   z,compressor.tests.test_base.NonexistentFilterc                 C   ó    d}t |ƒ}|  t|jd¡ d S ©Nr¼   r½   )r   ÚassertRaisesr   rV   ©r.   r]   rU   r   r   r   Ú(test_nonexistent_precompiler_class_error   ó   z;CompressorTestCase.test_nonexistent_precompiler_class_error))rº   z./foo -I ./bar/bazc                 C   rÃ   rÄ   )r   rÅ   r   rV   rÆ   r   r   r   Ú!test_command_with_dot_precompiler  rÈ   z4CompressorTestCase.test_command_with_dot_precompiler))ztext/djangoz*compressor.filters.template.TemplateFilterc                 C   r»   )Nza<style type="text/django">p { border:10px solid {% if 1 %}green{% else %}red{% endif %};}</style>r½   zp { border:10px solid green;}r¾   rÀ   r   r   r   Útest_template_precompiler  rÂ   z,CompressorTestCase.test_template_precompilerN)r:   r;   r<   rH   rk   rt   r‚   r„   rŠ   rŒ   r•   r   r—   r›   rŸ   r¡   r¢   r§   r­   r®   r°   r±   r¶   r¸   r¹   rÁ   rÇ   rÉ   rÊ   r   r   r   r   r\   \   sV    





þ
þ
þ
þr\   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zeddej 	e
d	¡ ffd
d�dd„ ƒZdS )ÚCssMediaTestCasec                 C   ó
   d| _ d S )Na'  <link rel="stylesheet" href="/static/css/one.css" type="text/css" media="screen">
<style type="text/css" media="print">p { border:5px solid green;}</style>
<link rel="stylesheet" href="/static/css/two.css" type="text/css" media="all">
<style type="text/css">h1 { border:5px solid green;}</style>)r]   rG   r   r   r   rH     r   zCssMediaTestCase.setUpc                 C   sN   t | jƒ}t| ¡ ƒ d¡}g d¢}|  t|ƒd¡ |  |dd„ |D ƒ¡ d S )NÚlink)ÚscreenÚprintÚallNé   c                 S   ó   g | ]}|  d d¡‘qS ©ÚmediaN©Úget©r   Úlr   r   r   r"   '  ó    z4CssMediaTestCase.test_css_output.<locals>.<listcomp>)r   r]   r   rV   Úfind_allrN   Úlen)r.   rU   ÚlinksrÔ   r   r   r   rŠ   "  s
   
z CssMediaTestCase.test_css_outputc                 C   sF   | j d }t|ƒ}g d¢}t| ¡ ƒ d¡}|  |dd„ |D ƒ¡ d S )NzH<style type="text/css" media="print">p { border:10px solid red;}</style>)rÎ   rÏ   rÐ   NrÏ   rÍ   c                 S   rÒ   rÓ   rÕ   r×   r   r   r   r"   .  rÙ   z>CssMediaTestCase.test_avoid_reordering_css.<locals>.<listcomp>)r]   r   r   rV   rÚ   rN   )r.   r]   rU   rÔ   rÜ   r   r   r   Útest_avoid_reordering_css)  s
   
z*CssMediaTestCase.test_avoid_reordering_cssrº   zpython %s {infile} {outfile}zprecompiler.pyFr¯   c                 C   sZ   d}t |ƒ}t| ¡ ƒ ddg¡}|  g d¢dd„ |D ƒ¡ |  g d¢dd„ |D ƒ¡ d S )	Nzò<link rel="stylesheet" href="/static/css/one.css" type="text/css" media="screen">
<link rel="stylesheet" href="/static/css/two.css" type="text/css" media="screen">
<style type="text/foobar" media="screen">h1 { border:5px solid green;}</style>rÍ   Ústyle)z/static/css/one.cssz/static/css/two.cssNc                 S   rÒ   )r%   NrÕ   r×   r   r   r   r"   ;  rÙ   zKCssMediaTestCase.test_passthough_when_compress_disabled.<locals>.<listcomp>)rÎ   rÎ   rÎ   c                 S   rÒ   rÓ   rÕ   r×   r   r   r   r"   =  rÙ   )r   r   rV   rÚ   rN   rÀ   r   r   r   Ú&test_passthough_when_compress_disabled0  s   
ÿ
ÿz7CssMediaTestCase.test_passthough_when_compress_disabledN)r:   r;   r<   rH   rŠ   rÝ   r   r|   r}   r#   Útest_dirrß   r   r   r   r   rË     s    ÿþrË   )ÚCOMPRESS_VERBOSEc                   @   s   e Zd ZdS )ÚVerboseTestCaseN)r:   r;   r<   r   r   r   r   râ   @  s    râ   c                   @   s   e Zd Zdd„ ZdS )ÚCacheBackendTestCasec                 C   s    ddl m} |  |jtj¡ d S )Nr   r   )Úcompressor.cacher   rN   Ú	__class__r	   ÚLocMemCache)r.   r   r   r   r   Útest_correct_backendG  s   z)CacheBackendTestCase.test_correct_backendN)r:   r;   r<   rç   r   r   r   r   rã   E  s    rã   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚJsAsyncDeferTestCasec                 C   rÌ   )Na2              <script src="/static/js/one.js" type="text/javascript"></script>
            <script src="/static/js/two.js" type="text/javascript" async></script>
            <script src="/static/js/three.js" type="text/javascript" defer></script>
            <script type="text/javascript">obj.value = "value";</script>
            <script src="/static/js/one.js" type="text/javascript" async></script>
            <script src="/static/js/two.js" type="text/javascript" async></script>
            <script src="/static/js/three.js" type="text/javascript"></script>©r^   rG   r   r   r   rH   M  r   zJsAsyncDeferTestCase.setUpc                    sN   dd„ ‰ t | jƒ}g d¢}t| ¡ ƒ d¡}‡ fdd„|D ƒ}|  ||¡ d S )Nc                 S   s    |   d¡rdS |   d¡rdS d S )NÚasyncÚdefer)Úhas_attr)Útagr   r   r   Úextract_attrX  s
   

ÿz9JsAsyncDeferTestCase.test_js_output.<locals>.extract_attr)Nrë   rì   Nrë   NÚscriptc                    s   g | ]}ˆ |ƒ‘qS r   r   )r   Ús©rï   r   r   r"   `  s    z7JsAsyncDeferTestCase.test_js_output.<locals>.<listcomp>)r   r^   r   rV   rÚ   rN   )r.   r_   rV   Úscriptsr0   r   rò   r   r§   W  s   
z#JsAsyncDeferTestCase.test_js_outputN)r:   r;   r<   rH   r§   r   r   r   r   ré   L  s    
ré   c                   @   rè   )ÚJSWithParensTestCasec                 C   rÌ   )Nzm
        <script src="/static/js/one.js"></script>
        <script src="/static/js/two.js"></script>
        rê   rG   r   r   r   rH   e  r   zJSWithParensTestCase.setUpc                 C   s6   t | jƒ}| ¡ }|  |d d¡ |  |d d¡ d S )Nr   z
;obj = {};rn   z;pollos = {})r   r^   Úfilter_inputrN   )r.   r_   r/   r   r   r   Útest_js_contentk  s   
z$JSWithParensTestCase.test_js_contentN)r:   r;   r<   rH   rö   r   r   r   r   rô   d  s    rô   c                   @   sH   e Zd Zdd„ Zdd„ Zedd�dd„ ƒZed	d�d
d„ ƒZdd„ ZdS )ÚCacheTestCasec                 C   s
   d t _d S r,   )ÚcachemodÚ_cachekey_funcrG   r   r   r   rH   u  r   zCacheTestCase.setUpc                 C   s   |   tdƒd¡ d S )NÚfoozdjango_compressor.foo)rN   r   rG   r   r   r   Útest_get_cachekey_basicx  s   z%CacheTestCase.test_get_cachekey_basicz.leading.dot)ÚCOMPRESS_CACHE_KEY_FUNCTIONc                 C   ó   |   tdd„ ¡ d S )Nc                   S   ó   t dƒS ©Nrú   ©r   r   r   r   r   rf   }  ó    z=CacheTestCase.test_get_cachekey_leading_dot.<locals>.<lambda>©rÅ   ÚImportErrorrG   r   r   r   Útest_get_cachekey_leading_dot{  ó   z+CacheTestCase.test_get_cachekey_leading_dotzinvalid.modulec                 C   rý   )Nc                   S   rþ   rÿ   r   r   r   r   r   rf   �  r  z=CacheTestCase.test_get_cachekey_invalid_mod.<locals>.<lambda>r  rG   r   r   r   Útest_get_cachekey_invalid_mod  r  z+CacheTestCase.test_get_cachekey_invalid_modc                 C   s0   zt ddƒ W d S  ty   |  d¡ Y d S w )NÚasdfz6get_precompiler_cachekey raised TypeError unexpectedly)r   Ú	TypeErrorÚfailrG   r   r   r   Útest_get_precompiler_cachekeyƒ  s
   ÿz+CacheTestCase.test_get_precompiler_cachekeyN)	r:   r;   r<   rH   rû   r   r  r  r
  r   r   r   r   r÷   s  s    

r÷   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚCompressorInDebugModeTestCasec              	   C   sV   d| _ tƒ | _tj | jd¡}ttj|ƒ | jdddd||tj	gd�| _
| j
 ¡  d S )Nrv   ÚstaticTr   rZ   )rI   rJ   r[   ÚDEBUGÚSTATIC_ROOTr~   ÚSTATICFILES_DIRS)r]   r   Útmpdirr|   r}   r#   r   r   r  r~   r   Ú	__enter__)r.   Únew_static_rootr   r   r   rH   Œ  s   ù	z#CompressorInDebugModeTestCase.setUpc                 C   s   t | jƒ | j d d d ¡ d S r,   )r   r  r   Ú__exit__rG   r   r   r   ÚtearDown�  s   
z&CompressorInDebugModeTestCase.tearDownc                 C   s  t j tjdd¡}t|ƒ�}| ¡ }W d   ƒ n1 sw   Y  t|dƒ}d}t|dƒ�}| d¡ | |¡ W d   ƒ n1 sBw   Y  d| }t	| j
ƒ}tƒ |_| ¡ }	|  ||	¡ tt j tjddd	| ¡d
ƒ�}| ¡ }
W d   ƒ n1 s|w   Y  |  ||
v¡ d S )Nr]   ru   é   zp { font-family: 'test' }rh   ra   zI<link rel="stylesheet" href="/static/CACHE/css/%s.css" type="text/css" />ÚCACHEz%s.cssÚr)r|   r}   r#   r   r~   ÚopenÚreadr   Úwriter   r]   r   ÚstoragerV   rN   r�   )r.   Úcss_filenameÚfÚcss_contentÚhashedÚtest_css_contentr]   ÚexpectedÚ
compressorrV   Úresultr   r   r   Útest_filename_in_debug_mode¡  s0   

ÿ

þ
ÿÿ
þz9CompressorInDebugModeTestCase.test_filename_in_debug_modeN)r:   r;   r<   rH   r  r$  r   r   r   r   r  Š  s    r  );Ú
__future__r   r   r|   rb   Útempfiler   Úshutilr   r   Úbs4r   Údjango.core.cache.backendsr	   Údjango.testr
   Údjango.test.utilsr   r"  r   rø   Úcompressor.baser   r   rä   r   r   r   Úcompressor.confr   Úcompressor.cssr   Úcompressor.exceptionsr   r   Úcompressor.jsr   Úcompressor.storager   r   r)   Úobjectr+   r?   r}   Úabspathr#   ÚdirnameÚ__file__rà   rA   r\   rË   râ   rã   ré   rô   r÷   r  r   r   r   r   Ú<module>   sL    

$ý :&