B
    u9a7                @   s   d dl mZmZmZmZmZ d dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlm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
jZG dd de
jZG dd de
jZedkre
  dS )    )
gc_collect
bigmemtest_2Gcpython_onlycaptured_stdoutN)Scanner)proxyc                   s   e Zd Z fddZ  ZS )Sc                s   t t |S )N)r	   super__getitem__)selfindex)	__class__ /usr/lib/python3.7/test_re.pyr      s    zS.__getitem__)__name__
__module____qualname__r   __classcell__r   r   )r   r   r	      s   r	   c                   s   e Zd Z fddZ  ZS )Bc                s   t t |S )N)r   r
   r   )r   r   )r   r   r   r      s    zB.__getitem__)r   r   r   r   r   r   r   )r   r   r      s   r   c               @   s   e Zd ZdddZdddZdd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d4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFdG Z%dHdI Z&dJdK Z'dLdM Z(dNdO Z)dPdQ Z*dRdS Z+dTdU Z,dVdW Z-dXdY Z.dZd[ Z/e0d\d] Z1d^d_ Z2d`da Z3dbdc Z4dde5j6fdddeZ7e8j9e8j: df Z;dgdh Z<didj Z=dkdl Z>dmdn Z?dodp Z@dqdr ZAdsdt ZBdudv ZCdwdx ZDdydz ZEd{d| ZFd}d~ ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfegehdddd ZiegehddddÄ Zjddń ZkddǄ Zle0ddɄ Zmdd˄ Zndd̈́ Zoddτ Zpddф Zqddӄ ZrddՄ Zse0ddׄ Ztddل Zuddۄ Zvdd݄ Zwdd߄ Zxdd Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Zdd Zdd ZdS )ReTestsNc                s,    ||   fdd|| d S )Nc                sL   t |ttfr2x8t| |D ]\}}|| qW nt| t|  d S )N)
isinstancetuplelistzipassertIstype)actualexpectxy)msgrecurser   r   r   r"      s    z)ReTests.assertTypedEqual.<locals>.recurse)assertEqual)r   r   r   r!   r   )r!   r"   r   r   assertTypedEqual   s    zReTests.assertTypedEqualc          	   C   sh   |  tj}t| W d Q R X | j|d0 |j}| |j| |d k	rZ| |j| W d Q R X d S )N)pattern)	assertRaisesreerrorcompilesubTest	exceptionr#   r!   pos)r   r%   errmsgr,   cmerrr   r   r   checkPatternError&   s    zReTests.checkPatternErrorc          	   C   sn   |  tj}t||| W d Q R X | j||d0 |j}| |j| |d k	r`| |j| W d Q R X d S )N)r%   repl)	r&   r'   r(   subr*   r+   r#   r!   r,   )r   r%   r1   stringr-   r,   r.   r/   r   r   r   checkTemplateError/   s    zReTests.checkTemplateErrorc          	   C   sR   t d}td|}| t |d W d Q R X t| ~t  |d d S )N   x   as  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)	bytearrayr'   finditerr&   BufferErrorextendr   r   )r   bitr   r   r   test_keep_buffer8   s    zReTests.test_keep_bufferc             C   s2   d}t d}t|}| |d|d d S )NZQabbbcRzab+c)r'   r)   r   r#   findall)r   sr   r    r   r   r   test_weakrefC   s    
zReTests.test_weakrefc             C   s   |  tdddd |  tdd d |  tdddd |  tdd d | tdd |  td	d
dd |  td	d
 d |  tdddd |  tdd d | tdd
 d S )Nzx*Zaxxr   )r   r   zx+)      r   Zaaaza*xxxZxxxa)r   rB   za+)r#   r'   searchspanassertIsNonematch)r   r   r   r   test_search_star_plusI   s    zReTests.test_search_star_plusc             C   s   t |d}t|d S )Nr   rA   )intgroupstr)r   ZmatchobjZ	int_valuer   r   r   bump_numU   s    zReTests.bump_numc                s  |  tdddd |  tdtdtdd |  tdddd |  tdtdtdd |  tdtdtdd |  tdtdtdd x&d	D ]}| t|dd
| d qW | tdddd | td| jdd | td| jddd | tjd| jdddd | tddd dd | tdddd d | td dd | td 	ddd  | td fddd  | td d!dd" | td d#dd" | td$d%dd" | td$d&dd" | tdd'dd( | tdd(dd( | tdd(dt
d)t
d* t
d+ t
d, t
d- t
d. t
d/  xZd0D ]R}| |< | tj$ | tdd| dd|  W d Q R X W d Q R X qW | td1d2d3d4 d S )5Nr    axyzZxaz   yr6   s   xyzs   xaz)   àu   аu   𝒜zx%szz(?i)b+r   z	bbbb BBBBzx xz\d+z08.2 -2 23x99yz9.3 -3 24x100yrB   z9.3 -3 23x99y)count.c             S   s   dS )Nz\nr   )mr   r   r   <lambda>k       z+ReTests.test_basic_re_sub.<locals>.<lambda>z\n
z\1\1z(.)xx\z\\c                s    S )Nr   )rS   )r?   r   r   rT   q   rU   z(?P<a>x)z
\g<a>\g<a>Zxxxxz
\g<a>\g<1>z
(?P<unk>x)z\g<unk>\g<unk>z
\g<1>\g<1>z\t\n\v\r\f\a\bz	
	   
                  Z,cdehijklmopqsuwxyzABCDEFGHIJKLMNOPQRSTUVWXYZz^\s*XtestZXtest)r$   r'   r2   r	   r   r7   
memoryviewr#   rL   replacechrr*   r&   r(   )r   r    cr   )r?   r   test_basic_re_subY   sD    
:
8zReTests.test_basic_re_subc             C   s   |  tdddd d S )Nz
(?P<unk>x)z\g<1>\g<1>\brW   zxxxx)r#   r'   r2   )r   r   r   r   test_bug_449964   s    zReTests.test_bug_449964c             C   s\   |  tdddd |  tdddd |  tdddd |  tdddd d S )Nz\r\nz\nz
abc
def
zabc
def
z
rV   )r#   r'   r2   )r   r   r   r   test_bug_449000   s    zReTests.test_bug_449000c             C   sd   t d}| tt j|dt j | tt j|dt j | tt j|dt j | tt j|t j d S )NrR   A)r'   r)   r&   
ValueErrorrG   IrD   r>   )r   r%   r   r   r   test_bug_1661   s
    
zReTests.test_bug_1661c             C   s   t d d S )Nz(?P<quote>)(?(quote)))r'   r)   )r   r   r   r   test_bug_3629   s    zReTests.test_bug_3629c             C   s  |  tdddd |  tdddd |  tdddd |  tdddd |  tdd	dd
 |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd
 |  tdddd | ddddd | ddddd | dddd d! | dd"dd#d! | dd$dd%d! | dd&dd'd! | dd(dd)d! | dd*dd d! | dd+dd,d! | dd-dd.d! | dd/dd'd! | dd0dd'd! | dd1dd)d! | dd2dd3d! | dd"d4d#d! |  td5d&dd |  td6d/d7d8 |  td6d0d7d9 d S ):Nr   z\0 z\000z\001z\008z 8z\009z 9z\111rk   z\117Oz\377   ÿz\1111ZI1z\00z\07z\08z\09z\0az az\400z0octal escape value \400 outside of range 0-0o377r   z\777z0octal escape value \777 outside of range 0-0o377z\1zinvalid group reference 1rA   z\8zinvalid group reference 8z\9zinvalid group reference 9z\11zinvalid group reference 11z\18zinvalid group reference 18z\1az\90zinvalid group reference 90z\99zinvalid group reference 99z\118z\11az\181z\800zinvalid group reference 80 z(((((((((((x)))))))))))z((((((((((y))))))))))(.)rN   Zxz8Zxza)r#   r'   r2   r4   )r   r   r   r    test_sub_template_numeric_escape   sN    

z(ReTests.test_sub_template_numeric_escapec             C   sL   |  tdddd |  tddddd |  tjdddddd d S )NrM   r;   ZaaaaaZbbbbbrA   Zbaaaa)rQ   )r#   r'   r2   )r   r   r   r   test_qualified_re_sub   s    zReTests.test_qualified_re_subc             C   s   |  tdddd d S )Nz(\S)\s+(\S)z\1 \2zhello  therezhello there)r#   r'   r2   )r   r   r   r   test_bug_114660   s    zReTests.test_bug_114660c             C   s  t d t d t d | dd | ddd | d	d
 | ddd | ddd | ddd | ddd | dd | dd | ddd | ddd | ddd | ddd | ddd | ddd | d dd | d!dd" | d#dd" | d$dd" | d%d&d" | d'd(d" | d)dd" t d* t d+ | d,d-d d.d/d0 td1d2D }d3| }| t |d4 d5 d S )6Nz(?P<a>x)(?P=a)(?(a)y)z(?P<a1>x)(?P=a1)(?(a1)y)z(?P<a1>x)\1(?(1)y)z(?P<a>)(?P<a>)z6redefinition of group name 'a' as group 2; was group 1z(?P<a>(?P=a))zcannot refer to an open grouprZ   z(?Pxy)zunknown extension ?Pxz(?P<a>)(?P=azmissing ), unterminated namer[   z(?P=zmissing group name   z(?P=)z(?P=1)zbad character in group name '1'z(?P=a)zunknown group name 'a'z(?P=a1)zunknown group name 'a1'z(?P=a.)z bad character in group name 'a.'z(?P<)zmissing >, unterminated namez(?P<az(?P<z(?P<>)z(?P<1>)z(?P<a.>)z(?(rB   z(?())z(?(a))z(?(-1))z bad character in group name '-1'z(?(1a))z bad character in group name '1a'z(?(a.))u   (?P<µ>x)(?P=µ)(?(µ)y)uf   (?P<𝔘𝔫𝔦𝔠𝔬𝔡𝔢>x)(?P=𝔘𝔫𝔦𝔠𝔬𝔡𝔢)(?(𝔘𝔫𝔦𝔠𝔬𝔡𝔢)y)u	   (?P<©>x)u    bad character in group name '©'|c             s   s   | ]}d ||f V  qdS )zx(?P<a%d>%x)yNr   ).0ir   r   r   	<genexpr>   s    z/ReTests.test_symbolic_groups.<locals>.<genexpr>rA      z(?:%s)(?(200)z|t)xc8yz)r      )r'   r)   r0   joinranger#   rG   rE   )r   patr   r   r   test_symbolic_groups   sB    




zReTests.test_symbolic_groupsc          	   C   sf  |  ddddd |  ddddd |  dddd	d
 |  ddddd |  ddddd |  ddddd |  ddddd |  ddddd | td tddd W d Q R X | tdddd | tdddd |  ddddd | tdddd | tdddd |  dddd d d!d"d# tdd$D }| t|d%d&d' d S )(Nz(?P<a>x)z\g<arW   zmissing >, unterminated namerB   z\g<zmissing group namez\gz	missing <   z\g<a a>z!bad character in group name 'a a'z\g<>z\g<1a1>z!bad character in group name '1a1'z\g<2>zinvalid group reference 2z\2rA   zunknown group name 'ab'z\g<ab>z(?P<a>x)|(?P<b>y)z\g<b>rs   z\g<-1>z bad character in group name '-1'u	   (?P<µ>x)u   \g<µ>u#   (?P<𝔘𝔫𝔦𝔠𝔬𝔡𝔢>x)u    \g<𝔘𝔫𝔦𝔠𝔬𝔡𝔢>u   \g<©>u    bad character in group name '©'rx   c             s   s   | ]}d ||f V  qdS )zx(?P<a%d>%x)yNr   )ry   rz   r   r   r   r{     s    z-ReTests.test_symbolic_refs.<locals>.<genexpr>r|   z\g<200>Z	xc8yzxc8yZc8zc8)r4   assertRaisesRegex
IndexErrorr'   r2   r#   r   r   )r   r   r   r   r   test_symbolic_refs   s6    








zReTests.test_symbolic_refsc             C   s   |  tdddd |  tdddd |  tdddd |  td	ddd
 |  td	dddd |  tjd	ddddd d S )Nz(?i)b+r   z	bbbb BBBB)zx xr   zb+)zx BBBBrA   rN   )rN   r   zb*)Zxxxyxzxrw   r   )Zxxxyzr   )rQ   )r#   r'   subn)r   r   r   r   test_re_subn  s    zReTests.test_re_subnc             C   sZ  xpdt dfD ]`}| td|dddddg | td|ddddg | td|dddddd	dg qW x|d
td
td
td
fD ]`}| td|dddddg | td|ddddg | td|dddddddg qW x|dD ]t\}}}d|||f }| td|d||d|g | td|d|||g | td|dd|d|d	|g qW | tddddddg | tdddddddddg | tdddddddg | tdddd ddd dddd dd d	dg | tdddddddg xdddddddddgfdddddddddgfddddddddddd	dddddgfddddd dddd dddd dd dgfgD ]6\}}| j|d | t|d| W d Q R X qW xddddddddddg	fd ddddd	ddgfd!dd"d#dd$gfd%dd&d'ddgfgD ]6\}}| j|d | t|d| W d Q R X qW d S )(Nz:a:b::c:rs   rM   r;   re   z:+z(:+)z::s   :a:b::c   :rU   r6      b   cs   :+s   (:+)s   ::)u   àßçu   абвu   𝒜𝒞𝒵z
:%s:%s::%sz(?::+)z(:)+z([b:]+)z:b::z(b)|(:+)z(?:b)|(?::+)z:*z(?::*)z(:*)z(:)*)sepz\bz(?=:)z:az:bz:cz(?<=:)za:zb:)	r	   r$   r'   splitr   r7   rb   r#   r*   )r   r3   rM   r;   re   r   expectedr   r   r   test_re_split%  sZ    $0$zReTests.test_re_splitc             C   s   |  tddddddg |  tjdddddddg |  tjdddddd	d
g |  tjdddddddddg |  tjdddddddddg |  tjdddddddddg d S )Nr   z:a:b::cr   rs   rM   zb::c)maxsplitza:b:c:dr;   zc:dz(:)z(:+)z(:*)za:b::c)r#   r'   r   )r   r   r   r   test_qualified_re_splitZ  s    zReTests.test_qualified_re_splitc             C   s  |  tddg  xbdtdfD ]R}| td|dddg | td|dddg | td|d	d
dg q"W xndtdtdtdfD ]R}| td|dddg | td|dddg | td|dddg qW xdD ]}|d }|d }d|||f }|  td| ||||g |  td| ||||g |  td||f ||df||f||fg qW d S )Nz:+abcz
a:b::c:::dr   z::z:::z(:+)z(:)(:*))r   rs   )r   r   )r   z::s
   a:b::c:::ds   :+r   s   ::s   :::s   (:+)s   (:)(:*))r   rU   )r   r   )r   s   ::)rP   u   аu   𝒜r   rB   z
a%sb%sc%sdz%s+z(%s+)z	(%s)(%s*)rs   )r#   r'   r>   r	   r$   r   r7   rb   )r   r3   r   rW   rC   r   r   r   test_re_findalle  s0    
zReTests.test_re_findallc             C   s   |  tdddddg d S )Nz(a|(b))aba)rM   rs   )r;   r;   )r#   r'   r>   )r   r   r   r   test_bug_117612  s    zReTests.test_bug_117612c             C   s  xdt dfD ]}| td| d | td| d | td|dd | td|dd | td|ddd qW xdtdtdtdfD ]}| td| d | td	| d
 | td	|dd | td	|dd | td	|ddd qW xdD ]}| t|| d | td| | |f | td| |d| | td| |d| | td| |dd||f q>W t	d}| |d d | |d d | |d d | |d d | |ddd t	d}| |ddddd | |ddddd | |ddddd  d S )!NrM   r   z(a))rM   r   rA   )rM   rM   r6   s   (a))r6   )r6   r6   )rP   u   аu   𝒜z(%s)z((a)|(b))(c)?)rM   rM   NNr;   )r;   Nr;   Nac)rM   rM   Nre   bc)r;   Nr;   re   rs   )r;   rs   r;   re   z!(?:(?P<a1>a)|(?P<b2>b))(?P<c3>c)?r   rB   )rM   NNa1b2c3)Nr;   N)rM   Nre   )
r	   r#   r'   rG   groupsrJ   r   r7   rb   r)   )r   r3   rM   r   r   r   r   test_re_match  s:      
*

zReTests.test_re_matchc             C   s   G dd d}t dd}| | d | |dd | |dd | ||dd | t|jd | t|jd	 | t|jdd
>  | t|j|dd
>  | t|jd | |ddd | ||d|dd d S )Nc               @   s   e Zd Zdd Zdd ZdS )z!ReTests.test_group.<locals>.Indexc             S   s
   || _ d S )N)value)r   r   r   r   r   __init__  s    z*ReTests.test_group.<locals>.Index.__init__c             S   s   | j S )N)r   )r   r   r   r   	__index__  s    z+ReTests.test_group.<locals>.Index.__index__N)r   r   r   r   r   r   r   r   r   Index  s   r   z(a)(b)abr   rA   rM   rB   i  r   r   )r;   rM   )r'   rG   r#   rJ   r&   r   )r   r   rS   r   r   r   
test_group  s    zReTests.test_groupc          	   C   s4  t d}|d}| |d d | |d d  | |d d  | d|d | |d d | |d	 d | |d
 d  | |d d  | td |d  W d Q R X | td |d  W d Q R X | td |d  W d Q R X | td |d  W d Q R X | td |d  W d Q R X | td |d  W d Q R X | td d| W d Q R X |d}| |d d | |d d  | |d d | d|d | |d d | |d	 d | |d
 d  | |d d | t d	|d< W d Q R X | tt	| d S )Nz!(?:(?P<a1>a)|(?P<b2>b))(?P<c3>c)?rM   r   r   r   za1={a1} b2={b2} c3={c3}za1=a b2=None c3=Noner   rA   r   rB   zno such groupr`   r   rw   )r   rA   )r   za1={a2}r   re   za1=a b2=None c3=c)
r'   r)   rG   r#   
format_mapr   r   r&   	TypeErrorlen)r   r   rS   r   r   r   test_match_getitem  sH    


zReTests.test_match_getitemc             C   s0  |  tdd d x,dtdfD ]}|  td| d q&W x8dtdtdtdfD ]}|  td| d q`W x<dD ]4\}}d	||| f }|  t|||  d qW |  td
d d |  tdd d |  tdd d |  tdd d |  tdd d | tdd | tdd | tdd | tdd |  tdd d |  tdd d |  tdd d |  t	djdddd d |  t	d
jdddd d |  t	djdddd d d S ) NrM   )r   rA   r   za|ab)r   r   s   abs   a|ab)u   àßu   абu   𝒜𝒞z%s|%sz.*?$r   )r   rB   z.*?za.*?babbZaxxb)r   rw   za+zabc$zabc
zabc\Zz(?m)abc$z	ab(?=c)cdabcdz
ab(?<=b)cdz
(?=a|ab)abr   rA   rB   )r,   endpos)rA   rB   )
r#   r'   	fullmatchrE   r	   r   r7   rb   rF   r)   )r   r3   rM   r;   rr   r   r   test_re_fullmatch  s4     zReTests.test_re_fullmatchc             C   sr  |  tdd d |  tdd d | tdd | tdd |  tdd	 d
 |  tdd d |  tdd d |  tdd d td}|  |d d |  |d d | |d | |d ddd tddD }d| }|  t|d d | 	ddd  | 	d!d"d# | 	d$d%d  d S )&Nz^(\()?([^()]+)(?(1)\))$z(a))(rM   rM   )NrM   za)z(az^(?:(a)|c)((?(1)b|d))$r   )rM   r;   cd)Ndz^(?:(a)|c)((?(1)|d))$)rM   rs   z(?P<g1>a)(?P<g2>b)?((?(g2)c|d))r   )rM   r;   re   Zad)rM   Nr   Zabdr   rx   c             s   s   | ]}d ||f V  qdS )zx(?P<a%d>%x)yNr   )ry   rz   r   r   r   r{     s    z2ReTests.test_re_groupref_exists.<locals>.<genexpr>rA   r|   z(?:%s)(?(200)z)r}   )r   r~   z(?P<a>)(?(0))zbad group numberrZ   z
()(?(1)a|bz"missing ), unterminated subpatternr   z()(?(1)a|b|c)z/conditional backref with more than two branches)
r#   r'   rG   r   rF   r)   r   r   rE   r0   )r   pr   r   r   r   test_re_groupref_exists  s<    
zReTests.test_re_groupref_existsc             C   s@   ddl m} | dd| dd| d | d| d| d	 d S )
Nr   )	MAXGROUPSz()z\g<%s>rW   zinvalid group reference %drB   z(?P<a>)(?(%d))rZ   )sre_constantsr   r4   r0   )r   r   r   r   r   test_re_groupref_overflow(  s
    
z!ReTests.test_re_groupref_overflowc             C   s   |  tdd d |  tdd d | tdd | tdd |  td	d
 d |  tdd d | ddd d S )Nz^(\|)?([^()]+)\1$z|a|)rx   rM   z^(\|)?([^()]+)\1?$rM   )NrM   za|z|az^(?:(a)|c)(\1)$Zaa)rM   rM   z^(?:(a)|c)(\1)?$re   )NNz(abc\1)zcannot refer to an open grouprw   )r#   r'   rG   r   rF   r0   )r   r   r   r   test_re_groupref/  s    zReTests.test_re_grouprefc             C   s"   |  tdd ddd d S )Nz#(?P<first>first) (?P<second>second)zfirst secondfirstsecond)r   r   )r#   r'   rG   	groupdict)r   r   r   r   test_groupdict=  s    
zReTests.test_groupdictc             C   s8   |  tdddd |  tdddd d S )	Nz#(?P<first>first) (?P<second>second)zfirst secondz\2 \1 \g<second> \g<first>zsecond first second firstz#(?P<first>first)|(?P<second>second)r   z\2 \g<second> )r#   r'   rG   expand)r   r   r   r   test_expandB  s    

zReTests.test_expandc             C   s8  |  tdd |  tdd |  tdd |  tdd | tdddd | td	ddd | td
ddd | tdddd | tdddd | tdddd | tdddd | tdddd |  tdd |  tdd |  tdd |  tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd |  tdd | tdd | ddd  d S )!Nz	^(\w){1}$r   z
^(\w){1}?$z^(\w){1,2}$z^(\w){1,2}?$z	^(\w){3}$rA   re   z^(\w){1,3}$z^(\w){1,4}$z^(\w){3,4}?$z
^(\w){3}?$z^(\w){1,3}?$z^(\w){1,4}?$z^x{1}$rC   z^x{1}?$z^x{1,2}$z	^x{1,2}?$z^x{3}$z^x{1,3}$z^x{3,3}$z^x{1,4}$z	^x{3,4}?$z^x{3}?$z	^x{1,3}?$z	^x{1,4}?$z^x{}$zx{}zx{2,1}z"min repeat greater than max repeatr   )rF   r'   rG   r#   rJ   
assertTruer0   )r   r   r   r   test_repeat_minmaxL  s:    zReTests.test_repeat_minmaxc          	   C   sF  |  tdjd |  tdjtjtjB  |  tdjd |  tdji  |  tdjddd |  t	ddj
d |  t	ddjd |  t	ddjd |  t	ddjd	 | t	ddj td}|  t|jd
dg |  |jd d | t d|jd< W d Q R X |  |jd d d S )Nz
(?i)(a)(b)r   z(?i)(?P<first>a)(?P<other>b)rA   )r   otherz(a)rM   r   ))r   rA   )r   rA   r   r   )r#   r'   r)   r%   flagsrk   Ur   
groupindexrG   r,   r   r3   regsr   sortedr&   r   )r   r   r   r   r   test_getattrp  s"    
zReTests.test_getattrc             C   s  |  tdddd |  tdddd |  tddtjdd |  tddtjdd |  tddtjd	d
 |  tdd
tjd	d
 | tddtj |  tdddd |  tdddd |  tddtjdd |  tddtjdd |  tddtjd	d |  tddtjd	d | tddtj |  tddd	d |  tddd	d |  tddtjd	d |  tddtjd	d d S )Nz\b(b.)\bzabcd abc bcd bxrA   Zbxz\B(b.)\Bzabc bcd bc abxdz^abc$z
abc
r   r   z	^\Aabc\Z$s   \b(b.)\bs   abcd abc bcd bxs   bxs   \B(b.)\Bs   abc bcd bc abxds   ^abc$s   
abc
s   abcs	   ^\Aabc\Z$z\d\D\w\W\s\Sz1aa! as   \d\D\w\W\s\Ss   1aa! a)r#   r'   rD   rJ   ASCIIMrF   LOCALE)r   r   r   r   test_special_escapes  s<    











zReTests.test_special_escapesc          
   C   sP  |  ddd | tdd d | tdd | tdd d | tdd	 d	 | tdd
 | tdd d | tdd | tdd d | tdd t  x8dD ]0}| | | tj	tj
d|  W d Q R X qW x:dD ]2}| | | tj	tj
d|  W d Q R X qW d S )NrX   zbad escape (end of pattern)r   z\(r   )z\\z[\]]][z[a\-c]-r;   z[\^a]+za^Z!ceghijklmopqyzCEFGHIJKLMNOPQRTVXYz\%cZ$ceghijklmopqyzABCEFGHIJKLMNOPQRTVXYZz[\%c])r0   r#   r'   rG   rJ   rF   purger*   r&   r(   r)   )r   re   r   r   r   test_other_escapes  s"    
$
zReTests.test_other_escapesc             C   s   |  tdddd | tdd | tdd | tdd | tdd | tdd |  tt	ddd |  tt	ddd	 |  tt	dd
d	 |  tt	ddd	 |  tt	dd
d d S )Nz	\b(abc)\br   rA   z\bz\Brs   rM   r   r   r   z   )
r#   r'   rD   rJ   r   rG   assertFalserF   r   r>   )r   r   r   r   test_string_boundaries  s    zReTests.test_string_boundariesc          	   C   sR   |  tdddd ddtttddd }|  t|d	 d	 d S )
Nu
   ([∢∣])u   ∢rA   z[%s]rs      i      u   ！)r#   r'   rG   rJ   r   maprd   r   )r   r   r   r   r   test_bigcharset  s    
zReTests.test_bigcharsetc             C   sB   t ddd tdD }| |d | |d d S )Nrx   c             s   s   | ]}d | V  qdS )z%dNr   )ry   r   r   r   r   r{     s    z,ReTests.test_big_codesize.<locals>.<genexpr>i'  Z1000Z9999)r'   r)   r   r   r   rG   )r   r   r   r   r   test_big_codesize  s    zReTests.test_big_codesizec             C   s@   |  tddtjdd |  tddtjdd d S )Nza.bza
br   za.*bza

b)r#   r'   rG   DOTALLrJ   )r   r   r   r   test_anyall  s    zReTests.test_anyallc             C   s  |  tdddd |  tdddd |  tdddd |  tdddd |  td	d
dd |  tdddd |  tdd
dd |  tdd
dd |  tdddd |  tdddd |  tdddd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd d S )Nz(a(?=\s[^a]))za brA   rM   z(a(?=\s[^a]*))z(a(?=\s[abc]))z(a(?=\s[abc]*))za bcz(a)(?=\s\1)za az(a)(?=\s\1*)za aaz(a)(?=\s(abc|a))z(a(?!\s[^a]))z(a(?!\s[abc]))za dz(a)(?!\s\1)z(a)(?!\s(abc|a))z(a)b(?=\1)ar   z(a)b(?=\1)cZabacz(?:(a)|(x))b(?=(?(2)x|c))cr   z(?:(a)|(x))b(?=(?(2)c|x))cz(?:(a)|(x))b(?=(?(1)b|x))cz(?:(a)|(x))b(?=(?(1)c|x))cz(a)b(?=(?(2)x|c))(c)z(a)b(?=(?(2)b|x))(c)z(a)b(?=(?(1)c|x))(c))r#   r'   rG   rJ   r   rF   )r   r   r   r   test_lookahead  s*    zReTests.test_lookaheadc             C   sl  |  tdd | tdd | tdd |  tdd |  tdd | tdd	 | td
d |  tdd	 | tdd | tdd |  tdd | tdd |  tdd | tjtjd | tdd |  tdd | tjtjd | tjtjd | tjtjd | tjtjd d S )Nz	ab(?<=b)cr   z	ab(?<=c)cz	ab(?<!b)cz	ab(?<!c)cz(a)a(?<=\1)cZaacz(a)b(?<=\1)aZabaaz(a)a(?<!\1)cz(a)b(?<!\1)az(?:(a)|(x))b(?<=(?(2)x|c))cz(?:(a)|(x))b(?<=(?(2)b|x))cz(?:(a)|(x))b(?<=(?(2)x|b))cz(?:(a)|(x))b(?<=(?(1)c|x))cz(?:(a)|(x))b(?<=(?(1)b|x))cz(a)b(?<=(?(2)b|x))(c)z(a)b(?<=(?(1)c|x))(c)z(a)b(?<=(?(1)b|x))(c)z(a)b(?<=(.)\2)(c)z(a)b(?<=(?P<a>.)(?P=a))(c)z(a)b(?<=(a)(?(2)b|x))(c)z(a)b(?<=(.)(?<=\2))(c))r   r'   rG   rF   r&   r(   r)   )r   r   r   r   test_lookbehind  s(    zReTests.test_lookbehindc             C   sV  |  tddtjdd |  tddtjdd |  tddtjdd |  td	d
tjdd
 |  tddtjdd |  tdd
tjdd
 |  tddtjdd |  tddtjdd |  tddtjdd |  tddtjdd d dks>t| tddtj | tddtj | tddtj | tddtj d dkst| tddtj | tddtj | tddtj | tddtj d d   kr dks&n t| tddtj | tddtj d S ) Nr   ABCr   s   abcs   ABCz	(a\s[^a])za brA   z
(a\s[^a]*)za bbz
(a\s[abc])z(a\s[abc]*)z	((a)\s\2)za az
((a)\s\2*)za aaz((a)\s(abc|a))z((a)\s(abc|a)*)u   KkKz\u212au   ſr	   r?   z\u017fu   ﬅu   ﬆSTz\ufb05z\ufb06)	r#   r'   rG   rk   rJ   lowerAssertionErrorr   upper)r   r   r   r   test_ignore_case  s.    &zReTests.test_ignore_casec             C   s  |  tddtj |  tddtj |  tddtj |  tddtj |  tddtj |  tddtj |  tddtj |  tddtj d	 d
kst|  tdd	tj |  tdd	tj |  tddtj |  tdd
tj d dks*t|  tddtj |  tddtj |  tddtj |  tddtj d d   krdksn t|  tddtj |  tddtj d S )Nz[19A]ri   z[19a]rM   s   [19A]   As   [19a]r6   u   Kr   z[19K]z[19k]z
[19\u212a]r   u   ſr	   z[19S]z[19s]z
[19\u017f]r?   u   ﬅu   ﬆr   z
[19\ufb05]z
[19\ufb06])r   r'   rG   rk   r   r   r   )r   r   r   r   test_ignore_case_set5  s*    &zReTests.test_ignore_case_setc             C   s  |  tddtj | tddtj |  tddtj | tddtj |  tddtj | tdd	tj |  td
d	tj | td
dtj |  tddtj |  tddtj |  tddtj |  tddtj |  tddtj |  tddtj |  tddtj |  tddtj d dksrt|  tddtj |  tddtj |  tddtj |  tddtj d dkst|  tddtj |  tddtj |  tddtj |  tddtj d d    krTd!ksZn t|  td"d tj |  td#dtj d S )$Nz[9-a]_z[9-A]s   [9-a]   _s   [9-A]z[\xc0-\xde]   ×   ÷z[\xe0-\xfe]z[\u0430-\u045f]u   ѐu   Ѐz[\u0400-\u042f]z[\U00010428-\U0001044f]u   𐐨u   𐐀z[\U00010400-\U00010427]u   Kr   z[J-M]z[j-m]z[\u2129-\u212b]r   u   ſr	   z[R-T]z[r-t]z[\u017e-\u0180]r?   u   ﬅu   ﬆr   z[\ufb04-\ufb05]z[\ufb06-\ufb07])r   r'   rG   rk   rF   r   r   r   )r   r   r   r   test_ignore_case_rangeL  s:    &zReTests.test_ignore_case_rangec             C   s   |  tdddd d S )Nz(\s)r   rA   )r#   r'   rG   rJ   )r   r   r   r   test_categorym  s    zReTests.test_categoryc             C   sx  dd l }xvtdD ]j}t|}t| }| ||| | ||| |tj	k}| |
|| | ||| qW xttddddg D ]}t|}| ||| |dkr| ||t|  || kp|| k}| |
| | |||| kp$|| k qW | |dd | |dtd | |
d | |d d S )Nr      i   i  i( i0  rz   )_srer   rd   ordr   r#   ascii_tolowerunicode_tolowerr3   ascii_lettersascii_iscasedunicode_iscasedr   r   r   r   )r   r   rz   re   loiscasedr   r   r   test_case_helpersp  s,    
 zReTests.test_case_helpersc             C   s8   |  tdddd |  tdddd d S )Nz\s([^a])z brA   r;   z	\s([^a]*)z bbZbb)r#   r'   rD   rJ   )r   r   r   r   test_not_literal  s    zReTests.test_not_literalc          	   C   s  t td }| t td}W d Q R X | ||t	d | td|t	d | t td}W d Q R X | ||t	d | t td}W d Q R X | ||t	d	 | t td
}W d Q R X | ||t	d | t td}W d Q R X | ||t	d | td|t	d | t td}W d Q R X | ||t	d | t td}W d Q R X | ||t	d | td|t	d | t td}W d Q R X | ||t	d | t td}W d Q R X | ||t	d | td|t	d | t td}W d Q R X | ||t	d | t td}W d Q R X | ||t	d d S )Nr   z[0-9--1]z-./0123456789z[--1]z-./01z[%--1]z
%&'()*+,-1z[%--]z	%&'()*+,-z[0-9&&1]z&0123456789z[\d&&1]z[&&1]z&1z[0-9||a]z0123456789a|z[\d||a]z[||1]z1|z[0-9~~1]z0123456789~z[\d~~1]z[~~1]z1~z[[0-9]|]z0123456789[]z[[:digit:]|]z:[]dgit)
bytesr   decodeassertWarnsFutureWarningr'   r)   r#   r>   r   )r   r?   r   r   r   r   test_possible_set_operations  sL    z$ReTests.test_possible_set_operationsc             C   s8   |  tdddd |  tdddd d S )Nz\s(b)z brA   r;   za\sza r   )r#   r'   rD   rJ   )r   r   r   r   test_search_coverage  s    zReTests.test_search_coveragec             C   sr   |d kr"|d kr"|}dt |f}n|d ks2|d kr:td|||}| | | | | | | | d S )Nr   z@If match is not None, span should be specified (and vice versa).)r   rj   r   r#   rJ   rE   )r   r%   textrG   rE   ZmatcherrS   r   r   r   assertMatch  s    

zReTests.assertMatchz!"%',/:;<=>@_`c             C   s   d dd tdD }xN|D ]F}| t|| | dt| d | | dt| | qW | t|| x&dD ]}| t|d d	 d
 qW | j}| t|| d S )Nrs   c             s   s   | ]}t |V  qd S )N)rd   )ry   rz   r   r   r   r{     s    z)ReTests.test_re_escape.<locals>.<genexpr>r   r   r   z(?x)z-.]{}rA   rX   )r   r   r   r'   escaper#   LITERAL_CHARS)r   r   re   literal_charsr   r   r   test_re_escape  s    

zReTests.test_re_escapec             C   s   t td}xX|D ]P}t |g}| t|| | dt| d | | dt| | qW | t|| x0dD ](}t |g}| t|d d d q~W | jd}| t|| d S )	Nr      [   ]s   (?x)s   -.]{}rA      \ascii)r   r   r   r'   r  r#   r  encode)r   r   rz   r;   r  r   r   r   test_re_escape_bytes  s    



zReTests.test_re_escape_bytesc             C   sH   d}t |}| || | || | dt d |ddt j d S )Nu   xxx☠☠☠xxxz.%s+.u   ☠u   x☠☠☠x)r   r^   )r'   r  r#   r   rD   )r   r?   Z	s_escapedr   r   r   test_re_escape_non_ascii  s    
z ReTests.test_re_escape_non_asciic             C   sX   d d}t|}| || | || ttd d|}| t|d d S )Nu	   y☠y☠yzutf-8u   ☠r   )r	  r'   r  r#   r   r>   r   )r   r;   Z	b_escapedZresr   r   r   test_re_escape_non_ascii_bytes  s    

z&ReTests.test_re_escape_non_ascii_bytesc             C   s`   dd l }tdtj}x8t|jd D ]&}|||}||}| || q&W ddlm	} d S )Nr   za(?:b|(c|e){1,2}?|d)+?(.)rA   )_compile)
pickler'   r)   UNICODEr   ZHIGHEST_PROTOCOLdumpsloadsr#   r  )r   r  ZoldpatprotoZpickledZnewpatr  r   r   r   test_pickling  s    
zReTests.test_picklingc             C   sh   dd l }td}| | || | ||| |d}| | || | ||| d S )Nr   z (?P<int>\d+)(?:\.(?P<frac>\d*))?z12.34)copyr'   r)   r   ZdeepcopyrG   )r   r  r   rS   r   r   r   test_copying  s    

zReTests.test_copyingc             C   sT   |  tjtj |  tjtj |  tjtj |  tjtj	 |  tj
tj d S )N)r#   r'   rk   
IGNORECASELr   r   	MULTILINEr	   r   r`   VERBOSE)r   r   r   r   test_constants  s
    zReTests.test_constantsc             C   st   x6t jt jt jt jt jt jgD ]}| t d| qW x6t jt jt jt jt jt j	gD ]}| t d| qVW d S )Nz	^pattern$s	   ^pattern$)
r'   rk   r   r`   r	   ri   r   r   r)   r  )r   flagr   r   r   
test_flags  s    ""zReTests.test_flagsc             C   sF  xxdD ]n}|dk r|  td| t| |  td| t|d  |  td| t|d  |  td| t| |  td	| t|d  |  td
| t|d  |dk r"|  td| t| |  td| t|d  |  td| t|d  |  td| t| |  td| t|d  |  td| t|d  qW |  tdd |  tdd |  tdd |  tdd | ddd | ddd  | d!d"d | d#d"d | d$d%d | d&d%d | d'd(d | d)d(d | d*d+d d S ),N)r   r_          @      r   r   r   i  i   i r   z\%03oz\%03o00z\%03o88z\x%02xz\x%02x0z\x%02xzzi   z\u%04xz\u%04x0z\u%04xzz\U%08xz\U%08x0z\U%08xzz\0rn   z\08z 8z\01ro   z\018z8z\567z0octal escape value \567 outside of range 0-0o377r   z\911zinvalid group reference 91rA   z\x1zincomplete escape \x1z\x1zz\u123zincomplete escape \u123z\u123zz	\U0001234zincomplete escape \U0001234z
\U0001234zz
\U00110000zbad escape \U00110000)r   r'   rG   rd   r0   )r   rz   r   r   r   test_sre_character_literals  s<    
"z#ReTests.test_sre_character_literalsc             C   s  xdD ]}|dk r|  td| t| |  td| t| |  td| t| |  td| t| |  td| t| |  td| t| |  td	| t| |  td
| t| |dk r>|  td| t| |  td| t| |  td| t| |  td| t| |  td| t|d  |  td| t|d  qW | ddd | ddd | ddd | ddd | ddd | dd d |  td!d" d S )#N)r   r_   r  r  r  r   r   r   r   i  i   i r   z[\%o]z[\%o8]z[\%03o]z[\%03o0]z[\%03o8]z[\x%02x]z	[\x%02x0]z	[\x%02xz]i   z[\u%04x]z	[\u%04x0]z	[\u%04xz]z[\U%08x]z	[\U%08x0]r!  z	[\U%08xz]r#  z[\567]z0octal escape value \567 outside of range 0-0o377rA   z[\911]zbad escape \9z[\x1z]zincomplete escape \x1z[\u123z]zincomplete escape \u123z[\U0001234z]zincomplete escape \U0001234z[\U00110000]zbad escape \U00110000z[\U0001d49c-\U0001d4b5]u   𝒞)r   r'   rG   rd   r0   )r   rz   r   r   r   !test_sre_character_class_literals:  s4    
"z)ReTests.test_sre_character_class_literalsc             C   s  xdD ]}|  td|  t|g |  td|  t|gd  |  td|  t|gd  |  td|  t|g |  td|  t|gd  |  td	|  t|gd
  qW | tjtjd | tjtjd |  tdd |  tdd |  tdd |  tdd | ddd | ddd | ddd | ddd d S )N)r   r_   r  r  r  r   r   r   z\%03oz\%03o0   0z\%03o8   8z\x%02xz\x%02x0z\x%02xz   zs   \u1234s
   \U00012345s   \0    s   \08s    8s   \01   s   \018s   8s   \567z0octal escape value \567 outside of range 0-0o377r   s   \911zinvalid group reference 91rA   s   \x1zincomplete escape \x1s   \x1z)	r   r'   rG   r	  r   r&   r(   r)   r0   )r   rz   r   r   r   test_sre_byte_literalsV  s&    
 $$ $(zReTests.test_sre_byte_literalsc             C   sd  xdD ]}|  td|  t|g |  td|  t|g |  td|  t|g |  td|  t|g |  td|  t|g |  td|  t|g |  td|  t|g |  td	|  t|g qW | tjtjd
 | tjtjd | ddd | ddd | ddd d S )N)r   r_   r  r  r  r   r   r   z[\%o]z[\%o8]z[\%03o]z[\%03o0]z[\%03o8]z[\x%02x]z	[\x%02x0]z	[\x%02xz]s   [\u1234]s   [\U00012345]s   [\567]z0octal escape value \567 outside of range 0-0o377rA   s   [\911]zbad escape \9s   [\x1z]zincomplete escape \x1)	r   r'   rG   r	  r   r&   r(   r)   r0   )r   rz   r   r   r   test_sre_byte_class_literalsk  s            $z$ReTests.test_sre_byte_class_literalsc             C   sf   |  ddd |  ddd |  ddd |  ddd |  ddd	 |  d
dd	 |  ddd	 d S )Nr   zunterminated character setr   z[^z[az[a-z[\w-b]zbad character range \w-brA   z[a-\w]zbad character range a-\wz[b-a]zbad character range b-a)r0   )r   r   r   r   test_character_set_errors}  s    z!ReTests.test_character_set_errorsc             C   sR   |  tdddd |  tdddd |  tdddd d S )Nz(a)|(b)r;   rA   r   )r   r   )r#   r'   rG   startendrE   )r   r   r   r   test_bug_113254  s    zReTests.test_bug_113254c             C   sp   |  tddj | tddjd | tddjd | tddjd | tddjd d S )	Nz(a)?arM   z(a)(b)?br   rA   z(?P<a>a)(?P<b>b)?bz(?P<a>a(b))z((a)))rF   r'   rG   	lastindexr#   	lastgroup)r   r   r   r   test_bug_527371  s
    zReTests.test_bug_527371c             C   s   |  tddd d dd |  tddd d	 dd  d
 dd |  tddd d dd |  tddd d dd d S )Nz.*?ci'  r   r   r   i!N  z.*?cdi  re   Zcdei#N  i N  r   deia  z(a|b)*?c)r#   r'   rG   r/  rD   )r   r   r   r   test_bug_418626  s
    "("zReTests.test_bug_418626c             C   s,   dt d d }| t |o"dd d S )Nr   u   ‹r   rA   )r'   r  r#   r)   )r   r   r   r   r   test_bug_612074  s    zReTests.test_bug_612074c             C   sf   |  tddd dd |  tddd d dd |  tddd d dd d S )Nz(x)*iP  r   rA   z(x)*yr    z(x)*?y)r#   r'   rG   rJ   )r   r   r   r   test_stack_overflow  s    "zReTests.test_stack_overflowc             C   sL   xFdD ]>}x8dD ]0}|  d||f dd |  d||f dd qW qW d S )N)*+?z{1,2})rs   r:  z%s%sznothing to repeatr   z(?:%s%s)rB   )r0   )r   repsmodr   r   r   test_nothing_to_repeat  s    

zReTests.test_nothing_to_repeatc             C   sj   xddD ]\}xVdD ]N}|| }x@dD ]8}x2dD ]*}|| }|  d||f ddt|  q,W q"W qW qW d S )N)r8  r9  z{1,2})rs   r:  )r8  r9  r:  z{1,2}zx%s%szmultiple repeatrA   )r0   r   )r   Z
outer_repsZ	outer_modouter_opZ
inner_repsZ	inner_modinner_opr   r   r   test_multiple_repeat  s    



zReTests.test_multiple_repeatc             C   sp   |  tdd |  tdd |  tdd |  tdd |  tdd |  tdd d S )Nz(?:a?)*yr#  z(?:a?)+yz(?:a?){2,}yz	(?:a?)*?yz	(?:a?)+?yz(?:a?){2,}?y)rF   r'   rG   )r   r   r   r    test_unlimited_zero_width_repeat  s    z(ReTests.test_unlimited_zero_width_repeatc             C   s   dd }dd }dd }dd }t d	|fd
|fd|fd|fdg}| |jdj | |ddddddddddg	df d S )Nc             S   s   |S )Nr   )scannertokenr   r   r   s_ident  rU   z%ReTests.test_scanner.<locals>.s_identc             S   s   d| S )Nzop%sr   )rB  rC  r   r   r   
s_operator  rU   z(ReTests.test_scanner.<locals>.s_operatorc             S   s   t |S )N)float)rB  rC  r   r   r   s_float  rU   z%ReTests.test_scanner.<locals>.s_floatc             S   s   t |S )N)rI   )rB  rC  r   r   r   s_int  rU   z#ReTests.test_scanner.<locals>.s_intz[a-zA-Z_]\w*z\d+\.\d*z\d+z=|\+|-|\*|/)z\s+Nrs   zsum = 3*foo + 312.50 + barsumzop=rB   zop*foozop+g     s@Zbar)r   r   rB  r%   r#   scan)r   rD  rE  rG  rH  rB  r   r   r   test_scanner  s    zReTests.test_scannerc             C   sJ   xDdD ]<}|  td| d d |  td| d d qW d S )N)rs   r:  r8  z
((.%s):)?zr#  )NNza:z)za:rM   )r#   r'   rG   r   )r   opr   r   r   test_bug_448951  s
    
zReTests.test_bug_448951c             C   s   |  tdd d |  tdd d |  tdd d |  tdd d |  td	d d |  td
d d |  tdd d |  tdd d d S )Nz	^((a)|b)*r   )r;   rM   z^(([ab])|c)*)re   r;   z^((d)|[ab])*)r;   Nz^((a)c|[ab])*z^((a)|b)*?cz^(([ab])|c)*?dr   z^((d)|[ab])*?cz^((a)c|[ab])*?c)r#   r'   rG   r   )r   r   r   r   test_bug_725106  s     zReTests.test_bug_725106c             C   s4   |  tdd d |  tdd d d S )Nz(a)(?:(?=(b)*)c)*r   )rM   Nz(a)((?!(b)*))*)rM   NN)r#   r'   rG   r   )r   r   r   r   test_bug_725149  s    zReTests.test_bug_725149c             C   s2   G dd dt }t|d}| |d d S )Nc               @   s   e Zd ZdS )z+ReTests.test_bug_764548.<locals>.my_unicodeN)r   r   r   r   r   r   r   
my_unicode   s    rQ  r   rN   )rK   r'   r)   rF   rG   )r   rQ  r   r   r   r   test_bug_764548  s    zReTests.test_bug_764548c             C   s   t dd}| dd |D dddg t d}|ddd	}| d
d |D dddg t d}|jddd	d}| dd |D dddg t d}|jdd	dd}| dd |D dddg t d}|jdddd}| dd |D ddg d S )Nz:+z
a:b::c:::dc             S   s   g | ]}| d qS )r   )rJ   )ry   itemr   r   r   
<listcomp>  s    z)ReTests.test_finditer.<locals>.<listcomp>r   z::z:::rA   rZ   c             S   s   g | ]}| d qS )r   )rJ   )ry   rS  r   r   r   rT    s    )r,   r   c             S   s   g | ]}| d qS )r   )rJ   )ry   rS  r   r   r   rT    s    )r   r,   c             S   s   g | ]}| d qS )r   )rJ   )ry   rS  r   r   r   rT    s    rB   r_   c             S   s   g | ]}| d qS )r   )rJ   )ry   rS  r   r   r   rT    s    )r'   r8   r#   r)   )r   iterr   r   r   r   test_finditer  s&    



zReTests.test_finditerc             C   s   |  tdtd d S )NZ
bug_926075s
   bug_926075)ZassertIsNotr'   r)   )r   r   r   r   test_bug_926075  s    zReTests.test_bug_926075c             C   s&   d}|  t|ddddg d S )Nu   [.。．｡]za.b.crM   r;   re   )r#   r'   r)   r   )r   r%   r   r   r   test_bug_931848!  s    zReTests.test_bug_931848c             C   sd   t dd}| t| d | tt| t dd}| |	  d | 
|	  d S )Nz\sza b)rA   r   )r'   r8   r#   nextrE   r&   StopIterationr)   rB  rD   rF   )r   rU  rB  r   r   r   test_bug_581080&  s    zReTests.test_bug_581080c             C   sF   t dd}| t| d | t| d | tt| d S )Nz.*Zasdf)r   rw   )rw   rw   )r'   r8   r#   rY  rE   r&   rZ  )r   rU  r   r   r   test_bug_817234/  s    zReTests.test_bug_817234c             C   sb   dddg}x&|D ]}|  td|d| qW dddd	g}x|D ]}| td| qDW d S )
N7u   ๘u   ０z^\d$r   u   Ⅵu   〹u   ₂u   ㊴)r#   r'   rG   rJ   rF   )r   Zdecimal_digitsr   Znot_decimal_digitsr   r   r   test_bug_65615  s    

zReTests.test_bug_6561c             C   sV   dd l }xHdD ]@}| |}| td| | td| d qW d S )Nr   ZbBuhHiIlLfds   blarU   r   )arrayrF   r'   r)   rG   r#   r   )r   r_  typecoderM   r   r   r   test_empty_arrayJ  s
    

zReTests.test_empty_arrayc          
   C   s  d}d}t d| t jt jB }|d| }| | t d| t jt jB }|d| }| | t d| t j}|d| }| | t d| t j}|d| }| | t d| }|d| }| | t d| }|d| }| | t d| }|d| }| | t d| }|d| }| | | t d| | | t d| | | t d	| |t j | t d
| | | t d| |t j |d }| t}| t || W d Q R X | 	t
|jd jd|  | 	|jd jt |dd  }| t}| t || W d Q R X | 	t
|jd jd|d d   | 	|jd jt t n tdt d}| t}| t |d W d Q R X | 	t
|jd jd|  | 	|jd jt W d Q R X | t  | t d| d|  W d Q R X | t  | t d| d | W d Q R X | t | t d| | W d Q R X | t | t d| | W d Q R X | t | t d| | W d Q R X | t }| t d| d | W d Q R X | t
|jd jd | 	|jd jt | t }| t d| d | W d Q R X | t
|jd jd | 	|jd jt | t }| t d| d | W d Q R X | t
|jd jd | 	|jd jt d S ) Nu   Ạu   ạrR   rV   z(?i).z(?is).z	(?s)(?i).z(?ix) z (?i) z
(?x) (?i) z (?x) (?i) z(?i)r   z+Flags not at the start of the expression %rz(?i)%sz.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?z7Flags not at the start of the expression %r (truncated)   r(   s   A(?i)r6   z	(?s).(?i)z(?i) z (?x)z^(?i)z$|(?i)z(?:(?i)r   zFlags not at the startz(^)?(?(1)(?i)z($)?(?(1)|(?i))r'   r)   rk   r	   rG   r   r`   r   DeprecationWarningr#   rK   warningsmessagefilename__file__catch_warningssimplefilterBytesWarningassertRegexr   )r   Z
upper_charZ
lower_charr   qZwarnsr   r   r   test_inline_flagsR  s    










$$   $zReTests.test_inline_flagsc             C   s   t d}| |ddd | |ddd | |ddd t dt j}| |ddd	 | |ddd
 | |ddd dS )z>$ matches the end of string, and just before the terminating 
$#za
b
za
b#
#za
b
cza
b
c#rV   z#
#za#
b#
#za#
b#
c#N)r'   r)   r#   r2   r  )r   r%   r   r   r   test_dollar_matches_twice  s    
z!ReTests.test_dollar_matches_twicec             C   s   t d}t d}| t|jd | t|jd | t|jdd | t|jdd | t|jdd | t|jdd | t|jdd | t|jdd d S )NrR      .r   r;   re   r   )r'   r)   r&   r   rG   r2   )r   r   bpatr   r   r   test_bytes_str_mixing  s    

zReTests.test_bytes_str_mixingc             C   s  xPdt jfD ]B}t d|t jB }| |d t d|}| |d qW t dt jt jB }| |d t dt j}| |d t dt j}| |d t d}| |d xPdt jfD ]B}t d|t jB }| |d t d	|}| |d qW | t	t jd	t j | t j
t jd
 | t	t jdt jt jB  | t	t jdt j | t	t jdt j | t j
t jd d S )Nr      ÀrP   z\wu   (?a)Àz(?a)\w      s   \ws   (?u)\wz(?u)\wz(?au)\w)r'   r  r)   r  r   rG   r   rF   r&   rj   r(   )r   r   r   r   r   r   test_ascii_and_unicode_flag  s0    
z#ReTests.test_ascii_and_unicode_flagc       	   
   C   s$  t t jd }t t jd | t jt j| t d}xtddD ]~}y`t|g|}| }||krlwD|	|}t
|dkrwD|||krwDtt|g}P W qD ttfk
r   Y qDX qDW d }d}t|tjtjB }|r| || td| tj}|r| || t|tj}|rB| || tdtj}|rf| || td	}|r| || td}|r| || | ttjdtj | tjtjd
 | ttjdtjtjB  | ttjdtj | ttjdtj | tjtjd d S )Nrs   Fr   r   rA   r   s   (?L)s   \ws   (?L)\wz(?L)rU   s   (?a)s   (?aL))locale	setlocaleLC_CTYPE
addCleanupgetpreferredencodingr   r   r   r   r	  r   r'   r  UnicodeErrorr   r)   r   r  r   rG   rF   r&   rj   r(   r   )	r   oldlocencrz   re   ZsletterZbletterrr  r   r   r   r   test_locale_flag  sZ    
 
  


zReTests.test_locale_flagc             C   s  |  tdd | tdd | tddtj |  tddtj | tdd |  tdd |  tdd | tdd |  td	d
tj | td	dtj |  tdd |  tdd |  tddtj | ddd | ddd | ddd | ddd | ddd | ddd | ddd | d d!d | d"d!d | d#d!d | d$dd | d%d&d' | d(d)d | d*d)d | d+dd d S ),Nz(?i:a)bZAbZaBz(?-i:a)bz(?i:(?-i:a)b)z	(?x: a) bza bz a bz
(?-x: a) bz abr   z\w(?a:\W)\wu   àààz(?a:\W(?u:\w)\W)z\W(?u:\w)\Wz(?a)(?-a:\w)z8bad inline flags: cannot turn off flags 'a', 'u' and 'L'r_   z(?i-i:a)z(bad inline flags: flag turned on and offr~   z(?au:a)z9bad inline flags: flags 'a', 'u' and 'L' are incompatiblerw   s   (?aL:a)z(?-zmissing flagrB   z(?-+z(?-zzunknown flagz(?-iz	missing :z(?-i)z(?-i+z(?-izz(?i:z"missing ), unterminated subpatternr   z(?izmissing -, : or )z(?i+z(?iz)r   r'   rG   rF   r  r  r   r0   )r   r   r   r   test_scoped_flags&  s@    zReTests.test_scoped_flagsc             C   s   t d}| |ddd t d}| |ddd t d}| |d	d
 dd t d}| |ddd t d}| |ddd t d}| |dd
 dd d S )Nza(\w)zb\1r   r   za(.)u   aሴu   bሴz..c             S   s   dS )NrK   r   )rS   r   r   r   rT   T  rU   z'ReTests.test_bug_6509.<locals>.<lambda>Za5rK   s   a(\w)s   b\1s   acs   bcs   a(.)s   as   bs   ..c             S   s   dS )Ns   bytesr   )rS   r   r   r   rT   \  rU   s   a5s   bytes)r'   r)   r#   r2   )r   r   r   r   r   test_bug_6509L  s    





zReTests.test_bug_6509c          	   C   s|   dd l }dd }| ttjdi  | t |dd|gdi d W d Q R X | t |i dg dg g  W d Q R X d S )Nr   r   r   rM   r   r   )r   r&   r   r'   r8   OverflowErrorr)   )r   r   Zlong_overflowr   r   r   test_dealloc^  s     zReTests.test_deallocc             C   s^   |  tdd |  tdd |  tdd |  tdd |  tdd d S )Nz123.*-z123abc-u   123é-u   123€-u   123􏿿-u   123é€􏿿-)r   r'   rD   )r   r   r   r   test_search_dot_unicodel  s
    zReTests.test_search_dot_unicodec             C   sP   t d}| |t j t |}| |t j | || | tt jd d S )Nzrandom patternr   )r'   r)   assertIsInstancePatternr   r&   r   )r   r%   Zsame_patternr   r   r   test_compiles  s    

zReTests.test_compilerA   )sizeZmemusec             C   sB   d| }t d|}| | | | | | | | d S )NrM   rn  )r'   rD   ZassertIsNotNoner#   r.  r/  )r   r  r?   rS   r   r   r   test_large_search}  s
    
zReTests.test_large_search   c             C   s:   d| }t dd|\}}| || | ||d  d S )NrM   rs   rA   )r'   r   r#   )r   r  r?   r   nr   r   r   test_large_subn  s    zReTests.test_large_subnc             C   s2   |  tdddg |  tdd d d S )Nz	(?i)(a)\1u   aa ĀrM   z
(?s).{1,3}u   ĀĀ)r   r   )r#   r'   r>   rG   rE   )r   r   r   r   test_bug_16688  s    zReTests.test_bug_16688c             C   s  dd }|  td| d |  td| d |  td| d |  td| d |  td	| d |  td
| d | ttjddd   | ttjddd   | ttjddd   | ttjddd dd f  d S )Nr   i z.{65535})r   i  z	.{,65535}z
.{65535,}?z.{65536})r   i   z	.{,65536}z
.{65536,}?z.{%d}r   r   z.{,%d}z.{%d,}?z.{%d,%d}   )r#   r'   rG   rE   r&   r  r)   )r   r3   r   r   r   test_repeat_minmax_overflow  s    z#ReTests.test_repeat_minmax_overflowc             C   s   yddl m} W n tk
r.   | d Y nX dd }| td|d  | | td|d  | d	 | td
|d  | | 	t
tjd|  | 	t
tjd|  | 	t
tjd
|  d S )Nr   )	MAXREPEATz requires _sre.MAXREPEAT constantr   i z.{%d}rA   z.{,%d})r   i z.{%d,}?)r   r  ImportErrorskipTestrF   r'   rG   r#   rE   r&   r  r)   )r   r  r3   r   r   r   %test_repeat_minmax_overflow_maxrepeat  s    z-ReTests.test_repeat_minmax_overflow_maxrepeatc             C   s   |  ddd d S )Nz
(?P=<foo>)z#bad character in group name '<foo>'rw   )r0   )r   r   r   r   $test_backref_group_name_in_exception  s    z,ReTests.test_backref_group_name_in_exceptionc             C   s   |  ddd d S )Nz
(?P<?foo>)z"bad character in group name '?foo'rw   )r0   )r   r   r   r   test_group_name_in_exception  s    z$ReTests.test_group_name_in_exceptionc             C   s|   xvdD ]n}xhdD ]`}d| | d }| j t|tjddg|d | }| j t|tjddg|d qW qW d S )N)r8  r9  r:  z{1})rs   r:  rR   ZyzrN   )r!   s   xyz)r#   r'   r)   r	   r>   r	  )r   r;  r<  r%   r   r   r   test_issue17998  s    

zReTests.test_issue17998c             C   s  xHdt dfD ]8}td|}dt|jt|jf }| t|| qW xTdtdt	dt
dfD ]8}td|}dt|jt|jf }| t|| qdW ttdd\}}d	t|jt|jf }| t|| d
t|jt|jf }| t|| d S )Nz[abracadabra]z(.+)(.*?)\1z7<(%s\.)?%s object; span=\(1, 12\), match='abracadabra'>s   [abracadabra]s   (.+)(.*?)\1z8<(%s\.)?%s object; span=\(1, 12\), match=b'abracadabra'>z	(aa)|(bb)zaa bbz-<(%s\.)?%s object; span=\(0, 2\), match='aa'>z-<(%s\.)?%s object; span=\(3, 5\), match='bb'>)r	   r'   rD   r   r   r   rk  reprr   r7   rb   r   r8   )r   r3   rS   r%   r   r   r   r   r   test_match_repr  s&    
zReTests.test_match_reprc          	   C   sL  |  tdddddddg |  tddddddddg |  tddddddg |  td	dddddg |  tdd
dd |  tdd
dd |  tdddd |  tdddddddg |  tddddddddg |  dd tddD dddddg |  dd tddD ddddddg d S )Nz\bza::bcrs   rM   z::r   z\b|:+z(?<!\w)(?=\w)|:+z(?<=\w)(?!\w)|:+r   z	-a-::-bc-z-a---bc-z(\b|:+)z[\1]z[]a[][::][]bc[]z\b|\w+c             S   s   g | ]}|  qS r   )rE   )ry   rS   r   r   r   rT    s    z*ReTests.test_zerowidth.<locals>.<listcomp>)r   r   )rA   rA   )rA   rB   )rB   rB   )r~   r~   c             S   s   g | ]}|  qS r   )rE   )ry   rS   r   r   r   rT    s    )r   rA   )rB   r~   )r#   r'   r   r2   r>   r8   )r   r   r   r   test_zerowidth  s     zReTests.test_zerowidthc             C   sr   xldD ]d}x^dD ]V}t d||f }|d}| |dd | |dd | |d	d
 qW qW d S )N)z{0,}r8  r9  z{1,187})z{0,}r8  r:  z^((x|y)%s)%sZxyyzyr   ZxyyrA   rs   r   r    )r'   r)   rG   r#   rJ   )r   r>  r?  r   rS   r   r   r   test_bug_2537  s    


zReTests.test_bug_2537c          	   C   sr   d}t  }t|tj W d Q R X d | _d}| | | t  }t|tj W d Q R X | | | d S )Nz(\.)(?:[ch]|py)(?(1)$|: )a  SUBPATTERN 1 0 0
  LITERAL 46
BRANCH
  IN
    LITERAL 99
    LITERAL 104
OR
  LITERAL 112
  LITERAL 121
GROUPREF_EXISTS 1
  AT AT_END
ELSE
  LITERAL 58
  LITERAL 32

 0. INFO 8 0b1 2 5 (to 9)
      prefix_skip 0
      prefix [0x2e] ('.')
      overlap [0]
 9: MARK 0
11. LITERAL 0x2e ('.')
13. MARK 1
15. BRANCH 10 (to 26)
17.   IN 6 (to 24)
19.     LITERAL 0x63 ('c')
21.     LITERAL 0x68 ('h')
23.     FAILURE
24:   JUMP 9 (to 34)
26: branch 7 (to 33)
27.   LITERAL 0x70 ('p')
29.   LITERAL 0x79 ('y')
31.   JUMP 2 (to 34)
33: FAILURE
34: GROUPREF_EXISTS 0 6 (to 41)
37. AT END
39. JUMP 5 (to 45)
41: LITERAL 0x3a (':')
43. LITERAL 0x20 (' ')
45: SUCCESS
)r   r'   r)   DEBUGZmaxDiffr#   getvalue)r   r   outdumpr   r   r   test_debug_flag   s    )zReTests.test_debug_flagc             C   s   t d}| |jdddd d | |jdddd d | |jdddd d | |jddddd	g | |jdd
ddd	dg | |j	dddd  d d S )Nz(ab)Zabracadabrar^   rZ   )r3   r,   r   )r^   rY   rY   rB   r   rA   )r3   r   rs   Z	racadabra)
r'   r)   r#   rG   rE   r   rD   r>   r   rB  )r   r   r   r   r   test_keyword_parameters6  s    
zReTests.test_keyword_parametersc             C   s    |  tddtj d d S )Nz[a-c]+r   )r   rB   )r#   r'   r   rk   rE   )r   r   r   r   test_bug_20998H  s    zReTests.test_bug_20998c          	   C   s   t t j}| t jt j| xDdD ]<}yt t j| W q$ t jk
r^   | d|  Y q$X q$W t  |   | 	  t  | 	  |   d S )N)zen_US.iso88591z
en_US.utf8ztest needs %s locale)
rx  ry  rz  r{  Errorr  r'   r   check_en_US_iso88591check_en_US_utf8)r   	oldlocalelocr   r   r   test_locale_cachingM  s    
zReTests.test_locale_cachingc             C   s   t t jd | tddtjtjB  | tddtjtjB  | tddtjtjB  | tdd | tdd | tdd d S )Nzen_US.iso88591s         s   (?Li)s   (?Li)s   (?Li))rx  ry  rz  r   r'   rG   r  rk   )r   r   r   r   r  _  s    zReTests.check_en_US_iso88591c             C   s   t t jd | tddtjtjB  | tddtjtjB  | tddtjtjB  | tdd | tdd | tdd d S )Nz
en_US.utf8s   r  r  s   (?Li)s   (?Li)s   (?Li))	rx  ry  rz  r   r'   rG   r  rk   rF   )r   r   r   r   r  h  s    zReTests.check_en_US_utf8c          	   C   s  t t j}| t jt j| xDdD ]<}yt t j| W q$ t jk
r^   | d|  Y q$X q$W t t jd tdtjtj	B }tdtjtj	B }tdtjtj	B }tdtjtj	B }xB|||fD ]4}| 
|d | 
|d | 
|d	 qW | |d
 | |d | |d	 t t jd xD|||fD ]6}| 
|d | |d | |d	 qPW | 
|d
 | |d | |d	 d S )N)zen_US.iso88591z
en_US.utf8ztest needs %s localezen_US.iso88591s   s   [a][a]s
   [az][az]s   [^][^]s   s   s   z
en_US.utf8)rx  ry  rz  r{  r  r  r'   r)   r  rk   r   rG   rF   )r   r  r  Zp1Zp2Zp3Zp4r   r   r   r   test_locale_compiledq  s6    
zReTests.test_locale_compiledc          	   C   s|  |  tj}td W d Q R X |j}| |jt | |jd | |j	d | |j
d | |jd | |jt| | dt| | d|j |  tj}td W d Q R X |j}| |jt | |jd | |j	d |  tj}tdtj W d Q R X |j}| |j	d | |j
d	 | |jd
 | |jt| | dt| | dt| d S )Nu   (€))rB   rA   rw   z at position 3s   ())zq
                (
                    abc
                )
                )
                (
                M   r~      z at position 77z(line 5, column 17))r&   r'   r(   r)   r+   r  r%   rK   r#   r,   linenocolnoassertInr!   ZassertNotInr   r  )r   r.   r/   r   r   r   
test_error  s6    zReTests.test_errorc             C   s   |  ddd |  ddd |  ddd |  dd	d
 |  ddd |  ddd
 |  ddd
 |  ddd |  dd	d
 |  ddd |  dd	d d S )Nr   z"missing ), unterminated subpatternr   z((a|b)z(a|b))zunbalanced parenthesisr~   z(?Pzunexpected end of patternrB   z(?z)zunknown extension ?zrA   z(?iz)zunknown flagz(?izmissing -, : or )z(?#abczmissing ), unterminated commentz(?<z(?<>)zunknown extension ?<>z(?r   )r0   )r   r   r   r   test_misc_errors  s    zReTests.test_misc_errorsc             C   s(   |  dttj |  dttj d S )Nr   r   )r  rK   r'   ri   r	   )r   r   r   r   	test_enum  s    zReTests.test_enumc          	   C   s   t dt j}| || | ||k t   t dt j}| t|t| | || t   t dt j}| || t   t d}| || | t	 ||k  W d Q R X d S )Nr   ZXYZ)
r'   r)   r  r#   r   r   hashassertNotEqualr&   r   )r   pattern1pattern2pattern3Zpattern4r   r   r   test_pattern_compare  s    
zReTests.test_pattern_comparec          	   C   s~   t d}t   t d}| t|t| | || t   t d}t  tdt | 	|| W d Q R X d S )Ns   abcr   r(   )
r'   r)   r   r#   r  rd  rh  ri  rj  r  )r   r  r  r  r   r   r   test_pattern_compare_bytes  s    



z"ReTests.test_pattern_compare_bytesc             C   sp   t d}td|}td|}| | d | | d d|d d < | | d | | d d S )Ns   abcdefghs   [a-h]+s   [e-h]+s   efghs   xyzrU   )r7   r'   rD   r#   rJ   )r   r?   rS   Zm2r   r   r   test_bug_29444  s    zReTests.test_bug_29444c             C   s   d}d}|  t|| d d}d}|  t||ddg |  dd	 t||D dd
g d}d}|  t||ddg |  dd	 t||D ddddd dg d}|  dd	 t||D ddddd dg d}|  dd	 t||D ddddd ddd dg d S )Nza	xz\b(?=(\t)|(x))x)Nr   r   z(?=(.)(.)?))rM   r;   )r;   rs   c             S   s   g | ]}|  qS r   )r   )ry   rS   r   r   r   rT    s    z*ReTests.test_bug_34294.<locals>.<listcomp>)r;   Nz1(?=<(?P<tag>\w+)/?>(?:(?P<text>.+?)</(?P=tag)>)?)z<test><foo2/></test>)ra   z<foo2/>)foo2rs   c             S   s   g | ]}|  qS r   )r   )ry   rS   r   r   r   rT    s    ra   z<foo2/>)tagr   r  z<test>Hello</test><foo/>c             S   s   g | ]}|  qS r   )r   )ry   rS   r   r   r   rT    s    ZHellorJ  z<test>Hello</test><foo/><foo/>c             S   s   g | ]}|  qS r   )r   )ry   rS   r   r   r   rT    s    )r#   r'   rD   r   r>   r8   )r   r?   r   r   r   r   test_bug_34294   s2    


zReTests.test_bug_34294)N)N)N)r   r   r   r$   r0   r4   r=   r@   rH   rL   rf   rg   rh   rl   rm   rt   ru   rv   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   r   r   r   r   r   r'   r   r   r3   r   digitsr  r  r
  r  r  r  r  r  r  r$  r%  r+  r,  r-  r0  r3  r5  r6  r7  r=  r@  rA  rL  rN  rO  rP  rR  rV  rW  rX  r[  r\  r^  ra  rm  rp  rs  rw  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  r  r  r  r   r   r   r   r      s   


	
	*0&5!,%
$ !-
	 
			f8&


6		 $
r   c               @   sl   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S )PatternReprTestsc             C   s   |  tt|| d S )N)r#   r  r'   r)   )r   r%   r   r   r   r   check$  s    zPatternReprTests.checkc             C   s   |  tt||| d S )N)r#   r  r'   r)   )r   r%   r   r   r   r   r   check_flags'  s    zPatternReprTests.check_flagsc             C   s   |  dd d S )Nzrandom patternzre.compile('random pattern'))r  )r   r   r   r   test_without_flags*  s    z#PatternReprTests.test_without_flagsc             C   s   |  dtjd d S )Nzrandom patternz+re.compile('random pattern', re.IGNORECASE))r  r'   r  )r   r   r   r   test_single_flag.  s    
z!PatternReprTests.test_single_flagc             C   s    |  dtjtjB tjB d d S )Nzrandom patternz@re.compile('random pattern', re.IGNORECASE|re.DOTALL|re.VERBOSE))r  r'   rk   r	   r`   )r   r   r   r   test_multiple_flags2  s    z$PatternReprTests.test_multiple_flagsc             C   s0   |  dtjd |  dtjtjB tjB d d S )Nzrandom patternzre.compile('random pattern')z5re.compile('random pattern', re.IGNORECASE|re.DOTALL))r  r'   r   rk   r	   )r   r   r   r   test_unicode_flag7  s    
z"PatternReprTests.test_unicode_flagc             C   s   |  dd d S )Nz(?i)patternz(re.compile('(?i)pattern', re.IGNORECASE))r  )r   r   r   r   rm  >  s    z"PatternReprTests.test_inline_flagsc             C   s&   |  ddd |  ddtjB d d S )Nzrandom patterni 0 z&re.compile('random pattern', 0x123000)z4re.compile('random pattern', re.IGNORECASE|0x123000))r  r'   rk   )r   r   r   r   test_unknown_flagsB  s    z#PatternReprTests.test_unknown_flagsc             C   s    |  dd | dtjd d S )Ns   bytes patternzre.compile(b'bytes pattern')z&re.compile(b'bytes pattern', re.ASCII))r  r  r'   ri   )r   r   r   r   
test_bytesH  s    
zPatternReprTests.test_bytesc             C   s   |  dtjd d S )Ns   bytes patternz're.compile(b'bytes pattern', re.LOCALE))r  r'   r  )r   r   r   r   test_localeN  s    
zPatternReprTests.test_localec             C   s(   |  dd |  dd |  dd d S )Nzrandom "double quoted" patternz,re.compile('random "double quoted" pattern')zrandom 'single quoted' patternz,re.compile("random 'single quoted' pattern")z!both 'single' and "double" quotesz1re.compile('both \'single\' and "double" quotes'))r  )r   r   r   r   test_quotesR  s    zPatternReprTests.test_quotesc             C   s   ddd  }t t|}| t|d | |d d d t t|tj}| t|d | |d d d | |dd  d d S )	NzVery %spatternzlong i  i,     zre.compile('Very long long loniz, re.IGNORECASE))r  r'   r)   Z
assertLessr   r#   rk   )r   r%   r   r   r   r   test_long_patternZ  s    z"PatternReprTests.test_long_patternN)r   r   r   r  r  r  r  r  r  rm  r  r  r  r  r  r   r   r   r   r  #  s   r  c               @   s   e Zd ZdZdd ZdS )ImplementationTestz7
    Test implementation details of the re module.
    c             C   s   t j}| |dg  | |ddg | |dddddg | |dddddg | |d	ddddddg | |d
ddddddddg d S )Nrs   rM   r   r   ZaaaarA   r   rB   ZababbaZabcabdac)sre_compile_generate_overlap_tabler#   )r   fr   r   r   test_overlap_tablej  s    z%ImplementationTest.test_overlap_tableN)r   r   r   __doc__r  r   r   r   r   r  e  s   r  c               @   s   e Zd Zdd Zdd ZdS )ExternalTestsc             C   s   ddl m} x|D ]\}}| j||d t|}| || | || | || dd | dd  }| || | ||d | ||ddt	|  | ||ddt	|  W dQ R X qW dS )zre_tests benchmarksr   )
benchmarks)r%   r3   r   i'  N)
test.re_testsr  r*   r'   r)   r   rD   rG   r   r   )r   r  r%   r?   r   s2r   r   r   test_re_benchmarksv  s    
z ExternalTests.test_re_benchmarksc             C   sr  ddl m}m}m}m} xR|D ]H}d } } } }	}
t|dkrV|\}}}}	}
n"t|dkrn|\}}}n
td|| j||d ||kr| t	j
 t	| W dQ R X w t	|}||}||kr| |d w |    | |d	 |d\}}|d| |j	jd
}xXtddD ]J}y||}|dkrJd}W n tk
rf   d}Y nX ||d| < q,W xV|j	j D ]F}y||}|dkrd}W n tk
r   d}Y nX |||< qW | t|	||
d W dQ R X yt|d}t|d}W n tk
r   Y ntX | d  t	|}| || W dQ R X | d2 t	|t	j}||}|dkrtd| W dQ R X |dd dkr|dd dkr|dk	r| d( t	|}| ||||d  W dQ R X | d$ t	|t	j}| || W dQ R X | d$ t	|t	j}| || W dQ R X W dQ R X q W dS )zre_tests test suiter   )testsSUCCEEDFAILSYNTAX_ERRORNr~   rB   z%Test tuples should have 3 or 5 fields)r%   r3   zSucceeded incorrectlyzFailed incorrectly)foundr   r   rA   d   Noner  zg%dzgrouping errorr  zbytes pattern matchzlocale-sensitive matchz#=== Fails on locale-sensitive matchr   z\Bzrange-limited matchzcase-insensitive matchzunicode-sensitive match)r  r  r  r  r  r   rj   r*   r&   r'   r(   r)   rD   rF   r   rE   rJ   r   r   r   r   keysr#   evalr   UnicodeEncodeErrorr   printr  r  )r   r  r  r  r  tr%   r?   Zoutcomer1   r   objresultr.  r/  Zvardictrz   Zgirr  bsr   r   r   test_re_tests  s    












$

"zExternalTests.test_re_testsN)r   r   r   r  r  r   r   r   r   r  t  s   r  __main__)Ztest.supportr   r   r   r   r   rx  r'   r  r3   Zunittestrd  r   weakrefr   rK   r	   r   r   ZTestCaser   r  r  r  r   mainr   r   r   r   <module>   s@                   Bq