U
    +if                     @   s  d Z ddlZddlmZ ddlZddlmZ ddlmZ ddl	m
Z ejdZejddd	id
fdejddfddidfgdd Zejdddgdd Zdd Zejdddddddgdd  Zejd!ejejgejdd"dgd#d$ Zejd%i d&dd	ggfd'ejdd&dd	ggfd'ejdd&dd	ggfd'ejdd&dd(ggfd'ejdd)d*d	ggfgd+d, Zejd-d.d/d0ggfd1d/d2ggfgd3d4 Zejdd'd5gd6d7 Zejd8d.d1gd9d: ZdS );zt
Tests that quoting specifications are properly handled
during parsing for all of the parsers defined in parsers.py
    N)StringIO)ParserError)	DataFrameZpyarrow_skipz
kwargs,msg	quotecharfooz,"quotechar" must be a(n)? 1-character stringr   quoting(quotechar must be set if quoting enabled   z."quotechar" must be string( or None)?, not intc              	   C   s8   d}| }t jt|d |jt|f| W 5 Q R X d S )N1,2,3matchpytestraises	TypeErrorread_csvr   )all_parserskwargsmsgdataparser r   V/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/io/parser/test_quoting.pytest_bad_quote_char   s    r   zquoting,msg)r   z"quoting" must be an integer)   zbad "quoting" valuec              	   C   s8   d}| }t jt|d |jt||d W 5 Q R X d S )Nr   r   )r   r   )r   r   r   r   r   r   r   r   test_bad_quoting&   s    r   c                 C   sD   | }d}t dddggdddgd}|jt|d	d
}t|| d S )Na,b,c
1,2,"cat"   r
   catabccolumns"r   r   r   r   tmassert_frame_equal)r   r   r   expectedresultr   r   r   test_quote_char_basic5   s
    r,   
quote_char~*%$@Pc                 C   sP   | }t dddggdddgd}d}|d	|}|jt||d
}t|| d S )Nr   r
   r   r    r!   r"   r#   r   r%   r&   )r   replacer   r   r(   r)   )r   r-   r   r*   r   Znew_datar+   r   r   r   test_quote_char_various>   s    r5   r    c           	   	   C   s   ||d}d}| }|t jkrNd}tjt|d |jt|f| W 5 Q R X n8tdddggdd	d
gd}|jt|f|}t	|| d S )Nr   za,b,c
1,2,3r	   r   r   r
      r    r!   r"   r#   )
csv
QUOTE_NONEr   r   r   r   r   r   r(   r)   )	r   r   r-   r   r   r   r   r*   r+   r   r   r   test_null_quote_charJ   s    

r:   zkwargs,exp_datar   r%   z"foo"g      ?g       @c                 C   sH   d}| }dddg}|j t|fd|i|}t||d}t|| d S )Nz	1,2,"foo"r    r!   r"   namesr#   r   r   r   r(   r)   )r   r   exp_datar   r   r$   r+   r*   r   r   r   test_quoting_various]   s    
r>   zdoublequote,exp_dataTr7   z4 " 5Fz4 " 5"c                 C   s<   | }d}|j t|d|d}t|ddgd}t|| d S )Nza,b
3,"4 "" 5"r%   )r   doublequoter    r!   r#   r<   )r   r?   r=   r   r   r+   r*   r   r   r   test_double_quotew   s
    r@   c                 C   s8   d}| }t ddgi}|jt||d}t|| d S )Nza
1r    r   r&   r'   )r   r   r   r   r*   r+   r   r   r   test_quotechar_unicode   s
    rB   balancedc              	   C   s   | }d}|rFt dddggdddgd}|t|d	 }t|| n:|jdkrTd
nd}tjt|d |t| W 5 Q R X d S )Nza,b,c
1,2,"3r   r
   r7   r    r!   r"   r#   r%   z#EOF inside string starting at row 1zunexpected end of datar   )	r   r   r   r(   r)   Zenginer   r   r   )r   rC   r   r   r*   r+   r   r   r   r   test_unbalanced_quoting   s    rD   )__doc__r8   ior   r   Zpandas.errorsr   Zpandasr   Zpandas._testingZ_testingr(   markZusefixturesZ
pytestmarkZparametrizeQUOTE_MINIMALr   r   r,   r5   r9   r:   	QUOTE_ALLQUOTE_NONNUMERICr>   r@   rB   rD   r   r   r   r   <module>   sb   




	


 
	

