o
    HXh                     @   s  	 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	 d dl
mZ d dlZG dd de jZG dd de jZG d	d
 d
e jZG dd de jZG dd d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 dS )    N)support)skip_if_buggy_ucrt_strfptime)datec                   @      e Zd Z	 dd ZdS )getlang_Testsc                 C   s   |  t ttj d S N)assertEqual	_strptime_getlanglocale	getlocaleLC_TIMEself r   </opt/python-3.10.19/usr/lib/python3.10/test/test_strptime.py
test_basic   s   zgetlang_Tests.test_basicN)__name__
__module____qualname__r   r   r   r   r   r      s    r   c                   @   sN   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S )LocaleTime_Testsc                 C   s   	 t  | _t | _d S r   )time	localtime
time_tupler	   
LocaleTimeLT_insr   r   r   r   setUp      
zLocaleTime_Tests.setUpc                 C   sP   	 t || j }|| j|  }| ||d|  | ||d|||f  d S )Nz%s: not found in tuplez-%s: position within tuple incorrect; %s != %s)r   strftimer   lowerassertInr   )r   Ztesting	directiveZtuple_positionZ	error_msgstrftime_outputZ
comparisonr   r   r   compare_against_time!   s   z%LocaleTime_Tests.compare_against_timec                 C   ,   |  | jjddd |  | jjddd d S )N%A   z#Testing of full weekday name failed%az*Testing of abbreviated weekday name failed)r#   r   	f_weekday	a_weekdayr   r   r   r   test_weekday/      zLocaleTime_Tests.test_weekdayc                 C   r$   )N%B   z&Testing against full month name failedz%bz-Testing against abbreviated month name failed)r#   r   Zf_montha_monthr   r   r   r   
test_month7   r+   zLocaleTime_Tests.test_monthc                 C   sV   t d| j }| || jjd | jd dk rd}nd}| | jj| |d d S )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   r"   positionr   r   r   
test_am_pm?   s   zLocaleTime_Tests.test_am_pmc                 C   sR   t d| j }|r'| || jjd v p|| jjd v d|| jjf  d S d S )N%Zr   r-   ztimezone %s not found in %s)r   r   r   r   
assertTruer   timezone)r   r7   r   r   r   test_timezoneI   s   
zLocaleTime_Tests.test_timezonec                 C   s   d}t d|}| t | jj||d t d|}| t | jj||d t d|}| t | jj||d t }d|_	| 
|jd	 d S )
N)	i  r0         ,   7      L   r   z%czLC_date_time incorrectz%xzLC_date incorrectz%XzLC_time incorrect) r?   z6LocaleTime's LC directives cannot handle empty strings)r   r   r   r   ZLC_date_timeZLC_dateZLC_timer	   r   r2   r6   )r   Z
magic_dater"   ZLTr   r   r   test_date_timeR   s    zLocaleTime_Tests.test_date_timec                 C   s   |  | jjt  d S r   )r   r   langr	   r
   r   r   r   r   	test_langh   s   zLocaleTime_Tests.test_langN)r   r   r   r   r#   r*   r/   r4   r8   r@   rB   r   r   r   r   r      s    
	r   c                   @   sR   e Zd Z	 dd Zdd Zdd Zedd Zd	d
 Zdd Z	dd Z
dd ZdS )TimeRETestsc                 C   s   	 t  | _t  | _d S r   )r	   TimeREtime_rer   locale_timer   r   r   r   r   q   r   zTimeRETests.setUpc                 C   st   | j d}| || jjd dkd|  | || jjd dkd|  | || j d dkd|  d S )	Nz%a %A %dr=   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')rE   patternr6   findrF   r)   r(   r   Zpattern_stringr   r   r   test_patternv   s    zTimeRETests.test_patternc                 C   s"   | j d}| d|d|  d S )Nz\d+z\\d\+z/%s does not have re characters escaped properly)rE   rJ   r    rL   r   r   r   test_pattern_escaping   s   z!TimeRETests.test_pattern_escapingc              
   C   s<  | j d| jjd }| |o|d| jjd kd | j d}|d| jjd | jjd f }| |d|j	d| jjd | jjd f f  | |d	| jjd koc|d
| jjd kd|j
|jj	|d	|d
f  dD ]$}| j d| }|td| }| |dtd| |j	f  qwd S )Nr%   r&   Azre object for '%A' failedz%a %bz%s %srH   z,Match failed with '%s' regex and '%s' stringabzkre object couldn't find the abbreviated weekday month in '%s' using '%s'; group 'a' = '%s', group 'b' = %s')rP   rO   rQ   BcrI   GHIjmMpSuUVwWxXyYZ%rf   z(Matching failed on '%s' using '%s' regex)rE   compilematchrF   r(   r6   groupr)   r.   rJ   stringrer   r   )r   foundZcompiledr!   r   r   r   test_compile   s@   

zTimeRETests.test_compilec                 C   s4   t  }t t f|_| t |ddd d S )Nr5   r?   z6with timezone == ('',''), TimeRE().pattern('%Z') != '')r	   r   	frozensetr7   r   rD   rJ   )r   Ztest_localer   r   r   test_blankpattern   s
   zTimeRETests.test_blankpatternc                 C   s&   | j d}|d}| |d d S )Nz\w+ %mz\w+ 10z"Escaping failed of format '\w+ 10')rE   rg   rh   r6   )r   Zcompiled_rerl   r   r   r   test_matching_with_escapes   s   
z&TimeRETests.test_matching_with_escapesc                 C   s@   t  }tdtdf|_t |}| |ddd d S )N)ZutcZgmtTokyo (standard time)zTokyo (daylight time)r5   rq   zFlocale data that contains regex metacharacters is not properly escaped)r	   r   rn   r7   rD   r6   rg   rh   )r   rF   rE   r   r   r   'test_locale_data_w_regex_metacharacters   s   
z3TimeRETests.test_locale_data_w_regex_metacharactersc                 C   s4   | j d}| t|d | t|d d S )Nz%j %HZ180z18 0)rE   rJ   ZassertFalserk   rh   r6   )r   rJ   r   r   r   test_whitespace_substitution   s   z(TimeRETests.test_whitespace_substitutionN)r   r   r   r   rM   rN   r   rm   ro   rp   rr   rs   r   r   r   r   rC   n   s    
rC   c                   @   s   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zed!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7S )8StrptimeTestsc                 C   s   	 t  | _d S r   r   gmtimer   r   r   r   r   r      s   zStrptimeTests.setUpc                 C   s  | j ttjddd dD ]7}ztd| W n% ty   Y q ty; } z| d||jjf  W Y d }~qd }~ww | d|  q|  t tdd	 W d    n1 sZw   Y  |  t td
d W d    n1 suw   Y  dD ] }|  t td
d| W d    n1 sw   Y  q||  t tdd W d    n1 sw   Y  |  t tdd W d    d S 1 sw   Y  d S )N%dr%   )Zdata_stringformat)rf   z% z%e2005z'%s' raised %s, not ValueErrorz'%s' did not raise ValueErrorz1999 50z%Y %Vz1999 51%G %VrO   rP   r_   r\   z%G %{}Z2015z%Gz1999 256z%G %j)	assertRaises
ValueErrorr	   _strptime_time	ExceptionZfail	__class__r   rx   )r   Z
bad_formaterrr_   r   r   r   test_ValueError   s@   
"zStrptimeTests.test_ValueErrorc                 C   s   |  t}tdd W d    n1 sw   Y  | |jjd |  t}tdd W d    n1 s9w   Y  | |jjd d S )Nr?   z%DTZ19z%Y %)r|   r}   r	   r~   ZassertIs	exception__suppress_context__)r   er   r   r   test_strptime_exception_context   s   z-StrptimeTests.test_strptime_exception_contextc                 C   s   |  ttjdd d S )Nz10 12%m)r|   r}   r	   r~   r   r   r   r   test_unconverteddata   s   z"StrptimeTests.test_unconverteddatac              	   C   sX   	 t d| | j}t|d| }| || | j| kd|||| | j| f  d S )Nrf   z2testing of '%s' directive failed; '%s' -> %s != %sr   r   r   r	   r~   r6   )r   r!   r3   strf_outputstrp_outputr   r   r   helper  s   
zStrptimeTests.helperc              	   C   sj   dD ]}|  |d qdD ]%\}}|D ]}t|d}|t| }| |d |kd||d f  qqd S )N)rc   rd   r   ))l  )Z69Z99)i  )Z00Z68z%yz1'y' test failed; passed in '%s' and returned '%s')r   r	   r~   intr6   )r   r!   ZcenturyZboundsZboundr   Zexpected_resultr   r   r   	test_year  s   
zStrptimeTests.test_yearc                 C      dD ]}|  |d qd S )N)rR   rQ   rX   r-   r   r   r!   r   r   r   r/        zStrptimeTests.test_monthc                 C      |  dd d S )NrI   r=   r   r   r   r   r   test_day     zStrptimeTests.test_dayc                 C   sX   |  dd td| j}t|d}| |d | jd kd||d | jd f  d S )NrU   r0   %I %pz7testing of '%%I %%p' directive failed; '%s' -> %s != %s)r   r   r   r   r	   r~   r6   r   r   r   r   r   r   	test_hour!  s   zStrptimeTests.test_hourc                 C   r   )NrY   rH   r   r   r   r   r   test_minute*  r   zStrptimeTests.test_minutec                 C   r   )Nr[      r   r   r   r   r   test_second.  r   zStrptimeTests.test_secondc              	   C   sH   dd l }| ddddddd}tjt|dd	\}}}| ||j d S )
Nr   i  r1      "   8   i4 z%Y-%m-%d %H:%M:%S.%f)rx   )datetimer	   strr   Zmicrosecond)r   r   rI   tupZfrac_r   r   r   test_fraction2  s   zStrptimeTests.test_fractionc                 C   r   )Nr{   r&   r   r   r   r   r   r*   9  r   zStrptimeTests.test_weekdayc                 C   r   )NrW      r   r   r   r   r   test_julian>  r   zStrptimeTests.test_julianc                 C   s,  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 t  dd\^ }}}}| ||| |   | |d
 t  dd\^ }}}}| ||| |  | |d t  dd\^ }}}}| |d | |d d S )Ni  i     z+0130%zr   z-0100z-013030z-013030.000001rG   z+01:00z-01:30z	-01:30:30z-01:30:30.000001z+01:30:30.001i  re   )r	   r   )r   Zone_hourZ	half_hourZhalf_minuter   offsetZoffset_fractionr   r   r   test_offsetB  sB   zStrptimeTests.test_offsetc                 C   s$  |  t tdd W d    n1 sw   Y  |  t tdd W d    n1 s1w   Y  |  t tdd W d    n1 sLw   Y  |  t tdd W d    n1 sgw   Y  |  t}tdd W d    n1 sw   Y  | dt|j d S )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   r   r   r   test_bad_offsete  s    zStrptimeTests.test_bad_offsetc                 C   s   t dd}| |jd t dd}| |jd t }td}t |d}t  }tjd tjd ks:tj	sQ| 
|d |d kd||d |d f  d S | 
|d dkd	 d S )
NUTCr5   r   GMTr-      z'timezone check failed; '%s' -> %s != %srG   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daylightr6   )r   r   r   r   rF   r   r   r   r8   r  s"   
zStrptimeTests.test_timezonec                 C   s  t jd }| dv r| d tt d||f` tt dd@ tt ddd	 ' ||ft _dt _t|d
d }| 	|ddt j|t j|f  W d    n1 sUw   Y  W d    n1 sdw   Y  W d    d S W d    d S 1 s|w   Y  d S )Nr   )r   r   zneed non-UTC/GMT timezoner   r   r-   tzsetc                   S   s   d S r   r   r   r   r   r   <lambda>  s    z1StrptimeTests.test_bad_timezone.<locals>.<lambda>r5   r   rG   z^%s lead to a timezone value of %s instead of -1 when time.daylight set to %s and passing in %s)
r   r   upperskipTestr   Z	swap_attrr   r	   r~   r   )r   Ztz_nameZtz_valuer   r   r   test_bad_timezone  s&   


P zStrptimeTests.test_bad_timezonec                 C   s   t dD ]}| d| qd S )Nr&   rS   ranger   r   r3   r   r   r   r@     s   zStrptimeTests.test_date_timec                 C       t ddD ]}| d| qd S )Nr   r0   ra   r   r   r   r   r   	test_date     zStrptimeTests.test_datec                 C   r   )Nr0   r&   rb   r   r   r   r   r   	test_time  r   zStrptimeTests.test_timec                 C   sJ   t d| j}t|d}| |d | jd ko |d | jd kd d S )Nz%m %% %Yr   r-   zhandling of percent sign failedr   r   r   r   r   test_percent  s   zStrptimeTests.test_percentc                 C   sZ   t d| j}| t| dd | t| dd | t| dd d S )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   r6   r	   r~   r   r   
capitalize)r   r   r   r   r   test_caseinsensitive  s   z"StrptimeTests.test_caseinsensitivec                 C   s,   d}t dd}| ||kd||f  d S )N)	r   r-   r-   r   r   r   r   r-   rG   1r   z5Default values for strptime() are incorrect; %s != %s)r	   r~   r6   )r   defaultsr   r   r   r   test_defaults  s   
zStrptimeTests.test_defaultsc                 C   s   d}|  t|| d S )Nz.^$*+?{}\[]|)()r6   r	   r~   )r   Zneed_escapingr   r   r   test_escaping  s   zStrptimeTests.test_escapingc                 C   s   t dd d S )NFeb 29%b %d)r   strptimer   r   r   r   $test_feb29_on_leap_year_without_year  s   z2StrptimeTests.test_feb29_on_leap_year_without_yearc                 C   s    |  tddtdd d S )Nr   r   zMar 1)Z
assertLessr   r   r   r   r   r   7test_mar1_comes_after_feb29_even_when_omitting_the_year  s   

zEStrptimeTests.test_mar1_comes_after_feb29_even_when_omitting_the_yearN)r   r   r   r   r   r   r   r   r   r/   r   r   r   r   r   r*   r   r   r   r   r8   r   r@   r   r   r   r   r   r   r   r   r   r   r   r   rt      s<    #
		#

	rt   c                   @   r   )Strptime12AMPMTestsc                 C   sb   | j }|tddd d |tddd d |tddd d |tddd d d S )Nz12 PMr   r0   r1   z12 AMr   )r   r   r   r	   r~   )r   eqr   r   r   test_twelve_noon_midnight  s
   z-Strptime12AMPMTests.test_twelve_noon_midnightN)r   r   r   r   r   r   r   r   r         r   c                   @   r   )JulianTestsc                 C   s4   | j }tddD ]}|td| dd | qd S )Nr-   io  z%d 2004z%j %Yr   )r   r   r	   r~   )r   r   ir   r   r   test_all_julian_days  s   z JulianTests.test_all_julian_daysN)r   r   r   r   r   r   r   r   r     r   r   c                   @   sv   e Zd Z	 dd Zedd Zedd Zedd Zej	r#d	Z
d
ZndZ
dZeejdddd Zdd ZdS )CalculationTestsc                 C   s   t  | _d S r   ru   r   r   r   r   r     s   zCalculationTests.setUpc                 C   B   d}t t|| j|}| |j| jjkd|j| jjf  d S )Nz%Y %m %d %H %M %S %w %Zz'Calculation of tm_yday failed; %s != %s)r	   r~   r   r   r   r6   tm_ydayr   format_stringresultr   r   r   test_julian_calculation     z(CalculationTests.test_julian_calculationc              
   C   sr   d}t t|| j|}| |j| jjko#|j| jjko#|j| jjkd|j|j|j| jj| jj| jjf  d S )Nz%Y %H %M %S %w %j %Zz:Calculation of Gregorian date failed; %s-%s-%s != %s-%s-%s)	r	   r~   r   r   r   r6   tm_yeartm_montm_mdayr   r   r   r   test_gregorian_calculation  s   z+CalculationTests.test_gregorian_calculationc                 C   r   )Nz%Y %m %d %H %S %j %Zz/Calculation of day of the week failed; %s != %s)r	   r~   r   r   r   r6   tm_wdayr   r   r   r   test_day_of_week_calculation  r   z-CalculationTests.test_day_of_week_calculation)q  r-   r-   r  r1        r1      }  r1   r   )rz   r   Zaixzbpo-29972: broken test on AIXc                    s    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 S ))Nc           	   
      s   dD ]Y}| j v r|  jv r d S dD ]G}|d | } j|| |d/ t|  }||}t||}d||d | d f } |d d | | W d    n1 sUw   Y  qqd S )N)z%Y %Wz%Y %Urz   )z%wz%ur'   r%    )r   rx   z%r: %s != %sr   r0   )	_formats_excluded_ymd_excludedZsubTestdatetime_dater   r	   r~   Z	timetupler   )	Z	ymd_tupleZtest_reasonZyear_week_formatZweekday_formatr   Zdt_dateZ
strp_inputr   msgr   r   r   test_helper!  s0   



zSCalculationTests.test_week_of_year_and_day_of_week_calculation.<locals>.test_helper)m  r-   r0   zweek 0)r   r-   r   zcommon case)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   r1   r   zDec 31 on Sundayr   zDec 31 on Mondayr   z#Monday in the last week of the year)r   r1   r:   z-Monday in the second-to-last week of the year)i  
      zrandomly chosen date)i  r1      zEyear starting and ending on Monday while date not on Sunday or Monday)r   r1   r9   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)  r1   r   zLast Sunday of 2006)r   r1      zSecond to last Sunday of 2006r   )r   r   r   r   r   -test_week_of_year_and_day_of_week_calculation  s*   


















z>CalculationTests.test_week_of_year_and_day_of_week_calculationc                    sT   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.
 |d0dd(ddddddd
 |d1d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
 |d3d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
 |d5dd(dddddd#d
 |d5dd(dddddd#d
 |d6dd(dddddd	d
 d S )7Nc                    s      t| |d d | d S )NrG   )r   r	   r~   )valuerx   Zexpectedr   r   r   checkN  s    z+CalculationTests.test_week_0.<locals>.checkz2015 0 0z%Y %U %wi  r1      r   r&   ij  z%Y %W %wi  r-   rH   z2015 1 1z%G %V %ur   ik  z2015 0 1z2015 1 2r   il  z2015 0 2z2015 1 3r   r=   im  z2015 0 3z2015 1 4r0   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   r   r   r   test_week_0M  sV   zCalculationTests.test_week_0N)r   r   r   r   r   r   r   r   r   Z
is_androidr   r   unittestZskipIfsysplatform
startswithr   r   r   r   r   r   r     s&    
	

	
/r   c                   @   s@   e Zd Z	 dd Zdd Zdd Zdd Zed	d
d Z	dS )
CacheTestsc                 C   sX   t dd t dd dt jj_t j}t dd | |t j | tt jd d S )N10rw   ry   z%YNir-   )	r	   r~   _TimeRE_cacherF   rA   assertIsNotr   len_regex_cache)r   Zoriginal_time_rer   r   r   test_time_re_recreation  s   
z"CacheTests.test_time_re_recreationc                 C   sx   zt jd= W n	 ty   Y nw d}tt jt jkr+d t j|< |d7 }tt jt jkst dd | tt jd d S )Nrw   r   r-   r  )r	   r  KeyErrorr  Z_CACHE_MAX_SIZEr~   r   )r   Z	bogus_keyr   r   r   test_regex_cleanup  s   
zCacheTests.test_regex_cleanupc                 C   s2   t jj}dt jj_t dd | |t jj d S )Nr  r  rw   )r	   r  rF   rA   r~   r  )r   Zlocale_time_idr   r   r   test_new_localetime  s   
zCacheTests.test_new_localetimec              
   C   s   t t j}z	t t jd W n t jy   | d Y nw zEtdd tj}zt t jd tdd tj}| 	|| W n t jyP   | d Y nw W t t j| d S W t t j| d S t t j| w )N)en_USUTF8ztest needs en_US.UTF8 localer  rw   )de_DEr  ztest needs de_DE.UTF8 locale)
r   r   r   	setlocaleErrorr   r	   r~   r  r  )r   Zlocale_infofirst_time_resecond_time_rer   r   r   test_TimeRE_recreation_locale  s*   	"z(CacheTests.test_TimeRE_recreation_localezSTD-1DST,M4.1.0,M10.1.0c                 C   s*  t j}tt jd d}| |jd tt jd d}| |jd tj}dtjd< t 	  tt jd d}| |jd tt jd d}| |jd tj}| 
|| | t t|d d W d    n1 spw   Y  | t t|d d W d    d S 1 sw   Y  d S )Nr   r5   r-   zEST+05EDT,M3.2.0,M11.1.0ZTZ)r   r   r	   r~   r   r   r  osenvironr   r  r|   r}   )r   Z	oldtznameZtmr  r  r   r   r   test_TimeRE_recreation_timezone  s(   
"z*CacheTests.test_TimeRE_recreation_timezoneN)
r   r   r   r  r
  r  r  r   Zrun_with_tzr  r   r   r   r   r  }  s    r  __main__)r   r   r   rk   r  r   testr   Ztest.supportr   r   r   r   r	   ZTestCaser   r   rC   rt   r   r   r   r  r   mainr   r   r   r   <module>   s2    Z\  	 \