a
    Gb                  
   @   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g ddd Zejdejejgejdddgdd Zejd i g d!gfd"ejdg d!gfd"ejdg d!gfd"ejdg d#gfd"ejdg d$gfgd%d& Zejd'd(d)d*ggfd+d)d,ggfgd-d. Zejdd"d/gd0d1 Zejd2d(d+gd3d4 ZdS )5zt
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   sP   d}| }t jt|d& |jt|fi | W d    n1 sB0    Y  d S )N1,2,3matchpytestraises	TypeErrorread_csvr   )all_parserskwargsmsgdataparser r   Blib/python3.9/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   sL   d}| }t jt|d" |jt||d W d    n1 s>0    Y  d S )Nr   r   )r   r   )r   r   r   r   r   r   r   r   test_bad_quoting&   s    r   c                 C   s@   | }d}t g dgg d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   sL   | }t g dgg dd}d}|d|}|jt||d}t|| d S )Nr   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    r7   r    c           	      C   s   ||d}d}| }|t jkrfd}tjt|d& |jt|fi | W d    q1 sZ0    Y  n8tg dgg dd}|jt|fi |}t	|| d S )Nr   za,b,c
1,2,3r	   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    

6r=   zkwargs,exp_data)r   r
   r   r'   )r   r
   z"foo")g      ?g       @r   c                 C   sF   d}| }g d}|j t|fd|i|}t||d}t|| d S )Nz	1,2,"foo"r!   namesr%   r   r   r   r*   r+   )r   r   exp_datar   r   r&   r-   r,   r   r   r   test_quoting_various]   s    rA   zdoublequote,exp_dataTr:   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   rB   r@   r   r   r-   r,   r   r   r   test_double_quotew   s
    rC   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
    rE   balancedc                 C   s   | }d}|rBt g dgg dd}|t|d }t|| nN|jdkrPdnd}tjt|d	 |t| W d    n1 s0    Y  d S )
Nza,b,c
1,2,"3r9   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   rF   r   r   r,   r-   r   r   r   r   test_unbalanced_quoting   s    rG   )__doc__r;   ior   r   Zpandas.errorsr   Zpandasr   Zpandas._testingZ_testingr*   ZmarkZusefixturesZ
pytestmarkZparametrizeZQUOTE_MINIMALr   r   r.   r7   r<   r=   Z	QUOTE_ALLZQUOTE_NONNUMERICrA   rC   rE   rG   r   r   r   r   <module>   s`   




	



	

