
    daf)                        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m
Z
 ej                  s ej                  d      dZdZ G d	 d
ej                        Z G d d      Z G d deej$                        Z G d deej$                        Z G d deej$                        Z G d deej$                        Z G d deej$                        Z G d deej$                        Z G d deej$                        Z G d deej$                        Z G d dej$                        Z G d d ej$                        Zed!k(  r ej<                          yy)"    N)mock)support)import_helper)	os_helperz"test webserver requires subprocesszhttps://www.example.comtestc                       e Zd Zd ZddZy)	PopenMockc                      yNr    selfs    //root/Python-3.12.4/Lib/test/test_webbrowser.pypollzPopenMock.poll           Nc                      yr   r   )r   secondss     r   waitzPopenMock.wait   r   r   N)__name__
__module____qualname__r   r   r   r   r   r	   r	      s    r   r	   c                       e Zd Zegi ddZy)CommandTestMixin)argskwc                   t               }t        j                  | t        d|       | j	                  t
              } t        ||      |i | t        j                  j                  d   d   }| j                  |d   t
               |j                  d       |D ]4  }	| j                  |	|       |j                  |j                  |	             6 | j                  ||       y)aj  Given a web browser instance method name along with arguments and
        keywords for same (which defaults to the single argument URL), creates
        a browser instance from the class pointed to by self.browser, calls the
        indicated instance method with the indicated arguments, and compares
        the resulting options and arguments passed to Popen by the browser
        instance against the 'options' and 'args' lists.  Options are compared
        in a position independent fashion, and the arguments are compared in
        sequence order to whatever is left over after removing the options.

        Popen)namer   N)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   _testzCommandTestMixin._test   s     dJ7$$($3++%%//215
A1q 	5FMM&*-NN:++F34	5 	Y/r   N)r   r   r   URLr2   r   r   r   r   r      s    #&%B 0r   r   c                   *    e Zd Zej                  Zd Zy)GenericBrowserCommandTestc                 6    | j                  dg t        g       y Nopenr,   r-   r2   r3   r   s    r   	test_openz#GenericBrowserCommandTest.test_open9       

6!U 	 	$r   N)r   r   r   
webbrowserGenericBrowserr#   r;   r   r   r   r5   r5   5   s    --M$r   r5   c                   *    e Zd Zej                  Zd Zy)BackgroundBrowserCommandTestc                 6    | j                  dg t        g       y r7   r:   r   s    r   r;   z&BackgroundBrowserCommandTest.test_openC   r<   r   N)r   r   r   r=   BackgroundBrowserr#   r;   r   r   r   r@   r@   ?   s    00M$r   r@   c                   <    e Zd Zej                  Zd Zd Zd Zd Z	y)ChromeCommandTestc                 6    | j                  dg t        g       y r7   r:   r   s    r   r;   zChromeCommandTest.test_openM   r<   r   c                 L    | j                  dt        d      g t        g       y Nr8   F	autoraiser   r,   r-   r2   dictr3   r   s    r   test_open_with_autoraise_falsez0ChromeCommandTest.test_open_with_autoraise_falseR   $    

6dU3!U 	 	$r   c                 8    | j                  ddgt        g       y Nopen_newz--new-windowr9   r:   r   s    r   test_open_newzChromeCommandTest.test_open_newW        

:*+!U 	 	$r   c                 6    | j                  dg t        g       y Nopen_new_tabr9   r:   r   s    r   test_open_new_tabz#ChromeCommandTest.test_open_new_tab\       

>!U 	 	$r   N)
r   r   r   r=   Chromer#   r;   rM   rR   rW   r   r   r   rD   rD   I   s!    %%M$
$
$
$r   rD   c                   <    e Zd Zej                  Zd Zd Zd Zd Z	y)EdgeCommandTestc                 6    | j                  dg t        g       y r7   r:   r   s    r   r;   zEdgeCommandTest.test_openf   r<   r   c                 L    | j                  dt        d      g t        g       y rG   rK   r   s    r   rM   z.EdgeCommandTest.test_open_with_autoraise_falsek   rN   r   c                 8    | j                  ddgt        g       y rP   r:   r   s    r   rR   zEdgeCommandTest.test_open_newp   rS   r   c                 6    | j                  dg t        g       y rU   r:   r   s    r   rW   z!EdgeCommandTest.test_open_new_tabu   rX   r   N)
r   r   r   r=   Edger#   r;   rM   rR   rW   r   r   r   r[   r[   b   s    OOM$
$
$
$r   r[   c                   <    e Zd Zej                  Zd Zd Zd Zd Z	y)MozillaCommandTestc                 6    | j                  dg t        g       y r7   r:   r   s    r   r;   zMozillaCommandTest.test_open   r<   r   c                 L    | j                  dt        d      g t        g       y rG   rK   r   s    r   rM   z1MozillaCommandTest.test_open_with_autoraise_false   rN   r   c                 8    | j                  dg dt        g       y )NrQ   z-new-windowr9   r:   r   s    r   rR   z MozillaCommandTest.test_open_new   s     

:+S1 	 	3r   c                 8    | j                  dg dt        g       y )NrV   z-new-tabr9   r:   r   s    r   rW   z$MozillaCommandTest.test_open_new_tab   s     

>(#. 	 	0r   N)
r   r   r   r=   Mozillar#   r;   rM   rR   rW   r   r   r   rb   rb   {   s!    &&M$
$
3
0r   rb   c                   <    e Zd Zej                  Zd Zd Zd Zd Z	y)EpiphanyCommandTestc                 8    | j                  ddgt        g       y )Nr8   -nr9   r:   r   s    r   r;   zEpiphanyCommandTest.test_open   s    

6 6!U 	 	$r   c                 P    | j                  dt        d      ddgt        g       y )Nr8   FrH   z-noraiserk   rJ   rK   r   s    r   rM   z2EpiphanyCommandTest.test_open_with_autoraise_false   s)    

6dU3&-!U 	 	$r   c                 8    | j                  ddgt        g       y )NrQ   -wr9   r:   r   s    r   rR   z!EpiphanyCommandTest.test_open_new   s    

: 6!U 	 	$r   c                 8    | j                  ddgt        g       y )NrV   rn   r9   r:   r   s    r   rW   z%EpiphanyCommandTest.test_open_new_tab   s    

> 6!U 	 	$r   N)
r   r   r   r=   Epiphanyr#   r;   rM   rR   rW   r   r   r   ri   ri      s!    ''M$
$
$
$r   ri   c                   <    e Zd Zej                  Zd Zd Zd Zd Z	y)OperaCommandTestc                 6    | j                  dg t        g       y r7   r:   r   s    r   r;   zOperaCommandTest.test_open   r<   r   c                 L    | j                  dt        d      g t        g       y rG   rK   r   s    r   rM   z/OperaCommandTest.test_open_with_autoraise_false   rN   r   c                 8    | j                  ddgt        g       y rP   r:   r   s    r   rR   zOperaCommandTest.test_open_new   rS   r   c                 6    | j                  dg t        g       y rU   r:   r   s    r   rW   z"OperaCommandTest.test_open_new_tab   rX   r   N)
r   r   r   r=   Operar#   r;   rM   rR   rW   r   r   r   rr   rr      s!    $$M$
$
$
$r   rr   c                   <    e Zd Zej                  Zd Zd Zd Zd Z	y)ELinksCommandTestc                 V    | j                  ddgdj                  t              g       y Nr8   -remotezopenURL({})r9   r2   formatr3   r   s    r   r;   zELinksCommandTest.test_open   s+    

6I;&3&:&:3&?%@ 	 	Br   c                 V    | j                  ddgdj                  t              g       y r{   r}   r   s    r   rM   z0ELinksCommandTest.test_open_with_autoraise_false   s+    

6%;+22378 	 	:r   c                 V    | j                  ddgdj                  t              g       y )NrQ   r|   zopenURL({},new-window)r9   r}   r   s    r   rR   zELinksCommandTest.test_open_new   s,    

:%;6==cBC 	 	Er   c                 V    | j                  ddgdj                  t              g       y )NrV   r|   zopenURL({},new-tab)r9   r}   r   s    r   rW   z#ELinksCommandTest.test_open_new_tab   s,    

>%;3::3?@ 	 	Br   N)
r   r   r   r=   Elinksr#   r;   rM   rR   rW   r   r   r   ry   ry      s$    %%MB:
E
Br   ry   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)BrowserRegistrationTestc                     t         j                  | _        g t         _        t         j                  | _        i t         _        y r   )r=   	_tryorder_saved_tryorder	_browsers_saved_browsersr   s    r   setUpzBrowserRegistrationTest.setUp   s.    )33!
)33!
r   c                 X    | j                   t        _        | j                  t        _        y r   )r   r=   r   r   r   r   s    r   tearDownz BrowserRegistrationTest.tearDown   s    #33
#33
r   c                 x    G d d      }g }i }| j                  t        j                  |       | j                  t        j                  |       t        j                  d|       dg}|d g|d<   | j                  t        j                  |       | j                  t        j                  |        |       }|t        j                  d|||       nt        j                  d||       |rddg}nddg}||g|d<   | j                  t        j                  |       | j                  t        j                  |       y )Nc                       e Zd Zy)CBrowserRegistrationTest._check_registration.<locals>.ExampleBrowserNr   r   r   r   r   r   ExampleBrowserr          r   r   Example1example1example2	preferred)r'   r=   r   r   register)r   r   r   expected_tryorderexpected_browsersinstances         r   _check_registrationz+BrowserRegistrationTest._check_registration   s.   	 	 --/@A--/@AJ7'L)7(>*%--/@A--/@A!# 
NH*35 
NHE!+Z 8!+Z 8)7(B*%--/@A--/@Ar   c                 (    | j                  d       y )NFr   r   r   s    r   test_registerz%BrowserRegistrationTest.test_register	  s      5 1r   c                 (    | j                  d        y )Nr   r   r   s    r   test_register_defaultz-BrowserRegistrationTest.test_register_default        4 0r   c                 (    | j                  d       y )NTr   r   r   s    r   test_register_preferredz/BrowserRegistrationTest.test_register_preferred  r   r   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   r      s!    "4B<211r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)
ImportTestc                    t        j                  d      }| j                  |j                         | j	                  |j
                          G d d      } |j                  d|       | j                  |j                         | j                  |j                  d   d       | j                  |j
                         | j                  d|j
                         | j                  |j
                  d   |d g       y )Nr=   c                       e Zd Zy)0ImportTest.test_register.<locals>.ExampleBrowserNr   r   r   r   r   r     r   r   r   r   r   )
r   import_fresh_moduleassertIsNoner   assertFalser   r   
assertTruer'   r)   )r   r=   r   s      r   r   zImportTest.test_register  s    "66|D
*../--.	 	
J7
,,---b1:>
,,-j*"6"67--j9ND;QRr   c                 T   t        j                  d      }| j                  |j                         | j	                  |j
                         | j                  |j                        5   |j                  d       d d d        | j                  |j                         y # 1 sw Y   %xY w)Nr=   fakebrowser)
r   r   r   r   r   r   assertRaisesErrorgetassertIsNotNone)r   r=   s     r   test_getzImportTest.test_get"  s    "66|D
*../--.z//0 	*JNN=)	*Z112	* 	*s   'BB'c                 ,   t        j                  d      }t        j                  j	                  t
        j                        j                         } |j                  |d  |j                  |              |j                  t
        j                         y )Nr=   )r   r   ospathbasenamesys
executablelowerr   r>   r   )r   r=   r    s      r   test_synthesizezImportTest.test_synthesize+  sg    "66|D
ww/557
D$(A
(A(A$(GH
s~~&r   c                 z   t        j                  d      }	  |j                         j                  }t        j                         5 }|d<   t        j                  d      } |j                          d d d        y # |j                  $ r$}| j                  t        |             Y d }~wd }~ww xY w# 1 sw Y   y xY w)Nr=   BROWSER)	r   r   r   r    r   skipTeststrr   EnvironmentVarGuard)r   r=   r/   errenvs        r   test_environmentzImportTest.test_environment1  s    "66|D
	$$jnn&++G **, 	$C	N&::<HJJNN	 	  	$MM#c(##	$	 	s#   A; ,B1;B.
B))B.1B:c                    t        j                  d      }	  |j                           |j                  |j                  d         j                  }t        j                         5 }|d<   t        j                  d      }| j                   |j                         j                  |       d d d        t        j                         5 }t        j                  |d<   t        j                  d      }| j                   |j                         j                  t        j                         d d d        y # |j
                  t        f$ r%}| j                  t        |             Y d }~d }~ww xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr=   r   r   )r   r   r   r   r    r   
IndexErrorr   r   r   r   r'   r   r   )r   r=   least_preferred_browserr   r   s        r   test_environment_preferredz%ImportTest.test_environment_preferred<  sF   "66|D
	$JNN&4jnnZ5I5I"5M&N&S&S# **, 	M4C	N&::<HJ^Z^^-224KL	M
 **, 	D ^^C	N&::<HJ^Z^^-22CNNC	D 	D   *- 	$MM#c(##	$	M 	M
	D 	Ds1   :D2 %AE/A"E;2E,E''E,/E8;FN)r   r   r   r   r   r   r   r   r   r   r   r   r     s    S3'	Dr   r   __main__)r=   unittestr   r   r"   r   r   r   test.supportr   r   has_subprocess_supportSkipTestr3   r$   	MagicMockr	   r   TestCaser5   r@   rD   r[   rb   ri   rr   ry   r   r   r   mainr   r   r   <module>r      sM     	 
    & "%%
(

@
AA 0 04$ 0(2C2C $$#3X5F5F $$((*;*; $2$&(9(9 $20)8+<+< 02$*H,=,= $2$'):): $2B((*;*; B021h// 21j9D"" 9Dx ZHMMO r   