
    /hhdI                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SK	J	r	  S SK
JrJr  S SKJr  S SKJr  S SKJr  S SKJr  \R                  S	:w  a  \R(                  " S
5      e\R*                  " 5       R,                  rSS/r\R0                  " \S:  =(       a    \R2                  " 5       S:H  S5       " S S\R4                  5      5       r " S S\R4                  5      rg)    N)TextLogStream)array)	ExitStackcontextmanager)Thread)LOOPBACK_TIMEOUT)time)patchandroidzAndroid-specific)stdoutI   )stderrW      aarch64z4SELinux blocks reading logs on older ARM64 emulatorsc                   Z    \ rS rSrSrS rS rSS.S jrS r\	S	 5       r
S
 rS rS rSrg)TestAndroidOutput   Nc                   ^  [         R                  " / SQ[         R                  SS9T l        [        R
                  " 5       T l        U 4S jn[        US9T l        T R                  R                  5          SSK
JnJnJn  [        U" S5      S	5      nXCU4Ul        S
nST R!                  5        S[#        5        3pU" XgR%                  S5      UR%                  S5      5        T R'                  SXxSS9  g !   T R)                  5         e = f)N)logcatz-vtagbackslashreplace)r   errorsc                     > TR                   R                   H-  n TR                  R                  U R	                  S5      5        M/     TR                   R                  R                  5         g )N
)logcat_processr   logcat_queueputrstripclose)lineselfs    :/opt/python-3.13.8/usr/lib/python3.13/test/test_android.pylogcat_thread.TestAndroidOutput.setUp.<locals>.logcat_thread)   sN    ++22!!%%dkk$&78 3&&,,.    )targetr   )CDLLc_char_pc_intz	liblog.so__android_log_write   zpython.test UTF-8r   Tskip)
subprocessPopenPIPEr   queueQueuer   r   r&   startctypesr*   r+   r,   getattrargtypesidr	   encode
assert_logtearDown)	r$   r&   r*   r+   r,   android_log_writeANDROID_LOG_INFOr   messages	   `        r%   setUpTestAndroidOutput.setUp"   s    (..#JOO%
 "KKM	/
 $=9  "	44 '[(9;P Q*/8)D&  )TWWYKq*A **W"5w~~g7NPOOCDO9	 MMOs   6A=C4 4Dc                 >    U H  nU R                   " XU40 UD6  M     g N)r>   )r$   levelr   expectedkwargsr#   s         r%   assert_logsTestAndroidOutput.assert_logsC   s    DOOE77 r(   Fr1   c                   [        5       [        -   n  U R                  R                  U[        5       -
  S9n[        R                  " SU S3U5      =n(       a*   U R                  XS   5        U R                  X7S   5        g Ms  ! [        R
                   a    U R                  SU< 35      S ef = f! [         a    U(       d  e  NDf = f)N)timeoutzline not found: z(.)/z: (.*)r   r   )r	   r   r   getr6   EmptyfailureExceptionre	fullmatchassertEqualAssertionError)r$   rG   r   rH   r2   deadliner#   matchs           r%   r>   TestAndroidOutput.assert_logG   s    6,,((,,h6G,I
 SE%8$??u?$$U!H5$$XQx8  ;; ++&xl3 &   s   $B (B4 +B14C	C	c                     U R                   R                  5         U R                   R                  [        5        U R                  R                  [        5        S U l        g rF   )r   	terminatewaitr   r&   joinr$   s    r%   r?   TestAndroidOutput.tearDownY   sH    %%'  !12 01 "r(   c           	   +      #    UR                  5        Vs0 s H  o3[        XS 5      _M     nnUR                  " S0 UD6   S v   UR                  " S0 UD6  g s  snf ! UR                  " S0 UD6  f = f7f)N )keysr:   reconfigure)r$   streamsettingskeyoriginal_settingss        r%   ra   TestAndroidOutput.reconfigurea   sp     HPX'&t"<<X&X&	43!23 Y
 3!23s'   A3AA3 A A3A00A3c           
         [        5       nUR                  U R                  U5      5        [        [        U5      n[        [        SU S35      n[        U[        R                  5      (       a6  SSS.U   nUR                  [        SU 3[        USU 3U5      =n5      5        UR                  U R                  USS95        U$ )	N__r.      )r   r   zsys.python.Fwrite_through)r   enter_contextsubTestr:   sys
isinstanceioStringIOr
   r   ra   )r$   stream_namerG   stackrb   native_streamprios          r%   stream_context TestAndroidOutput.stream_contextj   s    DLL56
 k*r+b%9:fbkk**#E*D;-(+}5} F 	D,,V5,IJr(   c                 t	  ^ ^^^	 [          GHM  u  nmnT R                  UT5         [        [        U5      mSU 3m	T R	                  ST	 S3[        T5      5        T R                  TR                  5       S5        T R                  TR                  5       S5        T R	                  TR                  5       U5        T R	                  STR                  5        T R	                  STR                  5        T R                  TR                  S5        T R                  TR                  S5        SOS S.UU UU	4S	 jjjnT R                  TSS
9   U" S/ 5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" SS/5        U" SS/5        U" SS/5        U" SS/5        U" SS/5        U" SS/5        S S S 5        U" S S/5        U" S!S"S/5        U" S#S/5        U" S$S%/5        U" S&S'S/5        U" S(S)/5        U" S*/ 5        U" S+S,S/5        U" S#S-/5        TR                  SS.9  T R                  TR                  S5        T R                  TSS
9   U" S SS"/5        U" S!SS/5        U" S#S/5        U" S$S%/5        U" S&S'S/5        U" S(S)S//5        U" S*S*/5        U" S+/ S0Q5        U" S#S/5        S S S 5        U" S1S2/5        U" S3S2S4/5        U" S5S/5        U" S6S7/5        U" S8S9/5         " S: S;[        5      nU" U" S<5      S=/S>S9  S? Ha  nT R!                  US@9   T R#                  [$        SA['        U5      R(                   35         TR+                  U5        S S S 5        S S S 5        Mc     U" S2/ 5        TR-                  5         T R/                  TT	S25        U" S2/ 5        U" S4/ 5        TR-                  5         T R/                  TT	SB5        U" SCSD-  S#-   SESF/5        SGnU" USH-  S#-   USI-  USJ-  /5        SKnU" USL-  / 5        U" USH-  / 5        U" USM-  USN-  /5        U" S#USM-  /5        S S S 5        GMP     g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GM{  = f! , (       d  f       GM  = f)PNrj   z<TextLogStream ''>TFr0   r   	write_lenc                   > Uc  [        U 5      nTR                  UTR                  U 5      5        Uc  U /nTR                  TTU5        g rF   )lenrS   writerJ   )slinesr|   rG   r$   rb   r   s      r%   r   )TestAndroidOutput.test_str.<locals>.write   sH     ($'F	$$YQ@}!"$$UC7r(   rk    aHellozHello worldr/   z  u   oléu   中文u   😀u   z\ud800\udc00u   z\udc80 \xc0\x80za 	a\xc0\x80z b	\xc0\x80bza b
a\xc0\x80bz
xz
a
xr   zb
bzc

czd
edxxzf

gexxfg)line_bufferingefr   r   zhello
hellozhello
world
worldz
z!before form feedafter form feed
z before form feedafter form feedu-   before line separator after line separator
u,   before line separator after line separatorc                   &    \ rS rSrS rS rS rSrg)-TestAndroidOutput.test_str.<locals>.CustomStr   c                     [        5       erF   rT   )r$   argsrI   s      r%   
splitlines8TestAndroidOutput.test_str.<locals>.CustomStr.splitlines       ,..r(   c                     [        5       erF   r   r\   s    r%   __len__5TestAndroidOutput.test_str.<locals>.CustomStr.__len__   r   r(   c                     [        5       erF   r   r\   s    r%   __str__5TestAndroidOutput.test_str.<locals>.CustomStr.__str__   r   r(   r_   N)__name__
__module____qualname____firstlineno__r   r   r   __static_attributes__r_   r(   r%   	CustomStrr      s    ///r(   r   zcustom
custom   )r(   s   helloN*   objz$write\(\) argument must be str, not 
helloworldfoobari    foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobaru   ０１２３４５６７８９   d   2   
0123456789   3   i^  rF   )STREAM_INFOrw   r:   ro   rS   reprassertIswritablereadablefilenoencodingr   r   rl   ra   strrn   assertRaisesRegex	TypeErrortyper   r   flushr>   )
r$   rs   r   r   r   r   r   rG   rb   r   s
   `      @@@r%   test_strTestAndroidOutput.test_str   s   *5+&K$$[%8 k2}-  #3C5!;T&\Jfoo/6foo/7  &9  &//:  !3V]]Cf33T:f22E:8d 8 8 %%fD%A"bM#J'N-(#J$K *%.) ,' .?*;< (YK0 ([M2)l^4)l^4*}o65 B< ebT"gSz*dRD!ecU#gRy)fse$dBh-dSE" ""%"8f33T: %%fD%A%"c+'B9-$%%#''C9-&3*-$'(N3$% B kG9-*Wg,>?frd# =<=?IHIK
/ / i
+hZ1E 5C#.!33%C $S	 2 235
 #LL- /. 5 gr"sG4gr"gr"sL9 x#~-0-/0
 Sq3w$&3w2v  !a#gr"a#gr"a"fq3wi(dQVH%c 98 +6. BA^ BAN  /.W 98sq   D$R'	BQBR'.A Q0A-R';-R	(R:R	CR'
Q-(R'0
Q?:R'
RR	
R$	R''
R7	c                   ^ ^^^ [          GH  u  nmnT R                  UT5         [        [        U5      R                  mSU 3mT R                  ST S3[        T5      5        T R                  TR                  5       S5        T R                  TR                  5       S5        T R                  TR                  5       U5        SDS S.UU UU4S jjjnU" S/ 5        U" S	5        U" S
5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" SS/5        U" SS/5        U" SS/5        U" SS/5        U" SS/5        U" SS/5        U" SS/5        U" SS /5        U" S![        S":  a  S#S$/OS$/5        U" S%[        S":  a  S#S&/OS&/5        U" S'S#/5        U" S(S)/5        U" S*S+S#/5        U" S,S-S./5        U" S/S0/5        U" S1/ S2Q5        U" S'S#/5        U" S3S4/5        U" S5S4S6/5        U" S7S#/5        U" [        S85      5        [        S95      nU" US:/5        U" US S S;2   S</5        U" [        S=/ S>Q5      S?/S@S9  SA Ha  nT R                  USB9   T R!                  ["        SC[%        U5      R&                   35         TR)                  U5        S S S 5        S S S 5        Mc     S S S 5        GM     g ! , (       d  f       N(= f! , (       d  f       M  = f! , (       d  f       GM  = f)ENrj   z<BinaryLogStream 'rz   TFr{   c                   > Uc  [        U 5      nTR                  UTR                  U 5      5        Uc  U R                  5       /nTR	                  TTU5        g rF   )r~   rS   r   decoderJ   )r   r   r|   rG   r$   rb   r   s      r%   r   +TestAndroidOutput.test_bytes.<locals>.write#  sN     ($'F	$$YQ@}!"$$UC7r(   r(      as   Hellos   Hello world    s     s   olés   中文s   😀    r   s   a r   s    br   s   a br      z\xffs   aza\xffs   bz\xffbs   abza\xffbs   
x   r   r   s   
a
r      
s   b
r   s   c

r   s   d
er   r   s   xxr   s   f

gr   s   hello
r   s   hello
world
r   s   
s	   bytearrays
   memoryview
memoryviewr   mmrveH)r   r   i  i  z)\xc0\x80\xc0\x80\xc0\x80\xfe\xff\xff\xff   )r   r   Nr   r   z+write\(\) argument must be bytes-like, not rF   )r   rw   r:   ro   bufferrS   r   r   r   r   r   	api_level	bytearrayr   r   rn   r   r   r   r   r   )	r$   rs   r   r   mvr   rG   rb   r   s	   `     @@@r%   
test_bytesTestAndroidOutput.test_bytes  s   *5+&K$$[%8 k299}-  #5cU"!=tF|Lfoo/6foo/7  &98d 8 8 c2dhn%de m$12 )* g}-h/h/i-1 gy)h
+h
+i)- f9r>r3iuEhY^S	#GebT"fse$hb	*gSz*edV$i0ebT" lWI.+gw-?@gt$ i-..b<.)b1gy) #   " #  #* 3C#.!33%J $S	 2 235
 #LL- /. 3A 98 +6F  /.C 98s<   H>K'#-K	K"K	*K'
KK	
K$K''
K7	)r   r   r&   )r   r   r   r   maxDiffrC   rJ   r>   r?   r   ra   rw   r   r   r   r_   r(   r%   r   r      sI    
 GB8 8= $" 4 44S&ji.r(   r   c                       \ rS rSrS rSrg)TestAndroidRateLimiti  c           
      "  ^^^^	^
^^ SnSnSn[        X#5      mSmTSSU-
  [        U5      -
  [        TR                  S5      5      -
  -  S-   -  m[        5       m	U	U
4S	 jmU	4S
 jm
SnSm[	        SUS-  5         [	        STS-  5         [	        ST
5         [	        ST5         TR                  S5        T
" TU-  5        SmUUUUU4S jnU R                  U" 5       US-  5        U" 5         U R                  U" 5       UUS-  S9  T
" TU-  5        U R                  U" 5       US-  5        S S S 5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N'= f! , (       d  f       N0= f! , (       d  f       N9= f! , (       d  f       g = f)N      zpython.rate_limitzLine {:03d} .i   r   r   c                     > T" S5        T $ )Ng-C6?r_   )mock_now
mock_sleeps   r%   	mock_time7TestAndroidRateLimit.test_rate_limit.<locals>.mock_time  s    vOr(   c                    > TU -  mg rF   r_   )durationr   s    r%   r   8TestAndroidRateLimit.test_rate_limit.<locals>.mock_sleep  s     Hr(   r   
   z%_android_support.MAX_BYTES_PER_SECONDz_android_support.BUCKET_SIZEz_android_support.sleepz_android_support.timez)Initial message to reset _prev_write_timec                     > T" 5       n TT-   nTU:  a-  TR                  TR                  T5      5        TS-  mTU:  a  M-  TT" 5       U -
  -  $ )Nr   )r   format)r8   max_line_num	BUCKET_KBline_numrB   r   rb   s     r%   write_bucketful=TestAndroidRateLimit.test_rate_limit.<locals>.write_bucketful  sX    !')3-LL!9:MH - !IK%$788r(   r   g?)delta)r   r~   r   r	   r
   r   assertGreaterassertAlmostEqual)r$   PER_MESSAGE_OVERHEADANDROID_LOG_DEBUGr   MAX_KB_PER_SECONDr   r   r   rB   r   r   r   rb   s         @@@@@@@r%   test_rate_limit$TestAndroidRateLimit.test_rate_limit  s   !  "06 !3''#c(2S9J5KK
 	 6	
	!  	9;Lt;ST0)d2BC*J7)95 LLDEy#445H9 9 02Ca2GH  ""!#4'#- #  y#44502Ca2GHG 6 8 D UT 65 87 DC UTsU   :F 
E/E$BE	,E4E/<F 
EE
E,(E//
E=	9F  
Fr_   N)r   r   r   r   r   r   r_   r(   r%   r   r     s	    KIr(   r   )rq   platformr6   rQ   r3   ro   unittest_android_supportr   r   
contextlibr   r   	threadingr   test.supportr   r	   unittest.mockr
   SkipTestandroid_verr   r   skipIfmachineTestCaser   r   r_   r(   r%   <module>r	     s    	   	  
  *  0  )   <<9


.
//  ",,	 "#56 
N6x'')Y6:c.)) c.	c.LLI8,, LIr(   