
    0hh<E                        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  S SK	Jr  S SK	Jr  S SK	Jr  S SKJr  \R                   " S	S
9  SrSr " S S\R&                  5      r\" 5        " S S5      5       r " S S\\R,                  5      r " S S\\R,                  5      r " S S\\R,                  5      r " S S\\R,                  5      r " S S\\R,                  5      r " S S\\R,                  5      r " S S\\R,                  5      r " S S \\R,                  5      r\R>                  " \R@                  S!:H  S"5       " S# S$\R,                  5      5       r! " S% S&\R,                  5      r" " S' S(\R,                  5      r# " S) S*\R,                  5      r$\%S+:X  a  \RL                  " 5         gg),    N)support)import_helper)is_apple_mobile)	os_helper)requires_subprocess)threading_helper)mockT)modulezhttps://www.example.comtestc                   $    \ rS rSrS rSS jrSrg)	PopenMock   c                     gNr    selfs    =/opt/python-3.13.8/usr/lib/python3.13/test/test_webbrowser.pypollPopenMock.poll           Nc                     gr   r   )r   secondss     r   waitPopenMock.wait   r   r   r   N)__name__
__module____qualname____firstlineno__r   r   __static_attributes__r   r   r   r   r      s    r   r   c                   &    \ rS rSr\/0 S.S jrSrg)CommandTestMixin    )argskwc                   [        5       n[        R                  " U [        SU5        U R	                  [
        S9n[        Xq5      " U0 UD6  [        R                  R                  S   S   nU R                  US   [
        5        UR                  S5        U H4  n	U R                  X5        UR                  UR                  U	5      5        M6     U R                  X5        g )NPopen)namer   )r   r   patch
subprocessbrowser_classCMD_NAMEgetattrr)   	call_argsassertEqualpopassertInindex)
r   methr&   r'   options	argumentspopenbrowser
popen_argsoptions
             r   _testCommandTestMixin._test#   s     dJ7$$($3++%%//215
A1qFMM&-NN:++F34  	/r   r   N)r   r   r    r!   URLr<   r"   r   r   r   r$   r$       s     $'%B 0 0r   r$   c                   2    \ rS rSr\R
                  rS rSrg)GenericBrowserCommandTest;   c                 0    U R                  S/ [        /S9  g Nopenr6   r7   r<   r>   r   s    r   	test_open#GenericBrowserCommandTest.test_open?       

6!U 	 	$r   r   N)	r   r   r    r!   
webbrowserGenericBrowserr-   rG   r"   r   r   r   r@   r@   ;   s    --M$r   r@   c                   2    \ rS rSr\R
                  rS rSrg)BackgroundBrowserCommandTestE   c                 0    U R                  S/ [        /S9  g rC   rF   r   s    r   rG   &BackgroundBrowserCommandTest.test_openI   rI   r   r   N)	r   r   r    r!   rJ   BackgroundBrowserr-   rG   r"   r   r   r   rM   rM   E   s    00M$r   rM   c                   J    \ rS rSr\R
                  rS rS rS r	S r
S rSrg)	ChromeCommandTestO   c                 0    U R                  S/ [        /S9  g rC   rF   r   s    r   rG   ChromeCommandTest.test_openS   rI   r   c                 @    U R                  S[        SS9/ [        /S9  g NrD   F	autoraiser'   r6   r7   r<   dictr>   r   s    r   test_open_with_autoraise_false0ChromeCommandTest.test_open_with_autoraise_falseX   $    

6dU3!U 	 	$r   c                 2    U R                  SS/[        /S9  g Nopen_newz--new-windowrE   rF   r   s    r   test_open_newChromeCommandTest.test_open_new]        

:*+!U 	 	$r   c                 0    U R                  S/ [        /S9  g Nopen_new_tabrE   rF   r   s    r   test_open_new_tab#ChromeCommandTest.test_open_new_tabb       

>!U 	 	$r   c           
          U R                  [        R                  [        R                  " S5      5         U R                  S/ [        /[        SS9S9  S S S 5        g ! , (       d  f       g = f)Nz;Bad 'new' parameter to open(); expected 0, 1, or 2, got 999rD   i  )new)r6   r7   r'   )assertRaisesRegexrJ   Errorreescaper<   r>   r]   r   s    r   test_open_bad_new_parameter-ChromeCommandTest.test_open_bad_new_parameterg   sc    ##J$4$4$&II /M %NO JJv!"%3-  )O O Os   A
A+r   N)r   r   r    r!   rJ   Chromer-   rG   r^   rd   rj   rs   r"   r   r   r   rS   rS   O   s&    %%M$
$
$
$
)r   rS   c                   D    \ rS rSr\R
                  rS rS rS r	S r
Srg)EdgeCommandTestq   c                 0    U R                  S/ [        /S9  g rC   rF   r   s    r   rG   EdgeCommandTest.test_openu   rI   r   c                 @    U R                  S[        SS9/ [        /S9  g rX   r\   r   s    r   r^   .EdgeCommandTest.test_open_with_autoraise_falsez   r`   r   c                 2    U R                  SS/[        /S9  g rb   rF   r   s    r   rd   EdgeCommandTest.test_open_new   rf   r   c                 0    U R                  S/ [        /S9  g rh   rF   r   s    r   rj   !EdgeCommandTest.test_open_new_tab   rl   r   r   N)r   r   r    r!   rJ   Edger-   rG   r^   rd   rj   r"   r   r   r   rw   rw   q   s    OOM$
$
$
$r   rw   c                   D    \ rS rSr\R
                  rS rS rS r	S r
Srg)MozillaCommandTest   c                 0    U R                  S/ [        /S9  g rC   rF   r   s    r   rG   MozillaCommandTest.test_open   rI   r   c                 @    U R                  S[        SS9/ [        /S9  g rX   r\   r   s    r   r^   1MozillaCommandTest.test_open_with_autoraise_false   r`   r   c                 2    U R                  S/ S[        /S9  g )Nrc   z-new-windowrE   rF   r   s    r   rd    MozillaCommandTest.test_open_new   s     

:+S1 	 	3r   c                 2    U R                  S/ S[        /S9  g )Nri   z-new-tabrE   rF   r   s    r   rj   $MozillaCommandTest.test_open_new_tab   s     

>(#. 	 	0r   r   N)r   r   r    r!   rJ   Mozillar-   rG   r^   rd   rj   r"   r   r   r   r   r      s!    &&M$
$
3
0r   r   c                   D    \ rS rSr\R
                  rS rS rS r	S r
Srg)EpiphanyCommandTest   c                 2    U R                  SS/[        /S9  g )NrD   -nrE   rF   r   s    r   rG   EpiphanyCommandTest.test_open   s    

6 6!U 	 	$r   c                 D    U R                  S[        SS9SS/[        /S9  g )NrD   FrY   z-noraiser   r[   r\   r   s    r   r^   2EpiphanyCommandTest.test_open_with_autoraise_false   s)    

6dU3&-!U 	 	$r   c                 2    U R                  SS/[        /S9  g )Nrc   -wrE   rF   r   s    r   rd   !EpiphanyCommandTest.test_open_new   s    

: 6!U 	 	$r   c                 2    U R                  SS/[        /S9  g )Nri   r   rE   rF   r   s    r   rj   %EpiphanyCommandTest.test_open_new_tab   s    

> 6!U 	 	$r   r   N)r   r   r    r!   rJ   Epiphanyr-   rG   r^   rd   rj   r"   r   r   r   r   r      s!    ''M$
$
$
$r   r   c                   D    \ rS rSr\R
                  rS rS rS r	S r
Srg)OperaCommandTest   c                 0    U R                  S/ [        /S9  g rC   rF   r   s    r   rG   OperaCommandTest.test_open   rI   r   c                 @    U R                  S[        SS9/ [        /S9  g rX   r\   r   s    r   r^   /OperaCommandTest.test_open_with_autoraise_false   r`   r   c                 2    U R                  SS/[        /S9  g rb   rF   r   s    r   rd   OperaCommandTest.test_open_new   rf   r   c                 0    U R                  S/ [        /S9  g rh   rF   r   s    r   rj   "OperaCommandTest.test_open_new_tab   rl   r   r   N)r   r   r    r!   rJ   Operar-   rG   r^   rd   rj   r"   r   r   r   r   r      s!    $$M$
$
$
$r   r   c                   D    \ rS rSr\R
                  rS rS rS r	S r
Srg)ELinksCommandTest   c                 :    U R                  SS/S[         S3/S9  g NrD   -remoteopenURL()rE   rF   r   s    r   rG   ELinksCommandTest.test_open   s(    

6I; (Q/0 	 	2r   c                 :    U R                  SS/S[         S3/S9  g r   rF   r   s    r   r^   0ELinksCommandTest.test_open_with_autoraise_false   s)    

6%; (Q/0 	 	2r   c                 :    U R                  SS/S[         S3/S9  g )Nrc   r   r   z,new-window)rE   rF   r   s    r   rd   ELinksCommandTest.test_open_new   s)    

:%; (\:; 	 	=r   c                 :    U R                  SS/S[         S3/S9  g )Nri   r   r   z	,new-tab)rE   rF   r   s    r   rj   #ELinksCommandTest.test_open_new_tab   s)    

>%; (Y78 	 	:r   r   N)r   r   r    r!   rJ   Elinksr-   rG   r^   rd   rj   r"   r   r   r   r   r      s!    %%M22
=
:r   r   ioszTest only applicable to iOSc                       \ rS rSrS r\R                  " \" \SS5      SL S5      S 5       r	S r
S rS	 rS
 rS rS rSrg)IOSBrowserTest   c                 2    SR                  S U 5       5      $ )N|c              3   8   #    U  H  n[        U5      v   M     g 7fr   )str).0as     r   	<genexpr>*IOSBrowserTest._obj_ref.<locals>.<genexpr>   s     -1As   )join)r   r&   s     r   _obj_refIOSBrowserTest._obj_ref   s     xx----r   objcNz#iOS Webbrowser tests require ctypesc                    [         R                  U l        [        R                  " 5       [         l        S [         R                  l        S [         R                  l        U R                  [         R                  R                  l	        g )Nc                 (    SU R                  5        3$ )NzC#decode)clss    r   <lambda>&IOSBrowserTest.setUp.<locals>.<lambda>   s    b4Gr   c                 (    SU R                  5        3$ )NzS#r   )sels    r   r   r      s    CJJL>7Jr   )
rJ   r   	orig_objcr	   Mockobjc_getClasssel_registerNamer   objc_msgSendside_effectr   s    r   setUpIOSBrowserTest.setUp   sJ     $))+
(G
%+J
(37==
$$0r   c                 .    U R                   [        l        g r   )r   rJ   r   r   s    r   tearDownIOSBrowserTest.tearDown  s    ..
r   c                     [        [        U5      " [        40 UD6  / SQnSSU R                  " U6 /nSS/n[        R                  R
                  R                  U R                  " U6 SU R                  " U6 S S 5        g )N)z
C#NSStringzS#stringWithCString:encoding:s   https://www.example.com   zC#NSURLzS#URLWithString:zC#UIApplicationzS#sharedApplicationz$S#openURL:options:completionHandler:)r/   rJ   r>   r   r   r   assert_called_with)r   r5   kwargsurl_string_argsurl_obj_argsshared_app_argss         r   r<   IOSBrowserTest._test  s     	
D!#00
 MM?+
 -.CD 	$$77MM?+2MM<(	
r   c                 &    U R                  S5        g )NrD   r<   r   s    r   rG   IOSBrowserTest.test_open#  s    

6r   c                 $    U R                  SSS9  g )NrD   FrY   r   r   s    r   r^   -IOSBrowserTest.test_open_with_autoraise_false&  s    

6U
+r   c                 &    U R                  S5        g )Nrc   r   r   s    r   rd   IOSBrowserTest.test_open_new)  s    

:r   c                 &    U R                  S5        g )Nri   r   r   s    r   rj    IOSBrowserTest.test_open_new_tab,  s    

>"r   )r   )r   r   r    r!   r   unittestskipIfr/   rJ   r   r   r<   rG   r^   rd   rj   r"   r   r   r   r   r      sW    .
 __WZ6$>:<	A<	A)
>,#r   r   c                       \ rS rSrS rS rS rS rS rS r	\
R                  " \R                  S:H  S	5      S
 5       rSrg)BrowserRegistrationTesti0  c                     [         R                  U l        / [         l        [         R                  U l        0 [         l        g r   )rJ   	_tryorder_saved_tryorder	_browsers_saved_browsersr   s    r   r   BrowserRegistrationTest.setUp2  s.    )33!
)33!
r   c                 X    U R                   [        l        U R                  [        l        g r   )r   rJ   r   r   r   r   s    r   r    BrowserRegistrationTest.tearDown9  s    #33
#33
r   c                 ~    " S S5      n/ n0 nU R                  [        R                  U5        U R                  [        R                  U5        [        R                  " SU5        S/nUS /US'   U R                  [        R                  U5        U R                  [        R                  U5        U" 5       nUb  [        R                  " SX%US9  O[        R                  " SX%5        U(       a  SS/nOSS/nX%/US'   U R                  [        R                  U5        U R                  [        R                  U5        g )Nc                       \ rS rSrSrg)CBrowserRegistrationTest._check_registration.<locals>.ExampleBrowseri>  r   Nr   r   r    r!   r"   r   r   r   ExampleBrowserr   >      r   r   Example1example1example2	preferred)r1   rJ   r   r   register)r   r  r   expected_tryorderexpected_browsersinstances         r   _check_registration+BrowserRegistrationTest._check_registration=  s(   	 	 --/@A--/@AJ7'L)7(>*%--/@A--/@A!# 
N*35 
NE!+Z 8!+Z 8)7(B*%--/@A--/@Ar   c                 "    U R                  SS9  g )NFr  r  r   s    r   test_register%BrowserRegistrationTest.test_register[  s      5 1r   c                 "    U R                  S S9  g )Nr  r  r   s    r   test_register_default-BrowserRegistrationTest.test_register_default^        4 0r   c                 "    U R                  SS9  g )NTr  r  r   s    r   test_register_preferred/BrowserRegistrationTest.test_register_preferreda  r  r   darwinzmacOS specific testc                     [         R                  " S5       n[        R                  " 5         S S S 5        WR	                  5         g ! , (       d  f       N= f)Nzsubprocess.check_output)r	   r+   rJ   register_standard_browsersassert_not_called)r   ck_os     r   test_no_xdg_settings_on_macOS5BrowserRegistrationTest.test_no_xdg_settings_on_macOSd  s;    
 ZZ12d113 3 	  32s   A
A)r   r   N)r   r   r    r!   r   r   r  r  r  r  r   
skipUnlesssysplatformr  r"   r   r   r   r   r   0  sM    "4B<211 13HI! J!r   r   c                       \ rS rSrS rS r\R                  " S\R                  ;   S5      S 5       r
\R                  " \S5      S 5       r\R                  " \S5      S	 5       rS
rg)
ImportTestio  c                    [         R                  " S5      nU R                  UR                  5        U R	                  UR
                  5         " S S5      nUR                  " SU5        U R                  UR                  5        U R                  UR                  S   S5        U R                  UR
                  5        U R                  SUR
                  5        U R                  UR
                  S   US /5        g )NrJ   c                       \ rS rSrSrg)0ImportTest.test_register.<locals>.ExampleBrowseriu  r   Nr   r   r   r   r   r#  u  r   r   r   r   r   )
r   import_fresh_moduleassertIsNoner   assertFalser   r  
assertTruer1   r3   )r   rJ   r   s      r   r  ImportTest.test_registerp  s    "66|D
*../--.	 	J7
,,---b1:>
,,-j*"6"67--j9ND;QRr   c                 `   [         R                  " S5      nU R                  UR                  5        U R	                  UR
                  5        U R                  UR                  5         UR                  " S5        S S S 5        U R                  UR                  5        g ! , (       d  f       N*= f)NrJ   fakebrowser)
r   r%  r&  r   r'  r   assertRaisesrp   getassertIsNotNone)r   rJ   s     r   test_getImportTest.test_get~  s|    "66|D
*../--.z//0NN=) 1Z112 10s   (B
B- z)test assumes no space in path (GH-114452)c                 .   [         R                  " S5      n[        R                  R	                  [
        R                  5      R                  5       nUR                  " US UR                  " U5      5        UR                  " [
        R                  5        g )NrJ   )r   r%  ospathbasenamer  
executablelowerr  rK   r-  )r   rJ   r*   s      r   test_synthesizeImportTest.test_synthesize  s`    "66|D
ww/557D$
(A(A$(GHs~~&r   z=Apple mobile doesn't allow modifying browser with environmentc                    [         R                  " S5      n UR                  " 5       R                  n[        R                  " 5        nWUS'   [         R                  " S5      nUR                  " 5         S S S 5        g ! UR                   a$  nU R                  [        U5      5         S nANzS nAff = f! , (       d  f       g = f)NrJ   BROWSER)	r   r%  r-  r*   rp   skipTestr   r   EnvironmentVarGuard)r   rJ   r9   errenvs        r   test_environmentImportTest.test_environment  s    
 #66|D
	$ nn&++G **,$C	N&::<HJNN -,  	$MM#c(##	$,,s#   A> -B5>B2B--B25
Cc                 .   [         R                  " S5      n UR                  " 5         UR                  " UR                  S   5      R                  n[        R                  " 5        nWUS'   [         R                  " S5      nU R                  UR                  " 5       R                  U5        S S S 5        [        R                  " 5        n[        R                  US'   [         R                  " S5      nU R                  UR                  " 5       R                  [        R                  5        S S S 5        g ! UR
                  [        4 a%  nU R                  [        U5      5         S nAGNS nAff = f! , (       d  f       N= f! , (       d  f       g = f)NrJ   r$  r;  )r   r%  r-  r   r*   rp   
IndexErrorr<  r   r   r=  r1   r  r6  )r   rJ   least_preferred_browserr>  r?  s        r   test_environment_preferred%ImportTest.test_environment_preferred  s'   
 #66|D
	$NN&0nnZ5I5I"5M&N&S&S# **,4C	N&::<HJZ^^-224KL -
 **, ^^C	N&::<HJZ^^-22CNNC -,   *- 	$MM#c(##	$ -,
 -,s1   :D7 'AE5A#F7E2E--E25
F
Fr   N)r   r   r    r!   r  r/  r   r   r  r6  r8  r   r@  rE  r"   r   r   r   r   r   o  s    S3 __SCNN*,WX' Y' __G			 __GD	Dr   r   c                   &    \ rS rSrS rS rS rSrg)CliTesti  c                     S Hh  u  pn[         R                  " [        R                  " U5      5      nU R	                  UR
                  U5        U R	                  UR                  U5        Mj     g )N	)https://example.comrK  r   )zhttps://example.com -nrK     )z-n https://example.comrK  rL  )zhttps://example.com -trK     )z-t https://example.comrK  rM  )z https://example.com --new-windowrK  rL  )z --new-window https://example.comrK  rL  )zhttps://example.com --new-tabrK  rM  )z--new-tab https://example.comrK  rM  )rJ   
parse_argsshlexsplitr1   urlnew_win)r   commandrQ  rR  r&   s        r   test_parse_argsCliTest.test_parse_args  sV    &
!G' ((W)=>DTXXs+T\\73#&
r   c                    S H  n[         R                  " 5        nU R                  [        5         [        R
                  " [        R                  " U5      5        S S S 5        U R                  SUR                  5       5        S S S 5        M     [         R                  " 5        nU R                  [        5         [        R
                  " [        R                  " S5      5        S S S 5        U R                  SUR                  5       5        S S S 5        g ! , (       d  f       N= f! , (       d  f       GM5  = f! , (       d  f       N[= f! , (       d  f       g = f)N)zhttps://example.com -n -tz*https://example.com --new-window --new-tabz https://example.com -n --new-tabz#https://example.com --new-window -tzGerror: argument -t/--new-tab: not allowed with argument -n/--new-windowzhttps://example.com --newzBerror: ambiguous option: --new could match --new-window, --new-tab)
r   captured_stderrr,  
SystemExitrJ   rN  rO  rP  r3   getvalue)r   rS  stderrs      r   test_parse_args_errorCliTest.test_parse_args_error  s    
G ((*f&&z2))%++g*>? 3]OO% +*
  $$&&"":.%%ekk2M&NO /MMT! '& 32 +* /. '&sF   D(+D(D(%E;+D;&(E
D%!D((
D8	;
E		E
Ec                 P   S H}  u  pn[         R                  " SS S9 n[         R                  " SS S9   [        R                  " [        R
                  " U5      5        UR                  X#5        S S S 5        S S S 5        M     g ! , (       d  f       N= f! , (       d  f       M  = f)NrJ  zwebbrowser.open)return_valuezbuiltins.print)r	   r+   rJ   mainrO  rP  assert_called_once_with)r   rS  expected_urlexpected_new_win	mock_opens        r   	test_mainCliTest.test_main  s|    8
3G#3 

,4@I

+$?G 4511,Q @ A@8
  @? A@s"   B<B0B
BB
B%	r   N)r   r   r    r!   rT  r[  rd  r"   r   r   r   rH  rH    s    4(2Rr   rH  __main__)'r3  rq   rO  r,   r  r   rJ   r   r   test.supportr   r   r   r   r   r	   requires_working_threadingr>   r.   	MagicMockr   r$   TestCaser@   rM   rS   rw   r   r   r   r   r  r  r   r   r   rH  r   r_  r   r   r   <module>rk     s   	 	   
    & ( " , )   + +4 8  0 0 04$ 0(2C2C $$#3X5F5F $)((*;*; )D$&(9(9 $20)8+<+< 02$*H,=,= $2$'):): $2:((*;*; :0 
S\\U*,IJ?#X&& ?# K?#D<!h// <!~BD"" BDJBRh BRJ zMMO r   