o
    7f?                  	   @   sV  d dl Z d dlZd dl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mZmZmZmZ d dlZd dlZd dlmZmZmZmZ dYdd	ZG d
d dZe Z		dZdeedf dee de fddZ!deddfddZ"dedej#e$ ddfddZ%dedej#e$ ddfddZ&dedej#e$ ddfddZ'ej(j)ej*dkdddedej#e$ ddfdd Z+dedej#e$ ddfd!d"Z,dedej#e$ ddfd#d$Z-dedej#e$ ddfd%d&Z.dedej#e$ ddfd'd(Z/dedej#e$ ddfd)d*Z0dedej#e$ ddfd+d,Z1dedej#e$ ddfd-d.Z2dedej#e$ ddfd/d0Z3dedej#e$ ddfd1d2Z4dedej#e$ ddfd3d4Z5ej(j)e6ed5 p\e7ej8 d6ddedej#e$ ddfd7d8Z9dedej#e$ ddfd9d:Z:dedej#e$ ddfd;d<Z;dedej#e$ d=e<ddfd>d?Z=dedej#e$ ddfd@dAZ>dedej#e$ ddfdBdCZ?dedej#e$ ddfdDdEZ@dedej#e$ ddfdFdGZAdedej#e$ ddfdHdIZBdedej#e$ ddfdJdKZCdYdLdMZDdedNejEdej#e$ ddfdOdPZFej(GdQdRdedej#e$ dQe$ddfdSdTZHe jIdUe$dedV fdWdXZJdS )[    N)StringIO)Path)copyfile)Any	GeneratorOptionalTupleUnion)
EX_DATAERREX_OKEX_USAGEuri_regex_defreturnc                   C   s(   t dksJ tdksJ tdksJ dS )zTest our EX constants.r   @   A   N)r   r   r
    r   r   W/home/ertert/spirit/venv/lib/python3.10/site-packages/codespell_lib/tests/test_basic.pytest_constants   s   r   c                   @   sH   e Zd ZdZeddddedededeee	ee
e
f f fd	d
ZdS )MainWrapperz;Compatibility wrapper for when we used to return the count.TFcountstdargsr   r   r   c                 G   s   t dd |D }| rd| }tj| }t }|d usJ |j}|d us'J |jd }| \}}|tt	t
fv s;J |t
krIt|dd }n|tkr^| r^t|dd }|dks^J |re|||fS |S )Nc                 s       | ]}t |V  qd S Nstr.0argr   r   r   	<genexpr>#       z#MainWrapper.main.<locals>.<genexpr>)--countcapsys
r   )tuplecs_maininspectcurrentframef_backf_locals
readouterrr   r   r
   intsplit)r   r   r   codeframer#   stdoutstderrr   r   r   r(      s&   


zMainWrapper.mainN)__name__
__module____qualname____doc__staticmethodr   boolr	   r.   r   r   r(   r   r   r   r   r      s    r   r   r   .cwdc                 C   sF   t dd | D } tjddg| |dddd}t|jd	d
 }|S )zRun codespell.c                 s   r   r   r   r   r   r   r   r    @   r!   z run_codespell.<locals>.<genexpr>	codespellr"   Tutf-8F)r:   capture_outputencodingcheckr$   r%   )r&   
subprocessrunr.   r3   r/   )r   r:   procr   r   r   r   run_codespell;   s   
rC   tmp_pathc                 C   s6   t | ddks	J | d d t | ddksJ dS )z&Test running the codespell executable.)r:   r   bad.txtz+abandonned
Abandonned
ABANDONNED
AbAnDoNnEd   N)rC   
write_text)rD   r   r   r   test_commandL   s   rH   r#   c           
      C   s  t ddks	J | d }|  t jdd|dd}t|ts!J |\}}}|tks.J dd	|v s4J t |dks?J d
|d}|d W d   n1 sTw   Y  t |dksdJ d|d}|d W d   n1 syw   Y  t |dksJ d|d}|d W d   n1 sw   Y  t |dksJ d|d}|d W d   n1 sw   Y  t |dksJ dt dd|dksJ |d}|d W d   n1 sw   Y  t |dksJ d|d}|d W d   n	1 sw   Y  t |dks+J dt j|dddd}t|ts<J |\}}}|tksHJ d|v sOJ t j|d| d dd}t|tsbJ |\}}}|tksnJ d	|v suJ |  | d jdd d!}|d" W d   n	1 sw   Y  t | d#ksJ t jd$| dd}t|tsJ |\}}}|dksJ d%|v sJ | d jd d!}|	 }W d   n	1 sw   Y  t | dksJ |d&ksJ | d 
d' t | dksJ t jd(d)d$| d*dd+}t|tsJ |\}}	}|dks#J |	s)|r+J t | dks5J | d,   t | dksEJ dS )-zTest some basic functionality._does_not_exist_r   tmp-DfooTr   zmissing dictionaryzcannot find dictionary
empty fileazthis is a test file
Ngoodabandonned
   bad   worsez
tim
gonna
zwith a namez	--builtinzclear,rare,names,informalrF   wz;var = 'nwe must check codespell likes escapes nin strings'
z+checking our string escape test word is badz=var = '\nwe must check codespell likes escapes \nin strings'
zwith string escapezUnknown builtin dictionaryrE    )newlinezZabandonned
Abandonned
ABANDONNED
AbAnDoNnEd
abandonnedAbandonned
ABANDONNED 
 AbAnDoNnEd   -wzFIXED:zRabandoned
Abandoned
ABANDONED
abandoned
abandonedAbandoned
ABANDONED 
 abandonedzabandonned abandonned
-q16Fr   empty)csr(   touch
isinstancer&   r   openwriteunlinkreadrG   mkdir)
rD   r#   fnameresultr0   _r3   fnew_contentr2   r   r   r   
test_basicT   s   






rk   c                 C   s   | d }| d}|d W d    n1 sw   Y  t|dks)J d| d }|jddd	 t|dks?J d
|jddd	 t|dksQJ dd S )NbacktickrO   z`abandonned`
rR   rS   
apostrophezwoudn't
r<   r>   z3misspelling containing typewriter apostrophe U+0027u
   woudn’t
z4misspelling containing typographic apostrophe U+2019)ra   rb   r^   r(   rG   )rD   r#   rf   ri   r   r   r   test_default_word_parsing   s   ro   c                 C   s   | d }|   |d }|d t|dksJ tjdd|dd}t|ts*J |\}}}tjdk rC|tks<J d	d	|v sBJ n|dksIJ tdd
|dksTJ d S )Nglobz	[b-a].txtrQ   rR   z--skipTrM   i
zinvalid globz[[]b-a[]].txtr   )	re   rG   r^   r(   r`   r&   sys
hexversionr   )rD   r#   grf   rg   r0   rh   r3   r   r   r   test_bad_glob   s   


rt   linuxzOnly supported on Linuxreasonc                 C   s   | d }| d tj|dd}t|tsJ |\}}}d|vs"J |d tj|dd}t|ts5J |\}}}d|v s@J dS )zTest permission error handling.zunreadable.txtrQ   TrM   zWARNING:r   N)rG   r^   r(   r`   r&   chmod)rD   r#   rf   rg   r0   rh   r3   r   r   r   test_permission_error   s   



ry   c                 C   s  | d }|   zt|dksJ d|d tdd|dks&J dtd	 tdd
|dks6J W d   n1 s@w   Y  td$ tjddd
|dd}t|ts[J |\}}}|dksfJ W d   n1 spw   Y  d|v s{J td tddd
|dksJ W d   n1 sw   Y  t|dksJ W |  n|  w | d }|d z8t|dksJ td tddd
|dksJ W d   n1 sw   Y  t|dksJ W |  n|  w | d }|d zt|dks
J td tddd
|dksJ W d   n	1 s'w   Y  t|dks6J td tddd
|dksHJ W d   n	1 sSw   Y  t|dksbJ | dkskJ |d t|dkszJ td& tjddd
|dd}t|tsJ |\}}}|dksJ W d   n	1 sw   Y  d|v sJ t|dksJ | dksJ W |  dS |  w )zTest interactionrJ   r   rN   rQ   z-iz-1rR   rS   zy
3Nzn
rZ   TrM   z==>zx
y
tmp2 tmp3zackward
z 
0
zawkward
zx
1
za valid optionz	backward
)	r_   r^   r(   rG   	FakeStdinr`   r&   rc   	read_text)rD   r#   rf   rg   r0   r2   rh   r   r   r   test_interactivity   sn   












r   c                 C   s:  | d }|   tj|ddd}t|tsJ |\}}}|dks"J |s&|r*J dtj|ddd}t|ts9J |\}}}|dksDJ |d	ksJJ d
|v sPJ t|ddks[J |d |dksfJ tj|ddd}t|tsuJ |\}}}|dksJ d
|v sJ t|ddksJ d| d v sJ dS )zTest summary functionality.rJ   TFr   r   r   z	no outputz	--summaryrM   r~   SUMMARYr$      zabandonned
abandonnedz2
   
abandonnedr%   N)r_   r^   r(   r`   r&   lenr/   rG   )rD   r#   rf   rg   r0   r2   r3   r   r   r   test_summary  s.   



r   c                 C   sP   | d }| d t|dksJ | d }| d td||dks&J dS )	z%Test ignore dictionary functionality.rE   z&1 abandonned 1
2 abandonned 2
abondon
   z
ignore.txtrQ   z-IrR   NrG   r^   r(   rD   r#   bad_namerf   r   r   r   test_ignore_dictionary;  s   

r   c                 C   s:   | d  d t| dksJ tdd| dksJ dS )z$Test ignore word list functionality.rE   zabandonned
abondon
abilty
r   z-Labandonned,somewordz-LabiltyrR   Nr   rD   r#   r   r   r   test_ignore_word_listH  s   r   c                 C   s~   | d  d t| dksJ tdd| dksJ tjddd| dd	}t|ts,J |\}}}|tks7J d
|v s=J dS )zTest custom word regex.rE   zabandonned_abondon
r   z-rz[a-z]+rT   z--write-changesTrM   zERROR:N)rG   r^   r(   r`   r&   r   )rD   r#   rg   r0   rh   r3   r   r   r   test_custom_regexR  s   
r   c                 C   sb   | d }| d t|dksJ | d }| d t|dks$J td||dks/J dS )	z Test exclude file functionality.rE   s   1 abandonned 1
2 abandonned 2
rT   ztmp.txts   1 abandonned 1
z-xrR   N)write_bytesr^   r(   r   r   r   r   test_exclude_filea  s   

r   c                 C   s  | d }|   t|dksJ |d  t|dks!J td|dks+J |d}|d W d   n1 s@w   Y  t|dksNJ |d	 tjd
d|ddd}t|tsdJ |\}}}|dksoJ d|v suJ d|v s{J tjd
d|ddd}t|tsJ |\}}}|dksJ d|v sJ d|vsJ |d tj|ddd}t|tsJ |\}}}|dksJ |s|rJ tjd
d|ddd}t|tsJ |\}}}|dksJ |rJ d|v sJ dS )zTest encoding handling.rJ   r   u   naïve
z-eabs   naieve
NrR   s(   Speling error, non-ASCII: htrognit
r[   0Tr   Spelingz
iso-8859-11
     naiive  FzWARNING: Binary file)	r_   r^   r(   r   encodera   rb   r`   r&   )rD   r#   rf   ri   rg   r0   r2   r3   r   r   r   test_encodingo  sF   





r   c                 C   s(   | d }|   td|dksJ dS )z7Test opening a file with unknown encoding using chardetrJ   z--hard-encoding-detectionr   N)r_   r^   r(   rD   r#   rf   r   r   r   test_unknown_encoding_chardet  s   r   c                 C   s  | d }| d t| dksJ | d }| d t| dks$J td| dks.J td| dks8J | d	 }|  |d  d t| d
ksPJ td| dksZJ td| dksdJ td| dksnJ td| dksxJ | d }t|| td|||dksJ dS )z'Test ignoring of files and directories.good.txtzthis file is okayr   rE   r   rR   z--skip=bad*z--skip=bad.txt	ignoredirrT   z--skip=*ignoredir*z--skip=ignoredirz--skip=*ignoredir/bad*zbad.jsz--skip=*.jsN)rG   r^   r(   re   r   )rD   r#   goodtxtbadtxtsubdirbadjsr   r   r   test_ignore  s&   


r   c                 C   sd   | d }|   td| dksJ |d td| dks!J |d td| dks0J dS )zTest filename check.abandonned.txt-frR   .r   N)r_   r^   r(   rG   r   r   r   r   r   test_check_filename  s   

r   mkfifozrequires os.mkfifoc                 C   s&   t | d  td| dksJ dS )z#Test irregular file filename check.r   r   rR   N)osr   r^   r(   r   r   r   r   "test_check_filename_irregular_file  s   	r   c                 C   s  | d }| d t|dksJ t| dksJ | d }|| t|dks-J t| dks6J td|dks@J td| dksJJ | d }|| t|dks\J t| dkseJ td|dksoJ td| dksyJ tdd|d	ksJ tdd| d	ksJ t| dksJ td| dksJ tdd| d	ksJ | d
 }|  t|||j  |d }|  t|||j  t| dksJ td| dksJ tdd| dksJ zt| }W n	 t	y   Y n"w t|dksJ td|dksJ tdd|dksJ | d }|  |d
 }|  t|||j  t| dks?J td| dksJJ tdd| dksVJ dS )zTest ignoring of hidden files.ztest.txtzerorr
rR   z	.test.txtr   z--check-hiddenz.abandonned.txt--check-filenamesrT   z.abandonnedr   r   rY   rF      N)
rG   r^   r(   renamere   r   nameoprelpath
ValueError)rD   r#   rf   hidden_file	typo_filehiddenr   relr   r   r   test_check_hidden  s\   



r   c                 C   s   | d }|   t|dksJ |d tj|dd}t|ts$J |\}}}|dks/J d|v s5J tjd|dd}t|tsDJ |\}}}|dksOJ d	|v sUJ |jd
ddks_J dS )z4Test that capitalized entries get detected properly.rJ   r   s   this has an ACII errorTrM   rR   ASCIIrZ   FIXEDr<   rn   zthis has an ASCII errorN)r_   r^   r(   r   r`   r&   r   )rD   r#   rf   rg   r0   r2   rh   r3   r   r   r   test_case_handling>  s   


r   rw   c           	      C   sr  | d }|r| d n| d | d }| d tjd||dd}t|ts*J |\}}}d	|v s5J |r=d
|v s=J | d tjd||dd}t|tsRJ |\}}}d|v s]J |red
|v seJ | d tjd||dd}t|tszJ |\}}}d|v sJ |rd
|v sJ | d tjd||dd}t|tsJ |\}}}d	|v sJ |rd
|v sJ d S d S )Nzdictionary.txtz"adoptor->adopter, adaptor, reason
zadoptor->adopter, adaptor,
rE   zearly adoptor
rK   TrM   zadopter, adaptorrw   zEarly Adoptor
zAdopter, AdaptorzEARLY ADOPTOR
zADOPTER, ADAPTORzEaRlY AdOpToR
)rG   r^   r(   r`   r&   )	rD   r#   rw   dictionary_namerf   rg   r0   r2   rh   r   r   r   #_helper_test_case_handling_in_fixesV  sF   








r   c                 C   s    t | |dd t | |dd dS )z=Test that the case of fixes is similar to the mispelled word.Frv   TN)r   r   r   r   r   test_case_handling_in_fixes  s   r   c                 C   s|  | d  d tjdd| dd}t|tsJ |\}}}|dks"J |d}t|d	ks/J |d
 dks7J |d dks?J |d dksGJ tjdd| dd}t|tsWJ |\}}}|dksbJ |d}t|dksoJ |d
 dkswJ |d dksJ |d dksJ |d dksJ |d dksJ tjdd| dd}t|tsJ |\}}}|dksJ |d}t|d	ksJ |d
 dksJ |d dksJ |d dksJ tjdd| dd}t|tsJ |\}}}|dksJ |d}t|dksJ |d
 dksJ |d dksJ tjdddd| dd}t|ts$J |\}}}|dks0J |d}t|dks>J |d
 dksGJ |d dksPJ |d dksYJ |d dksbJ tjdddd| dd}t|tsuJ |\}}}|tksJ |d}d|d
 v sJ tjdddd| dd}t|tsJ |\}}}|tksJ |d}d|d
 v sJ dS )zTest context options.zcontext.txtz-line 1
line 2
line 3 abandonned
line 4
line 5z-Cr   TrM   rR   r$   r   r   z: line 2z> line 3 abandonnedrT   z: line 410r   z: line 1r   rF   z: line 5z-B2z-A   ERRORN)rG   r^   r(   r`   r&   r/   r   r   )rD   r#   rg   r0   r2   rh   linesr3   r   r   r   test_context  s|   













r   c                 C   s  t jddd}t|tsJ |\}}}|tksJ d|v sJ | d }|d t |dks1J t |ddks;J t |d	dksEJ t |d
dksOJ t |ddksYJ t |ddkscJ |d t |dksqJ t |ddks{J t |ddksJ dS )'Test ignore regex option functionality.z--ignore-regex=(TrM   usage:flag.txt4# Please see http://example.com/abandonned for info
rR   z--ignore-regex=z--ignore-regex=""z--ignore-regex=^$z--ignore-regex=abandonnedr   z--ignore-regex=nnabandonned donn
rT   z--ignore-regex=donnz--ignore-regex=\bdonn\bNr^   r(   r`   r&   r   rG   rD   r#   rg   r0   r2   rh   rf   r   r   r   test_ignore_regex_option  s"   


r   c                 C   s   t jddd}t|tsJ |\}}}|tksJ d|v sJ | d }|d t |dks1J t |dd	ks;J t |d
dd	ksFJ t |ddd	ksQJ |d t |dks_J t |ddksiJ t |ddkssJ t |ddd	ks~J dS )z&Test --uri-regex option functionality.z--uri-regex=(TrM   r   r   z,# Please see http://abandonned.com for info
rR   "--uri-ignore-words-list=abandonnedr   z--uri-regex=z--uri-regex=\bhttp.*\br   z--uri-regex=.*Nr   r   r   r   r   test_uri_regex_option  s$   


r   c                 C     | d }| d t|dksJ t|ddksJ t|ddks&J t|ddks0J t|ddks:J t|d	dksDJ t|d
dksNJ | d t|dks\J t|ddksfJ t|d	dkspJ t|ddkszJ d}dD ]}| | t|dksJ |t||dksJ |q~dD ]}| | t|dksJ |t||dksJ |qdS )r   r   r   rR   --uri-ignore-words-list=#--uri-ignore-words-list=foo,exampler   r   *--uri-ignore-words-list=foo,abandonned,bar--uri-ignore-words-list=* --uri-ignore-words-list=abandonnz)abandonned http://example.com/abandonned
rT   --ignore-words-list=abandonned)z(# Please see http://abandonned for info
z*# Please see "http://abandonned" for info
z-# Please see "http://foo"abandonned for info
z)# Please see https://abandonned for info
z'# Please see ftp://abandonned for info
z0# Please see http://example/abandonned for info
r   z5# Please see http://exam.com/ple#abandonned for info
z5# Please see http://exam.com/ple?abandonned for info
z2# Please see http://127.0.0.1/abandonned for info
zR# Please see http://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]/abandonned for info
)z"# Please see abandonned/ for info
z&# Please see http:abandonned for info
z%# Please see foo/abandonned for info
z,# Please see http://foo abandonned for info
Nr   rD   r#   rf   variation_option	variationr   r   r   %test_uri_ignore_words_list_option_uri3  s0   



r   c                 C   r   )r   r   z-# Please see example@abandonned.com for info
rR   r   r   r   r   r   r   r   z"abandonned example@abandonned.com
rT   r   )z)# Please see example@abandonned for info
z)# Please see abandonned@example for info
z-# Please see abandonned@example.com for info
zA# Please see mailto:abandonned@example.com?subject=Test for info
)z+# Please see example @ abandonned for info
z*# Please see abandonned@ example for info
zE# Please see mailto:foo@example.com?subject=Test abandonned for info
Nr   r   r   r   r   'test_uri_ignore_words_list_option_emailt  s0   



r   c                  C   s   t t} d}d}d}d}|| D ]}| ||gksJ || || |gks-J |q|D ]}| |r;J || || rFJ |q0d S )N)$zhttp://foo.com/blah_blahzhttp://foo.com/blah_blah/z$http://foo.com/blah_blah_(wikipedia)z,http://foo.com/blah_blah_(wikipedia)_(again)z%http://www.example.com/wpstyle/?p=364z1https://www.example.com/foo/?bar=baz&inga=42&quuxu   http://✪df.ws/123z'http://userid:password@example.com:8080z(http://userid:password@example.com:8080/zhttp://userid@example.comzhttp://userid@example.com/zhttp://userid@example.com:8080zhttp://userid@example.com:8080/z"http://userid:password@example.comz#http://userid:password@example.com/zhttp://142.42.1.1/zhttp://142.42.1.1:8080/u   http://➡.ws/䨹u   http://⌘.wsu   http://⌘.ws/z&http://foo.com/blah_(wikipedia)#cite-1z+http://foo.com/blah_(wikipedia)_blah#cite-1u&   http://foo.com/unicode_(✪)_in_parensz'http://foo.com/(something)?after=parensu   http://☺.damowmow.com/z/http://code.google.com/events/#&product=browserzhttp://j.mpzftp://foo.bar/bazz,http://foo.bar/?q=Test%20URL-encoded%20stuffu   http://مثال.إختبارu   http://例子.测试u/   http://उदाहरण.परीक्षाz2http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.comzhttp://1337.netzhttp://a.b-c.dezhttp://223.255.255.254)
zhttp://z//z//az///az///zfoo.comzrdar://1234zh://testz://should.failzftps://foo.bar/)zhttp://.z	http://..z
http://../zhttp://?z	http://??z
http://??/zhttp://#z	http://##z
http://##/z	http:///azhttp://-error-.invalid/zhttp://a.b--c.de/zhttp://-a.b.cozhttp://a.b-.cozhttp://0.0.0.0zhttp://10.1.1.0zhttp://10.1.1.255zhttp://224.1.1.1zhttp://1.1.1.1.1zhttp://123.123.123zhttp://3628126748zhttp://.www.foo.bar/zhttp://www.foo.bar./zhttp://.www.foo.bar./zhttp://10.1.1.1zSurrounding text %s more text)recompiler   findall)	uri_regextrue_positivestrue_negativesfalse_positivesboilerplateurir   r   r   test_uri_regex_def  s   
&r   tmpdirc                 C   s  | d }|   t| d }t|d}|d W d    n1 s#w   Y  d|f}tjt|g|dR ddi}t|tsCJ |\}}	}
|d	ksNJ d
|	vsTJ tjt|g|dR ddi}t|tskJ |\}}	}
|d	ksvJ d
|	v s|J d|	v sJ d S )Nfiles	setup.cfgrV   z[codespell]
--configz--quiet-level=32r   Tr   zUsed config files:z--quiet-level=2)re   r   ra   rb   r^   r(   r`   r&   )rD   r   r#   dconfri   r   rg   r0   r2   rh   r   r   r   test_quiet_option_32  s$    
 
r   kind)tomlcfgc              	   C   s  | d }|   |d d |d d |d d tj|dd	d	d
}t|ts-J |\}}}|dks8J d|v s>J d|v sDJ |dkrV| d }d|f}	|d n|dks\J tjdk rft	d | d }
d|
f}	|
d tj|g|	R dd	i}t|tsJ |\}}}|dksJ d|vsJ d|vsJ t
 }z t|  tj|d	d	d
}t|tsJ |\}}}W t| nt| w |dksJ d|vsJ d|vsJ dS )z0Test loading options from a config file or toml.r   rE   r   r   rP   r   rW   r   Tr   r   r   r   r   z1[codespell]
skip = bad.txt, whatever.txt
count =
r   )r   r   tomlizpyproject.tomlz--tomlzT[tool.codespell]
skip = 'bad.txt,whatever.txt'
check-filenames = false
count = true
r   r   N)re   rG   r^   r(   r`   r&   rq   version_infopytestimportorskipr   r:   r   chdir)rD   r#   r   r   rg   r0   r2   rh   conffiler   tomlfiler:   r   r   r   test_config_toml$  sR   





r   text)NNNc                 c   s2    t j}zt| }|t _d V  W |t _d S |t _w r   )rq   stdinr   )r   oldinin_r   r   r   r   i  s   r   )r   N)r   N)K
contextlibr)   r   os.pathpathr   r   r@   rq   ior   pathlibr   shutilr   typingr   r   r   r   r	   r   codespell_libr'   codespell_lib._codespellr
   r   r   r   r   r   r^   r.   rC   rH   CaptureFixturer   rk   ro   rt   markskipifplatformry   r   r   r   r   r   r   r   r   r   r   hasattrcallabler   r   r   r   r9   r   r   r   r   r   r   r   r   TempPathFactoryr   parametrizer   contextmanagerr   r   r   r   r   <module>   s   



O


@






/





^

9

S
$
%
A

6]
D