
    _fFQ                        d dl 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 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 Z$d Z% G d d          Z& G d d          Z'e j(        )                    e j(        *                    e j(        +                    e,                              Z- G d de          Z. eddd           G d de                      Z/ G d de          Z0 ed            G d! d"e/                      Z1 G d# d$e/          Z2 G d% d&e          Z3 G d' d(e          Z4 G d) d*e          Z5 G d+ d,e          Z6dS )-    N)mkdtemp)rmtreecopytreeBeautifulSoup)locmem)SimpleTestCase)override_settingscache)SOURCE_FILESOURCE_HUNK)get_cachekeyget_precompiler_cachekey)settings)CssCompressor)FilterDoesNotExistFilterError)JsCompressor)DefaultStoragec                 "    t          | d          S )Nzhtml.parserr   )markups    L/var/www/html/env/lib/python3.11/site-packages/compressor/tests/test_base.py	make_soupr      s    ///    c                 v    d                     d |                                D                       }d}|| |fz  S )N c                 &    g | ]\  }}d |d|dS ) z="" ).0kvs      r   
<listcomp>zcss_tag.<locals>.<listcomp>   s+    MMMdaAAAqqq1MMMr   z3<link rel="stylesheet" href="%s" type="text/css"%s>)joinitems)hrefkwargsrendered_attrstemplates       r   css_tagr,      s?    WWMMfllnnMMMNNNDHt^,,,r   c                        e Zd ZdZddZd ZdS )TestPrecompilerz3A filter whose output is always the string 'OUTPUT'Nc                     d S Nr!   selfcontentattrsfilter_typefilenamecharsets         r   __init__zTestPrecompiler.__init__$   s    r   c                     dS )NOUTPUTr!   r2   r)   s     r   inputzTestPrecompiler.input'   s    xr   NNN__name__
__module____qualname____doc__r8   r<   r!   r   r   r.   r.   !   s=        ==       r   r.   c                        e Zd ZdZddZd ZdS )PassthroughPrecompilerz+A filter whose outputs the input unmodifiedNc                     || _         d S r0   r3   r1   s         r   r8   zPassthroughPrecompiler.__init__.   s    r   c                     | j         S r0   rF   r;   s     r   r<   zPassthroughPrecompiler.input1   s
    |r   r=   r>   r!   r   r   rD   rD   +   s=        55       r   rD   c                   D    e Zd Zd Zd Z ed          d             ZdS )$PrecompilerAndAbsoluteFilterTestCasec                 Z    d| _         d| _        d| _        d| _        d| _        d| _        d S )NzM<link rel="stylesheet" href="/static/css/relative_url.css" type="text/css" />zK<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_auto_close_removedhtml_link_to_precompiled_csshtml_link_to_absolutized_csscss_origcss_absolutizedr2   s    r   setUpz*PrecompilerAndAbsoluteFilterTestCase.setUp9   sE    h't$ -M) -M)9 	 L 	r   c                 (   |rdnd}|rdnd}|                      ||d|i          5  t          d| j                  }t          |                                          d         }|                     ||           d d d            d S # 1 swxY w Y   d S )N))ztext/cssz1compressor.tests.test_base.PassthroughPrecompilerr!   )z0compressor.filters.css_default.CssAbsoluteFiltercss)COMPRESS_ENABLEDCOMPRESS_PRECOMPILERSCOMPRESS_FILTERSr   )r   r   rK   listhunksassertEqual)	r2   enableduse_precompileruse_absolute_filterexpected_outputprecompilerfilterscss_nodeoutputs	            r   helperz+PrecompilerAndAbsoluteFilterTestCase.helperE   s    PP 	 #AA 	 ]]$"-#W-  
 
 	6 	6
 %UDN;;H(..**++A.FV_555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   ABBBr3   )COMPRESS_CSS_HASHING_METHODc                    |                      ddd| j                   |                      ddd| j                   |                      ddd| j                   |                      ddd| j                   |                      ddd| j                   |                      ddd| j                   |                      ddd| j                   |                      ddd| j                   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)r[   r\   r]   r^   TN)rc   rL   rM   rN   rO   rP   rQ   s    r   !test_precompiler_enables_absolutezFPrecompilerAndAbsoluteFilterTestCase.test_precompiler_enables_absoluteZ   sj    	! % 8	 	 	
 	
 	
 	! $ 8	 	 	
 	
 	
 	  % =	 	 	
 	
 	
 	  $ =	 	 	
 	
 	
 	! % M	 	 	
 	
 	
 	! $ 0	 	 	
 	
 	
 	  % M	 	 	
 	
 	
 	  $ 0	 	 	
 	
 	
 	
 	
r   N)r?   r@   rA   rR   rc   r
   rf   r!   r   r   rI   rI   8   s\        

 

 

6 6 6* 9===6
 6
 >=6
 6
 6
r   rI   Tr!   
nocompress)rU   rV   COMPRESS_DEBUG_TOGGLEc                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
 ed	
          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Z edd	          d             Zd Z ed          d             Z ed          d             Z ed          d             Z ed d!          d"             Z ed#d!          d$             Z ed%d!          d&             Z ed'd!          d(             Zd)S )*CompressorTestCasec                     d| _         t          d| j                   | _        d| _        t	          d| 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">rT   z}<script src="/static/js/one.js" type="text/javascript"></script>
<script type="text/javascript">obj.value = "value";</script>js)rT   r   ra   rl   r   js_noderQ   s    r   rR   zCompressorTestCase.setUp   sD    F &eTX66@ $D$'22r   c                 \    d }|                       ||           ||                     dS )zr
        assertEqual with internal newlines collapsed to single, and
        trailing whitespace removed.
        c                 R    t          j        dd|                                           S )Nz\n+
)resubrstrip)ss    r   collapsez9CompressorTestCase.assertEqualCollapsed.<locals>.collapse   s"    6&$**11333r   NrZ   )r2   abru   s       r   assertEqualCollapsedz'CompressorTestCase.assertEqualCollapsed   s?    	4 	4 	4 	!hhqkk22222r   c                 \    d }|                       ||           ||                     dS )zz
        assertEqual for splits, particularly ignoring the presence of
        a trailing newline on the content.
        c                     d | D             S )Nc                 n    g | ]2}|d          |d         |d         |d                                          f3S r            )rs   )r"   xs     r   r%   zHCompressorTestCase.assertEqualSplits.<locals>.mangle.<locals>.<listcomp>   s9    EEE!QqT1Q41qt{{}}5EEEr   r!   )splits    r   manglez4CompressorTestCase.assertEqualSplits.<locals>.mangle   s    EEuEEEEr   Nrv   )r2   rw   rx   r   s       r   assertEqualSplitsz$CompressorTestCase.assertEqualSplits   sB    	F 	F 	F 	FF1II.....r   c                 f    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 S )NrT   one.csszcss/one.csszB<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.csszB<link rel="stylesheet" href="/static/css/two.css" type="text/css">c           	          g | ]=}|d          |d         |d         j         j                            |d                   f>S r}   )ra   parserelem_strr"   r   r2   s     r   r%   z5CompressorTestCase.test_css_split.<locals>.<listcomp>   sE    XXXQ!A$!adDM$8$A$A!A$$G$GHXXXr   )
r   ospathr&   r   COMPRESS_ROOTr   ra   split_contentsr   r2   outr   s   `  r   test_css_splitz!CompressorTestCase.test_css_split   s     X3UIFFT	 .M	 X3UIFFT	
( ,,..XXXXRWXXXuc*****r   c                     g d}|                      |t          | j                                                             d S )N)zbody { background:#990; }r   zbody { color:#fff; })rZ   rX   ra   rY   r2   r   s     r   test_css_hunksz!CompressorTestCase.test_css_hunks   sG    
 
 

 	d4=#6#6#8#899:::::r   c                     d}d                     d | j                                        D                       }|                     ||           d S )NzKbody { background:#990; }
p { border:5px solid green;}
body { color:#fff; }rp   c                     g | ]}|S r!   r!   r"   hs     r   r%   z6CompressorTestCase.test_css_output.<locals>.<listcomp>   s    <<<1<<<r   )r&   ra   rY   rZ   )r2   r   rY   s      r   test_css_outputz"CompressorTestCase.test_css_output   sQ    ]		<<dm&9&9&;&;<<<==e$$$$$r   c                     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" />rT   rp   c                     g | ]}|S r!   r!   r   s     r   r%   zECompressorTestCase.test_css_output_with_bom_input.<locals>.<listcomp>   s    @@@1@@@r   )r   r&   rY   rZ   )r2   r   rT   css_node_with_bomrY   s        r   test_css_output_with_bom_inputz1CompressorTestCase.test_css_output_with_bom_input   sh    G[)%55		@@&7&=&=&?&?@@@AAe$$$$$r   c           
          t          j        d          }| j        j        D ]H}|                     |                    t          t          |                              d|z             Id S )Nz^\d{10}[\.\d]+$z?mtimes is returning something that doesn't look like a date: %s)rq   compilera   mtimes
assertTruematchstrfloat)r2   is_datedates      r   test_css_mtimesz"CompressorTestCase.test_css_mtimes   ss    */00M( 	 	DOOc%++..//Q   	 	r   F)rU   c                 j    |                      | j        | j                                                   d S r0   )ry   rT   ra   rb   rQ   s    r   test_css_return_if_offz)CompressorTestCase.test_css_return_if_off   s.    !!$(DM,@,@,B,BCCCCCr   c                     t          j        d          }|                     |                    | j        j                  d           d S )Nz\w{12}z@cachekey is returning something that doesn't look like r'\w{12}')rq   r   r   r   ra   cachekey)r2   is_cachekeys     r   test_cachekeyz CompressorTestCase.test_cachekey   sJ    j++dm455O	
 	
 	
 	
 	
r   c                     t          d          }|                     || j                                                                                   d S )N"/static/CACHE/css/600674ea1d3d.css)r,   rZ   ra   rb   stripr2   rb   s     r   test_css_return_if_onz(CompressorTestCase.test_css_return_if_on   sF    =>>!5!5!7!7!=!=!?!?@@@@@r   c                 h    d}|                      || j                            d                     d S )NzK<link rel="preload" href="/static/CACHE/css/600674ea1d3d.css" as="style" />preloadmode)rZ   ra   rb   r   s     r   test_css_preload_outputz*CompressorTestCase.test_css_preload_output  s6    [dm22	2BBCCCCCr   c                      t           t          j                            t          j        dd          ddft          dd dfg} j                                        } fd|D             } 	                    ||           d S )Nrl   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           	          g | ]=}|d          |d         |d         j         j                            |d                   f>S r}   )rm   r   r   r   s     r   r%   z4CompressorTestCase.test_js_split.<locals>.<listcomp>  sE    WWWA!A$!adDL$7$@$@1$F$FGWWWr   )
r   r   r   r&   r   r   r   rm   r   r   r   s   `  r   test_js_splitz CompressorTestCase.test_js_split  s     X3T8DDR	 &N	
 ++--WWWWQVWWWuc*****r   c                     ddg}|                      |t          | j                                                             d S )Nz	obj = {};r   )rZ   rX   rm   rY   r   s     r   test_js_hunksz CompressorTestCase.test_js_hunks  s?    23d4<#5#5#7#78899999r   c                 d    d}|                      || j                                                   d S N8<script src="/static/CACHE/js/8a0fed36c317.js"></script>rZ   rm   rb   r   s     r   test_js_outputz!CompressorTestCase.test_js_output  s1    Hdl113344444r   c                 h    d}|                      || j                            d                     d S )NzJ<link rel="preload" href="/static/CACHE/js/8a0fed36c317.js" as="script" />r   r   r   r   s     r   test_js_preload_outputz)CompressorTestCase.test_js_preload_output"  s>     Y 	 	dl11y1AABBBBBr   c                     | j         j                            ddi           d}|                     || j                                                    d S )NurlThis is not a url, just a textr   )rm   contextupdaterZ   rb   r   s     r   test_js_override_urlz'CompressorTestCase.test_js_override_url)  sP    ##U,L$MNNNHdl113344444r   c                     | j         j                            ddi           t          d          }|                     || j                                                                                    d S )Nr   r   r   )ra   r   r   r,   rZ   rb   r   r   s     r   test_css_override_urlz(CompressorTestCase.test_css_override_url.  se    $$e-M%NOOO=>>!5!5!7!7!=!=!?!?@@@@@r   r!   rV   rU   c                 j    |                      | j        | j                                                   d S r0   )ry   rl   rm   rb   rQ   s    r   test_js_return_if_offz(CompressorTestCase.test_js_return_if_off3  s.    !!$'4<+>+>+@+@AAAAAr   c                 d    d}|                      || j                                                   d S r   r   r   s     r   test_js_return_if_onz'CompressorTestCase.test_js_return_if_on7  s1    K!4!4!6!677777r   custom)COMPRESS_OUTPUT_DIRc                     d}|                      |t          d| j                                                             d S )Nz9<script src="/static/custom/js/8a0fed36c317.js"></script>rl   rZ   r   rl   rb   r   s     r   test_custom_output_dir1z*CompressorTestCase.test_custom_output_dir1;  s;    LdDG!<!<!C!C!E!EFFFFFr   r   c                     d}|                      |t          d| j                                                             d S )Nz2<script src="/static/js/8a0fed36c317.js"></script>rl   r   r   s     r   test_custom_output_dir2z*CompressorTestCase.test_custom_output_dir2@  s;    EdDG!<!<!C!C!E!EFFFFFr   z/custom/nested/c                     d}|                      |t          d| j                                                             d S )Nz@<script src="/static/custom/nested/js/8a0fed36c317.js"></script>rl   r   r   s     r   test_custom_output_dir3z*CompressorTestCase.test_custom_output_dir3E  s;    SdDG!<!<!C!C!E!EFFFFFr   ))text/foobarz*compressor.tests.test_base.TestPrecompilerTc                     d}t          d|          }t          |                    d                    }|                     |j        j        d         d           d S )N=<style type="text/foobar">p { border:10px solid red;}</style>rT   inliner   r:   r   r   rb   rZ   stylecontentsr2   rT   ra   rb   s       r   test_precompiler_class_usedz.CompressorTestCase.test_precompiler_class_usedJ  sX     N ,,8??84455.q18<<<<<r   ))r   z,compressor.tests.test_base.NonexistentFilterc                 l    d}t          d|          }|                     t          |j        d           d S Nr   rT   r   )r   assertRaisesr   rb   r2   rT   ra   s      r   (test_nonexistent_precompiler_class_errorz;CompressorTestCase.test_nonexistent_precompiler_class_errorV  s:     N ,,,hoxHHHHHr   ))r   z./foo -I ./bar/bazc                 l    d}t          d|          }|                     t          |j        d           d S r   )r   r   r   rb   r   s      r   !test_command_with_dot_precompilerz4CompressorTestCase.test_command_with_dot_precompilera  s9    
 N ,,+xAAAAAr   ))ztext/djangoz*compressor.filters.template.TemplateFilterc                     d}t          d|          }t          |                    d                    }|                     |j        j        d         d           d S )Nza<style type="text/django">p { border:10px solid {% if 1 %}green{% else %}red{% endif %};}</style>rT   r   r   zp{border:10px solid green}r   r   s       r   test_template_precompilerz,CompressorTestCase.test_template_precompilerj  sY     r ,,8??84455.q13OPPPPPr   N)r?   r@   rA   rR   ry   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   r   rj   rj      s       
3 
3 
3	3 	3 	3	/ 	/ 	/+ + +2; ; ;% % %
% % %   ...D D /.D
 
 
A A AD D D
+ + +&: : :5 5 5C C C5 5 5
A A A
 R%HHHB B IHB8 8 8 8444G G 54G 2...G G /.G +<===G G >=G 
 	  = = = 
 	  I I I
 F  B B	 B
 
 	  Q Q Q Q Qr   rj   c            	           e Zd Zd Zd Zd Z edej        de	j
                            ed          dffd	          d
             ZdS )CssMediaTestCasec                     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>)rT   rQ   s    r   rR   zCssMediaTestCase.setUpx  s    @r   c                 &   t          d| j                  }t          |                                                              d          }g d}|                     t          |          d           |                     |d |D                        d S )NrT   link)screenprintallN   c                 :    g | ]}|                     d d          S mediaNgetr"   r   s     r   r%   z4CssMediaTestCase.test_css_output.<locals>.<listcomp>  &     K K KT'4!8!8 K K Kr   )r   rT   r   rb   find_allrZ   len)r2   ra   linksr   s       r   r   z CssMediaTestCase.test_css_output  s     11(//++,,55f==000UQ''' K KU K K KLLLLLr   c                     | j         dz   }t          d|          }g d}t          |                                                              d          }|                     |d |D                        d S )NzH<style type="text/css" media="print">p { border:10px solid red;}</style>rT   )r   r   r   Nr   r   c                 :    g | ]}|                     d d          S r   r   r   s     r   r%   z>CssMediaTestCase.test_avoid_reordering_css.<locals>.<listcomp>  r   r   )rT   r   r   rb   r   rZ   )r2   rT   ra   r   r   s        r   test_avoid_reordering_cssz*CssMediaTestCase.test_avoid_reordering_css  s    HXY 	 !,,999(//++,,55f== K KU K K KLLLLLr   r   r   zprecompiler.pyz {infile} {outfile}Fr   c                    d}t          d|          }t          |                                                              ddg          }|                     g dd |D                        |                     g 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>rT   r   r   )z/static/css/one.cssz/static/css/two.cssNc                 :    g | ]}|                     d d          S )r(   Nr   r   s     r   r%   zKCssMediaTestCase.test_passthough_when_compress_disabled.<locals>.<listcomp>  s&    777TXXfd##777r   )r   r   r   c                 :    g | ]}|                     d d          S r   r   r   s     r   r%   zKCssMediaTestCase.test_passthough_when_compress_disabled.<locals>.<listcomp>  s&    ,X,X,XTXXgt-D-D,X,X,Xr   )r   r   rb   r   rZ   r   s       r   &test_passthough_when_compress_disabledz7CssMediaTestCase.test_passthough_when_compress_disabled  s    R !,,8??,,--667HII@@@77777	
 	
 	
 	***,X,XQW,X,X,X	
 	
 	
 	
 	
r   N)r?   r@   rA   rR   r   r  r
   sys
executabler   r   r&   test_dirr  r!   r   r   r   r   w  s        @ @ @M M MM M M  >>>27<<:J#K#K#K#KM
 	 	 	
 
	 	
 
 
r   r   )COMPRESS_VERBOSEc                       e Zd ZdS )VerboseTestCaseN)r?   r@   rA   r!   r   r   r  r    s        Dr   r  c                       e Zd Zd ZdS )CacheBackendTestCasec                 \    ddl m} |                     |j        t          j                   d S )Nr   r   )compressor.cacher   rZ   	__class__r   LocMemCache)r2   r   s     r   test_correct_backendz)CacheBackendTestCase.test_correct_backend  s5    ******&*<=====r   N)r?   r@   rA   r  r!   r   r   r  r    s#        > > > > >r   r  c                       e Zd Zd Zd ZdS )JsAsyncDeferTestCasec                     d| _         d S )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>rl   rQ   s    r   rR   zJsAsyncDeferTestCase.setUp  s    Rr   c                     d t          d| j                  }g d}t          |                                                              d          }fd|D             }|                     ||           d S )Nc                 b    |                      d          rdS |                      d          rdS d S )Nasyncdefer)has_attr)tags    r   extract_attrz9JsAsyncDeferTestCase.test_js_output.<locals>.extract_attr  s>    ||G$$ w||G$$ w r   rl   )Nr  r  Nr  Nscriptc                 &    g | ]} |          S r!   r!   )r"   rt   r  s     r   r%   z7JsAsyncDeferTestCase.test_js_output.<locals>.<listcomp>  s!    222Qa222r   )r   rl   r   rb   r   rZ   )r2   rm   rb   scriptsr4   r  s        @r   r   z#JsAsyncDeferTestCase.test_js_output  s    	 	 	 tTW-->>>GNN,,--66x@@2222'222'''''r   N)r?   r@   rA   rR   r   r!   r   r   r  r    s5        R R R( ( ( ( (r   r  c                       e Zd Zd Zd ZdS )JSWithParensTestCasec                     d| _         d S )Nzm
        <script src="/static/js/one.js"></script>
        <script src="/static/js/two.js"></script>
        r  rQ   s    r   rR   zJSWithParensTestCase.setUp  s    r   c                     t          d| j                  }|                                }|                     |d         d           |                     |d         d           d S )Nrl   r   z
obj = {};;r~   zpollos = {};)r   rl   filter_inputrZ   )r2   rm   r3   s      r   test_js_contentz$JSWithParensTestCase.test_js_content  s^    tTW--&&((\222^44444r   N)r?   r@   rA   rR   r(  r!   r   r   r$  r$    s2          5 5 5 5 5r   r$  c                   t    e Zd Zd Zd Z ed          d             Z ed          d             Zd Zd	S )
CacheTestCasec                     d t           _        d S r0   )cachemod_cachekey_funcrQ   s    r   rR   zCacheTestCase.setUp  s    "&r   c                 L    |                      t          d          d           d S )Nfoozdjango_compressor.foo)rZ   r   rQ   s    r   test_get_cachekey_basicz%CacheTestCase.test_get_cachekey_basic  s'    e,,.EFFFFFr   z.leading.dot)COMPRESS_CACHE_KEY_FUNCTIONc                 >    |                      t          d            d S )Nc                       t          d          S Nr/  r   r!   r   r   <lambda>z=CacheTestCase.test_get_cachekey_leading_dot.<locals>.<lambda>      |E/B/B r   r   ImportErrorrQ   s    r   test_get_cachekey_leading_dotz+CacheTestCase.test_get_cachekey_leading_dot  "    +'B'BCCCCCr   zinvalid.modulec                 >    |                      t          d            d S )Nc                       t          d          S r4  r5  r!   r   r   r6  z=CacheTestCase.test_get_cachekey_invalid_mod.<locals>.<lambda>  r7  r   r8  rQ   s    r   test_get_cachekey_invalid_modz+CacheTestCase.test_get_cachekey_invalid_mod  r;  r   c                 t    	 t          dd           d S # t          $ r |                     d           Y d S w xY w)Nasdfz6get_precompiler_cachekey raised TypeError unexpectedly)r   	TypeErrorfailrQ   s    r   test_get_precompiler_cachekeyz+CacheTestCase.test_get_precompiler_cachekey  sY    	P$VV44444 	P 	P 	PIINOOOOOO	Ps    77N)	r?   r@   rA   rR   r0  r
   r:  r>  rC  r!   r   r   r*  r*    s        ' ' 'G G G >BBBD D CBD 3CDDDD D EDDP P P P Pr   r*  c                        e Zd Zd Zd Zd ZdS )CompressorInDebugModeTestCasec           	      P   d| _         d| _        t                      | _        t          j                            | j        d          }t          t          j	        |           |                     dddd||t          j
        g          | _        | j                                         d S )NzD<link rel="stylesheet" href="/static/css/one.css" type="text/css" />5c6a60375256staticTr!   rg   )rU   rV   rh   DEBUGSTATIC_ROOTr   STATICFILES_DIRS)rT   expected_css_hashr   tmpdirr   r   r&   r   r   rJ  r   r
   	__enter__)r2   new_static_roots     r   rR   z#CompressorInDebugModeTestCase.setUp  s    R 	 "0ii',,t{H==%777!%!"$".')&45 "/ "
 "
 	((*****r   c                 f    t          | j                   | j                            d d d            d S r0   )r   rM  r
   __exit__rQ   s    r   tearDownz&CompressorInDebugModeTestCase.tearDown	  s3    t{''dD99999r   c                 F     fd} |             t           j                            t          j        dd          }d}t          |d          5 }|                    d           |                    |           d d d            n# 1 swxY w Y    |             t           j                            t          j        ddd j        z            }t          |d	          5 }|                                }d d d            n# 1 swxY w Y    	                    ||v           d S )
Nc                      dj         z  } t          dj                  }t                      |_        |                                }                    | |           d S )NzG<link rel="stylesheet" href="/static/CACHE/css/%s.css" type="text/css">rT   )rL  r   rT   r   storagerb   rZ   )expected
compressorrb   r2   s      r   comparezJCompressorInDebugModeTestCase.test_filename_in_debug_mode.<locals>.compare  sd    Y()  'udh77J!/!1!1J&&((FXv.....r   rT   r   zp { font-family: 'test' }rw   rp   CACHEz%s.cssr)
r   r   r&   r   r   openwriterL  readr   )r2   rX  r6   test_css_contentrT   result_filenamefresults   `       r   test_filename_in_debug_modez9CompressorInDebugModeTestCase.test_filename_in_debug_mode  s   
	/ 	/ 	/ 	/ 	/ 				7<< 6yII6(C   	(CIIdOOOII&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 				',,"GUHt?U4U
 
 /3'' 	1VVXXF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	(677777s$   +BB	B	C??DDN)r?   r@   rA   rR   rR  rb  r!   r   r   rE  rE    sA        + + +(: : :8 8 8 8 8r   rE  )7r   rq   r  tempfiler   shutilr   r   bs4r   django.core.cache.backendsr   django.testr	   django.test.utilsr
   rW  r   r,  compressor.baser   r   r  r   r   compressor.confr   compressor.cssr   compressor.exceptionsr   r   compressor.jsr   compressor.storager   r   r,   r.   rD   r   abspathr&   dirname__file__r
  rI   rj   r   r  r  r  r$  r*  rE  r!   r   r   <module>rr     s   				 				 



       # # # # # # # #       - - - - - - & & & & & & / / / / / / ( ( ( ( ( ( 4 4 4 4 4 4 4 4 C C C C C C C C $ $ $ $ $ $ ( ( ( ( ( ( A A A A A A A A & & & & & & - - - - - -0 0 0- - -               7??27<<(A(ABBCCY
 Y
 Y
 Y
 Y
> Y
 Y
 Y
x &  
[Q [Q [Q [Q [Q [Q [Q 
[Q|0
 0
 0
 0
 0
~ 0
 0
 0
f D)))	 	 	 	 	( 	 	 *)	> > > > >- > > >( ( ( ( (> ( ( (25 5 5 5 5> 5 5 5P P P P PN P P P,68 68 68 68 68N 68 68 68 68 68r   