a
    äze"Ä  ã                   @   sæ  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	Z	d dl
mZ d dlmZ d dlmZ d dlmZ G dd	„ d	ƒZG d
d„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ deƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZG dd„ dejƒZG dd„ deƒZG dd„ dejƒZG dd„ dejƒZG d d!„ d!ejƒZ G d"d#„ d#ejƒZ!G d$d%„ d%ƒZ"e #e$ed&ƒd'¡G d(d)„ d)ejƒƒZ%G d*d+„ d+ejƒZ&G d,d-„ d-ejƒZ'G d.d/„ d/ejƒZ(e)d0krâe *¡  dS )1é    N)ÚStringIO)ÚTemporaryFile)Úsupport)Úpermutations)Údedent)ÚOrderedDictc                   @   s   e Zd Zdd„ ZdS )ÚBadIterablec                 C   s   t ‚d S ©N©ÚOSError©Úself© r   ú#/usr/lib/python3.9/test/test_csv.pyÚ__iter__   s    zBadIterable.__iter__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s   r   c                   @   s  e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zejd.d/„ ƒZd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Z d8d9„ Z!d:d;„ Z"d<d=„ Z#d>d?„ Z$d@dA„ Z%dBdC„ Z&dDS )EÚTest_Csvz°
    Test the underlying C csv parser in ways that are not appropriate
    from the high level interface. Further tests of this nature are done
    in TestDialectRegistry.
    c                 C   sþ   |   t|¡ |   t|d ¡ | j t||dd | j t||dd | j t||dd |   tj||d¡ | j t||d d | j t||dd | j t||dd | j t||d d | j t||dd | j t||d d	 | j t||tjd
d | j t||tjd d d S )Nr   ©Zbad_attr©Ú	delimiterZXXZfooé   )Ú	quotechar)Úlineterminator©ÚquotingÚ )r   r   )ÚassertRaisesÚ	TypeErrorÚcsvÚErrorÚ	QUOTE_ALL)r   ÚctorÚargr   r   r   Ú_test_arg_valid   s$    
ÿ
ÿzTest_Csv._test_arg_validc                 C   s$   |   tjg ¡ |  ttjtƒ ¡ d S r	   )r%   r    Úreaderr   r   r   r   r   r   r   Útest_reader_arg_valid/   s    zTest_Csv.test_reader_arg_validc                 C   s4   |   tjtƒ ¡ G dd„ dƒ}|  ttj|ƒ ¡ d S )Nc                   @   s   e Zd Zedd„ ƒZdS )z1Test_Csv.test_writer_arg_valid.<locals>.BadWriterc                 S   s   t ‚d S r	   r
   r   r   r   r   Úwrite6   s    z7Test_Csv.test_writer_arg_valid.<locals>.BadWriter.writeN)r   r   r   Úpropertyr(   r   r   r   r   Ú	BadWriter5   s   r*   )r%   r    Úwriterr   r   r   )r   r*   r   r   r   Útest_writer_arg_valid3   s    zTest_Csv.test_writer_arg_validc                 G   sÚ   ||Ž }|   |jjd¡ |  |jjd¡ |   |jjd ¡ |   |jjd¡ |   |jjd¡ |   |jjt	j
¡ |  |jjd¡ |  |jjd¡ |  tt|jd¡ |  tt|jdd¡ |  tt|jd¡ |  tt|jdd ¡ d S )	Nú,Tú
ú"Fr   ú:r   )ÚassertEqualÚdialectr   ÚassertIsÚdoublequoteÚ
escapecharr   r   r   r    ÚQUOTE_MINIMALÚskipinitialspaceÚstrictr   ÚAttributeErrorÚdelattrÚsetattr)r   r#   ÚargsÚobjr   r   r   Ú_test_default_attrs;   s    ÿzTest_Csv._test_default_attrsc                 C   s   |   tjg ¡ d S r	   )r>   r    r&   r   r   r   r   Útest_reader_attrsM   s    zTest_Csv.test_reader_attrsc                 C   s   |   tjtƒ ¡ d S r	   )r>   r    r+   r   r   r   r   r   Útest_writer_attrsP   s    zTest_Csv.test_writer_attrsc              
   G   s®   t dddddtjddd}||i |¤Ž}|  |jjd¡ |  |jjd¡ |  |jjd¡ |  |jj	d¡ |  |jj
d¡ |  |jjtj¡ |  |jjd¡ |  |jjd¡ d S )Nr0   Fú\úÚ*T)r   r4   r5   r   r   r   r7   r8   )Údictr    Ú
QUOTE_NONEr1   r2   r   r3   r4   r5   r   r   r   r7   r8   )r   r#   r<   Úkwargsr=   r   r   r   Ú_test_kw_attrsS   s    ýzTest_Csv._test_kw_attrsc                 C   s   |   tjg ¡ d S r	   )rG   r    r&   r   r   r   r   Útest_reader_kw_attrsc   s    zTest_Csv.test_reader_kw_attrsc                 C   s   |   tjtƒ ¡ d S r	   )rG   r    r+   r   r   r   r   r   Útest_writer_kw_attrsf   s    zTest_Csv.test_writer_kw_attrsc                 G   s¦   G dd„ dƒ}||f }||Ž }|   |jjd¡ |  |jjd¡ |   |jjd¡ |   |jjd¡ |   |jjd¡ |   |jjt	j
¡ |  |jjd¡ |  |jjd¡ d S )	Nc                   @   s.   e Zd ZdZdZdZdZdZej	Z
dZdZdS )z-Test_Csv._test_dialect_attrs.<locals>.dialectú-Fú^ú$ú#TN)r   r   r   r   r4   r5   r   r   r    r"   r   r7   r8   r   r   r   r   r2   k   s   r2   rJ   FrK   rL   rM   T)r1   r2   r   r3   r4   r5   r   r   r   r    r"   r7   r8   )r   r#   r<   r2   r=   r   r   r   Ú_test_dialect_attrsi   s    	
zTest_Csv._test_dialect_attrsc                 C   s   |   tjg ¡ d S r	   )rN   r    r&   r   r   r   r   Útest_reader_dialect_attrs   s    z"Test_Csv.test_reader_dialect_attrsc                 C   s   |   tjtƒ ¡ d S r	   )rN   r    r+   r   r   r   r   r   Útest_writer_dialect_attrs‚   s    z"Test_Csv.test_writer_dialect_attrsc                 K   sn   t dddN}tj|fi |¤Ž}| |¡ | d¡ |  | ¡ ||jj ¡ W d   ƒ n1 s`0    Y  d S ©Núw+r   ©Únewliner   )	r   r    r+   ÚwriterowÚseekr1   Úreadr2   r   )r   ÚfieldsÚexpectrF   Úfileobjr+   r   r   r   Ú_write_test†   s    



ÿzTest_Csv._write_testc              	   K   s   t dddp}tj|fi |¤Ž}|  |¡ | |¡ W d   ƒ n1 sJ0    Y  | d¡ |  | ¡ d¡ W d   ƒ n1 s‚0    Y  d S rQ   )r   r    r+   r   rU   rV   r1   rW   )r   ÚexcrX   rF   rZ   r+   r   r   r   Ú_write_error_testŽ   s    (
zTest_Csv._write_error_testc                 C   sŠ   |   tjd ¡ |  dd¡ |  d gd¡ | j tjd gtjd |   ttƒ ¡ G dd„ dƒ}|   t|ƒ ¡ G dd„ dƒ}|   t|ƒ g¡ d S )	Nr   r   ú""r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )z.Test_Csv.test_write_arg_valid.<locals>.BadListc                 S   s   dS )Né
   r   r   r   r   r   Ú__len__ž   s    z6Test_Csv.test_write_arg_valid.<locals>.BadList.__len__c                 S   s   |dkrt ‚d S )Né   r
   )r   Úir   r   r   Ú__getitem__    s    z:Test_Csv.test_write_arg_valid.<locals>.BadList.__getitem__N)r   r   r   r`   rc   r   r   r   r   ÚBadList   s   rd   c                   @   s   e Zd Zdd„ ZdS )z.Test_Csv.test_write_arg_valid.<locals>.BadItemc                 S   s   t ‚d S r	   r
   r   r   r   r   Ú__str__¥   s    z6Test_Csv.test_write_arg_valid.<locals>.BadItem.__str__N)r   r   r   re   r   r   r   r   ÚBadItem¤   s   rf   )r]   r    r!   r[   rE   r   r   )r   rd   rf   r   r   r   Útest_write_arg_valid–   s    zTest_Csv.test_write_arg_validc                 C   s$   dd }|   ||gd||f ¡ d S )NÚXéPÃ  ú%s,%s)r[   )r   Ú	bigstringr   r   r   Útest_write_bigfield©   s    ÿzTest_Csv.test_write_bigfieldc                 C   s„   |   g d¢d¡ | jtjg d¢tjd | j g d¢dtjd | j g d¢dtjd | j g d¢dtjd | j ddgdtjd d S )	N©Úar   zp,qú	a,1,"p,q"r   z"a",1,"p,q"z"a","1","p,q"úa
br   z	"a
b","1")r[   r]   r    r!   rE   r6   ÚQUOTE_NONNUMERICr"   r   r   r   r   Útest_write_quoting¯   s     ÿÿÿÿÿzTest_Csv.test_write_quotingc                 C   s¢   | j g d¢ddd | jtjg d¢d dd | j g d¢dddd | j d	gd
dtjd | j d	gddtjdd | j d	gddtjd | j g d¢ddtjd d S )Nrm   ro   rA   ©r5   )rn   r   zp,"q"F)r5   r4   za,1,"p,\"q\""r/   ú"""")r5   r   z\")r5   r   r4   za,1,p\,q)r[   r]   r    r!   r6   rE   r   r   r   r   Útest_write_escape¼   s,    ÿÿÿ
ÿ
þ
ÿÿzTest_Csv.test_write_escapec                 C   s|   |   tg d¢ƒd¡ |   tg d¢ƒd¡ |   tg ƒd¡ |   td gƒd¡ | jtjtd gƒtjd |   td d gƒd¡ d S )	Nrm   ro   )rn   r   Nza,1,r   r^   r   r-   )r[   Úiterr]   r    r!   rE   r   r   r   r   Útest_write_iterableÍ   s    zTest_Csv.test_write_iterablec                 C   s¨   G dd„ dƒ}t  |ƒ ¡}|  t|jdgg¡ tdddZ}t  |¡}|  t|jd ¡ | ddgdd	gg¡ | d
¡ |  | 	¡ d¡ W d   ƒ n1 sš0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )z+Test_Csv.test_writerows.<locals>.BrokenFilec                 S   s   t ‚d S r	   r
   )r   Úbufr   r   r   r(   ×   s    z1Test_Csv.test_writerows.<locals>.BrokenFile.writeN)r   r   r   r(   r   r   r   r   Ú
BrokenFileÖ   s   ry   rn   rR   r   rS   ÚbÚcÚdr   z
a,b
c,d
)
r    r+   r   r   Ú	writerowsr   r   rV   r1   rW   )r   ry   r+   rZ   r   r   r   Útest_writerowsÕ   s    

zTest_Csv.test_writerowsc                 C   s0  t dddJ}t |¡}| dd gd dgg¡ | d¡ |  | ¡ d¡ W d   ƒ n1 s\0    Y  t dddF}t |¡}| d gdgg¡ | d¡ |  | ¡ d¡ W d   ƒ n1 s¾0    Y  t dddF}t |¡}| dgd gg¡ | d¡ |  | ¡ d	¡ W d   ƒ n1 s"0    Y  d S )
NrR   r   rS   rn   r|   r   za,
,d
z""
a
za
""
)r   r    r+   r}   rV   r1   rW   ©r   rZ   r+   r   r   r   Útest_writerows_with_noneã   s    

.

.

z!Test_Csv.test_writerows_with_nonec                 C   s\   t ddd<}t |¡}|  t|jd ¡ |  t|jtƒ ¡ W d   ƒ n1 sN0    Y  d S )NrR   r   rS   )r   r    r+   r   r   r}   r   r   r   r   r   r   Útest_writerows_errorsö   s    
zTest_Csv.test_writerows_errorsc                 C   st   dd l }| d¡}tdddB}t |¡}| |gg¡ | d¡ |  | ¡ d¡ W d   ƒ n1 sf0    Y  d S )Nr   rn   rR   r   rS   za
)	Ú	_testcapiZunicode_legacy_stringr   r    r+   r}   rV   r1   rW   )r   r‚   r{   rZ   r+   r   r   r   Útest_writerows_legacy_stringsü   s    


z&Test_Csv.test_writerows_legacy_stringsc                 K   s*   t j|fi |¤Ž}t|ƒ}|  ||¡ d S r	   )r    r&   Úlistr1   )r   ÚinputrY   rF   r&   Úresultr   r   r   Ú
_read_test  s    zTest_Csv._read_testc                 C   s€   |   g g ¡ |   dgg g¡ | jtj| j dgd dd | jtj| j dgd dd | j dgdggdd |  tj| j d	gd ¡ d S )
Nr   z"ab"cr   ©r8   zab cÚabcr   )r4   s   ab c©r‡   r   r    r!   r   r   r   r   Útest_read_oddinputs  s    ÿÿÿzTest_Csv.test_read_oddinputsc                 C   s–   |   dgddgg¡ |   dgddgg¡ |   dgddgg¡ |   dgddgg¡ |  tj| j dgg ¡ |  tj| j dgg ¡ |  tj| j d	gg ¡ d S )
Nza,brn   rz   za,b
za,b
za,bza,bc,dza,b
c,dza,b
c,drŠ   r   r   r   r   Útest_read_eol  s    zTest_Csv.test_read_eolc                 C   s   |   dgddgg¡ |   dgdgg¡ | j dgdggdd | jtj| j dgg dd	 | jtj| j dgg dd	 | jtj| j dgg ddd
 d S )Nza,"rn   r   z"arK   Ú
rs   Trˆ   )r5   r8   rŠ   r   r   r   r   Útest_read_eof#  s    
ÿzTest_Csv.test_read_eofc                 C   s”   | j dgg d¢gdd | j dgddggdd | j dgddggdd | j d	gddggdd | j d
gddggdd | j dgddggdd d S )Nza,\b,c)rn   rz   r{   rA   rs   za,b\,crn   zb,cza,"b\,c"za,"b,\c"z	a,"b,c\""zb,c"za,"b,c"\zb,c\)r‡   r   r   r   r   Útest_read_escape,  s    zTest_Csv.test_read_escapec                 C   s˜   |   dgg d¢g¡ | j dgg d¢gd dd | j dgg d¢gtjdd | j dgg d¢gtjd	 |   d
gddgg¡ | jt| j dgg gtjd	 d S )Nz	1,",3,",5)Ú1z,3,Ú5)r   r/   Ú3r/   r‘   rA   )r   r5   ©r   r5   z,3,"5",7.3, 9)r   é   r‘   g333333@é	   r   z"a
b", 7rp   z 7zabc,3)r‡   r    rE   rq   r   Ú
ValueErrorr   r   r   r   Útest_read_quoting4  s    ÿÿÿ
þzTest_Csv.test_read_quotingc              	   C   sÈ   t  ¡ }z®d}d| }d||f }|  |g||gg¡ t  |¡ |  |g||gg¡ |  t  ¡ |¡ t  |d ¡ |  t j| j|gg ¡ |  tt jd ¡ |  tt jdd ¡ W t  |¡ nt  |¡ 0 d S )Nri   rh   rj   r   )r    Zfield_size_limitr‡   r1   r   r!   r   )r   ÚlimitÚsizerk   Zbigliner   r   r   Útest_read_bigfieldB  s    
zTest_Csv.test_read_bigfieldc                 C   s~   t  g d¢¡}|  |jd¡ t|ƒ |  |jd¡ t|ƒ |  |jd¡ t|ƒ |  |jd¡ |  tt|¡ |  |jd¡ d S )N)zline,1zline,2zline,3r   r   ra   r”   )r    r&   r1   Zline_numÚnextr   ÚStopIteration)r   Úrr   r   r   Útest_read_linenumU  s    zTest_Csv.test_read_linenumc                 C   s†   t dddf}t |¡}ddgddgg}| |¡ | d¡ tt |¡ƒD ]\}}|  ||| ¡ qJW d   ƒ n1 sx0    Y  d S )	NrR   r   rS   rp   rz   r{   úx
dr   )r   r    r+   r}   rV   Ú	enumerater&   r1   ©r   rZ   r+   Úrowsrb   Úrowr   r   r   Útest_roundtrip_quoteed_newlinesa  s    


z(Test_Csv.test_roundtrip_quoteed_newlinesc                 C   s–   t dddv}tj|tjdd}ddgdd	gg}| |¡ | d
¡ ttj|tjddƒD ]\}}|  ||| ¡ qZW d   ƒ n1 sˆ0    Y  d S )NrR   r   rS   rA   r“   rp   rz   r{   rŸ   r   )	r   r    r+   rE   r}   rV   r    r&   r1   r¡   r   r   r   Ú(test_roundtrip_escaped_unquoted_newlinesj  s    

z1Test_Csv.test_roundtrip_escaped_unquoted_newlinesN)'r   r   r   Ú__doc__r%   r'   r,   r>   r?   r@   rG   rH   rI   rN   rO   rP   r[   r]   rg   rl   rr   ru   rw   r~   r€   r   r   Zcpython_onlyrƒ   r‡   r‹   rŒ   rŽ   r   r—   rš   rž   r¤   r¥   r   r   r   r   r      sF   

			r   c                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTestDialectRegistryc                 C   sæ   |   ttjd ¡ |   ttj¡ |   tjtjd ¡ |   tjtjd¡ |   ttj¡ |   tjtjd ¡ |   tjtjd¡ |   ttjd ¡ |   ttjd d ¡ |   ttjddd¡ | j ttjdd d | j ttjdd d |   ttjg ¡ d S )NZnonesuchr   )Zbadargumentr   )r   r   r    Úlist_dialectsÚget_dialectr!   Úunregister_dialectÚregister_dialectr   r   r   r   Útest_registry_badargst  s"    ÿÿz)TestDialectRegistry.test_registry_badargsc                 C   sv   G dd„ dt jƒ}d}t  ¡ |g }| ¡  t  ||¡ |  t j|¡ |  t  |¡j	d¡ t
t  ¡ ƒ}|  ||¡ d S )Nc                   @   s   e Zd ZdZdS )z5TestDialectRegistry.test_registry.<locals>.myexceltsvú	N©r   r   r   r   r   r   r   r   Ú
myexceltsv†  s   r¯   r­   )r    Úexcelr¨   Úsortr«   Ú
addCleanuprª   r1   r©   r   Úsorted)r   r¯   ÚnameZexpected_dialectsZgot_dialectsr   r   r   Útest_registry…  s    z!TestDialectRegistry.test_registryc                 C   sX   d}t j|dd |  t j|¡ |  t  |¡jd¡ |  g d¢gtt  dg|¡ƒ¡ d S )NZfedcbaú;r   )rh   ÚYÚZzX;Y;Z)	r    r«   r²   rª   r1   r©   r   r„   r&   )r   r´   r   r   r   Útest_register_kwargs‘  s
    z(TestDialectRegistry.test_register_kwargsc                 C   s$   G dd„ dt jƒ}|  t j|¡ d S )Nc                   @   s   e Zd ZdZdS )z?TestDialectRegistry.test_incomplete_dialect.<locals>.myexceltsvr­   Nr®   r   r   r   r   r¯   ™  s   r¯   )r    ÚDialectr   r!   )r   r¯   r   r   r   Útest_incomplete_dialect˜  s    z+TestDialectRegistry.test_incomplete_dialectc                 C   sŠ   G dd„ dt jƒ}tdƒ\}| d¡ | d¡ t j||ƒ d}|  t|ƒddg¡ |  t|ƒd	d
g¡ W d   ƒ n1 s|0    Y  d S )Nc                   @   s   e Zd ZdZejZdZdS )z5TestDialectRegistry.test_space_dialect.<locals>.spaceú rA   N)r   r   r   r   r    rE   r   r5   r   r   r   r   Úspacež  s   r½   rR   zabc def
c1ccccc1 benzene
r   ©r2   r‰   ÚdefZc1ccccc1Zbenzene)r    r°   r   r(   rV   r&   r1   r›   )r   r½   rZ   r&   r   r   r   Útest_space_dialect  s    


z&TestDialectRegistry.test_space_dialectc                 O   sr   t ddddP}tj|g|¢R i |¤Ž}| g d¢¡ | d¡ |  | ¡ |¡ W d   ƒ n1 sd0    Y  d S )NrR   r   úutf-8©rT   Úencoding©r   ra   r”   r   )r   r    r+   rU   rV   r1   rW   )r   ÚexpectedZ	writeargsZkwwriteargsrZ   r+   r   r   r   Úcompare_dialect_123ª  s
    
z'TestDialectRegistry.compare_dialect_123c              	   C   sð   G dd„ dt jƒ}G dd„ dt jƒ}G dd„ dt jƒ}G dd„ dt jƒ}G d	d
„ d
ƒ}t  d|¡ z||  d¡ | jdd d | jd|d |  d|¡ | jd|ƒ d | jddd | jd|dd | jd|d W t  d¡ nt  d¡ 0 d S )Nc                   @   s   e Zd ZdZdS )z5TestDialectRegistry.test_dialect_apply.<locals>.testAr­   Nr®   r   r   r   r   ÚtestA´  s   rÇ   c                   @   s   e Zd ZdZdS )z5TestDialectRegistry.test_dialect_apply.<locals>.testBr0   Nr®   r   r   r   r   ÚtestB¶  s   rÈ   c                   @   s   e Zd ZdZdS )z5TestDialectRegistry.test_dialect_apply.<locals>.testCú|Nr®   r   r   r   r   ÚtestC¸  s   rÊ   c                   @   s   e Zd ZdZdS )z7TestDialectRegistry.test_dialect_apply.<locals>.testUniu   Î›Nr®   r   r   r   r   ÚtestUniº  s   rË   c                   @   s   e Zd ZdS )z;TestDialectRegistry.test_dialect_apply.<locals>.unspecifiedN©r   r   r   r   r   r   r   Úunspecified½  s   rÍ   z1,2,3
r¾   z1	2	3
z1:2:3
z1|2|3
z1;2;3
r¶   )r2   r   u	   1Î›2Î›3
)r    r°   r«   rÆ   rª   )r   rÇ   rÈ   rÊ   rË   rÍ   r   r   r   Útest_dialect_apply³  s(    
ÿÿz&TestDialectRegistry.test_dialect_applyc                 C   sT   | j ttjg dd | j ttjg d d | j ttjg dd | j ttjg dd d S )Nr   r   r   éÿÿÿÿr   éd   )r   r   r    r&   r   r   r   r   Útest_bad_dialectÑ  s    z$TestDialectRegistry.test_bad_dialectc                 C   s,   t  ¡ D ]}t  |¡}|  ttj|¡ qd S r	   )r    r¨   r©   r   r   Úcopy)r   r´   r2   r   r   r   Ú	test_copyÙ  s    
zTestDialectRegistry.test_copyc                 C   sB   t  ¡ D ]4}t  |¡}ttjd ƒD ]}|  ttj||¡ q$qd S )Nr   )	r    r¨   r©   ÚrangeÚpickleÚHIGHEST_PROTOCOLr   r   Údumps)r   r´   r2   Úprotor   r   r   Útest_pickleÞ  s    
zTestDialectRegistry.test_pickleN)r   r   r   r¬   rµ   r¹   r»   rÀ   rÆ   rÎ   rÑ   rÓ   rÙ   r   r   r   r   r§   s  s   	r§   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCsvBasec                 C   sh   t dddH}| |¡ | d¡ tj|| jd}t|ƒ}|  ||¡ W d   ƒ n1 sZ0    Y  d S )NrR   r   rS   r   r¾   )r   r(   rV   r    r&   r2   r„   r1   )r   r…   Úexpected_resultrZ   r&   rX   r   r   r   ÚreaderAssertEqualå  s    

zTestCsvBase.readerAssertEqualc                 C   sd   t dddD}tj|| jd}| |¡ | d¡ |  | ¡ |¡ W d   ƒ n1 sV0    Y  d S )NrR   r   rS   r¾   r   )r   r    r+   r2   r}   rV   r1   rW   )r   r…   rÛ   rZ   r+   r   r   r   ÚwriterAssertEqualí  s
    

zTestCsvBase.writerAssertEqualN)r   r   r   rÜ   rÝ   r   r   r   r   rÚ   ä  s   rÚ   c                   @   sØ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4S )5ÚTestDialectExcelr°   c                 C   s   |   ddgg¡ d S )Nr‰   ©rÜ   r   r   r   r   Útest_single÷  s    zTestDialectExcel.test_singlec                 C   s   |   dg d¢g¡ d S )Nz	1,2,3,4,5)r   Ú2r’   Ú4r‘   rß   r   r   r   r   Útest_simpleú  s    zTestDialectExcel.test_simplec                 C   s   |   dg ¡ d S ©Nr   rß   r   r   r   r   Útest_blanklineý  s    zTestDialectExcel.test_blanklinec                 C   s   |   dddgg¡ d S )Nr-   r   rß   r   r   r   r   Útest_empty_fields   s    z"TestDialectExcel.test_empty_fieldsc                 C   s   |   ddgg¡ d S )Nr^   r   rß   r   r   r   r   Útest_singlequoted  s    z"TestDialectExcel.test_singlequotedc                 C   s   |   dddgg¡ d S )Nz"",r   rß   r   r   r   r   Útest_singlequoted_left_empty  s    z-TestDialectExcel.test_singlequoted_left_emptyc                 C   s   |   dddgg¡ d S )Nz,""r   rß   r   r   r   r   Útest_singlequoted_right_empty	  s    z.TestDialectExcel.test_singlequoted_right_emptyc                 C   s   |   ddgg¡ d S )Nrt   r/   rß   r   r   r   r   Útest_single_quoted_quote  s    z)TestDialectExcel.test_single_quoted_quotec                 C   s   |   ddgg¡ d S )Nz""""""r^   rß   r   r   r   r   Útest_quoted_quotes  s    z#TestDialectExcel.test_quoted_quotesc                 C   s   |   ddgg¡ d S )Nza""brß   r   r   r   r   Útest_inline_quote  s    z"TestDialectExcel.test_inline_quotec                 C   s   |   ddgg¡ d S )Nza"b"crß   r   r   r   r   Útest_inline_quotes  s    z#TestDialectExcel.test_inline_quotesc                 C   s   |   ddgg¡ d S )Nz"a"bÚabrß   r   r   r   r   Útest_quotes_and_more  s    z%TestDialectExcel.test_quotes_and_morec                 C   s   |   ddgg¡ d S )Nza"brß   r   r   r   r   Útest_lone_quote  s    z TestDialectExcel.test_lone_quotec                 C   s   |   ddgg¡ d S )Nz"a" "b"za "b"rß   r   r   r   r   Útest_quote_and_quote   s    z%TestDialectExcel.test_quote_and_quotec                 C   s   |   ddgg¡ d S )Nz "a"rß   r   r   r   r   Útest_space_and_quote%  s    z%TestDialectExcel.test_space_and_quotec                 C   s   |   dg d¢g¡ d S )Nz#1,2,3,"I think, therefore I am",5,6)r   rá   r’   zI think, therefore I amr‘   Ú6rß   r   r   r   r   Útest_quoted(  s    ÿzTestDialectExcel.test_quotedc                 C   s   |   dg d¢g¡ d S )NzJ1,2,3,"""I see,"" said the blind man","as he picked up his hammer and saw")r   rá   r’   z"I see," said the blind manz"as he picked up his hammer and sawrß   r   r   r   r   Útest_quoted_quote.  s    ÿz"TestDialectExcel.test_quoted_quotec                 C   s    d}|   |g d¢g d¢g¡ d S )NzR1,2,3,"""I see,""
said the blind man","as he picked up his
hammer and saw"
9,8,7,6)r   rá   r’   z"I see,"
said the blind manz"as he picked up his
hammer and saw)Ú9Ú8Ú7ró   rß   )r   r…   r   r   r   Útest_quoted_nl4  s    ýÿzTestDialectExcel.test_quoted_nlc                 C   s   |   dg d¢g¡ d S )Nz	12,12,1",)Ú12rú   z1"r   rß   r   r   r   r   Útest_dubious_quote@  s    z#TestDialectExcel.test_dubious_quotec                 C   s   |   g d¡ d S rä   ©rÝ   r   r   r   r   Ú	test_nullC  s    zTestDialectExcel.test_nullc                 C   s   |   dggd¡ d S )Nr‰   zabc
rü   r   r   r   r   Útest_single_writerF  s    z#TestDialectExcel.test_single_writerc                 C   s   |   g d¢gd¡ d S )N)r   ra   r‰   r”   é   z1,2,abc,3,4
rü   r   r   r   r   Útest_simple_writerI  s    z#TestDialectExcel.test_simple_writerc                 C   s   |   g d¢gd¡ d S )N)r   ra   za"bc"r”   rÿ   z1,2,"a""bc""",3,4
rü   r   r   r   r   Útest_quotesL  s    zTestDialectExcel.test_quotesc                 C   s   |   dggd¡ d S ©Núabc,defz"abc,def"
rü   r   r   r   r   Útest_quote_fieldsepO  s    z$TestDialectExcel.test_quote_fieldsepc                 C   s   |   g d¢gd¡ d S )N)r   ra   za
bcr”   rÿ   z1,2,"a
bc",3,4
rü   r   r   r   r   Útest_newlinesR  s    zTestDialectExcel.test_newlinesN)r   r   r   r2   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Þ   ô  s4   rÞ   c                   @   s   e Zd ZejZdZdS )ÚEscapedExcelrA   N)r   r   r   r    rE   r   r5   r   r   r   r   r  U  s   r  c                   @   s"   e Zd Zeƒ Zdd„ Zdd„ ZdS )ÚTestEscapedExcelc                 C   s   |   dggd¡ d S )Nr  ú
abc\,def
rü   r   r   r   r   Útest_escape_fieldsep\  s    z%TestEscapedExcel.test_escape_fieldsepc                 C   s   |   ddgg¡ d S )Nr  r  rß   r   r   r   r   Útest_read_escape_fieldsep_  s    z*TestEscapedExcel.test_read_escape_fieldsepN)r   r   r   r  r2   r	  r
  r   r   r   r   r  Y  s   r  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestDialectUnixZunixc                 C   s   |   g d¢gd¡ d S )N)r   úabc defr‰   ú"1","abc def","abc"
rü   r   r   r   r   r   e  s    z"TestDialectUnix.test_simple_writerc                 C   s   |   dg d¢g¡ d S )Nr  )r   r  r‰   rß   r   r   r   r   Útest_simple_readerh  s    z"TestDialectUnix.test_simple_readerN)r   r   r   r2   r   r  r   r   r   r   r  b  s   r  c                   @   s   e Zd ZejZdZdS )ÚQuotedEscapedExcelrA   N)r   r   r   r    rq   r   r5   r   r   r   r   r  k  s   r  c                   @   s"   e Zd Zeƒ Zdd„ Zdd„ ZdS )ÚTestQuotedEscapedExcelc                 C   s   |   dggd¡ d S r  rü   r   r   r   r   Útest_write_escape_fieldsepr  s    z1TestQuotedEscapedExcel.test_write_escape_fieldsepc                 C   s   |   ddgg¡ d S )Nz"abc\,def"
r  rß   r   r   r   r   r
  u  s    z0TestQuotedEscapedExcel.test_read_escape_fieldsepN)r   r   r   r  r2   r  r
  r   r   r   r   r  o  s   r  c                   @   s¤   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'S )(ÚTestDictFieldsc                 C   sV   t ddd6}tj|g d¢d}| ¡ }|  |d¡ W d   ƒ n1 sH0    Y  d S )NrR   r   rS   ©Úf1Úf2Úf3©Ú
fieldnamesr_   )r   r    Ú
DictWriterÚwriteheaderr1   )r   rZ   r+   Zwriteheader_return_valuer   r   r   Útest_writeheader_return_value{  s    z,TestDictFields.test_writeheader_return_valuec                 C   s–   t dddv}tj|g d¢d}| ¡  | d¡ |  | ¡ d¡ | dd	d
œ¡ | d¡ | ¡  |  | ¡ d¡ W d   ƒ n1 sˆ0    Y  d S )NrR   r   rS   r  r  r   ú
f1,f2,f3
r_   r‰   )r  r  z	10,,abc
)	r   r    r  r  rV   r1   ÚreadlinerU   rW   r   r   r   r   Útest_write_simple_dict  s    

z%TestDictFields.test_write_simple_dictc                 C   sb   t ƒ }tj|g d¢d}| ¡  |  | ¡ d¡ | ddddœddd	dœg¡ |  | ¡ d
¡ d S )Nr  r  r  r   r‰   Úfra   é   Zxyzzf1,f2,f3
1,abc,f
2,5,xyz
)r   r    r  r  r1   Úgetvaluer}   r   r   r   r   Útest_write_multiple_dict_rowsŒ  s    
ÿ
ÿz,TestDictFields.test_write_multiple_dict_rowsc                 C   s   t ƒ }|  ttj|¡ d S r	   )r   r   r   r    r  ©r   rZ   r   r   r   Útest_write_no_fields–  s    z#TestDictFields.test_write_no_fieldsc              	   C   s¸   t ddd˜}tj|g d¢d}|  t¡"}| dddd	œ¡ W d   ƒ n1 sR0    Y  t|jƒ}|  d
|¡ |  d|¡ |  	d|¡ |  d|¡ W d   ƒ n1 sª0    Y  d S )NrR   r   rS   r  r  r_   Zspamr‰   )Zf4r  r   r  z'f4'z'f2'r   )
r   r    r  r   r–   rU   ÚstrÚ	exceptionÚassertInZassertNotIn)r   rZ   r+   Zcxr&  r   r   r   Ú#test_write_fields_not_in_fieldnamesš  s    0
z2TestDictFields.test_write_fields_not_in_fieldnamesc                 C   s$   t ƒ }| jttj|ddgdd d S )Nr  r  Zraised©Zextrasaction)r   r   r–   r    r  r#  r   r   r   Ú&test_typo_in_extrasaction_raises_error¦  s    ÿz5TestDictFields.test_typo_in_extrasaction_raises_errorc                 C   s@   t ƒ }tj|ddgdd}ddddd	œ}|  ttjj||¡ d S )
Nr  r  Úraiser)  r   r   ra   r”   ©Zf0r  r  r  )r   r    r  r   r–   rU   ©r   rZ   r+   Zdictrowr   r   r   Ú)test_write_field_not_in_field_names_raise«  s    z8TestDictFields.test_write_field_not_in_field_names_raisec                 C   sJ   t ƒ }tj|ddgdd}ddddd	œ}tj ||¡ |  | ¡ d
¡ d S )Nr  r  Úignorer)  r   r   ra   r”   r,  z1,2
)r   r    r  rU   r1   r!  r-  r   r   r   Ú*test_write_field_not_in_field_names_ignore±  s
    z9TestDictFields.test_write_field_not_in_field_names_ignorec                 C   sj   t dƒN}| d¡ | d¡ tj|g d¢d}|  t|ƒddddœ¡ W d   ƒ n1 s\0    Y  d S )	NrR   z	1,2,abc
r   r  r  r   rá   r‰   ©r   r(   rV   r    Ú
DictReaderr1   r›   ©r   rZ   r&   r   r   r   Útest_read_dict_fields¸  s    


ÿz$TestDictFields.test_read_dict_fieldsc                 C   st   t dƒX}| d¡ | d¡ t |¡}|  t|ƒddddœ¡ |  |jg d¢¡ W d   ƒ n1 sf0    Y  d S )NrR   úf1,f2,f3
1,2,abc
r   r   rá   r‰   r  )r   r(   rV   r    r2  r1   r›   r  r3  r   r   r   Útest_read_dict_no_fieldnamesÀ  s    



z+TestDictFields.test_read_dict_no_fieldnamesc                 C   s‚   t dƒf}| d¡ | d¡ tj|tt |¡ƒd}|  |jg d¢¡ |  t|ƒddddœ¡ W d   ƒ n1 st0    Y  d S )	NrR   r5  r   r  r  r   rá   r‰   )	r   r(   rV   r    r2  r›   r&   r1   r  r3  r   r   r   Ú#test_read_dict_fieldnames_from_fileÊ  s    


ÿz2TestDictFields.test_read_dict_fieldnames_from_filec              	   C   s”   dd l }tdƒp}| d¡ | d¡ t |¡}t|ƒ}| |g|¡D ]*}|  |j	g d¢¡ |  |ddddœ¡ qFW d   ƒ n1 s†0    Y  d S )Nr   rR   r5  r  r   rá   r‰   )
Ú	itertoolsr   r(   rV   r    r2  r›   Úchainr1   r  )r   r8  rZ   r&   Úfirstr£   r   r   r   Útest_read_dict_fieldnames_chainÓ  s    



z.TestDictFields.test_read_dict_fieldnames_chainc                 C   sn   t dƒR}| d¡ | d¡ tj|ddgd}|  t|ƒddg d	¢d
œ¡ W d   ƒ n1 s`0    Y  d S )NrR   ú1,2,abc,4,5,6
r   r  r  r  r   rá   ©r‰   râ   r‘   ró   )r  r  Nr1  r3  r   r   r   Útest_read_longÞ  s    


ÿÿzTestDictFields.test_read_longc                 C   sp   t dƒT}| d¡ | d¡ tj|ddgdd}|  t|ƒdd	g d
¢dœ¡ W d   ƒ n1 sb0    Y  d S )NrR   r<  r   r  r  Ú_rest)r  Úrestkeyr   rá   r=  ©r  r  r?  r1  r3  r   r   r   Útest_read_long_with_restç  s    


ÿÿz'TestDictFields.test_read_long_with_restc                 C   s|   t dƒ`}| d¡ | d¡ tj|dd}|  |jddg¡ |  t|ƒdd	g d
¢dœ¡ W d   ƒ n1 sn0    Y  d S )NrR   zf1,f2
1,2,abc,4,5,6
r   r?  ©r@  r  r  r   rá   r=  rA  )r   r(   rV   r    r2  r1   r  r›   r3  r   r   r   Ú&test_read_long_with_rest_no_fieldnamesð  s    


ÿz5TestDictFields.test_read_long_with_rest_no_fieldnamesc                 C   s   t dƒt}| d¡ | d¡ tj|d ¡ dd}|  t|ƒddd	d
dddœ¡ |  t|ƒddd	ddddœ¡ W d   ƒ n1 s‚0    Y  d S )NrR   z1,2,abc,4,5,6
1,2,abc
r   ú1 2 3 4 5 6ZDEFAULT)r  Zrestvalr   rá   r‰   râ   r‘   ró   ©r   rá   r’   râ   r‘   ró   )r   r(   rV   r    r2  Úsplitr1   r›   r3  r   r   r   Útest_read_shortù  s    


þÿþzTestDictFields.test_read_shortc              	   C   s:   g d¢}t j|d ¡ d}|  t|ƒdddddd	œ¡ d S )
N)z2147483648,43.0e12,17,abc,def
z147483648,43.0e2,17,abc,def
z47483648,43.0,170,abc,def
zi1 float i2 s1 s2r  Z
2147483648z43.0e12Z17r‰   r¿   )Zi1ÚfloatZi2Ús1Ús2©r    r2  rG  r1   r›   )r   Úsampler&   r   r   r   Útest_read_multi  s    ÿüzTestDictFields.test_read_multic              
   C   sV   t jg d¢d ¡ d}|  t|ƒdddddd	d
œ¡ |  t|ƒdddddd	d
œ¡ d S )N)r<  r.   r<  rE  r  r   rá   r‰   râ   r‘   ró   rF  rL  ©r   r&   r   r   r   Útest_read_with_blanks  s    
þÿÿz$TestDictFields.test_read_with_blanksc              
   C   s8   t jdgd ¡ dd}|  t|ƒddddd	d
dœ¡ d S )Nz1;2;abc;4;5;6
rE  r¶   )r  r   r   rá   r‰   râ   r‘   ró   rF  rL  rO  r   r   r   Útest_read_semi_sep  s    þÿz!TestDictFields.test_read_semi_sepN)r   r   r   r  r  r"  r$  r(  r*  r.  r0  r4  r6  r7  r;  r>  rB  rD  rH  rN  rP  rQ  r   r   r   r   r  x  s&   

					r  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestArrayWritesc                 C   s    dd l }dd„ tdƒD ƒ}|  d|¡}tdddZ}tj|d	d
}| |¡ d dd„ |D ƒ¡d }| d¡ |  | 	¡ |¡ W d   ƒ n1 s’0    Y  d S )Nr   c                 S   s   g | ]}d | ‘qS )é   r   ©Ú.0rb   r   r   r   Ú
<listcomp>(  ó    z2TestArrayWrites.test_int_write.<locals>.<listcomp>rS  rb   rR   r   rS   r°   r¾   r-   c                 S   s   g | ]}t |ƒ‘qS r   ©r%  rT  r   r   r   rV  .  rW  r.   ©
ÚarrayrÔ   r   r    r+   rU   ÚjoinrV   r1   rW   ©r   rZ  Úcontentsrn   rZ   r+   rÅ   r   r   r   Útest_int_write&  s    

zTestArrayWrites.test_int_writec                 C   s    dd l }dd„ tdƒD ƒ}|  d|¡}tdddZ}tj|d	d
}| |¡ d dd„ |D ƒ¡d }| d¡ |  | 	¡ |¡ W d   ƒ n1 s’0    Y  d S )Nr   c                 S   s   g | ]}d | d ‘qS ©rS  gš™™™™™¹?r   rT  r   r   r   rV  4  rW  z5TestArrayWrites.test_double_write.<locals>.<listcomp>rS  r|   rR   r   rS   r°   r¾   r-   c                 S   s   g | ]}t |ƒ‘qS r   rX  rT  r   r   r   rV  9  rW  r.   rY  r\  r   r   r   Útest_double_write2  s    

z!TestArrayWrites.test_double_writec                 C   s    dd l }dd„ tdƒD ƒ}|  d|¡}tdddZ}tj|d	d
}| |¡ d dd„ |D ƒ¡d }| d¡ |  | 	¡ |¡ W d   ƒ n1 s’0    Y  d S )Nr   c                 S   s   g | ]}d | d ‘qS r_  r   rT  r   r   r   rV  ?  rW  z4TestArrayWrites.test_float_write.<locals>.<listcomp>rS  r  rR   r   rS   r°   r¾   r-   c                 S   s   g | ]}t |ƒ‘qS r   rX  rT  r   r   r   rV  D  rW  r.   rY  r\  r   r   r   Útest_float_write=  s    

z TestArrayWrites.test_float_writec                 C   sŽ   dd l }dd l}|  d|j¡}tdddP}tj|dd}| |¡ d |¡d	 }| d¡ |  	| 
¡ |¡ W d   ƒ n1 s€0    Y  d S )
Nr   ÚurR   r   rS   r°   r¾   r-   r.   )rZ  ÚstringÚascii_lettersr   r    r+   rU   r[  rV   r1   rW   )r   rZ  rc  rn   rZ   r+   rÅ   r   r   r   Útest_char_writeH  s    

zTestArrayWrites.test_char_writeN)r   r   r   r^  r`  ra  re  r   r   r   r   rR  %  s   rR  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestDialectValidityc                 C   s  G dd„ dt jƒ}|ƒ }|  |jt j¡ d |_|  t j|¡ d|_t j|_d|_	|ƒ }|  |jt j¡ |  |j	d¡ |  
|j¡ d|_	|  t j¡}|ƒ  W d   ƒ n1 s®0    Y  |  t|jƒd¡ d|_	|  t j¡}|ƒ  W d   ƒ n1 sø0    Y  |  t|jƒd¡ d S )	Nc                   @   s&   e Zd ZdZdZdZdZdZej	Z
dS )z3TestDialectValidity.test_quoting.<locals>.mydialectr¶   rA   FTr.   N©r   r   r   r   r5   r4   r7   r   r    rE   r   r   r   r   r   Ú	mydialectU  s   rh  Tr/   z''z("quotechar" must be a 1-character stringrÿ   z+"quotechar" must be string or None, not int)r    rº   r1   r   rE   r   r!   r4   r"   r   Ú
assertTruer%  r&  ©r   rh  r|   Úcmr   r   r   Útest_quotingT  s0    $ÿ$ÿz TestDialectValidity.test_quotingc                 C   s   G dd„ dt jƒ}|ƒ }|  |jd¡ d|_|  t j¡}|ƒ  W d   ƒ n1 sT0    Y  |  t|jƒd¡ d|_|  t j¡}|ƒ  W d   ƒ n1 sž0    Y  |  t|jƒd¡ d|_|  t j¡}|ƒ  W d   ƒ n1 sè0    Y  |  t|jƒd¡ d	|_|  t j¡}|ƒ  W d   ƒ n1 s40    Y  |  t|jƒd
¡ d |_|  t j¡}|ƒ  W d   ƒ n1 s€0    Y  |  t|jƒd¡ d S )Nc                   @   s&   e Zd ZdZdZdZdZdZej	Z
dS )z5TestDialectValidity.test_delimiter.<locals>.mydialectr¶   rA   FTr.   Nrg  r   r   r   r   rh  w  s   rh  r¶   ú:::z("delimiter" must be a 1-character stringr   ó   ,z%"delimiter" must be string, not bytesrÿ   z#"delimiter" must be string, not intz("delimiter" must be string, not NoneType)r    rº   r1   r   r   r!   r%  r&  rj  r   r   r   Útest_delimiterv  sB    $ÿ$ÿ$ÿ&ÿ&ÿz"TestDialectValidity.test_delimiterc                 C   sØ   G dd„ dt jƒ}|ƒ }|  |jd¡ d|_|  t jd¡ |ƒ  W d   ƒ n1 sV0    Y  d|_|  t jd¡ |ƒ  W d   ƒ n1 s0    Y  d|_|  t jd	¡ |ƒ  W d   ƒ n1 sÊ0    Y  d S )
Nc                   @   s&   e Zd ZdZdZdZdZdZej	Z
dS )z6TestDialectValidity.test_escapechar.<locals>.mydialectr¶   rA   FTr.   Nrg  r   r   r   r   rh     s   rh  rA   z**z)"escapechar" must be a 1-character stringó   *z."escapechar" must be string or None, not bytesrÿ   z,"escapechar" must be string or None, not int)r    rº   r1   r5   ZassertRaisesRegexr!   )r   rh  r|   r   r   r   Útest_escapecharŸ  s    $$z#TestDialectValidity.test_escapecharc                 C   sŽ   G dd„ dt jƒ}|ƒ }|  |jd¡ d|_|ƒ }|  |jd¡ d|_|  t j¡}|ƒ  W d   ƒ n1 sn0    Y  |  t|jƒd¡ d S )Nc                   @   s&   e Zd ZdZdZdZdZdZej	Z
dS )z:TestDialectValidity.test_lineterminator.<locals>.mydialectr¶   rA   FTr.   Nrg  r   r   r   r   rh  ·  s   rh  r.   rm  rÿ   z!"lineterminator" must be a string)r    rº   r1   r   r   r!   r%  r&  rj  r   r   r   Útest_lineterminator¶  s    $ÿz'TestDialectValidity.test_lineterminatorc              	   C   sŠ   dd„ }dD ]x}| j |dX |  tj||d¡ |  tj||d¡ |  tj||d¡ |  tj||d¡ W d   ƒ q1 sz0    Y  qd S )	Nc                 S   s(   G dd„ dt jƒ}t|| |ƒ |ƒ }d S )Nc                   @   s   e Zd ZdS )zQTestDialectValidity.test_invalid_chars.<locals>.create_invalid.<locals>.mydialectNrÌ   r   r   r   r   rh  Í  s   rh  )r    rº   r;   )Ú
field_nameÚvaluerh  r|   r   r   r   Úcreate_invalidÌ  s    z>TestDialectValidity.test_invalid_chars.<locals>.create_invalid)r   r5   r   )rs  r   r‰   ó   xr   )ÚsubTestr   r    r!   )r   ru  rs  r   r   r   Útest_invalid_charsË  s    z&TestDialectValidity.test_invalid_charsN)r   r   r   rl  ro  rq  rr  rx  r   r   r   r   rf  S  s
   ")rf  c                   @   sh   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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestSnifferzîHarry's, Arlington Heights, IL, 2/1/03, Kimi Hayes
Shark City, Glendale Heights, IL, 12/28/02, Prezence
Tommy's Place, Blue Island, IL, 12/28/02, Blue Sunday/White Crow
Stonecutters Seafood and Chop House, Lemont, IL, 12/19/02, Week Back
a  'Harry''s':'Arlington Heights':'IL':'2/1/03':'Kimi Hayes'
'Shark City':'Glendale Heights':'IL':'12/28/02':'Prezence'
'Tommy''s Place':'Blue Island':'IL':'12/28/02':'Blue Sunday/White Crow'
'Stonecutters ''Seafood'' and Chop House':'Lemont':'IL':'12/19/02':'Week Back'
z+"venue","city","state","date","performers"
z¢05/05/03?05/05/03?05/05/03?05/05/03?05/05/03?05/05/03
05/05/03?05/05/03?05/05/03?05/05/03?05/05/03?05/05/03
05/05/03?05/05/03?05/05/03?05/05/03?05/05/03?05/05/03
zT2147483648;43.0e12;17;abc;def
147483648;43.0e2;17;abc;def
47483648;43.0;170;abc;def
zaaa	bbb
AAA	
BBB	
za|b|c
d|e|f
z'a'|'b'|'c'
'd'|e|f
z+"venue"+"city"+"state"+"date"+"performers"
zîHarry's+ Arlington Heights+ IL+ 2/1/03+ Kimi Hayes
Shark City+ Glendale Heights+ IL+ 12/28/02+ Prezence
Tommy's Place+ Blue Island+ IL+ 12/28/02+ Blue Sunday/White Crow
Stonecutters Seafood and Chop House+ Lemont+ IL+ 12/19/02+ Week Back
a  'Harry''s'+ Arlington Heights'+ 'IL'+ '2/1/03'+ 'Kimi Hayes'
'Shark City'+ Glendale Heights'+' IL'+ '12/28/02'+ 'Prezence'
'Tommy''s Place'+ Blue Island'+ 'IL'+ '12/28/02'+ 'Blue Sunday/White Crow'
'Stonecutters ''Seafood'' and Chop House'+ 'Lemont'+ 'IL'+ '12/19/02'+ 'Week Back'
c                 C   s:   t  ¡ }|  | | j¡d¡ |  | | j| j ¡d¡ d S ©NFT)r    ÚSnifferr3   Ú
has_headerÚsample1Úheader1©r   Úsnifferr   r   r   Útest_has_header  s    zTestSniffer.test_has_headerc                 C   s:   t  ¡ }|  | | j¡d¡ |  | | j| j ¡d¡ d S rz  )r    r{  r3   r|  Úsample8Úheader2r  r   r   r   Ú'test_has_header_regex_special_delimiter  s    z3TestSniffer.test_has_header_regex_special_delimiterc              	   C   s„   t  ¡ }dD ]r}|  |¡T | |d¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |j	d¡ W d   ƒ q1 st0    Y  qd S )N)z	;'123;4';z'123;4';z;'123;4'z'123;4'z,;r¶   ú'F)
r    r{  rw  Úsniffr1   r   r   r3   r4   r7   )r   r€  Úheaderr2   r   r   r   Útest_guess_quote_and_delimiter  s    z*TestSniffer.test_guess_quote_and_delimiterc                 C   sx   t  ¡ }| | j¡}|  |jd¡ |  |jd¡ |  |jd¡ | | j	¡}|  |jd¡ |  |jd¡ |  |jd¡ d S )Nr-   r/   Tr0   r…  F)
r    r{  r†  r}  r1   r   r   r3   r7   Úsample2©r   r€  r2   r   r   r   Ú
test_sniff   s    zTestSniffer.test_sniffc                 C   s  t  ¡ }| | j¡}|  |j| j¡ |j| jdd}|  |jd¡ |j| jdd}|  |jd¡ | | j¡}|  |jd¡ | | j¡}|  |jd¡ | | j	¡}|  |jd¡ | | j
¡}|  |jd¡ |  |jd	¡ | | j¡}|  |jd
¡ | | j¡}|  |jd
¡ |  |jd	¡ d S )Nz?,)Z
delimitersú?z/,ú/r¶   r­   rÉ   r…  ú+)r    r{  r†  Úsample3r'  r   r1   Úsample4Úsample5Úsample6Úsample7r   r‚  Úsample9rŠ  r   r   r   Útest_delimiters,  s*    zTestSniffer.test_delimitersc                 C   s„   t  ¡ }| | j¡}|  |j¡ | | j¡}|  |j¡ | | j¡}|  |j¡ | | j	¡}|  |j¡ | | j
¡}|  |j¡ d S r	   )r    r{  r†  r~  ZassertFalser4   rƒ  r‰  ri  r‚  r”  rŠ  r   r   r   Útest_doublequoteF  s    zTestSniffer.test_doublequoteN)r   r   r   r}  r‰  r~  r  r  r‘  r’  r“  rƒ  r‚  r”  r  r„  rˆ  r‹  r•  r–  r   r   r   r   ry  Ú  s"   
ry  c                   @   s   e Zd Zdd„ ZeZdS )ÚNULc                 G   s   d S r	   r   )Úsr<   r   r   r   r(   T  s    z	NUL.writeN)r   r   r   r(   Ú
writelinesr   r   r   r   r—  S  s   r—  Úgettotalrefcountzrequires sys.gettotalrefcount()c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú	TestLeaksc                 C   sx   d}t  ¡ }tdƒD ]R}t ¡  |  tjg ¡ t  ¡ }t dg¡ t dg¡ t dg¡ || }|}q|  	|d¡ d S )Nr   rS  úa,b,c
r”   ©
Úsysrš  rÔ   ÚgcÚcollectr1   Úgarbager    r&   Ú
assertLess)r   ÚdeltaÚlastrcrb   Úrcr   r   r   Útest_create_read[  s    zTestLeaks.test_create_readc                 C   sx   d}t  ¡ }tƒ }tdƒD ]L}t ¡  |  tjg ¡ t  ¡ }t 	|¡ t 	|¡ t 	|¡ || }|}q|  
|d¡ d S )Nr   rS  r”   )rž  rš  r—  rÔ   rŸ  r   r1   r¡  r    r+   r¢  )r   r£  r¤  r˜  rb   r¥  r   r   r   Útest_create_writej  s    


zTestLeaks.test_create_writec                 C   sr   d}dgd }t  ¡ }tdƒD ]B}t ¡  |  tjg ¡ t  ¡ }t |¡}|D ]}qN|| }|}q|  	|d¡ d S )Nr   rœ  r   rS  r  )r   r£  r¢   r¤  rb   r¥  Zrdrr£   r   r   r   Ú	test_readz  s    

zTestLeaks.test_readc           	      C   s†   d}g d¢gd }t ƒ }t ¡ }tdƒD ]L}t ¡  |  tjg ¡ t ¡ }t 	|¡}|D ]}| 
|¡ qX|| }|}q(|  |d¡ d S )Nr   rÄ   r   rS  )r—  rž  rš  rÔ   rŸ  r   r1   r¡  r    r+   rU   r¢  )	r   r£  r¢   r˜  r¤  rb   r¥  r+   r£   r   r   r   Ú
test_writeŠ  s    
zTestLeaks.test_writeN)r   r   r   r¦  r§  r¨  r©  r   r   r   r   r›  X  s   r›  c                   @   s$   e Zd Zg d¢Zdd„ Zdd„ ZdS )ÚTestUnicode)u   Martin von LÃ¶wisu   Marc AndrÃ© LemburgzGuido van Rossumu   FranÃ§ois Pinardc                 C   sp   t ddddN}| d | j¡d ¡ | d¡ t |¡}|  t|ƒ| jg¡ W d   ƒ n1 sb0    Y  d S ©NrR   r   rÁ   rÂ   r-   r.   r   )	r   r(   r[  ÚnamesrV   r    r&   r1   r„   r3  r   r   r   Útest_unicode_read¢  s
    

zTestUnicode.test_unicode_readc                 C   sr   t ddddP}t |¡}| | j¡ d | j¡d }| d¡ |  | ¡ |¡ W d   ƒ n1 sd0    Y  d S r«  )	r   r    r+   rU   r¬  r[  rV   r1   rW   )r   rZ   r+   rÅ   r   r   r   Útest_unicode_writeª  s    

zTestUnicode.test_unicode_writeN)r   r   r   r¬  r­  r®  r   r   r   r   rª  ›  s   rª  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚKeyOrderingTestc              	   C   s    t ƒ }tdƒD ]z}tddddX}t ||¡}| ¡  | d¡ t |¡}t|j	ƒ}|  
||¡ | |¡ W d   ƒ q1 s~0    Y  q|  
t|ƒdd¡ d S )	NZabcderR   r   rÁ   rÂ   r   éx   z@Key ordering: some key permutations not collected (expected 120))Úsetr   r   r    r  r  rV   r2  Útupler  r1   ÚaddÚlen)r   Z	resultsetÚkeysZ
fileobjectZdwZdrZktr   r   r   Ú,test_ordering_for_the_dict_reader_and_writer´  s    


*z<KeyOrderingTest.test_ordering_for_the_dict_reader_and_writerc              
   C   sú   t dƒ ¡ }|  tt |¡ƒtddgƒtddd ddgfgƒtdd	gƒtd
dgƒg¡ |  ttj|ddƒtddgƒtdddddgfgƒtdd	gƒtd
dgƒg¡ |d= |  ttj|ddgdƒtddgƒtddd ddgfgƒtddgƒtddgƒg¡ d S )Nz            FirstName,LastName
            Eric,Idle
            Graham,Chapman,Over1,Over2

            Under1
            John,Cleese
        )Ú	FirstNameÚEric)ÚLastNameÚIdle)r·  ÚGraham)r¹  ÚChapmanZOver1ZOver2)r·  ÚUnder1)r¹  N)r·  ÚJohn)r¹  ÚCleeseZ	OtherInforC  r   ÚfnameÚlnamer  )rÀ  r¸  )rÁ  rº  )rÀ  r»  )rÁ  r¼  )rÀ  r½  )rÁ  N)rÀ  r¾  )rÁ  r¿  )r   Ú
splitlinesr1   r„   r    r2  r   )r   Údatar   r   r   Útest_ordered_dict_readerÂ  s:    	

ÿ

üÿ

ÿ

üÿ

ÿ

üÿz(KeyOrderingTest.test_ordered_dict_readerN)r   r   r   r¶  rÄ  r   r   r   r   r¯  ²  s   r¯  c                   @   s   e Zd Zdd„ ZdS )ÚMiscTestCasec                 C   s   ddh}t j| td|d d S )Nr¦   Ú__version__)r    Z_csv)Úextra)r   Zcheck__all__r    )r   rÇ  r   r   r   Útest__all__ç  s    zMiscTestCase.test__all__N)r   r   r   rÈ  r   r   r   r   rÅ  æ  s   rÅ  Ú__main__)+rÒ   rž  ZunittestÚior   Útempfiler   r    rŸ  rÕ   Útestr   r8  r   Útextwrapr   Úcollectionsr   r   ZTestCaser   r§   rÚ   rÞ   r°   r  r  r  r  r  r  rR  rf  ry  r—  Z
skipUnlessÚhasattrr›  rª  r¯  rÅ  r   Úmainr   r   r   r   Ú<module>   sN     ^qa			 .. yÿA4
