
    7bh˧                     h   d 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Zddlm	Z	 ddl
mZmZ ddlmZ ddlZ ej"                         Zed   dk(  r" e eeed   j+                  d                  ZndZ G d	 d
ej.                        Z G d dej.                        Z G d dej.                        Z G d dej.                        Z G d dej.                        Z G d dej.                        Z G d dej.                        Z G d dej.                        Ze dk(  r ejB                          yy)zPyUnit testing against strptime    N)support)skip_if_buggy_ucrt_strfptimerun_with_locales)dateglibc   .c                       e Zd ZdZd Zy)getlang_TestszTest _getlangc                     | j                  t        j                         t        j                  t        j
                               y N)assertEqual	_strptime_getlanglocale	getlocaleLC_TIMEselfs    </opt/python-3.12.12/usr/lib/python3.12/test/test_strptime.py
test_basiczgetlang_Tests.test_basic   s*    ++-v/?/?/OP    N)__name__
__module____qualname____doc__r    r   r   r   r      s    Qr   r   c                       e Zd ZdZd Zd Zd Zd Zd Z e	j                  ej                  d      d        Zd	 Zd
 Zy)LocaleTime_TestszTests for _strptime.LocaleTime.

    All values are lower-cased when stored in LocaleTime, so make sure to
    compare values after running ``lower`` on them.

    c                 h    t        j                         | _        t        j                         | _        y)z(Create time tuple based on current time.N)time	localtime
time_tupler   
LocaleTimeLT_insr   s    r   setUpzLocaleTime_Tests.setUp$   s     ..***,r   c           	          t        j                  || j                        j                         }|| j                  |      }| j	                  ||d|z         | j                  |||d|d|       y)zHelper method that tests testing against directive based on the
        tuple_position of time_tuple.  Uses error_msg as error message.

        z%s: not found in tuplez#: position within tuple incorrect;  != N)r!   strftimer#   lowerassertInr   )r   testing	directivetuple_position	error_msgstrftime_output
comparisons          r   compare_against_timez%LocaleTime_Tests.compare_against_time)   sl     --	4??CIIKT__^<=
ow.:	<_#ZB	Cr   c                     | j                  | j                  j                  ddd       | j                  | j                  j                  ddd       y )N%A   z#Testing of full weekday name failed%az*Testing of abbreviated weekday name failed)r2   r%   	f_weekday	a_weekdayr   s    r   test_weekdayzLocaleTime_Tests.test_weekday7   sH     	!!$++"7"7q"G	I!!$++"7"7q"N	Pr   c                     | j                  | j                  j                  ddd       | j                  | j                  j                  ddd       y )N%Br   z&Testing against full month name failed%bz-Testing against abbreviated month name failed)r2   r%   f_montha_monthr   s    r   
test_monthzLocaleTime_Tests.test_month?   sH     	!!$++"5"5tQ"J	L!!$++"5"5tQ"Q	Sr   c                 0   t        j                  d| j                        j                         }| j	                  || j
                  j                  d       | j                  d   dk  rd}nd}| j                  | j
                  j                  |   |d       y )Nz%pz!AM/PM representation not in tuple      r   r   z;AM/PM representation in the wrong position within the tuple)r!   r)   r#   r*   r+   r%   am_pmr   )r   r0   positions      r   
test_am_pmzLocaleTime_Tests.test_am_pmG   s{    --doo>DDFot{{'8'89	;??1"qHh**84oV	Xr   (musl libc issue on Emscripten, bpo-46390c                 *   t        j                  d| j                        j                         }|rc| j	                  || j
                  j                  d   v xs || j
                  j                  d   v d|d| j
                  j                         y y )N%Zr   r   z	timezone z not found in )r!   r)   r#   r*   
assertTruer%   timezone)r   rJ   s     r   test_timezonezLocaleTime_Tests.test_timezoneQ   s}    
 ==t7==?OOH(<(<Q(?? @$(<(<Q(??%t{{';';=> r   c                 \   d}t        j                  d|      }| j                  t        j                  | j                  j                  |      |d       t        j                  d|      }| j                  t        j                  | j                  j
                  |      |d       t        j                  d|      }| j                  t        j                  | j                  j                  |      |d       t        j                         }d|_	        | j                  |j                  d	       y )
N)	  rA         ,   7      L   r   %czLC_date_time incorrect%xzLC_date incorrect%XzLC_time incorrect) rW   z6LocaleTime's LC directives cannot handle empty strings)r!   r)   r   r%   LC_date_timeLC_dateLC_timer   r$   rC   rI   )r   
magic_dater0   LTs       r   test_date_timezLocaleTime_Tests.test_date_time]   s     9
--j9t{{'?'?L(*B	D--j9t{{':':JG(*=	?--j9t{{':':JG(*=	?!!#

 %4 	5r   c                 t    | j                  | j                  j                  t        j                                y r   )r   r%   langr   r   r   s    r   	test_langzLocaleTime_Tests.test_langs   s'     	))9+=+=+?@r   N)r   r   r   r   r&   r2   r9   r?   rE   unittestskipIfr   is_emscriptenrK   r]   r`   r   r   r   r   r      sZ    -
CPSX X__I>>5,Ar   r   c                   J    e Zd ZdZd Zd Zd Zed        Zd Z	d Z
d Zd	 Zy
)TimeRETestszTests for TimeRE.c                 h    t        j                         | _        t        j                         | _        y)z Construct generic TimeRE object.N)r   TimeREtime_rer$   locale_timer   s    r   r&   zTimeRETests.setUp|   s#     '')$//1r   c                    | j                   j                  d      }| j                  |j                  | j                  j
                  d         dk7  d|z         | j                  |j                  | j                  j                  d         dk7  d|z         | j                  |j                  | j                   d         dk7  d|z         y )	Nz%a %A %drR   z7did not find abbreviated weekday in pattern string '%s'   z0did not find full weekday in pattern string '%s'dz.did not find 'd' directive pattern string '%s')rh   patternrI   findri   r8   r7   r   pattern_strings     r   test_patternzTimeRETests.test_pattern   s    --k:++D,<,<,F,Fq,IJbPQ'(	) 	++D,<,<,F,Fq,IJbPJ'(	) 	++DLL,=>"DH'(	)r   c                 f    | j                   j                  d      }| j                  d|d|z         y )Nz\d+z\\d\+z/%s does not have re characters escaped properly)rh   rn   r+   rp   s     r   test_pattern_escapingz!TimeRETests.test_pattern_escaping   s3     --f5hG$%	&r   c                    | j                   j                  d      j                  | j                  j                  d         }| j                  |xr+ |j                  d      | j                  j                  d   k(  d       | j                   j                  d      }|j                  | j                  j                  d   d| j                  j                  d         }| j                  |d|j                  d	| j                  j                  d   d| j                  j                  d   d
       | j                  |j                  d      | j                  j                  d   k(  xr+ |j                  d      | j                  j                  d   k(  d|j                  d|j                  j                  d|j                  d      d|j                  d      d	       dD ]  }| j                   j                  d|z         }|j                  t        j                  d|z               }| j                  |dt        j                  d|z         d|j                  d        y )Nr4   r5   Azre object for '%A' failedz%a %brl    zMatch failed with 'z' regex and 'z' stringabz:re object couldn't find the abbreviated weekday month in 'z	' using 'z'; group 'a' = 'z', group 'b' = ')rx   rv   ry   Bcrm   GHIjmMpSuUVwWxXyYZ%r   zMatching failed on 'z' regex)rh   compilematchri   r7   rI   groupr8   r>   rn   stringrer!   r)   )r   foundcompiledr-   s       r   test_compilezTimeRETests.test_compile   s    $$U+11$2B2B2L2LQ2OPS%++c"2d6F6F6P6PQR6S"S3	5<<''1$*:*:*D*DQ*G#//77: < =4+;+;+E+Ea+H+/+;+;+C+CA+F!HI	J 	C(D,<,<,F,Fq,II IS)T-=-=-E-Ea-HH  ,,(8(8%++c:J++c*,	-KI||++C)O<HNN4==y#ABEOOE%)]]3?%C%-%5%5$7 8	Kr   c                     t        j                         }t               t               f|_        | j	                  t        j
                  |      j                  d      dd       y )NrH   rW   z6with timezone == ('',''), TimeRE().pattern('%Z') != '')r   r$   	frozensetrJ   r   rg   rn   )r   test_locales     r   test_blankpatternzTimeRETests.test_blankpattern   sO      **, )Y[9))+6>>tDbQ	Sr   c                     | j                   j                  d      }|j                  d      }| j                  |d       y )Nz\w+ %mz\w+ 10z"Escaping failed of format '\w+ 10')rh   r   r   rI   )r   compiled_rer   s      r   test_matching_with_escapesz&TimeRETests.test_matching_with_escapes   s5    ll**95!!),DEr   c                     t        j                         }t        d      t        d      f|_        t        j                  |      }| j                  |j                  d      j                  d      d       y )N)utcgmtTokyo (standard time)zTokyo (daylight time)rH   r   zFlocale data that contains regex metacharacters is not properly escaped)r   r$   r   rJ   rg   rI   r   r   )r   ri   rh   s      r   'test_locale_data_w_regex_metacharactersz3TimeRETests.test_locale_data_w_regex_metacharacters   so      **, ) +E !F )*A B D "";/-334KL,	-r   c                     | j                   j                  d      }| j                  t        j                  |d             | j                  t        j                  |d             y )Nz%j %H180z18 0)rh   rn   assertFalser   r   rI   )r   rn   s     r   test_whitespace_substitutionz(TimeRETests.test_whitespace_substitution   sH     ,,&&w/'512&12r   N)r   r   r   r   r&   rr   rt   r   r   r   r   r   r   r   r   r   re   re   y   s>    2
)& "8 "84SF-3r   re   c                   >   e Zd ZdZd Zd Zd Zd ZdEdZd Z	d	 Z
 ed
ddddddd      d        Zd Zd Z ed
ddd      d        Zd Zd Zd Zd Z ed
dddddd      d        Zd Zd Zd Ze ej4                  ej8                  d      d               Z ej<                   ee d       d!      d"        Z! ed
ddddddd#d$d%d&d'd(d)d*d+d,d-d.      d/        Z" ejF                  d0       ed
ddddddd$d%d&d'd(d)d*d+d-      d1               Z$ ed
ddddddd#d$d.d+d,d-      d2        Z% ej4                  ej8                  xs ejL                  d       ed
ddddd#d$d+d-	      d3               Z' ed
dddddd4d5d.d6d7d)d+d8d,d-d9d:d;d<d=      d>        Z(d? Z)d@ Z*dA Z+dB Z,dC Z-dD Z.y)FStrptimeTestszTests for _strptime.strptime.c                 6    t        j                         | _        y)zCreate testing time tuples.N)r!   r"   r#   r   s    r   r&   zStrptimeTests.setUp   s    ..*r   c                 L   | j                  t        t        j                  dd       dD ]-  }	 t        j                  d|       | j	                  d|z         / d
}d}d}d}t        j                         }dd|fdd|fdd|fdj                  |j                  d         d|fdj                  |j                  d         d|fdd|fdd|fdd|fdd|fdd |fd!d"|fd#d$|fd%d&d'g}|D ]W  \  }	}
}| j                  |	|
      5  | j                  t        |      5  t        j                  |	|
       d d d        d d d        Y y # t        $ r Y "t
        $ r7}| j	                  d|d|j                  j                  d	       Y d }~\d }~ww xY w# 1 sw Y   bxY w# 1 sw Y   xY w)(N%dr4   )data_stringformat)r   z% z%e2005z'%s' did not raise ValueErrorrz   z	' raised z, not ValueErrorz|ISO week directive '%V' must be used with the ISO year directive '%G' and a weekday directive \('%A', '%a', '%w', or '%u'\).zdISO week directive '%V' is incompatible with the year directive '%Y'. Use the ISO year '%G' instead.z`Day of the year directive '%j' is not compatible with ISO year directive '%G'. Use '%Y' instead.z|ISO year directive '%G' must be used with the ISO week directive '%V' and a weekday directive \('%A', '%a', '%w', or '%u'\).z1999 50z%Y %Vz	1999 50 5z%Y %V %uz1999 51%G %Vz1999 {}   z%G %Az%G %az1999 5z%G %wz%G %u2015z%Gz1999 256z%G %jz1999 50 5 256z%G %V %u %j50z%Vz50 5z%V %u)z	2019-00-1%G-%V-%uz6time data '2019-00-1' does not match format '%G-%V-%u')z	2019-54-1r   z6time data '2019-54-1' does not match format '%G-%V-%u')z	2021-53-1r   zInvalid week: 53)assertRaises
ValueErrorr   _strptime_timefail	Exception	__class__r   r$   r   r7   r8   subTestassertRaisesRegex)r   
bad_formaterrmsg_week_no_year_or_weekdaymsg_week_not_compatiblemsg_julian_not_compatiblemsg_year_no_week_or_weekdayri   subtestsr   r   messages               r   test_ValueErrorzStrptimeTests.test_ValueError   s   *i&>&>D!% 	 	'+JH((< 		9JFG ,'.##G%J!'.#  **, !<=*&=>!<=k33A67+-k33A67+-w ;<w ;<T67";<m-FG445W9:GG99
> /7*[&'+fE++J@''V< A FE /7k   B		')?)?A B BBj A@ FEsA   E ?FF-F 	FF,FFFFF#	c                    | j                  t              5 }t        j                  dd       d d d        | j	                  j
                  j                  d       | j                  t              5 }t        j                  dd       d d d        | j                  |j
                  j                         y # 1 sw Y   xY w# 1 sw Y   ;xY w)NrW   z%DT19z%Y %)	r   r   r   r   assertIs	exception__suppress_context__assertIsNone__context__)r   es     r   test_strptime_exception_contextz-StrptimeTests.test_strptime_exception_context  s    z*a$$R. +akk66=z*a$$T62 +!++112 +* +*s   B50C5B>C
c                 P    | j                  t        t        j                  dd       y )Nz10 12%m)r   r   r   r   r   s    r   test_unconverteddataz"StrptimeTests.test_unconverteddata'  s    *i&>&>Nr   Nc                 $   || j                   }t        j                  ||      }t        j                  ||      }| j                  ||   ||   d|d|d||   d||          t        j                  dk\  rt        d|d|d||          yy)zHelper fxn in testing.Nztesting of z format failed; z -> r(   rA   z	 format: )	r#   r!   r)   r   r   r   r   verboseprint)r   fmtrD   r#   strf_outputstrp_outputs         r   	roundtripzStrptimeTests.roundtrip+  s    JmmC4..{C@X.
80D{K,A$X.0	1 ??a[%:< =  r   c                 r   | j                  dd       | j                  dd       | j                  ddd       t        j                  }| j                   |dd      d   d       | j                   |dd      d   d       | j                   |d	d      d   d
       | j                   |dd      d   d       y )N%Yr   z%y	l  r   r   r   r   r   r   r   r   00i  68i  69i  99rM   )r   r   r   r   )r   strptimes     r   	test_yearzStrptimeTests.test_year9  s    tQtQtQ >? ++$-a0$7$-a0$7$-a0$7$-a0$7r   c                 (    | j                  dd       y )Nr   r   r   r   s    r   r?   zStrptimeTests.test_monthF      tQr   r   Cen_USfr_FRde_DEja_JPhe_ILrW   c                     | j                  dd       | j                  dd       t        dd      D ]:  }| j                  ddd|dddddddf	       | j                  ddd|dddddddf	       < y )Nr;   r   r<      r   r   )r   range)r   r   s     r   test_month_localezStrptimeTests.test_month_localeJ  sv     	tQtQq"ANN4T1aAq!Q$BCNN4T1aAq!Q$BC r   c                 (    | j                  dd       y )N%d %YrR   r   r   s    r   test_dayzStrptimeTests.test_dayS  s    w"r   c                 (    | j                  dd       y )Nz%HrA   r   r   s    r   	test_hourzStrptimeTests.test_hourW  r   r   c                 (    | j                  dd       y )N%I %prA   r   r   s    r   test_hour_localezStrptimeTests.test_hour_locale\  s     	w"r   c                 (    | j                  dd       y )Nz%Mrl   r   r   s    r   test_minutezStrptimeTests.test_minutea  r   r   c                 (    | j                  dd       y )Nz%Sr   r   r   s    r   test_secondzStrptimeTests.test_seconde  r   r   c           	          dd l }|j                  ddddddd      }t        j                  t        |      d	      \  }}}| j                  ||j                         y )
Nr   i  rB      "   8   i4 z%Y-%m-%d %H:%M:%S.%f)r   )datetimer   strr   microsecond)r   r   rm   tupfrac_s         r   test_fractionzStrptimeTests.test_fractioni  sR    dBBB> **3q6:PQT1q}}-r   c                 L    | j                  dd       | j                  dd       y )N%wr5   %ur   r   s    r   r9   zStrptimeTests.test_weekdayp  s    tQtQr   c                 L    | j                  dd       | j                  dd       y )Nr4   r5   r6   r   r   s    r   test_weekday_localez!StrptimeTests.test_weekday_localeu  s      	tQtQr   c                 (    | j                  dd       y )Nz%j   r   r   s    r   test_julianzStrptimeTests.test_julian{  r   r   c                 x   d}d}d}t        j                   dd      \  ^ }}}}| j                  |||z          | j                  |d       t        j                   dd      \  ^ }}}}| j                  ||        | j                  |d       t        j                   dd      \  ^ }}}}| j                  |||z   |z           | j                  |d       t        j                   d	d      \  ^ }}}}| j                  |||z   |z           | j                  |d
       t        j                   dd      \  ^ }}}}| j                  ||       | j                  |d       t        j                   dd      \  ^ }}}}| j                  |||z           | j                  |d       t        j                   dd      \  ^ }}}}| j                  |||z   |z           | j                  |d       t        j                   dd      \  ^ }}}}| j                  |||z   |z           | j                  |d
       t        j                   dd      \  ^ }}}}| j                  |||z   |z          | j                  |d       t        j                   dd      \  ^ }}}}| j                  |d       | j                  |d       y )N       z+0130%zr   z-0100z-013030z-013030.000001rk   z+01:00z-01:30z	-01:30:30z-01:30:30.000001z+01:30:30.001i  r   )r   r   )r   one_hour	half_hourhalf_minuter  offsetoffset_fractions          r   test_offsetzStrptimeTests.test_offset  s   	+4+>+>w+M(!VaI!56!,+4+>+>w+M(!Va(+!,+4+>+>y$+O(!Va8i#7+#E!FG!,+4+>+>?OQU+V(!Va8i#7+#E!FG"-+4+>+>x+N(!Va*!,+4+>+>x+N(!Va8i#7!89!,+4+>+>{D+Q(!Va8i#7+#E!FG!,+4+>+>?QSW+X(!Va8i#7+#E!FG"-+4+>+>PT+U(!VaI!5!CD$/+4+>+>sD+I(!Va#!,r   c                    | j                  t              5  t        j                  dd       d d d        | j                  t              5  t        j                  dd       d d d        | j                  t              5  t        j                  dd       d d d        | j                  t              5  t        j                  dd       d d d        | j                  t              5 }t        j                  dd       d d d        | j                  dt	        j
                               y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   _xY w)Nz
-01:30:30.r  z-0130:30z-01:30:30.1234567z-01:30:30:123456z-01:3030z!Inconsistent use of : in -01:3030)r   r   r   r   r  r   )r   r   s     r   test_bad_offsetzStrptimeTests.test_bad_offset  s    z*d3 +z*
D1 +z* 3T: +z* 2D9 +z*c
D1 +<c#-->PQ +*********s;   D+
D7>E2E&E+D47E EEE$rF   c           
      f   t        j                  dd      }| j                  |j                  d       t        j                  dd      }| j                  |j                  d       t	        j
                         }t	        j                  d      }t        j                  |d      }t        j                         }t        j                  d   t        j                  d   k7  st        j                  s+| j                  |d   |d   k(  d|d|d   d	|d          y | j                  |d   d
k(  d       y )NUTCrH   r   GMTr      ztimezone check failed; 'z' -> r(   rk   z]LocaleTime().timezone has duplicate values and time.daylight but timezone value not set to -1)r   r   r   tm_isdstr!   r"   r)   r$   tznamedaylightrI   )r   r   r#   r   ri   s        r   rK   zStrptimeTests.test_timezone  s      ..ud;--q1..ud;--q1^^%
mmD)..{DA**,;;q>T[[^+4==OOKNjm;);q>:a=JK OOKNb0NOr   tzsetz"time module has no attribute tzsetc                 l   t         j                  d   }|j                         dv r| j                  d       t	        j
                  t         d||f      5  t	        j
                  t         dd      5  t	        j
                  t         dd       5  ||ft         _        dt         _        t        j                  |d	      d
   }| j                  |dt         j                  d|dt         j                  d|       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   )r  r  zneed non-UTC/GMT timezoner!  r"  r   r#  c                       y r   r   r   r   r   <lambda>z1StrptimeTests.test_bad_timezone.<locals>.<lambda>  s    dr   rH   r  rk   z lead to a timezone value of z) instead of -1 when time.daylight set to z and passing in )
r!   r!  upperskipTestr   	swap_attrr"  r   r   r   )r   tz_nametz_values      r   test_bad_timezonezStrptimeTests.test_bad_timezone  s     ++a.==?n,MM56tX/ABtZ3tWl;"G,DKDM //>qAHXr [[(DMM7DE	 < 4 CB;; 43 CBs=   D*0DA,D9DD*DDD'	#D**D3eu_ESar_AEmfe_MUyo_NGcsb_PLbr_FRgez_ETbrx_INmy_MMor_INshn_MMaz_IRc           
         t        j                  t         j                        d   }t        rt        dk  r|dk(  r| j	                  d       t        j
                         }| j                  dt        dd      t        j                  |             | j                  dt        dd      t        j                  |dz
               | j                  dt        dd      t        j                  |dz
               t        d	d
      D ];  }| j                  dt        dd      t        j                  ||dz  dz  z
               = t        d	d      D ]>  }| j                  dt        dd      t        j                  ||dz  dz  dz  z
               @ | j                  dt        dd      t        j                  |dz
               y )Nr   )rR      r2  z(%c in locale br_FR does not include timerT   r5       r   r     r  rB   r   )
r   r   r   	glibc_verr(  r!   r   slicer"   r   )r   locnowis       r   test_date_time_localez#StrptimeTests.test_date_time_locale  sM    v~~.q1W,MMDEiiktU1a[$..*=>tU1a[$..t*DEtU1a[$..w*GHq!ANN4q!dnnS1R49_.MN  q"ANN4q!dnnS1R474<=O.PQ  	tU1a[$..{9J*KLr   STD-1DST,M4.1.0,M10.1.0c                 4   t        j                  t         j                        d   }t        j                  j                  d      r|dv r| j                  d|d       | j                  dt        dd      d       | j                  dt        dd      d	       y )
Nr   sunos)r.  locale  may not work on this platformrT   r5   r   	r  r   r   r   r   r   r   r   r   	r   r   r   sysplatform
startswithr(  r   r@  r   rA  s     r   test_date_time_locale2z$StrptimeTests.test_date_time_locale2  s{     v~~.q1<<""7+j w.LMNtU1a[*HItU1a[*HIr   c           
          t        j                          }| j                  dt        dd      t        j                  |             t	        dd      D ];  }| j                  dt        dd      t        j                  ||dz  dz  z
               = t	        dd      D ]>  }| j                  dt        dd      t        j                  ||d	z  dz  dz  z
               @ | j                  dt        dd      t        j                  |d
z
               y )NrU   r   rA   r   r  r=  r  rB   r  r>  )r!   r   r@  r"   r   )r   rB  rC  s      r   test_date_localezStrptimeTests.test_date_locale  s    
 iiktU1a[$..*=>q!ANN4q!dnnS1R49_.MN  q"ANN4q!dnnS1R474<=O.PQ  	tU1a[$..{9J*KLr   c                 4   t        j                  t         j                        d   }t        j                  j                  d      r|dv r| j                  d|d       | j                  dt        dd      d       | j                  dt        dd      d	       y )
Nr   rG  )r   r   r.  rH  rI  rU   rA   r   rJ  rK  rO  s     r   test_date_locale2zStrptimeTests.test_date_locale2'  s|     v~~.q1<<""7+11w.LMNtU1a[*HItU1a[*HIr   aa_ETam_ETbyn_ERfa_IRom_ETsid_ETso_SOti_ETtig_ERwal_ETc                    t        j                  t         j                        d   }t        dd      }t        rt        dk  r|dv rt        dd      }t        j
                         }| j                  d|t        j                  |             | j                  d|t        j                  |dz
               | j                  d|t        j                  |d	z
               y )
Nr   rA   r5   )rR      >
   rU  rV  rY  r[  r\  rW  r3  rZ  r]  r^  rl   rV   r;  r<  )r   r   r   r@  r?  r!   r   r"   )r   rA  posrB  s       r   test_time_localezStrptimeTests.test_time_locale=  s     v~~.q1AqkW, 9@ 2@
 1+CiiktS$.."56tS$..t"<=tS$..w"?@r   c                     t        j                  d| j                        }t        j                  |d      }| j                  |d   | j                  d   k(  xr |d   | j                  d   k(  d       y )Nz%m %% %Yr   r   zhandling of percent sign failed)r!   r)   r#   r   r   rI   )r   r   r   s      r   test_percentzStrptimeTests.test_percentR  se    mmJ@..{JGA$//!*<< >$Q4??1+==9	;r   c                 |   t        j                  d| j                        }| j                  t	        j
                  |j                         d      d       | j                  t	        j
                  |j                         d      d       | j                  t	        j
                  |j                         d      d       y )Nr;   z0strptime does not handle ALL-CAPS names properlyz1strptime does not handle lowercase names properlyz/strptime does not handle capword names properly)	r!   r)   r#   rI   r   r   r'  r*   
capitalize)r   r   s     r   test_caseinsensitivez"StrptimeTests.test_caseinsensitiveZ  s    mmD$//:	001B1B1DdKJ	L	001B1B1DdKK	M	001G1G1I4PI	Kr   c                 j    d}t        j                  dd      }| j                  ||k(  d|d|       y )N)	r   r   r   r   r   r   r   r   rk   1r   z-Default values for strptime() are incorrect; r(   )r   r   rI   )r   defaultsr   s      r   test_defaultszStrptimeTests.test_defaultsd  s6    2..sD9x/'2H>	?r   c                 R    d}| j                  t        j                  ||             y )Nz.^$*+?{}\[]|)()rI   r   r   )r   need_escapings     r   test_escapingzStrptimeTests.test_escapingl  s"     *	00NOr   c                 0    t        j                  dd       y )NFeb 29%b %d)r!   r   r   s    r   $test_feb29_on_leap_year_without_yearz2StrptimeTests.test_feb29_on_leap_year_without_yearu  s    h(r   c                 x    | j                  t        j                  dd      t        j                  dd             y )Nrp  rq  zMar 1)
assertLessr!   r   r   s    r   7test_mar1_comes_after_feb29_even_when_omitting_the_yearzEStrptimeTests.test_mar1_comes_after_feb29_even_when_omitting_the_yearx  s*    h0gw/	1r   r   )/r   r   r   r   r&   r   r   r   r   r   r?   r   r   r   r   r   r   r   r  r9   r  r  r  r  r   ra   rb   r   rc   rK   
skipUnlesshasattrr!   r,  rD  run_with_tzrP  rR  is_wasirT  rb  rd  rg  rk  rn  rr  ru  r   r   r   r   r      s   '+?=B3O=8  igw'SUVD WD# 
 igw7# 8#  . 
 igw"M  N 
 !-FR "X__IO "O, Xg D
E
E< igww78w';M	;M, W23igww'8x)J	) 4
J igwww;M;M X__02 i'7Gw;J;	J  igww7Hw8Wx3A	3A";K?P)1r   r   c                       e Zd ZdZd Zy)Strptime12AMPMTestsz9Test a _strptime regression in '%I %p' at 12 noon (12 PM)c                    | j                   } |t        j                  dd      d   d        |t        j                  dd      d   d        |t        j                  dd      d   d        |t        j                  dd      d   d       y )Nz12 PMr   rA   rB   z12 AMr   )r   r!   r   r   r   )r   eqs     r   test_twelve_noon_midnightz-Strptime12AMPMTests.test_twelve_noon_midnight  sy    
4=='*1-r2
4=='*1-q1
9##GW5a8"=
9##GW5a8!<r   N)r   r   r   r   r~  r   r   r   r{  r{  }  s
    C=r   r{  c                       e Zd ZdZd Zy)JulianTestsz@Test a _strptime regression that all julian (1-366) are acceptedc                     | j                   }t        dd      D ]%  } |t        j                  d|z  d      d   |       ' y )Nr   io  z%d 2004z%j %Yr  )r   r   r   r   )r   r}  rC  s      r   test_all_julian_daysz JulianTests.test_all_julian_days  s=    q#Ay''	Aw?BAF r   N)r   r   r   r   r  r   r   r   r  r    s    JGr   r  c                       e Zd ZdZd Zed        Zed        Zed        Ze	j                  rdZdZndZdZ ej                  ej                   j#                  d	      d
      d        Zd Zy)CalculationTestsz4Test that strptime() fills in missing info correctlyc                 6    t        j                         | _        y r   )r!   gmtimer#   r   s    r   r&   zCalculationTests.setUp  s    ++-r   c                    d}t        j                  t        j                  || j                        |      }| j                  |j                  | j                  j                  k(  d|j                  d| j                  j                         y )Nz%Y %m %d %H %M %S %w %ZzCalculation of tm_yday failed; r(   )r   r   r!   r)   r#   rI   tm_ydayr   format_stringresults      r   test_julian_calculationz(CalculationTests.test_julian_calculation  sh     2))$--t*W$13$//*A*AA ..$//*A*AC	Dr   c                 B   d}t        j                  t        j                  || j                        |      }| j                  |j                  | j                  j                  k(  xrH |j                  | j                  j                  k(  xr# |j                  | j                  j                  k(  d|j                  d|j                  d|j                  d| j                  j                  d| j                  j                  d| j                  j                         y )Nz%Y %H %M %S %w %j %Zz&Calculation of Gregorian date failed; -r(   )	r   r   r!   r)   r#   rI   tm_yeartm_montm_mdayr  s      r   test_gregorian_calculationz+CalculationTests.test_gregorian_calculation  s     /))$--t*W$13$//*A*AA C$//*@*@@C4??+B+BB !..&--//114??3I3I//11	3	4r   c                    d}t        j                  t        j                  || j                        |      }| j                  |j                  | j                  j                  k(  d|j                  d| j                  j                         y )Nz%Y %m %d %H %S %j %Zz'Calculation of day of the week failed; r(   )r   r   r!   r)   r#   rI   tm_wdayr  s      r   test_day_of_week_calculationz-CalculationTests.test_day_of_week_calculation  sh     /))$--t*W$13$//*A*AA'-~~t7N7NP	Qr   )q  r   r   r  rB   r:    rB   r`  }  rB   r:  )r   r   aixzbpo-29972: broken test on AIXc                 x     f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'       y )(Nc           	         dD ]  }|	j                   v r| 	j                  v r y dD ]  }|dz   |z   }	j                  || |      5  t        |  }|j	                  |      }t        j                  ||      }|d|d   d|j                         d   }	j                  |d d | |       d d d          y # 1 sw Y   xY w)	N)z%Y %Wz%Y %Ur   )r  r	  r6   r4   rw   )r   r   z: r  r(   rA   )	_formats_excluded_ymd_excludedr   datetime_dater)   r   r   	timetupler   )
	ymd_tupletest_reasonyear_week_formatweekday_formatr  dt_date
strp_inputr   msgr   s
            r   test_helperzSCalculationTests.test_week_of_year_and_day_of_week_calculation.<locals>.test_helper  s    $? $(>(>>!T%7%77&>N$4s$:^$KMk+4-: & < #0";%,%5%5m%D
&/&>&>z?L'N0:0;A070A0A0CA0FH ((Ra)SI< < '?	 %@< <s   A$B77C )m  r   rA   zweek 0)r  r   r  zcommon case)r  r   r   zday on Sunday)r  r      zday on Mondayr  zJan 1 on Sunday)r  r   r   zJan 1 on Monday)r  r   r  z)first Sunday in a year starting on Monday)r  rB   r:  zDec 31 on Sundayr  zDec 31 on Mondayr  z#Monday in the last week of the year)r  rB   rO   z-Monday in the second-to-last week of the year)i  
      zrandomly chosen date)i  rB      zEyear starting and ending on Monday while date not on Sunday or Monday)r  rB   rN   zXyear starting and ending on Monday with a Monday not at the beginning or end of the yearr  z8Dec 31 on Monday with year starting and ending on Monday)  r   r  zFirst Sunday of 2007)r  r   r  zSecond Sunday of 2007)  rB   r:  zLast Sunday of 2006)r  rB   r=  zSecond to last Sunday of 2006r   )r   r  s   ` r   -test_week_of_year_and_day_of_week_calculationz>CalculationTests.test_week_of_year_and_day_of_week_calculation  s    
	J$ 	L(+L-0M?3M?3L"34L"34L"MNN$67N$67N$IJN %+ 	,N$:;N$:;N %G 	HN %6 	7 	N %; 	<L"89M#:;N$9:N$CDr   c                      f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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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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)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dddddd-
        |d/dd'ddddddd
        |d0dd'ddddddd
        |d0d
d'ddddddd
        |d1dd'ddddddd
        |d2dd'ddddddd
        |d2d
d'ddddddd
        |d3dd'dddddd"d
        |d4dd'dddddd"d
        |d4d
d'dddddd"d
        |d5dd'ddddddd
       y )6Nc                 X    j                  t        j                  | |      d d |       y )Nrk   )r   r   r   )valuer   expectedr   s      r   checkz+CalculationTests.test_week_0.<locals>.check  s'    Y55eVDSbI8Tr   z2015 0 0z%Y %U %wi  rB      r   r5   ij  z%Y %W %wi  r   rl   z2015 1 1z%G %V %ur`  ik  z2015 0 1z2015 1 2r  il  z2015 0 2z2015 1 3r:  rR   im  z2015 0 3z2015 1 4rA   z2015 0 4z2015 1 5z2015 0 5z2015 1 6r   z2015 0 6z2015 1 7z2009 0 0r  i  z2009 1 1z2009 0 1z2009 1 2z2009 0 2z2009 1 3in  z2009 0 3z2009 1 4z2009 0 4z2009 1 5z2009 0 5z2009 1 6z2009 0 6z2009 1 7r   )r   r  s   ` r   test_week_0zCalculationTests.test_week_0  sM   	Uj*dBAq!QDj*dAq!Q1a@j*dBAq!QDj*dBAq!QDj*dBAq!QDj*dBAq!QDj*dBAq!QDj*dBAq!QDj*dBAq!QDj*dBAq!QDj*dBAq!QDj*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dBAq!QDj*dAq!Q1a@j*dBAq!QDj*dBAq!QDj*dBAq!QDj*dBAq!QDj*dBAq!QDj*dBAq!QDj*dBAq!QDj*dBAq!QDj*dBAq!QDj*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@j*dAq!Q1a@r   N)r   r   r   r   r&   r   r  r  r  r   
is_androidr  r  ra   rb   rL  rM  rN  r  r  r   r   r   r  r    s    >( "D "D "4 "4 "Q "Q (&X__S\\,,U346-E6-E^-Ar   r  c                   X    e Zd ZdZd Zd Zd Zd Z ej                  d      d        Z
y)	
CacheTestsz!Test that caching works properly.c                 x   t        j                  dd       t        j                  dd       dt         j                  j                  _        t         j                  }t        j                  dd       | j                  |t         j                         | j                  t        t         j                        d       y )N10r   r   r   Nir   )	r   r   _TimeRE_cacheri   r_   assertIsNotr   len_regex_cache)r   original_time_res     r   test_time_re_recreationz"CacheTests.test_time_re_recreation(  s     	  t,  .37	++0$22  t,)9+B+BCY334a8r   c                    	 t         j                  d= d}t        t         j                        t         j                  k  rCd t         j                  |<   |dz  }t        t         j                        t         j                  k  rCt        j
                  dd       | j                  t        t         j                        d       y # t        $ r Y w xY w)Nr   r   r   r  )r   r  KeyErrorr  _CACHE_MAX_SIZEr   r   )r   	bogus_keys     r   test_regex_cleanupzCacheTests.test_regex_cleanup3  s    	&&t, 	)(()Y-F-FF04I""9-NI )(()Y-F-FF 	  t,Y334a8  		s   C 	CCc                     t         j                  j                  }dt         j                  j                  _        t        j                  dd       | j                  |t         j                  j                         y )Nr  r  r   )r   r  ri   r_   r   r  )r   locale_time_ids     r   test_new_localetimezCacheTests.test_new_localetime@  sU     #00<<37	++0  t,)@)@)L)LMr   c                    t        j                  dd      5  t        j                  dd       t        j                  }	 t        j                  t
        j                  d       t        j                  dd       t        j                  }| j                  ||       d d d        y # t
        j                  $ r | j                  d       Y /w xY w# 1 sw Y   y xY w)	Nr   z
en_US.UTF8z10 2004r   )r   UTF8r  r   ztest needs de_DE.UTF8 locale)r   run_with_localer   r   r  r   	setlocaler   r  Errorr(  )r   first_time_resecond_time_res      r   test_TimeRE_recreation_localez(CacheTests.test_TimeRE_recreation_localeH  s    $$Y=$$Y8%33M>  1BC((t4!*!8!8  ? >= << ><=> >=s)   'CAB$$$CC
CCCrE  c                    t         j                  }t        j                  t         j                  d   d      }| j	                  |j
                  d       t        j                  t         j                  d   d      }| j	                  |j
                  d       t        j                  }dt        j                  d<   t        j                          t        j                  t         j                  d   d      }| j	                  |j
                  d       t        j                  t         j                  d   d      }| j	                  |j
                  d       t        j                  }| j                  ||       | j                  t              5  t        j                  |d   d       d d d        | j                  t              5  t        j                  |d   d       d d d        y # 1 sw Y   AxY w# 1 sw Y   y xY w)Nr   rH   r   zEST+05EDT,M3.2.0,M11.1.0TZ)r!   r!  r   r   r   r   r  osenvironr#  r  r   r   )r   	oldtznametmr  r  s        r   test_TimeRE_recreation_timezonez*CacheTests.test_TimeRE_recreation_timezone\  sc    KK	%%dkk!nd;a(%%dkk!nd;a(!//5

4

%%dkk!nd;a(%%dkk!nd;a("007z*$$Yq\48 +z*$$Yq\48 +* +***s   G%G1%G.1G:N)r   r   r   r   r  r  r  r  r   rx  r  r   r   r   r  r  %  s<    +	99N>( W239 49r   r  __main__)"r   ra   r!   r   r   r  rM  rL  testr   test.supportr   r   r   r   r  r   libc_vertuplemapintsplitr?  TestCaser   r   re   r   r{  r  r  r  r   mainr   r   r   <module>r     s+   %    	 	  
  G * 8A;'c#x{00567IIQH%% Q
ZAx(( ZAzY3(## Y3xf1H%% f1P=(++ =G(## GQAx(( QAhP9"" P9f zHMMO r   