3
d%                 @   s   d Z ddlZddlZddlmZ e Zdd ZdddZddd	Z	dd
dZ
dddZdddZdddZdd ZdddZdS )z?
helper routines for testing round trip of commented YAML data
    N)Pathc             C   s`   y0| j d}x t|D ]}| | j stqW W n tk
rD   Y nX | |d d  } tj| S )N
   )indexrangeisspace
ValueErrortextwrapdedent)dataZposition_of_first_newlineidx r   U/var/www/html/virt/lib64/python3.6/site-packages/srsly/tests/ruamel_yaml/roundtrip.pyr
      s    
r
   c             C   s(   dd l }t| }|jj||jj||dS )Nr   )Loaderpreserve_quotesversion)srsly.ruamel_yamlr
   ruamel_yamlloadRoundTripLoader)inpr   r   srslydinpr   r   r   round_trip_load   s    r   c             C   s(   dd l }t| }|jj||jj||dS )Nr   )r   r   r   )r   r
   r   load_allr   )r   r   r   r   r   r   r   r   round_trip_load_all$   s    r   c	       
      C   s&   dd l }	|	jj| ||||||||d	S )Nr   )streamindentblock_seq_indenttop_level_colon_alignprefix_colonexplicit_startexplicit_endr   )r   r   round_trip_dump)
r   r   r   r   r   r    r!   r"   r   r   r   r   r   r#   0   s    r#   stdinc       	      C   st   dd l }| jd}|jd}|j|||d}tjd
k }x8|D ]0}|r`|d d dkr`|j d	 }tjj| q<W d S )Nr   Tzround trip YAML         --- +++ r   )r%   r&   )r(   r)   )difflib
splitlinesZunified_diffsysversion_inforstripstdoutwrite)	r   outp	file_namer*   ZinlZoutldiffZstrip_trailing_spaceliner   r   r   r3   J   s    



r3   c          
   C   s  |dkr| }t |}|dk	r$||7 }t| |d}|r>td| |dk	rt|trx8|j D ],\}}|| |krZtdj|| | tqZW t||||||	|
|d}||krt	||d td|dd	 ||kst
t||||||	|
|d}td
|dd	 ||kst
|S )zc
    inp:    input string to parse
    outp:   expected output (equals input if not specified)
    N)r   r   z{0!r} <> {1!r})r   r   r   r    r!   r"   r   zinput stringz
roundtrip data:
 )sepzroundtrip second round data:
)r
   r   print
isinstancedictitemsformatr   r#   r3   AssertionError)r   r1   extraintermediater   r   r   r    r   r!   r"   r   	dump_datadoutpr   kvresr   r   r   
round_tripX   sN    

rD   c             C   s   t | } |dkr| }|
dk	r |
}
t |}|dk	r8||7 }t }||_d|_|j| }|rbtd| |dk	rt|trx8|j D ],\}}|| |kr~tdj	|| | t
q~W ||_||_||_||_|	|_|j||d}|S )zc
    inp:    input string to parse
    outp:   expected output (equals input if not specified)
    NFr   z{0!r} <> {1!r})compare)r
   YAMLr   Zscalar_after_indicatorr   r7   r8   r9   r:   r;   r   r   r   r    r!   r"   dump)r   r1   r=   r>   r   r   r    r   r!   r"   r   r?   r@   Zyamlr   rA   rB   rC   r   r   r   na_round_trip   s6    


rH   c                 s*   dd l  G  fddd jj}|f | S )Nr   c                   sL   e Zd ZdZ fddZ fddZ fddZ fdd	Z fd
dZdS )zYAML.<locals>.MyYAMLz%auto dedent string parameters on loadc                s@   t |tr0|r&|d dkr&|dd  }tj|} jjj| |S )Nr   r   r   )r8   strr	   r
   r   rF   r   )selfr   )r   r   r   r      s
    

zYAML.<locals>.MyYAML.loadc             3   sT   t |tr0|r&|d dkr&|dd  }tj|}x jjj| |D ]
}|V  qBW d S )Nr   r   r   )r8   rI   r	   r
   r   rF   r   )rJ   r   d)r   r   r   r      s    

zYAML.<locals>.MyYAML.load_allc       
         s   ddl m}m} d|kd|kA s$td|kr> jjj|f|S |j }tj	|j
d}|j
dd}|r~|d dkr~|dd  }|  |d< } jjj| |f| |j }	t|	 |rt|	j }	t|j }|	|kstd S )	Nr   )StringIOBytesIOr   rE   unordered_linesFr   r   )srsly.ruamel_yaml.compatrL   rM   r<   r   rF   rG   copyr	   r
   popgetvaluer7   sortedr+   )
rJ   r   kwrL   rM   lkwexpectedrN   strC   )r   r   r   rG      s"    zYAML.<locals>.MyYAML.dumpc       
         s   ddl m}m} t| jjjtfs(t|j	 }|rL|d dkrL|dd  }t
j|} jjj| |}|jd|}|  |d< } jjj| |f| |j }	|	|krt||	d |	|kstd S )Nr   )rL   rM   r   r   r1   r   zinput string)rO   rL   rM   r8   r   compat	text_typerI   r<   rP   r	   r
   rF   r   rQ   rG   rR   r3   )
rJ   r   rT   rL   rM   rU   r   r1   rW   rC   )r   r   r   rD      s    
zYAML.<locals>.MyYAML.round_tripc       
         s   ddl m}m} t| jjjtfs(t|j	 }|rL|d dkrL|dd  }t
j|}t jjj| |}|jd|}|  |d< } jjj| |f| |j }	|	|krt||	d |	|kstd S )Nr   )rL   rM   r   r   r1   r   zinput string)rO   rL   rM   r8   r   rX   rY   rI   r<   rP   r	   r
   listrF   r   rQ   Zdump_allrR   r3   )
rJ   r   rT   rL   rM   rU   r   r1   rW   rC   )r   r   r   round_trip_all   s    
z#YAML.<locals>.MyYAML.round_trip_allN)	__name__
__module____qualname____doc__r   r   rG   rD   r[   r   )r   r   r   MyYAML   s   r`   )r   r   rF   )rT   r`   r   )r   r   rF      s    HrF   Fc             C   s0  ddl m}m}m} t|ds*tt|}|dkr6d}|| }|jt|  yt	j
g}|rd|jd |jt| td|  |||dd	}	|dk	rd
t	jkr|	jd}	dd |	D }	dj|	}	td|	dd td|dd |	|kstW n@ |k
r* }
 z"tdjt	j
| t|
j |
jS d}
~
X nX dS )zk
    safe and run a python program, thereby circumventing any restrictions on module level
    imports
    r   )check_outputSTDOUTCalledProcessErrorhashNzsafe_and_run_tmp.pyz-Orunning:T)stderruniversal_newlinesZ__pypy__c             S   s   g | ]}d |kr|qS )zno version infor   ).0r4   r   r   r   
<listcomp>+  s    z save_and_run.<locals>.<listcomp>r5   z	result:  )endz	expected:z"##### Running '{} {}' FAILED #####)re   )
subprocessra   rb   rc   hasattrr   rI   
write_textr
   r,   
executableappendr7   builtin_module_namesr+   joinr<   r;   output
returncode)programbase_dirrr   r2   Z	optimizedra   rb   rc   cmdrC   	exceptionr   r   r   save_and_run  s6    





rx   )NN)NN)NNNNNNNN)r$   )NNNNNNNNNNNN)NNNNNNNNNNN)NNNF)r_   r,   r	   pathlibr   objectZenforcer
   r   r   r#   r3   rD   rH   rF   rx   r   r   r   r   <module>   sR   

       

           
3          
#N