
    -Ph                     T   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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 d dlmZ d dlZd dlZd dlmZ d dlmZ d dlmZ e	j        dk    re	j        rd Znd	 Z ej         d
d          d             Z!dZ"dZ#dddgg ddZ$ e%dd          5 Z& e'e$e&(                                g          Z)ddd           n# 1 swxY w Y   dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1d Z2d!Z3 e
j4        d"          Z5 e
j4        d#          Z6d$ Z7 ej         d%          d&             Z8 G d' d(ej9                  Z: G d) d*e:          Z; G d+ d,e:          Z< G d- d.e:          Z= G d/ d0e:          Z>d1 Z?d2 Z@ G d3 d4e:          ZA G d5 d6e:          ZB G d7 d8e:          ZCejD        d9             ZEd: ZF G d; d<ej9                  ZG G d= d>ej9                  ZHejI        J                    d?dxdAdB dC f          dD             ZK G dE dFej9                  ZLdG ZMdH ZNdI ZOdJ ZPdK ZQdL ZRdM ZSdN ZTdO ZUdP ZVdQ ZWdR ZXdS ZYdT ZZdU Z[dV Z\dW Z] e^ ej_        dXdYeM           ej_        dZdYeN           ej_        d[dYeO           ej_        d\dYeP           ej_        d]dYeQ           ej_        d^dYeR           ej_        d_dYeS           ej_        d`dYeT           ej_        dadYeU           ej_        dbdYeV           ej_        dcdYeW           ej_        dddYeX           ej_        dedYeY           ej_        dfdYeZ           ej_        dgdYe[           ej_        dhdYe\           ej_        didje]          g          Z`i dXeMdZeNd[eOd\ePd]eQd^eRd_eSd`eTdaeUdbeVdceWddeXdeeYdfeZdge[dhe\die]Za e^eMeNeOePeQeReSeTeUeVeWeXeYeZe[e\e]g          Zbdk ZcejD        dl             Zd G dm dn          Ze G do dpej9                  Zfdq Zgdr Zhds Zidt Zjdu Zkdv Zldw ZmdS )y    N)Client)Response)build_directory)Manifest)SassMiddleware/c                     t           j                            t           j                            |                     } |                     t           j        t           j                  S N)ospathabspathnormpathreplacesepaltsepr   s    I/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sasstests.pynormalize_pathr      s=    wrw//5566||BFBI...    c                     | S r
    r   s    r   r   r   !   s    r   sessionT)scopeautousec                      dt           j        v rAt           j                            t           j        d         d          } | t           j        d<   d S d S )NPWDz.coveragercCOVERAGE_PROCESS_START)r   environr   join)rcfiles    r   set_coverage_instrumentationr!   %   sF    
bj/??/5
+,,, r   zBbody {
  background-color: green; }
  body a {
    color: blue; }
zlbody {
  background-color: green; }
  body a {
    color: blue; }

/*# sourceMappingURL=../a.scss.css.map */   z
test/a.csstest/a.scsszfAAKA,AAAA,IAAI,CAAC;EAHH,gBAAgB,EAAE,KAAK,GAQxB;EALD,AAEE,IAFE,CAEF,CAAC,CAAC;IACA,KAAK,EAAE,IAAI,GACZversionfilesourcesnamesmappings )newline)sourcesContentzb i {
  font-size: 20px; }
zIb i {
  font-size: 20px; }

/*# sourceMappingURL=../css/b.scss.css.map */z\body {
  background-color: green; }
  body a {
    color: blue; }

h1 a {
  color: green; }
ui   @charset "UTF-8";
body {
  background-color: green; }
  body a {
    font: '나눔고딕', sans-serif; }
u   @charset "UTF-8";
body {
  background-color: green; }
  body a {
    font: '나눔고딕', sans-serif; }

/*# sourceMappingURL=../css/d.scss.css.map */za {
  color: red; }
zObody {
  font: 100% Helvetica, sans-serif;
  color: #333;
  height: 1.42857; }
zRbody {
  font: 100% Helvetica, sans-serif;
  color: #333;
  height: 1.42857143; }
a b {
  color: blue; }
zbody p {
  color: blue; }
z#/\*# sourceMappingURL=([^\s]+?) \*/z^data:[^;]*?;base64,(.+)$c                 >    d }t                               ||           S )Nc                 r    t           j                            |                     d                    }d| dS )N   z/*# sourceMappingURL=z */)r   r   basenamegroup)matchfilenames     r   cbz_map_in_output_dir.<locals>.cb   s2    7##EKKNN334x4444r   )re_sourcemap_urlsub)sr5   s     r   _map_in_output_dirr9      s)    5 5 5 A&&&r   )r   c              #   <   K   d V  t          |           dk    sJ d S )Nr   )len)recwarns    r   no_warningsr=      s,      	EEEw<<1r   c                        e Zd Zd Zd Zd ZdS )BaseTestCasec                     t          |t                    rt          j        |          }t          |t                    rt          j        |          }||k    sJ d S r
   )
isinstancestrjsonloads)selfexpectedactuals      r   assert_source_map_equalz$BaseTestCase.assert_source_map_equal   s[    h$$ 	,z(++Hfc"" 	(Z''F6!!!!!!r   c                 R   t          |          5 }	 t          j        |          }nR# t          $ rE}|                    d           |d| d|                                 }t          |          d }~ww xY w	 d d d            n# 1 swxY w Y   |                     ||           d S )Nr   z

z:

)openrC   load
ValueErrorseekreadrH   )rE   rF   r4   ftreeemsgs          r   assert_source_map_filez#BaseTestCase.assert_source_map_file   s    (^^ 	&q&y|| & & &q			;;(;;;; oo%& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	$$Xt44444s1   B'B
A6A A11A66BB
B
c                 p   t                               |          }|J |                    d          }t                              |          }|J t          j        |                    d                                        d          }t          j	        |          }| 
                    ||           d S )Nr0   zutf-8)r6   searchr2   re_base64_data_urir3   base64	b64decodedecoderC   rD   rH   )rE   rF   srcurl_matches	embed_urlb64_matchesdecodedrG   s           r   assert_source_map_embedz$BaseTestCase.assert_source_map_embed   s    &--c22&&&%%a((	(..y99&&&";#4#4Q#7#788??HHG$$$$Xv66666r   N)__name__
__module____qualname__rH   rS   r_   r   r   r   r?   r?      sA        " " "5 5 57 7 7 7 7r   r?   c                        e Zd Zd Zd Zd ZdS )SassTestCasec                 H    t          j        dt          j                  sJ d S )Nz^\d+\.\d+\.\d+$)rer3   sass__version__rE   s    r   test_versionzSassTestCase.test_version   s$    x*D,<=======r   c                 |    t          t          j        t          j        j                  sJ dt          j        v sJ d S )Nnested)rA   rg   OUTPUT_STYLEScollectionsabcMappingri   s    r   test_output_styleszSassTestCase.test_output_styles   s:    $,ko.EFFFFF4-------r   c                    |                      dt          j        g d                     |                      dt          j        ddg                     dt          j        dg          k    sJ dt          j        g           k    sJ d S )NzKorea, Japan, China, and Taiwan)KoreaJapanChinaTaiwanzKorea, and Japanrs   rt   r*   )assertEqualrg   and_joinri   s    r   test_and_joinzSassTestCase.test_and_join   s    -M???@@	
 	
 	
 	M7G,--	
 	
 	
 $-	222222T]2&&&&&&&&r   N)r`   ra   rb   rj   rq   ry   r   r   r   rd   rd      sA        > > >. . .
' 
' 
' 
' 
'r   rd   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )CompileTestCasec                 P    |                      t          t          j                   d S r
   assertRaises	TypeErrorrg   compileri   s    r   test_compile_required_argumentsz/CompileTestCase.test_compile_required_arguments   s     )T\22222r   c                 R    |                      t          t          j        d           d S )Na { color: blue; }r}   ri   s    r    test_compile_takes_only_keywordsz0CompileTestCase.test_compile_takes_only_keywords   s#    )T\3GHHHHHr   c                     |                      t          t          j        dd           |                      t          t          j        dd           |                      t          t          j        dd           d S )Nr   r#   )stringr4   ztest/)r   dirname)r4   r   r}   ri   s    r    test_compile_exclusive_argumentsz0CompileTestCase.test_compile_exclusive_arguments   s    t|'- 	 	
 	
 	
 	t|' 	 	
 	
 	
 	"G 	 	
 	
 	
 	
 	
r   c                     |                      t          t          j        ddg           |                      t          t          j        dd           |                      t          t          j        dd           d S )Nr   compact)r   output_style             ^@invalid)r~   r   rg   r   rL   ri   s    r   !test_compile_invalid_output_stylez1CompileTestCase.test_compile_invalid_output_style   s    t|'# 	 	
 	
 	

 	'd 	 	
 	
 	
 	'i 	 	
 	
 	
 	
 	
r   c                     |                      t          t          j        ddg           |                      t          t          j        dd           |                      t          t          j        dd           d S )Nr   line_numbersr   source_commentsr   r   r}   ri   s    r   $test_compile_invalid_source_commentsz4CompileTestCase.test_compile_invalid_source_comments   s    t|'+, 	 	
 	
 	

 	' 	 	
 	
 	
 	'% 	 	
 	
 	
 	
 	
r   c                     ddiddiddifD ]]}t          j        t                    5 }t          j        dddd	| d d d            n# 1 swxY w Y   |j        j        \  }|d
k    sJ ^d S )Nr   za{b:c}r4   r#   r   )testz	/dev/nullderpdarp)herpharpz;compile() got unexpected keyword argument(s) 'harp', 'herp'r   )pytestraisesr   rg   r   valueargs)rE   r   excinforR   s       r   *test_compile_disallows_arbitrary_argumentsz:CompileTestCase.test_compile_disallows_arbitrary_arguments  s    8$]+12
 
	 
	D
 y)) ?W>&v>>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?=%DCM    
	 
	s   AA	A	c                    t          j        d          }|dk    sJ t          j        dd          }|dk    sJ t          j        d          }|                     d	|           |                     t           j        t           j        d
           |                     t
          t           j        d
           |                     t          t           j        d           |                     t          t           j        g            d S )Nza { b { color: blue; } }r   r-   Da {
            b { color: blue; }
            color: red;
        }Tr   zY/* line 1, stdin */
a {
  color: red; }
  /* line 2, stdin */
  a b {
    color: blue; }
u%   a { color: blue; } /* 유니코드 */u;   @charset "UTF-8";
a {
  color: blue; }

/* 유니코드 */
za { b { color: blue; }  )rg   r   rw   r~   CompileErrorrL   r   )rE   rG   	commenteds      r   test_compile_stringz#CompileTestCase.test_compile_string  s3   %?@@@44444L #	
 
 
	       %LMMM 	
 	
 	
 	t|+ 	 	
 	
 	

 	+ 	 	
 	
 	
 	)T\$???)T\"=====r   c                 B    t          j        dd          }|dk    sJ d S )Nza
	b
		color: blue;T)r   indentedr-   rg   r   rE   rG   s     r   test_compile_string_sass_stylez.CompileTestCase.test_compile_string_sass_style;  s8    -
 
 
 4444444r   c                 @    t          j        d          }|dk    sJ d S )Nztest/h.sassr4   r-   r   r   s     r   test_compile_file_sass_stylez,CompileTestCase.test_compile_file_sass_styleB  s,    }5554444444r   c                 P    d }t          j        dd|ffd          }|dk    sJ dS )z*Demonstrates one-arg importers + chaining.c                 F    t          |           t          u sJ d| d|  dffS )N)ztest/b.scss.z-one-arg { color: blue; })typerB   r   s    r   importer_returning_one_argumentzNCompileTestCase.test_importer_one_arg.<locals>.importer_returning_one_argumentH  s<    ::$$$$ !<4<<<= r   z@import 'foo';r   
compressedr   	importersr   z,b i{font-size:20px}.foo-one-arg{color:blue}
Nr   )rE   r   rets      r   test_importer_one_argz%CompileTestCase.test_importer_one_argF  sU    	 	 	 l#:;=%
 
 

 EEEEEEEr   c                 P    d }t          j        dd|ffd          }|dk    sJ d S )Nc                 ^    | dv sJ | dk    r|dk    sJ | dffS | dk    r|dk    sJ | dffS d S )Nabr   stdin@import "b";r   a { color: red; }r   )r   prevs     r   importerz9CompileTestCase.test_importer_prev_path.<locals>.importerX  sc    :%%%%s{{w~.00s{{{{2355 r   @import "a";r   r   r   a{color:red}
r   rE   r   r   s      r   test_importer_prev_pathz'CompileTestCase.test_importer_prev_pathW  sS    	6 	6 	6 l!8}&%
 
 

 &&&&&&&r   c                 v    d }t          j        ddt          j        |d          ffd          }|dk    sJ d S )Nc                 ^    |dv sJ |dk    r|dk    sJ |dffS |dk    r|dk    sJ || ffS d S )Nr   r   r   r   r   r   )a_cssr   r   s      r   r   zACompileTestCase.test_importer_prev_path_partial.<locals>.importeri  sa    :%%%%s{{w~.00s{{{{u'' r   r   r   r   r   r   r   )rg   r   	functoolspartialr   s      r   test_importer_prev_path_partialz/CompileTestCase.test_importer_prev_path_partialh  sb    	( 	( 	( l!9,X7JKKLN%
 
 

 &&&&&&&r   c                 \    d }d }t          j        dd|fd|ffd          }|dk    sJ d S )Nc                     | dk    r| dffS d S )Noner   r   r   s    r   importer_onezPCompileTestCase.test_importer_does_not_handle_returns_None.<locals>.importer_onez  s!    u}}2355 }r   c                     | dk    sJ | dffS )Ntwozb { color: blue; }r   r   s    r   importer_twozPCompileTestCase.test_importer_does_not_handle_returns_None.<locals>.importer_two~  s    5====/022r   @import "one"; @import "two";r   r   r   za{color:red}b{color:blue}
r   rE   r   r   r   s       r   *test_importer_does_not_handle_returns_Nonez:CompileTestCase.test_importer_does_not_handle_returns_Noney  sj    	6 	6 	6	3 	3 	3 l2<(1l*;<%
 
 

 3333333r   c                 \    d }d }t          j        dd|gd|ggd          }|dk    sJ d S )Nc                 2      dk    r fd} |            S d S )Nr   c               3   *   K    dfV   dz   dfV  d S )Nr   otherzb { color: orange; }r   r   s   r   genzQCompileTestCase.test_importers_other_iterables.<locals>.importer_one.<locals>.gen  s5      !45555'>+ABBBBBBr   r   )r   r   s   ` r   r   zDCompileTestCase.test_importers_other_iterables.<locals>.importer_one  s>    u}}C C C C C suu }r   c                 (    | dk    sJ | dg| dz   dggS )Nr   zc { color: yellow; }r   zd { color: green; }r   r   s    r   r   zDCompileTestCase.test_importers_other_iterables.<locals>.importer_two  s1    5==== -.!67 r   r   r   r   r   z9a{color:red}b{color:orange}c{color:yellow}d{color:green}
r   r   s       r   test_importers_other_iterablesz.CompileTestCase.test_importers_other_iterables  sv    	 	 		 	 	 l2<(1l*;<%	
 
 
 H
 
 
 
 
 
r   c                 P    d }t          j        dd|ffd          }|dk    sJ d S )Nc                 B    | dt          j        d| dz   gdd          ffS )Nr   r"   z.dbz(;AAAA,CAAC,CAAC;EAAE,KAAK,EAAE,GAAI,GAAI)r%   r'   r)   )rC   dumpsr   s    r   importer_with_srcmapzCCompileTestCase.test_importers_srcmap.<locals>.importer_with_srcmap  sG     'J#$ 5L$ %O     
 r   z@import "test";r   r   r   r   r   )rE   r   r   s      r   test_importers_srcmapz%CompileTestCase.test_importers_srcmap  sU    	 	 	" l$/02%
 
 

 &&&&&&&r   c                     d }t          t          d                    5  t          j        dd|ff           d d d            d S # 1 swxY w Y   d S )Nc                 &    t          d|            )Nz
Bad path: )rL   r   s    r   r   zACompileTestCase.test_importers_raises_exception.<locals>.importer  s    0$00111r   z^Error: \n       Traceback \(most recent call last\):\n.+ValueError: Bad path: hi\n        on line 1:9 of stdin\n>> @import "hi";\n   --------\^\n@import "hi";r   r   r   assert_raises_compile_errorRegexMatcherrg   r   rE   r   s     r   test_importers_raises_exceptionz/CompileTestCase.test_importers_raises_exception  s    	2 	2 	2 )# 

 

 	M 	M LQM;KLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M   AAAc                     d }t          t          d                    5  t          j        dd|ff           d d d            d S # 1 swxY w Y   d S )Nc                     dS )N)r   r   r   s    r   r   zMCompileTestCase.test_importer_returns_wrong_tuple_size_zero.<locals>.importer  s    5r   z^Error: \n       Traceback \(most recent call last\):\n.+ValueError: Expected importer result to be a tuple of length \(1, 2, 3\) but got 0: \(\)\n        on line 1:9 of stdin\n>> @import "hi";\n   --------\^\nr   r   r   r   r   s     r   +test_importer_returns_wrong_tuple_size_zeroz;CompileTestCase.test_importer_returns_wrong_tuple_size_zero  s    	 	 	 )#	 	
 
 	M 	M LQM;KLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Mr   c                     d }t          t          d                    5  t          j        dd|ff           d d d            d S # 1 swxY w Y   d S )Nc                     dS )N))r   r   cdr   r   s    r   r   zPCompileTestCase.test_importer_returns_wrong_tuple_size_too_big.<locals>.importer  s    **r   z^Error: \n       Traceback \(most recent call last\):\n.+ValueError: Expected importer result to be a tuple of length \(1, 2, 3\) but got 4: \('a', 'b', 'c', 'd'\)\n        on line 1:9 of stdin\n>> @import "hi";\n   --------\^\nr   r   r   r   r   s     r   .test_importer_returns_wrong_tuple_size_too_bigz>CompileTestCase.test_importer_returns_wrong_tuple_size_too_big  s    	+ 	+ 	+ )#	 	
 
 	M 	M LQM;KLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Mr   c                     d}t          j        |d          }t          j        t                    5  t          j        |d          }d d d            n# 1 swxY w Y   ||k    sJ d S )Nr   Tr   r   )rg   r   r   warnsFutureWarning)rE   sourcerF   rG   s       r   ;test_compile_string_deprecated_source_comments_line_numberszKCompileTestCase.test_compile_string_deprecated_source_comments_line_numbers  s     <vtDDD\-(( 	 	\ .  F	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 6!!!!!!s   AAAc                     t          j        d          }|t          k    sJ t          j        d          }|t          k    sJ t          j        d          }t          |k    sJ t          j        d          }|t
          k    sJ |                     t          t           j        d           |                     t          t           j        d           |                     t          t           j        g            d S )Nr#   r   ztest/c.scsstest/d.scssztest/e.scssztest/not-exist.sassr   )	rg   r   A_EXPECTED_CSSC_EXPECTED_CSSD_EXPECTED_CSSE_EXPECTED_CSSr~   IOErrorr   r   s     r   test_compile_filenamez%CompileTestCase.test_compile_filename  s    }555''''}555''''}555''''}555''''T\* 	 	
 	
 	
 	)T\DAAA)T\B?????r   c                     d}t          j        |d          \  }}t          |k    sJ |                     t          |           d S )Nr#   a.scss.css.mapr4   source_map_filename)rg   r   A_EXPECTED_CSS_WITH_MAPrH   A_EXPECTED_MAPrE   r4   rG   
source_maps       r   test_compile_source_mapz'CompileTestCase.test_compile_source_map  sW     !\ 0
 
 

 '&0000$$^Z@@@@@r   c                     d}t          j        |dd          \  }}t          |k    sJ t          t          d          }|                     ||           d S )Nr#   r  r   )r4   r  source_map_root)
sourceRoot)rg   r   r  dictr  rH   )rE   r4   rG   r	  rF   s        r   test_compile_source_map_rootz,CompileTestCase.test_compile_source_map_root  sl     !\ 0
 
 


 '&00003777$$Xz:::::r   c                     d}t          j        |dd          \  }}t          |k    sJ |                     t          |           d S )Nr#   r  T)r4   r  omit_source_map_url)rg   r   r   rH   r  r  s       r   'test_compile_source_map_omit_source_urlz7CompileTestCase.test_compile_source_map_omit_source_url#  sZ     !\ 0 $
 
 


 ''''$$^Z@@@@@r   c                     d}t          j        |dd          \  }}t          |k    sJ |                     t          |           d S )Nr#   r  T)r4   r  source_map_contents)rg   r   r  rH   A_EXPECTED_MAP_CONTENTSr  s       r   +test_compile_source_map_source_map_contentsz;CompileTestCase.test_compile_source_map_source_map_contents-  s[     !\ 0 $
 
 


 '&0000$$%<jIIIIIr   c                 t    d}t          j        |dd          \  }}|                     t          |           d S )Nr#   r  T)r4   r  source_map_embed)rg   r   r_   r  r  s       r   test_compile_source_map_embedz-CompileTestCase.test_compile_source_map_embed7  sI     !\ 0!
 
 


 	$$^V<<<<<r   c                    d}t          j        |d          \  }}t          j        t                    5  t          j        |dd          \  }}d d d            n# 1 swxY w Y   ||k    sJ |                     ||           d S )Nr#   r  r  map)r4   r   r  )rg   r   r   r   r   rH   )rE   r4   rF   expected_maprG   
actual_maps         r   6test_compile_source_map_deprecated_source_comments_mapzFCompileTestCase.test_compile_source_map_deprecated_source_comments_map@  s     !% 0"
 "
 "
, \-(( 	 	!%! %$4" " "FJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 6!!!!$$\:>>>>>s   AA #A c                     t          j        d          }|t          k    sJ t          j        dd          }|t          k    sJ d S )Nztest/g.scssr      )r4   	precision)rg   r   G_EXPECTED_CSSG_EXPECTED_CSS_WITH_PRECISION_8r   s     r   test_compile_with_precisionz+CompileTestCase.test_compile_with_precisionO  sQ    }555''''}BBB8888888r   c                 l    t          j        d          }t          j        dd|          }|dk    sJ d S )Nz
            @media (min-width: 980px) {
                a {
                    color: red;
                }
            }
        r   \s+r*   z&@media(min-width:980px){a{color:red;}}rg   r   rf   r7   rE   rG   
normalizeds      r   test_regression_issue_2z'CompileTestCase.test_regression_issue_2U  sJ    
 
 
 VFB//
EEEEEEEr   c                 l    t          j        d          }t          j        dd|          }|dk    sJ d S )Nzz
            $foo: 3;
            @media (max-width: $foo) {
                body { color: black; }
            }
        r   r&  r*   z'@media(max-width:3){body{color:black;}}r'  r(  s      r   test_regression_issue_11z(CompileTestCase.test_regression_issue_11b  sJ    
 
 
 VFB//
FFFFFFFr   N) r`   ra   rb   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,  r   r   r   r{   r{      s       3 3 3I I I
 
 

 
 

 
 
   $> $> $>L5 5 55 5 5F F F"' ' '"' ' '"4 4 4 
 
 
6' ' '2M M M"M M M$M M M$" " "@ @ @ A A A	; 	; 	;A A AJ J J= = =? ? ?9 9 9F F F
G 
G 
G 
G 
Gr   r{   c                   &    e Zd Zd Zd Zd Zd ZdS )BuilderTestCasec                    t          j                    | _        t          j                            | j        d          | _        t          j                            | j        d          | _        t          j	        d| j                   d S )Nrg   cssr   )
tempfilemkdtemp	temp_pathr   r   r   	sass_pathcss_pathshutilcopytreeri   s    r   setUpzBuilderTestCase.setUpq  s^    !)++dnf==T^U;;/////r   c                 8    t          j        | j                   d S r
   )r6  rmtreer3  ri   s    r   tearDownzBuilderTestCase.tearDownw  s    dn%%%%%r   c                    | j         }t          | j        |          }t          |          dk    sJ d|d         k    sJ t	          t
          j                            |d          d          5 }|                                }d d d            n# 1 swxY w Y   t          |k    sJ d|d         k    sJ t	          t
          j                            |d          d          5 }|                                }d d d            n# 1 swxY w Y   t          |k    sJ d|d	         k    sJ t	          t
          j                            |d          d          5 }|                                }d d d            n# 1 swxY w Y   t          |k    sJ d
|d         k    sJ t	          t
          j                            |d
          d          5 }|                                }d d d            n# 1 swxY w Y   t          |k    sJ d|d         k    sJ t	          t
          j                            |d          d          5 }|                                }d d d            n# 1 swxY w Y   t          |k    sJ |                     t
          j                            dd          |t
          j                            dd                              t	          t
          j                            |d          d          5 }|                                }d d d            n# 1 swxY w Y   t          |k    sJ |                     t
          j                            dd          |t
          j                            dd                              d|d         k    sJ t	          t
          j                            |d          d          5 }|                                }d d d            n# 1 swxY w Y   t           |k    sJ t	          t
          j                            |dd          d          5 }|                                }d d d            n# 1 swxY w Y   t"          |k    sJ d S )Nr   
a.scss.cssa.scssUTF-8encoding
b.scss.cssb.scssz
c.scss.cssc.scss
d.scss.cssd.scssz
e.scss.cssze.scsssubdirzrecur.scss.cssz
recur.scssz
g.scss.cssz
h.sass.csszh.sass)r5  r   r4  r;   rJ   r   r   r   rN   r   B_EXPECTED_CSSr   r   r   rw   r"  H_EXPECTED_CSSSUBDIR_RECUR_EXPECTED_CSSrE   r5  result_filesrO   r0  s        r   test_builder_build_directoryz,BuilderTestCase.test_builder_build_directoryz  s7   =&t~x@@<  A%%%%|H55555GLL<007
 
 
 	&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $$$$|H55555GLL<007
 
 
 	&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $$$$|H55555GLL<007
 
 
 	&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $$$$|H55555GLL<007
 
 
 	&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $$$$|H55555GLL<007
 
 
 	&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $$$$GLL#344h==>	
 	
 	
 GLL<007
 
 
 	&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $$$$GLL#344h==>	
 	
 	
 |H55555GLL<007
 
 
 	&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $$$$GLL8-=>>
 
 
 	 &&((C		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 )C//////s   /BBB%DD
D
E<<F F G22G69G6I((I,/I,L((L,/L,O66O:=O:>QQ#&Q#c                 j   | j         }t          | j        |d          }t          |          dk    sJ d|d         k    sJ t	          t
          j                            |d          d          5 }|                                }d d d            n# 1 swxY w Y   | 	                    d|           d S )	Nr   )r   r   r=  r>  r?  r@  z/body{background-color:green}body a{color:blue}
)
r5  r   r4  r;   rJ   r   r   r   rN   rw   rK  s        r   test_output_stylez!BuilderTestCase.test_output_style  s   =&NH%
 
 
 <  A%%%%|H55555GLL<007
 
 
 	&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	>	
 	
 	
 	
 	
s   1BBBN)r`   ra   rb   r8  r;  rM  rO  r   r   r   r.  r.  o  sQ        0 0 0& & &:0 :0 :0x
 
 
 
 
r   r.  c                       e Zd Zd Zd ZdS )ManifestTestCasec           
      L   t          j        t                    5 }t          j        ddt          dd          ddddd          }d d d            n# 1 swxY w Y   t          |          dk    sJ t          |          dk    sJ t          |d	         t                    sJ |d	         j        dk    sJ |d	         j        dk    sJ t          |d
         t                    sJ |d
         j        dk    sJ |d
         j        dk    sJ t          |d         t                    sJ |d         j        dk    sJ |d         j        dk    sJ t          |d         t                    sJ |d         j        dk    sJ |d         j        dk    sJ |d         j	        du sJ d S )N	sass/path)rS  css/pathrT  Tr4  r5  strip_extension)packagepackage.namepackage.name2package.name3r"      rW  rX  rY  rZ  )
r   r   r   r   normalize_manifestsr;   rA   r4  r5  rV  )rE   warninfo	manifestss      r   test_normalize_manifestsz)ManifestTestCase.test_normalize_manifests  s)   \-(( 
	H 4& 9!)+z!B!B!, *'+" "		6 	6 	 	I
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 8}}!!!!9~~"""")I.99999#-<<<<#,;;;;)N3X>>>>>(2kAAAA(1Z????)O4h?????)3{BBBB)2j@@@@)O4h?????)3{BBBB)2j@@@@)9TAAAAAAs   ,AAAc           	      ^   t                      5 }t          j                            |d          }t	          j        d|           t          j        t                    5  t          dd          }d d d            n# 1 swxY w Y   |
                    |d           t          t          j                            |dd                    5 }t          |                                k    sJ 	 d d d            n# 1 swxY w Y   |
                    |dd           t          t          j                            |dd	          d
          5 }|                                t          t                    k    sJ 	 d d d            n# 1 swxY w Y   |                     dd	dgg ddt          j                            |dd                     |
                    |dd           t          t          j                            |dd          d
          5 }|                                t          t"                    k    sJ 	 d d d            n# 1 swxY w Y   |                     dddgg ddt          j                            |dd                     d d d            d S # 1 swxY w Y   d S )Nr   r0  )r4  r5  r>  r=  rC  T)r	  rB  r?  r@  r"   z../test/b.scssz7AAAA,AACE,CADD,CACC,CAAC,CAAC;EACA,SAAS,EAAE,IAAI,GAChBr$   zb.scss.css.maprF  rE  z../test/d.scsszj;AAKA,AAAA,IAAI,CAAC;EAHH,gBAAgB,EAAE,KAAK,GAQxB;EALD,AAEE,IAFE,CAEF,CAAC,CAAC;IACA,IAAI,EAAE,kBAAkB,GACzBzd.scss.css.map)tempdirr   r   r   r6  r7  r   r   r   r   	build_onerJ   r   rN   r9   B_EXPECTED_CSS_WITH_MAPrS   D_EXPECTED_CSS_WITH_MAP)rE   r   src_pathmrO   s        r   test_build_onezManifestTestCase.test_build_one  s   YY .	!w||Av..HOFH---m,, ? ?v>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? KK8$$$bgll1e\::;; 2q%111112 2 2 2 2 2 2 2 2 2 2 2 2 2 2KK8K555Q|44w   Ovvxx#56M#N#NNNNNNO O O O O O O O O O O O O O O '' ( 01 	 	 Q'788   KK8K555Q|44w   Ovvxx#56M#N#NNNNNNO O O O O O O O O O O O O O O '' ( 01 
 
 Q'788  C.	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	s   AJ"A<0J"<B 	 J"B 	AJ" C8,J"8C<	<J"?C<	 AJ"-F9J"F			J"F		BJ"-IJ"I	J"I	?J""J&)J&N)r`   ra   rb   r_  rg  r   r   r   rQ  rQ    s5        B B B8/ / / / /r   rQ  c                 h   |                      d                                          }|                     d                              d           t          ddd          }|                    t          |           d           |                      d                                          dk    sJ d S )	Nr   r>  a{b: c;}r0  TrU  z	css/a.cssa {
  b: c; }
)r   
ensure_dirwriter   rb  rB   rN   tmpdirrZ   rf  s      r   'test_manifest_build_one_strip_extensionro    s    
++f


(
(
*
*CHHXZ(((6E4HHHAKKFX&&&;;{##((**.@@@@@@@r   c                 h   |                      d                                          }|                     d                              d           t          ddd          }|                    t          |                      |                      d                                          d	k    sJ d S )
Nr   zx.scssri  r0  TrU  )package_dirz	css/x.cssrj  )r   rk  rl  r   buildrB   rN   rm  s      r   #test_manifest_build_strip_extensionrs  "  s    
++f


(
(
*
*CHHXZ(((6E4HHHAGGFG$$$;;{##((**.@@@@@@@r   c                   6    e Zd Zed             Zd Zd Zd ZdS )WsgiTestCasec                 .     |ddg           | d         fS )Nz200 OK)zContent-Type
text/plain	PATH_INFOr   )r   start_responses     r   sample_wsgi_appzWsgiTestCase.sample_wsgi_app.  s&    x"@!ABBB{#$$r   c           	         t                      5 }t          j                            |d          }t	          j        d|           t          j        t                    5  t          | j
        t          ||dfi          }d d d            n# 1 swxY w Y   t          |t                    }|                    d          }|j        dk    sJ |                     d|j                   |j        dk    sJ |                    d          }|j        dk    sJ |                     t'          t(                                                    |j                   |j        d	k    sJ |                    d
          }|j        dk    sJ |                     d|j                   |j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )NrZ   r   /staticz/asdf   s   /asdfrw  z/static/a.scss.csstext/cssz/static/not-exists.sass.csss   /static/not-exists.sass.css)ra  r   r   r   r6  r7  r   r   r   r   rz  r`   r   r   getstatus_coderw   datamimetyper9   r  encode)rE   css_dirsrc_dirappclientrs         r   test_wsgi_sass_middlewarez&WsgiTestCase.test_wsgi_sass_middleware3  sB   YY 	.'gll7E22GOFG,,,m,,  $( 7GY"?+                C**F

7##A=C''''Xqv...:----

/00A=C''''"#:;;BBDD   :++++

899A=C'''';QVDDD:-----1	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s7   AF: B
>F:
B	F:B	DF::F>F>c           
      <   t                      5 }t          j                            |d          }t	          j        d|           t          | j        t          ||dddi          }t          |t                    }|                    d          }|j        dk    sJ t          }|                    dd	          }t          |          }|                     |                                |j                   |j        d
k    sJ 	 d d d            d S # 1 swxY w Y   d S )NrZ   r   r|  Tr4  r5  	wsgi_pathrV  z/static/a.cssr}  z	.scss.css.cssr~  )ra  r   r   r   r6  r7  r   rz  r`   r   r   r  r  r  r   r9   rw   r  r  r  )rE   r  r  r  r  r  rF   s          r   +test_wsgi_sass_middleware_without_extensionz8WsgiTestCase.test_wsgi_sass_middleware_without_extensionN  s[   YY 	,'gll7E22GOFG,,, $%,$+%.+/	 '	 	C C**F

?++A=C''''.H''V<<H)(33HX__..777:+++++)	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   C4DDDc           
      ~   t                      5 }t          | j        t          d|dddi          }t	          |t
                    }|                    d          }|j        dk    sJ d}|                     |	                                |j
                   |j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )	Nr   r|  Tr  z/static/h.cssr}  z9a b {
  color: blue; }

/*# sourceMappingURL=h.css.map */r~  )ra  r   rz  r`   r   r   r  r  rw   r  r  r  )rE   r  r  r  r  rF   s         r   0test_wsgi_sass_middleware_without_extension_sassz=WsgiTestCase.test_wsgi_sass_middleware_without_extension_sasse  s   YY 	,' $%+$+%.+/	 '	 	C C**F

?++A=C''''4  X__..777:+++++'	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   BB22B69B6N)r`   ra   rb   staticmethodrz  r  r  r  r   r   r   ru  ru  ,  sZ        % % \%. . .6, , ,., , , , ,r   ru  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )DistutilsTestCasec                 \    |                                  D ]}t          j        |           d S r
   )list_built_cssr   remove)rE   r4   s     r   r;  zDistutilsTestCase.tearDown~  s:    ++-- 	  	 HIh	  	 r   c                 |    t          j        j        t           j                            t                    ddddg|R  S )Ntestpkgstaticr0  )r   r   r   r   __file__)rE   r   s     r   r5  zDistutilsTestCase.css_path  sA    w|GOOH%%y(E
 
 
 
 	
r   c                 P    t          j         |                     d                    S )Nz
*.scss.css)globr5  ri   s    r   r  z DistutilsTestCase.list_built_css  s    y|44555r   c                 &   t           j                            t           j                            t                    d          }t          j        t          j        ddgt          |          z   t           j        
                    |                    S )Nr  zsetup.py
build_sass)cwd)r   r   r   r   r  
subprocesscallsys
executablelistr   )rE   r   testpkg_paths      r   r  zDistutilsTestCase.build_sass  sf    w||BGOOH$=$=yII^Z6dC--
 
 
 	
r   c           
         |                                  }|dk    sJ |                     dgt          t          t          j        j        |                                                                t          | 	                    d                    5 }|                     d|
                                           d d d            d S # 1 swxY w Y   d S )Nr   r=  z.p a {
  color: red; }

p b {
  color: blue; }
)r  rw   r  r  r   r   r1   r  rJ   r5  rN   rE   rvrO   s      r   test_build_sassz!DistutilsTestCase.test_build_sass  s   __QwwwwNRW%t':':'<'<==>>	
 	
 	
 $----.. 	!E  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   )CCCc                    |                      dd          }|dk    sJ t          |                     d                    5 }|                     d|                                           d d d            d S # 1 swxY w Y   d S )Nz--output-styler   r   r=  zp a{color:red}p b{color:blue}
)r  rJ   r5  rw   rN   r  s      r   rO  z#DistutilsTestCase.test_output_style  s    __-|<<Qwwww$----.. 	!1  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   )A77A;>A;N)	r`   ra   rb   r;  r5  r  r  r  rO  r   r   r   r  r  |  sn             
 
 
6 6 6
 
 
      r   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
SasscTestCasec                 f    t          j                    | _        t          j                    | _        d S r
   )ioStringIOouterrri   s    r   r8  zSasscTestCase.setUp  s     ;==;==r   c                 J   t          j        dg| j        | j                  }|dk    sJ | j                                        }|                                                    d          sJ dt          |          z               d| j                                        k    sJ d S )Npysassc   zerror: too few argumentsactual error message is: r*   r  mainr  r  getvaluestripendswithreprrE   	exit_coder  s      r   test_no_argszSasscTestCase.test_no_args  s    L)dhAA	A~~~~h!!yy{{##$>?? 	4 	4'$s))3	4 	4 	4TX&&((((((((r   c                 L   t          j        g d| j        | j                  }|dk    sJ | j                                        }|                                                    d          sJ dt          |          z               | j                                        dk    sJ d S )N)r  r>  rC  rD  r  zerror: too many argumentsr  r*   r  r  s      r   test_three_argszSasscTestCase.test_three_args  s    L555Hdh
 
	 A~~~~h!!yy{{##$?@@ 	4 	4'$s))3	4 	4 	4x  ""b((((((r   c                 (   t          j        ddg| j        | j                  }|dk    sJ | j                                        dk    sJ t
                                          | j                                                                        k    sJ d S )Nr  r#   r   r*   )r  r  r  r  r  r   r  )rE   r  s     r   test_pysassc_stdoutz!SasscTestCase.test_pysassc_stdout  s    L&Hdh
 
	 A~~~~x  ""b((((##%%):):)<)<)B)B)D)DDDDDDDr   c                 f   t          j        d          \  }}	 t          j        |           t	          j        dd|g| j        | j                  }|dk    sJ | j                                        dk    sJ | j                                        dk    sJ t          |dd          5 }t                                          |                                                                k    sJ 	 d d d            n# 1 swxY w Y   t          j        |           d S # t          j        |           w xY w)Nr  r  r#   r   r*   r?  )rA  r+   )r1  mkstempr   closer  r  r  r  r  rJ   r   r  rN   r  rE   fdtmpr  rO   s        r   test_pysassc_outputz!SasscTestCase.test_pysassc_output  sg   "6**C	HRLLLM3/$( I >>>>8$$&&",,,,8$$&&",,,,cGR888 BA%++--1A1AAAAAAB B B B B B B B B B B B B B B IcNNNNNBIcNNNNs1   BD (AC9-D 9C==D  C=D D0c                 d   t          j        d          \  }}	 t          j        |           t	          j        dd|g| j        | j                  }|dk    sJ | j                                        dk    sJ | j                                        dk    sJ t          |d          5 }t                                          |                                                                k    sJ 	 d d d            n# 1 swxY w Y   t          j        |           d S # t          j        |           w xY w)Nr  r  r   r   r*   r?  r@  )r1  r  r   r  r  r  r  r  r  rJ   r   r  rN   r  r  s        r   test_pysassc_output_unicodez)SasscTestCase.test_pysassc_output_unicode  se   "6**C	HRLLLM3/$( I >>>>8$$&&",,,,8$$&&",,,,cG,,, B%++--1A1AAAAAAB B B B B B B B B B B B B B B IcNNNNNBIcNNNNs1   BD 'AC8,D 8C<<D ?C< D D/c                 L   t          j        g d| j        | j                  }|dk    sJ | j                                        }|                                                    d          sJ dt          |          z               | j                                        dk    sJ d S )N)r  -mr>  r  zOerror: -m/-g/--sourcemap requires the second argument, the output css filename.r  r*   r  r  s      r   ,test_pysassc_source_map_without_css_filenamez:SasscTestCase.test_pysassc_source_map_without_css_filename  s    L'''Hdh
 
	 A~~~~h!!yy{{##
 
 	4 	4
 ($s))3	4 	4 	4 x  ""b((((((r   c                     t          j        t                    5  t          j        dt
          j        ddg           d d d            d S # 1 swxY w Y   d S )Nr  z--import-extensionsr  )r   r   r   r  r  r   devnullri   s    r   &test_pysassc_warning_import_extensionsz4SasscTestCase.test_pysassc_warning_import_extensions  s    \-(( 	 	LBJ(=vF  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   #A

AAN)r`   ra   rb   r8  r  r  r  r  r  r  r  r   r   r   r  r    s        ! ! !) ) )	) 	) 	)E E E      ) ) )    r   r  c               #      K   t          j                    } 	 | V  t          j        |            d S # t          j        |            w xY wr
   )r1  r2  r6  r:  )rn  s    r   ra  ra    sN      Fffs	   1 Ac                     t          | d          5 }|                    |           d d d            d S # 1 swxY w Y   d S )Nw)rJ   rl  )r4   contentsrO   s      r   
write_filer    s    	h		 	                 s   488c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )CompileDirectoriesTestc                     t          j        t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )N)i_dont_exist_lolr  r   )r   r   OSErrorrg   r   ri   s    r   test_directory_does_not_existz4CompileDirectoriesTest.test_directory_does_not_exist  s    ]7## 	> 	>L!<====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   =AAc                 :   t                      5 }t          j                            |d          }t          j                            |d          }t          j        t          j                            |d                     t          t          j                            |d          d           t          t          j                            |d          d           t          t          j                            |d          d	           t          j        ||f
           t          j                            |          sJ t          j                            t          j                            |d                    sJ t          j                            t          j                            |d                    sJ t          j                            t          j                            |d                    sJ t          j                            t          j                            |d                    rJ t          t          j                            |d                    5 }|
                                }d d d            n# 1 swxY w Y   t          t          j                            |d                    5 }|
                                }d d d            n# 1 swxY w Y   |dk    sJ |dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Ninputoutputfoof1.scssza { b { width: 100%; } }zfoo/f2.scsszfoo { width: 100%; }zbaz.txtz	Hello derr  zf1.cssz
foo/f2.cssza b {
  width: 100%; }
zfoo {
  width: 100%; }
)ra  r   r   r   makedirsr  rg   r   existsrJ   rN   )rE   rn  	input_dir
output_dirrO   
contentsf1
contentsf2s          r   test_successfulz&CompileDirectoriesTest.test_successful  s&   YY 	=&VW55Ifh77JKY66777Y	22*   Y66&  
 rw||Iy99;GGGL)Z!899997>>*-----7>>"',,z5"A"ABBBBB7>>"',,z8"D"DEEEEE7>>"',,z<"H"HIIIIIw~~bgll:y&I&IJJJJJbgll:x8899 &QVVXX
& & & & & & & & & & & & & & &bgll:|<<== &VVXX
& & & & & & & & & & & & & & &!<<<<<!<<<<<<7	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=sZ   IL-JLJ	LJ	0LK'L'K+	+L.K+	/LLLc                 d   t                      5 }t          j                            |d          }t          j                            |d          }t          j        |           t          t          j                            |d          dd          5 }|                    d           d d d            n# 1 swxY w Y   t          j        ||f           t          j        	                    t          j                            |d	                    sJ 	 d d d            d S # 1 swxY w Y   d S )
Nr  r  z	test.scssr  r?  r@  u   a { content: "☃"; }r  ztest.css)
ra  r   r   r   r  rJ   rl  rg   r   r  )rE   rn  r  r  rO   s        r    test_compile_directories_unicodez7CompileDirectoriesTest.test_compile_directories_unicode4  s   YY 	H&VW55Ifh77JK	"""Y44cG   1/0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 L)Z!899997>>"',,z:"F"FGGGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hs7   BD%B6*D%6B:	:D%=B:	>AD%%D),D)c                 b   t                      5 }t          j                            |d          }t          j                            |d          }t          j        |           t          t          j                            |d          d           t          t          j                            |d          d           t          j        ||f           t          j                            t          j                            |d                    rJ 	 d d d            d S # 1 swxY w Y   d S )	Nr  r  r  z@import "f2";z_f2.scssza{color:red}r  z_f2.css)	ra  r   r   r   mkdirr  rg   r   r  )rE   rn  r  r  s       r   test_ignores_underscored_filesz5CompileDirectoriesTest.test_ignores_underscored_filesC  s?   YY 	K&VW55Ifh77JHYrw||Iy99?KKKrw||Iz::NKKKL)Z!89999w~~bgll:y&I&IJJJJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   DD$$D(+D(c           	      :   t                      5 }t          j                            |d          }t          j        |           t          t          j                            |d          d           t          j        t          j	                  5 }t          j
        |t          j                            |d          f           d d d            n# 1 swxY w Y   |j        j        \  }|                    d          sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  zbad.scssza {r  r  zError: Invalid CSS after )ra  r   r   r   r  r  r   r   rg   r   r   r   r   
startswith)rE   rn  r  r   rR   s        r   
test_errorz!CompileDirectoriesTest.test_errorN  sr   YY 
	?&VW55IK	"""rw||Iz::EBBBt011 W&VX(F(FG                  =%DC>>"=>>>>>>
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	? 
	?s6   BD6CDC	DC	(DDDN)r`   ra   rb   r  r  r  r  r  r   r   r   r  r    se        > > >= = =<H H H	K 	K 	K? ? ? ? ?r   r  c                        e Zd Zd Zd Zd ZdS )SassFunctionTestc                     d }t           j                            d|          }d|j        k    sJ d|j        k    sJ |j        |u sJ d S )Nc                     d S r
   r   )ro   r   s     r   lambda_z2SassFunctionTest.test_from_lambda.<locals>.lambda__  s    DDr   	func_name)z$abc$d)rg   SassFunctionfrom_lambdaname	arguments	callable_)rE   r  sfs      r   test_from_lambdaz!SassFunctionTest.test_from_lambda^  sb    (((**;@@bg%%%%----|w&&&&&&r   c                     t           j                            t                    }d|j        k    sJ d|j        k    sJ |j        t          u sJ d S )Nidentityz$x)rg   r  from_named_functionr  r  r  r  rE   r  s     r   test_from_named_functionz)SassFunctionTest.test_from_named_functione  sW    228<<RW$$$$",&&&&|x''''''r   c                     t          j        ddd           }d|j        k    sJ |j        t          |          k    sJ d S )Nz	func-name)z$az$bcr  c                     d S r
   r   )r   bcr   s      r   <lambda>z0SassFunctionTest.test_sigature.<locals>.<lambda>o  s    T r   zfunc-name($a, $bc, $d))rg   r  	signaturerB   r  s     r   test_sigaturezSassFunctionTest.test_sigaturek  sT    !!
 

 (2<7777|s2ww&&&&&&r   N)r`   ra   rb   r  r  r  r   r   r   r  r  \  sA        ' ' '( ( (' ' ' ' 'r   r  funcwompc                     d S r
   r   )bars    r   r	  r	  w  s     r   c                      d S r
   r   )r   s    r   r	  r	  w  s    D r   c                      d S r
   r   )kwargss    r   r	  r	  w  s    4 r   c                     t          j        t                    5  t          j                            d|            d d d            d S # 1 swxY w Y   d S )Nfuncname)r   r   r   rg   r  r  )r  s    r   test_sass_func_type_errorsr  u  s    
 
y	!	! 8 8%%j$7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   !AAAc                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )SassTypesTestc                    t          j        dd          }t          |j                  t          u sJ t          |j                              t          |j                  t          u sJ t          |j                              d S )Ng     ^@pxrg   
SassNumberr   r   floatunitrB   rE   nums     r   test_number_no_conversionz'SassTypesTest.test_number_no_conversion  sk    odD))CI%'''ci'''CH~~$$$d38nn$$$$$r   c                    t          j        dd          }t          |j                  t          u sJ t          |j                              t          |j                  t          u sJ t          |j                              d S )N{   s   pxr  r  s     r   test_number_conversionz$SassTypesTest.test_number_conversion  sk    oc5))CI%'''ci'''CH~~$$$d38nn$$$$$r   c                    t          j        dddd          }t          |j                  t          u sJ t          |j                              t          |j                  t          u sJ t          |j                              t          |j                  t          u sJ t          |j                              t          |j                  t          u sJ t          |j                              d S )Ng      ?g       @g      @      ?rg   	SassColorr   r  r  gr   r   rE   colors     r   test_color_no_conversionz&SassTypesTest.test_color_no_conversion  s    r2r2..EG}}%%%tEG}}%%%EG}}%%%tEG}}%%%EG}}%%%tEG}}%%%EG}}%%%tEG}}%%%%%r   c                    t          j        dddd          }t          |j                  t          u sJ t          |j                              t          |j                  t          u sJ t          |j                              t          |j                  t          u sJ t          |j                              t          |j                  t          u sJ t          |j                              d S )Nr0   r  r"   r&  r)  s     r   test_color_conversionz#SassTypesTest.test_color_conversion  s    q!Q**EG}}%%%tEG}}%%%EG}}%%%tEG}}%%%EG}}%%%tEG}}%%%EG}}%%%tEG}}%%%%%r   c                     t          j        dt           j                  }t          |j                  t
          u sJ t          |j                              |j        t           j        u sJ |j                    d S N)r  r  )rg   SassListSASS_SEPARATOR_COMMAr   itemstuple	separatorrE   lsts     r   test_sass_list_no_conversionz*SassTypesTest.test_sass_list_no_conversion  se    mND,EFFCI%'''ci'''} 99993=99999r   c                     t          j        ddgt           j                  }t          |j                  t
          u sJ t          |j                              |j        t           j        u sJ |j                    d S Nr  r  )rg   r0  SASS_SEPARATOR_SPACEr   r2  r3  r4  r5  s     r   test_sass_list_conversionz'SassTypesTest.test_sass_list_conversion  si    mUEND,EFFCI%'''ci'''} 99993=99999r   c                     t          j        d          }t          |j                  t          u sJ t          |j                              d S Nz	error msgrg   SassWarningr   rR   rB   rE   warns     r   test_sass_warning_no_conversionz-SassTypesTest.test_sass_warning_no_conversion  sA    ,,DH~~$$$d48nn$$$$$r   c                     t          j        d          }t          |j                  t          u sJ t          |j                              d S Ns	   error msgr>  r@  s     r   -test_sass_warning_no_conversion_bytes_messagez;SassTypesTest.test_sass_warning_no_conversion_bytes_message  sA    --DH~~$$$d48nn$$$$$r   c                     t          j        d          }t          |j                  t          u sJ t          |j                              d S r=  rg   	SassErrorr   rR   rB   rE   r  s     r   test_sass_error_no_conversionz+SassTypesTest.test_sass_error_no_conversion  s@    n[))CG}}###T#']]#####r   c                     t          j        d          }t          |j                  t          u sJ t          |j                              d S rD  rG  rI  s     r   test_sass_error_conversionz(SassTypesTest.test_sass_error_conversion  s@    n\**CG}}###T#']]#####r   N)r`   ra   rb   r   r#  r+  r-  r7  r;  rB  rE  rJ  rL  r   r   r   r  r  ~  s        5 5 5
5 5 5
5 5 55 5 5I I I
I I I
5 5 55 5 53 3 33 3 3 3 3r   r  c                       t          d          )Nr  )AssertionErrorr   r   r   r   r     s    


r   c                  *    t          j        d          S )NzThis is a warning)rg   r?  r   r   r   returns_warningrP    s    /000r   c                  *    t          j        d          S )NzThis is an error)rg   rH  r   r   r   returns_errorrR    s    >,---r   c                      dS )z Tuples are a not-supported type.)r0   r  r"   r   r   r   r   returns_unknownrT    s    7r   c                      dS )NTr   r   r   r   returns_truerV        4r   c                      dS )NFr   r   r   r   returns_falserY        5r   c                      d S r
   r   r   r   r   returns_noner\    rW  r   c                      dS Nu   ☃r   r   r   r   returns_unicoder_    rZ  r   c                  *    d                                 S r^  )r  r   r   r   returns_bytesra    s    <<>>r   c                  ,    t          j        dd          S )N   r  )rg   r  r   r   r   returns_numberrd    s    ?1d###r   c                  0    t          j        dddd          S )Nr0   r  r"   r%  )rg   r'  r   r   r   returns_colorrf    s    >!Q2&&&r   c                  @    t          j        dt           j                  S )N)Arialz
sans-serif)rg   r0  r1  r   r   r   returns_comma_listri    s    =0$2KLLLr   c                  @    t          j        dt           j                  S )N)mediumnonerg   r0  r:  r   r   r   returns_space_listrn    s    =+T-FGGGr   c                  D    t          j        dt           j        d          S )N)helloohaiT)	bracketedrm  r   r   r   returns_bracketed_listrs    s%    =44   r   c                  
    ddiS r9  r   r   r   r   returns_py_dictru    s    5>r   c                  ,    t          j        dg          S r/  )rg   SassMapr   r   r   returns_maprx    s    <()))r   c                     ddl }| S )z\This has the side-effect of bubbling any exceptions we failed to process
    in C land

    r   N)r  )xr  s     r   r  r    s    
 JJJHr   r   r   rP  rR  rT  rV  rY  r\  r_  ra  rd  rf  ri  rn  rs  ru  rx  r  r  c                     t          j        | t          d          }t          j        | t          d          }||k    sJ t          j        | t          d          }||k    sJ |S )Nr   )r   custom_functionsr   )rg   r   r|  custom_function_mapcustom_function_set)r8   result
map_result
set_results       r   compile_with_funcr  ;  s    \)!  F
 ,!  J
 Z,!  J
 ####Mr   c              #      K   t          j        t          j                  5 }d V  d d d            n# 1 swxY w Y   |j        j        \  }|| k    sJ || f            d S r
   )r   r   rg   r   r   r   )rF   r   rR   s      r   r   r   P  s      	t(	)	) W              =DC(???S(O?????s   266c                       e Zd ZddZd ZdS )r   Nc                 h    t          j        |t           j        t           j        z            | _        d S r
   )rf   r   	MULTILINEDOTALLreg)rE   r  flagss      r   __init__zRegexMatcher.__init__Y  s"    :c2<")#;<<r   c                 P    t          | j                            |                    S r
   )boolr  r3   )rE   r   s     r   __eq__zRegexMatcher.__eq__\  s    DHNN5))***r   r
   )r`   ra   rb   r  r  r   r   r   r   r   X  s7        = = = =+ + + + +r   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )CustomFunctionsTestc                     t          t          d                    5  t          d           d d d            d S # 1 swxY w Y   d S )Nz^Error: error in C function raises: \n       Traceback \(most recent call last\):\n.+AssertionError: foo\n        on line 1:14 of stdin, in function `raises`\n        from line 1:14 of stdin\n>> a { content: raises\(\); }\n   -------------\^\n$za { content: raises(); })r   r   r  ri   s    r   test_raiseszCustomFunctionsTest.test_raisesb  s    ()	 	
 
 	: 	: 8999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   :>>c                 t    t          d          5  t          d           d d d            d S # 1 swxY w Y   d S )NzError: warning in C function returns_warning: This is a warning
        on line 1:14 of stdin, in function `returns_warning`
        from line 1:14 of stdin
>> a { content: returns_warning(); }
   -------------^
z!a { content: returns_warning(); }r   r  ri   s    r   test_warningz CustomFunctionsTest.test_warningq  s    (&
 
 		C 		C ABBB		C 		C 		C 		C 		C 		C 		C 		C 		C 		C 		C 		C 		C 		C 		C 		C 		C 		C   -11c                 t    t          d          5  t          d           d d d            d S # 1 swxY w Y   d S )NzError: error in C function returns_error: This is an error
        on line 1:14 of stdin, in function `returns_error`
        from line 1:14 of stdin
>> a { content: returns_error(); }
   -------------^
za { content: returns_error(); }r  ri   s    r   r  zCustomFunctionsTest.test_error}  s    (&
 
 	A 	A ?@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	Ar  c                 t    t          d          5  t          d           d d d            d S # 1 swxY w Y   d S )Na  Error: error in C function returns_unknown: Unexpected type: `tuple`.
       Expected one of:
       - None
       - bool
       - str
       - SassNumber
       - SassColor
       - SassList
       - dict
       - SassMap
       - SassWarning
       - SassError
        on line 1:14 of stdin, in function `returns_unknown`
        from line 1:14 of stdin
>> a { content: returns_unknown(); }
   -------------^
z!a { content: returns_unknown(); }r  ri   s    r   test_returns_unknown_objectz/CustomFunctionsTest.test_returns_unknown_object  s    (&
 
 	C 	C( ABBB)	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cr  c                 L    |                      t          d          d           d S )Nz)a {color: #fff; content: returns_none();}a{color:#fff}
rw   r  ri   s    r   	test_nonezCustomFunctionsTest.test_none  s3    IJJ	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nza { content: returns_true(); }a{content:true}
r  ri   s    r   	test_truezCustomFunctionsTest.test_true  s3    >??	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nza { content: returns_false(); }a{content:false}
r  ri   s    r   
test_falsezCustomFunctionsTest.test_false  s3    ?@@ 	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz!a { content: returns_unicode(); }   ﻿a{content:☃}
r  ri   s    r   test_unicodez CustomFunctionsTest.test_unicode  s3    ABB$	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nza { content: returns_bytes(); }r  r  ri   s    r   
test_byteszCustomFunctionsTest.test_bytes  s3    ?@@$	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nza { width: returns_number(); }a{width:5px}
r  ri   s    r   test_numberzCustomFunctionsTest.test_number  s3    >??	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nza { color: returns_color(); }a{color:rgba(1,2,3,0.5)}
r  ri   s    r   
test_colorzCustomFunctionsTest.test_color  s3    =>>(	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz(a { font-family: returns_comma_list(); } a{font-family:Arial,sans-serif}
r  ri   s    r   test_comma_listz#CustomFunctionsTest.test_comma_list  s3    HII/	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz)a { border-right: returns_space_list(); }a{border-right:medium none}
r  ri   s    r   test_space_listz#CustomFunctionsTest.test_space_list  s3    IJJ+	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz(a { content: returns_bracketed_list(); }a{content:[hello ohai]}
r  ri   s    r   test_bracketed_listz'CustomFunctionsTest.test_bracketed_list  s3    HII'	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz/a { content: map-get(returns_py_dict(), foo); }a{content:bar}
r  ri   s    r   test_py_dictz CustomFunctionsTest.test_py_dict  s9    A  		
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz+a { content: map-get(returns_map(), foo); }r  r  ri   s    r   test_mapzCustomFunctionsTest.test_map  s9    =  		
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz3a {color: #fff; content: identity(returns_none());}r  r  ri   s    r   test_identity_nonez&CustomFunctionsTest.test_identity_none  s9    E  		
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz(a { content: identity(returns_true()); }r  r  ri   s    r   test_identity_truez&CustomFunctionsTest.test_identity_true  s3    HII	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz)a { content: identity(returns_false()); }r  r  ri   s    r   test_identity_falsez'CustomFunctionsTest.test_identity_false  s3    IJJ 	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz+a { content: identity(returns_unicode()); }r  r  ri   s    r   test_identity_stringsz)CustomFunctionsTest.test_identity_strings  s3    KLL$	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz(a { width: identity(returns_number()); }r  r  ri   s    r   test_identity_numberz(CustomFunctionsTest.test_identity_number  s3    HII	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz'a { color: identity(returns_color()); }r  r  ri   s    r   test_identity_colorz'CustomFunctionsTest.test_identity_color  s3    GHH(	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz2a { font-family: identity(returns_comma_list()); }r  r  ri   s    r   test_identity_comma_listz,CustomFunctionsTest.test_identity_comma_list  s9    D  0		
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz3a { border-right: identity(returns_space_list()); }r  r  ri   s    r   test_identity_space_listz,CustomFunctionsTest.test_identity_space_list  s9    E  ,		
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz2a { content: identity(returns_bracketed_list()); }r  r  ri   s    r   test_identity_bracketed_listz0CustomFunctionsTest.test_identity_bracketed_list!  s9    D  (		
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz9a { content: map-get(identity(returns_py_dict()), foo); }r  r  ri   s    r   test_identity_py_dictz)CustomFunctionsTest.test_identity_py_dict)  s9    K  		
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz5a { content: map-get(identity(returns_map()), foo); }r  r  ri   s    r   test_identity_mapz%CustomFunctionsTest.test_identity_map1  s9    G  		
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )NzEa{content: map-get(nth(identity(((foo: bar), (baz: womp))), 1), foo)}r  r  ri   s    r   test_list_with_map_itemz+CustomFunctionsTest.test_list_with_map_item9  s;     
 	
 	
 	
 	
 	
r   c                 L    |                      t          d          d           d S )Nz<a{content: map-get(identity(((foo: bar): baz)), (foo: bar))}za{content:baz}
r  ri   s    r   test_map_with_map_keyz)CustomFunctionsTest.test_map_with_map_keyC  s9    N  		
 	
 	
 	
 	
r   N) r`   ra   rb   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  r   r   r   r  r  `  s       : : :
C 
C 
C	A 	A 	AC C C.
 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 
 
 
r   r  c                      	 t          j        d           t          d          # t           j        $ r t	          j                    } Y nw xY w|                     d          sJ d S )Nu   a{☃r   zexpected to raise CompileErrorut   CompileError: Error: Invalid CSS after "a{☃": expected "{", was ""
        on line 1:4 of stdin
>> a{☃
   ---^

)rg   r   rN  r   	traceback
format_excr  )tbs    r   test_stack_trace_formattingr  L  s    $G$$$$=>>> $ $ $!##$ ;;	      s   $& "A
Ac                  B    t          j        dd          } | dk    sJ d S )Nza{color: red}Tr   z(/* line 1, stdin */
a {
  color: red; }
r   )r  s    r   test_source_commentsr  [  s.    
,ot
D
D
DC???????r   c                    |                      d                                                               d          }|                      d          }|                      d          }|                    d           t          j        dd|j        |j        g          }|dk    sJ |                                }|d	k    sJ t          j        |                                          }|d
gdg dddk    sJ d S )NrZ   r>  r=  r  z.c { font-size: 5px + 5px; }r  r  r   zA.c {
  font-size: 10px; }

/*# sourceMappingURL=a.scss.css.map */z
src/a.scssr"   z,AAAA,AAAA,EAAE,CAAC;EAAE,SAAS,EAAE,IAAS,GAAI)r'   r%   r(   r&   r)   )	r   rk  rl  r  r  strpathrN   rC   rD   )rn  src_fileout_fileout_map_filer  r  source_map_jsons          r   test_pysassc_sourcemapr  `  s   {{5!!,,..33H==H{{<((H;;/00LNN12224)8+;  I >>>>}}H	1    j!2!2!4!455O >B       r   c                    |                      d                                          }|                     d                                           |                     d          }|                    d           |                                 5  t          j        |j                  }|dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nscssz_variables.scss	main.scssz@import 'scss/variables';r   r*   )r   rk  ensurerl  as_cwdrg   r   r  )rn  scss_dir	main_scssr  s       r   test_imports_from_cwdr  }  s    {{6""--//HMM#$$++---k**IOO/000	  lI$5666byyyyy                 s   #B>>CCc                     |                      d                              d           |                      d          }|                    d           t          j        |j                  }|dk    sJ d S )N	other.cssbody {color: green}r  @import 'other';r   body {
  color: green; }
)r   rl  rg   r   r  )rn  r  r  s      r   test_import_cssr    st    
KK""#8999K((IOO&'''
,	 1
2
2
2C///////r   c                     |                      d                              d           |                                 5  t          j        d          }d d d            n# 1 swxY w Y   |dk    sJ d S )Nr  r  r  r   r  )r   rl  r  rg   r   )rn  r  s     r   test_import_css_stringr    s    
KK""#8999	 6 6l"45556 6 6 6 6 6 6 6 6 6 6 6 6 6 6///////s   AA#&A#c                      t          j        t                    5  t          j        ddg           d d d            d S # 1 swxY w Y   d S )Nza{b: c}r  )r   custom_import_extensions)r   r   r   rg   r   r   r   r   %test_custom_import_extensions_warningr    s    	m	$	$ J JIIIIIJ J J J J J J J J J J J J J J J J Js   ?AA)r  )nrW   collections.abcrn   
contextlibr   r  r  rC   os.pathr   rf   r6  r  r  r1  r  unittestr   werkzeug.testr   werkzeug.wrappersr   r  rg   sassutils.builderr   r   sassutils.wsgir   r   r   r   fixturer!   r   r  r  rJ   rO   r  rN   r  rH  rc  r   r   rd  r   r"  r#  rI  rJ  r   r6   rV   r9   r=   TestCaser?   rd   r{   r.  rQ  ro  rs  ru  r  r  contextmanagerra  r  r  r  markparametrizer  r  r   rP  rR  rT  rV  rY  r\  r_  ra  rd  rf  ri  rn  rs  ru  rx  r  	frozensetr  r|  r}  r~  r  r   r   r  r  r  r  r  r  r  r  r   r   r   <module>r     sA
                 				   				      



                    & & & & & &   - - - - - - & & & & & & ) ) ) ) ) ) 6S==RY=/ / / /   i...6 6 /.6-  	-	 	 
T-$$$ N"d>16688*MMMN N N N N N N N N N N N N N N
1 1 
# 
  2:DEE RZ <== ' ' '   
7 7 7 7 78$ 7 7 7<' ' ' ' '< ' ' ',YG YG YG YG YGl YG YG YGxV
 V
 V
 V
 V
l V
 V
 V
rM M M M M| M M M`A A AA A AM, M, M, M, M,< M, M, M,`+ + + + + + + +\U U U U UL U U Up     
I? I? I? I? I?X. I? I? I?X' ' ' ' 'x( ' ' '2 
002G2GH 8 8	 8
13 13 13 13 13H% 13 13 13h     1 1 1. . .  
          $ $ $' ' 'M M MH H H    * * *   9DhF++D'_==Dor=99D'_==Dnb,77Dor=99Dnb,77D'_==Dor=99D&N;;Dor=99D*B0BCCD*B0BCCD.4JKKD'_==DmR55Dj'844#   (f ] 	
 L ] L  ] n ] , , 4   ;!" # (  i
#!   *  * , , ,+ + + + + + + +i
 i
 i
 i
 i
(+ i
 i
 i
X  @ @ @
  :  0 0 00 0 0J J J J Js   5!C""C&)C&