+
    BiH                     n   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RI	H	t	 ^ RI
HtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ]P                  R	8w  d   ]P(                  ! R
4      h]P*                  ! 4       P,                  tRR.t ! R R]P0                  4      t ! R R]P0                  4      tR# )    N)TextLogStream)array)	ExitStackcontextmanager)Thread)LOOPBACK_TIMEOUT)time)patchandroidzAndroid-specificc                   f   a  ] tR t^t o RtR tR tRR/R ltR t]	R 4       t
R	 tR
 tR tRtV tR# )TestAndroidOutputNc                (  a  \         P                  ! . RO\         P                  RR7      S n        \        P
                  ! 4       S n        V 3R lp\        VR7      S n        S P                  P                  4         ^ RI
HpHpHp \        V! R4      R4      pWCV3Vn        ^pRS P!                  4        R	\#        4        2rV! WgP%                  R
4      VP%                  R
4      4       S P'                  RWxRR7       R#    S P)                  4        h ; i)logcatbackslashreplace)stdouterrorsc                     < SP                   P                   F-  p SP                  P                  V P	                  R 4      4       K/  	  SP                   P                  P                  4        R# )
N)logcat_processr   logcat_queueputrstripclose)lineselfs    (/usr/lib/python3.14/test/test_android.pylogcat_thread.TestAndroidOutput.setUp.<locals>.logcat_thread%   sN    ++22!!%%dkk$&78 3&&,,.    )target)CDLLc_char_pc_intz	liblog.so__android_log_writezpython.test UTF-8IT)skipN)r   z-vtag)
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	   f        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   <B C> >Dc                @    V F  pV P                   ! WV3/ VB  K  	  R # N)r5   )r   levelr)   expectedkwargsr   s   &&&&, r   assert_logsTestAndroidOutput.assert_logs?   s    DOOE77 r   r(   Fc                  \        4       \        ,           p  V P                  P                  V\        4       ,
          R7      p\        P                  ! RT R2T4      ;p'       g   KR   T P                  Y^,          4       T P                  Y7^,          4       R#   \        P
                   d    T P                  RT: 24      Rhi ; i  \         d    T'       g   h  K  i ; i)T)timeoutzline not found: Nz(.)/z: (.*))r	   r   r   getr-   EmptyfailureExceptionre	fullmatchassertEqualAssertionError)r   r>   r)   r?   r(   deadliner   matchs   &&&&$   r   r5   TestAndroidOutput.assert_logC   s    6,,((,,h6G,I
 SE%8$??u??$$U!H5$$XQx8 ;; ++&xl3 &   s#   +B )0C
 ,C
C"C"!C"c                    V P                   P                  4        V P                   P                  \        4       V P                  P                  \        4       R V n        R # r=   )r   	terminatewaitr   r   joinr   s   &r   r6   TestAndroidOutput.tearDownU   sH    %%'  !12 01 "r   c           	   +     "   VP                  4        Uu/ uF  q3\        WR 4      bK  	  ppVP                  ! R/ VB   R x  VP                  ! R/ VB  R # u upi   TP                  ! R/ TB  i ; i5i)N )keysr1   reconfigure)r   streamsettingskeyoriginal_settingss   &&,  r   rX   TestAndroidOutput.reconfigure]   sp     HPX'&t"<<X&X&	43!23 Y
 3!23s&   A3AA3A A3A00A3c           
        \        4       pVP                  V P                  V4      4       \        \        V4      p\        \        R V R 24      p\        V\        P                  4      '       d<   R^R^/V,          pVP                  \        RV 2\        VRV 2V4      ;p4      4       VP                  V P                  VRR7      4       V# )__r'   Wzsys.python.Fwrite_through)r   enter_contextsubTestr1   sys
isinstanceioStringIOr
   r   rX   )r   stream_namer>   stackrY   native_streamprios   &&&    r   stream_context TestAndroidOutput.stream_contextf   s    DLL56
 k*r+b%9:fbkk**C#E*D;-(+}5} F 	D,,V5,IJr   c                P
  a aaa	 \          EF  w  popS P                  VS4      ;_uu_ 4        \        \        V4      oR V 2o	S P	                  RS	 R2\        S4      4       S P                  SP                  4       R4       S P                  SP                  4       R4       S P	                  SP                  4       V4       S P	                  RSP                  4       S P	                  RSP                  4       S P                  SP                  R4       S P                  SP                  R4       RFRR/VV VV	3R	 lllpS P                  SRR
7      ;_uu_ 4        V! R. 4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! RR.4       V! RR.4       V! RR.4       V! RR.4       V! RR.4       V! RR.4       RRR4       V! R R.4       V! R!R"R.4       V! R#R.4       V! R$R%.4       V! R&R'R.4       V! R(R).4       V! R*. 4       V! R+R,R.4       V! R#R-.4       SP                  RR.7       S P                  SP                  R4       S P                  SRR
7      ;_uu_ 4        V! R RR".4       V! R!RR.4       V! R#R.4       V! R$R%.4       V! R&R'R.4       V! R(R)R/.4       V! R*R*.4       V! R+. RGO4       V! R#R.4       RRR4       V! R0R1.4       V! R2R1R3.4       V! R4R.4       V! R5R6.4       V! R7R8.4        ! R9 R:\        4      pV! V! R;4      R<.^R=7       RH Ft  pS P!                  VR>7      ;_uu_ 4        S P#                  \$        R?\'        V4      P(                   24      ;_uu_ 4        SP+                  V4       RRR4       RRR4       Kv  	  V! R1. 4       SP-                  4        S P/                  SS	R14       V! R1. 4       V! R3. 4       SP-                  4        S P/                  SS	R@4       V! RARB,          R#,           RIRJ.4       RCpV! V^,          R#,           V^d,          V^2,          .4       RDpV! V^,          . 4       V! V^,          . 4       V! V^3,          VRE,          .4       V! R#V^3,          .4       RRR4       EK  	  R#   + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     ELB; i  + '       g   i     EK  ; i  + '       g   i     EK  ; i)Kra   z<TextLogStream ''>TFr&   r   N	write_lenc                   < Vf   \        V 4      pSP                  VSP                  V 4      4       Vf   V .pSP                  SSV4       R # r=   )lenrJ   writerA   )slinesrr   r>   r   rY   r)   s   &&$r   ru   )TestAndroidOutput.test_str.<locals>.write   sH     ($'F	$$YQ@}!"$$UC7r   rb    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ez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                   2   a  ] tR t^t o R tR tR tRtV tR# )-TestAndroidOutput.test_str.<locals>.CustomStrc                    \        4       hr=   rK   )r   argsr@   s   &*,r   
splitlines8TestAndroidOutput.test_str.<locals>.CustomStr.splitlines       ,..r   c                    \        4       hr=   r   rS   s   &r   __len__5TestAndroidOutput.test_str.<locals>.CustomStr.__len__   r   r   c                    \        4       hr=   r   rS   s   &r   __str__5TestAndroidOutput.test_str.<locals>.CustomStr.__str__   r   r   rV   N)	__name__
__module____qualname____firstlineno__r   r   r   __static_attributes____classdictcell____classdict__s   @r   	CustomStrr      s     /// /r   r   zcustom
customrr   objz$write\(\) argument must be str, not 
helloworldfoobari  u   ０１２３４５６７８９
0123456789i^  r=   fry   r   )r   s   helloN*     foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar)STREAM_INFOrn   r1   rf   rJ   reprassertIswritablereadablefilenoencodingr   r   rc   rX   strre   assertRaisesRegex	TypeErrortyper   ru   flushr5   )
r   rj   r   ru   r   r   rv   r>   rY   r)   s
   f      @@@r   test_strTestAndroidOutput.test_str   s   *5+&K$$[%88 k2}-  #3C5!;T&\Jfoo/6foo/7  &9  &//:  !3V]]Cf33T:f22E:8d 8 8 %%fD%A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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A^ BAAN   /..W 988sq   D/TBS"B-TA S/A;T*5S>S*1S>9C:TS	TS'!	T*S;5	S>>T	
TT%c                D  a aaa \          EF  w  popS P                  VS4      ;_uu_ 4        \        \        V4      P                  oR V 2oS P                  RS R2\        S4      4       S P                  SP                  4       R4       S P                  SP                  4       R4       S P                  SP                  4       V4       R@RR/VV VV3R lllpV! R. 4       V! R	4       V! R
4       V! R4       V! R4       V! R4       V! R4       V! R4       V! R4       V! RR.4       V! RR.4       V! RR.4       V! RR.4       V! RR.4       V! RR.4       V! RR.4       V! RR .4       T! R!\        ^8  d   R"R#.MR#.4       T! R$\        ^8  d   R"R%.MR%.4       V! R&R".4       V! R'R(.4       V! R)R*R".4       V! R+R,R-.4       V! R.R/.4       V! R0. RAO4       V! R&R".4       V! R1R2.4       V! R3R2R4.4       V! R5R".4       V! \        R64      4       \        R74      pV! VR8.4       V! VR9,          R:.4       V! \        R;. RBO4      R<.^R=7       RC Ft  pS P                  VR>7      ;_uu_ 4        S P!                  \"        R?\%        V4      P&                   24      ;_uu_ 4        SP)                  V4       RRR4       RRR4       Kv  	  RRR4       EK  	  R#   + '       g   i     L+; i  + '       g   i     K  ; i  + '       g   i     EK  ; i)Dra   z<BinaryLogStream 'rq   TFNrr   c                   < Vf   \        V 4      pSP                  VSP                  V 4      4       Vf   V P                  4       .pSP	                  SSV4       R # r=   )rt   rJ   ru   decoderA   )r   rw   rr   r>   r   rY   r)   s   &&$r   ru   +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   
xry   r   s   
a
rz      
s   b
r   s   c

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

gs   hello
r   s   hello
world
r   s   
s	   bytearrays
   memoryview
memoryview:NN   mmrveHz)\xc0\x80\xc0\x80\xc0\x80\xfe\xff\xff\xffr   r   z+write\(\) argument must be bytes-like, not r=   r   )r      i  i  )ry   r   Nr   )r   rn   r1   rf   bufferrJ   r   r   r   r   r   	api_level	bytearrayr   r   re   r   r   r   r   ru   )	r   rj   r   ru   mvr   r>   rY   r)   s	   f     @@@r   
test_bytesTestAndroidOutput.test_bytes  s
   *5+&K$$[%8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gy) #   " #  #* 3C#..!33%J $S	 2 235 
 #LL- /. 3A 98 +6F  /..C 988s<   IL<5K91K&K9L&K61K99L
	LL)r   r   r   )r   r   r   r   maxDiffr:   rA   r5   r6   r   rX   rn   r   r   r   r   r   s   @r   r   r      sR     GB8u $" 4 44S&ji. i.r   r   c                   &   a  ] tR tRt o R tRtV tR# )TestAndroidRateLimiti  c                  aaaa	a
aa ^p^pRp\        W#4      oRoSRRV,
          \        V4      ,
          \        SP                  ^ 4      4      ,
          ,          R,           ,          o\        4       o	V	V
3R loV	3R lo
^dp^
o\	        RVR,          4      ;_uu_ 4        \	        R	SR,          4      ;_uu_ 4        \	        R
S
4      ;_uu_ 4        \	        RS4      ;_uu_ 4        SP                  R4       S
! SV,          4       ^ oVVVVV3R lpV P                  V! 4       V^,          4       V! 4        V P                  V! 4       VVR,          R7       S
! SV,          4       V P                  V! 4       V^,          4       RRR4       RRR4       RRR4       RRR4       R#   + '       g   i     L*; i  + '       g   i     L5; i  + '       g   i     L@; i  + '       g   i     R# ; i)   zpython.rate_limitzLine {:03d} .i   r   c                     < S! R 4       S # )g-C6?rV   )mock_now
mock_sleeps   r   	mock_time7TestAndroidRateLimit.test_rate_limit.<locals>.mock_time  s    vOr   c                    < SV ,          oR # r=   rV   )durationr   s   &r   r   8TestAndroidRateLimit.test_rate_limit.<locals>.mock_sleep  s     Hr   z%_android_support.MAX_BYTES_PER_SECONDz_android_support.BUCKET_SIZEz_android_support.sleepz_android_support.timez)Initial message to reset _prev_write_timec                     < S! 4       p SS,           pSV8  d,   SP                  SP                  S4      4       S^,          oK2  SS! 4       V ,
          ,          # )r   )ru   format)r/   max_line_num	BUCKET_KBline_numr9   r   rY   s     r   write_bucketful=TestAndroidRateLimit.test_rate_limit.<locals>.write_bucketful  sL    !')3-LL!9:MH IK%$788r   g?)deltaN)r   rt   r   r	   r
   ru   assertGreaterassertAlmostEqual)r   PER_MESSAGE_OVERHEADANDROID_LOG_DEBUGr)   MAX_KB_PER_SECONDr   r   r   r9   r   r   r   rY   s   &     @@@@@@@r   test_rate_limit$TestAndroidRateLimit.test_rate_limit  s   !  "06 !3''#c(2S9J5KK
 	 6	
	!  	9;Lt;STT0)d2BCC*J77)95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TTsU   G:G	F8$BF%F8G	G%F50F88GG	GGG/	rV   N)r   r   r   r   r   r   r   r   s   @r   r   r     s     KI KIr   r   )r   r'   r   )stderrr`   r   )rh   platformr-   rH   r*   rf   unittest_android_supportr   r   
contextlibr   r   	threadingr   test.supportr   r	   unittest.mockr
   SkipTestandroid_verr   r   TestCaser   r   rV   r   r   <module>r      s    	   	  
  *  0  )   <<9


.
//  ",,	 "#56c.)) c.LLI8,, LIr   