
    <e*                        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                     dS dS )"    N)mock)support)import_helper)	os_helperz"test webserver requires subprocesszhttp://www.example.comtestc                       e Zd Zd ZddZdS )	PopenMockc                     dS Nr    selfs    +/usr/lib/python3.11/test/test_webbrowser.pypollzPopenMock.poll       q    Nc                     dS r   r   )r   secondss     r   waitzPopenMock.wait   r   r   N)__name__
__module____qualname__r   r   r   r   r   r	   r	      s7               r   r	   c                       e Zd Zegi ddZdS )CommandTestMixin)argskwc                   t                      }t          j        | t          d|           |                     t
                    } t          ||          |i | t          j        j        d         d         }| 	                    |d         t
                     |
                    d           |D ]@}	|                     |	|           |
                    |                    |	                     A| 	                    ||           dS )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77$$($33++++%/215
A111q 	5 	5FMM&*---NN:++F334444Y/////r   N)r   r   r   URLr2   r   r   r   r   r      s4        #&%B 0 0 0 0 0 0 0r   r   c                   "    e Zd Zej        Zd ZdS )GenericBrowserCommandTestc                 B    |                      dg t          g           d S Nopenr,   r-   r2   r3   r   s    r   	test_openz#GenericBrowserCommandTest.test_open9   1    

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dS )BackgroundBrowserCommandTestc                 B    |                      dg t          g           d S 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+        0M$ $ $ $ $r   r@   c                   4    e Zd Zej        Zd Zd Zd Zd Z	dS )ChromeCommandTestc                 B    |                      dg t          g           d S r7   r:   r   s    r   r;   zChromeCommandTest.test_openM   r<   r   c                 `    |                      dt          d          g t          g           d S Nr8   F	autoraiser   r,   r-   r2   dictr3   r   s    r   test_open_with_autoraise_falsez0ChromeCommandTest.test_open_with_autoraise_falseR   >    

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

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

>!U 	 	$ 	$ 	$ 	$ 	$r   N)
r   r   r   r=   Chromer#   r;   rM   rR   rW   r   r   r   rD   rD   I   X        %M$ $ $
$ $ $
$ $ $
$ $ $ $ $r   rD   c                   4    e Zd Zej        Zd Zd Zd Zd Z	dS )MozillaCommandTestc                 B    |                      dg t          g           d S r7   r:   r   s    r   r;   zMozillaCommandTest.test_openf   r<   r   c                 `    |                      dt          d          g t          g           d S rG   rK   r   s    r   rM   z1MozillaCommandTest.test_open_with_autoraise_falsek   rN   r   c                 D    |                      dg dt          g           d S )NrQ   z-new-windowr9   r:   r   s    r   rR   z MozillaCommandTest.test_open_newp   s4    

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

>(#. 	 	0 	0 	0 	0 	0r   N)
r   r   r   r=   Mozillar#   r;   rM   rR   rW   r   r   r   r\   r\   b   sX        &M$ $ $
$ $ $
3 3 3
0 0 0 0 0r   r\   c                   4    e Zd Zej        Zd Zd Zd Zd Z	dS )NetscapeCommandTestc                 l    |                      dddgd                    t                    g           d S )Nr8   -raise-remoteopenURL({})r9   r2   formatr3   r   s    r   r;   zNetscapeCommandTest.test_open   sE    

6$i0+223778 	 	: 	: 	: 	: 	:r   c                     |                      dt          d          ddgd                    t                    g           d S )Nr8   FrH   -noraiserf   rg   rJ   )r2   rL   ri   r3   r   s    r   rM   z2NetscapeCommandTest.test_open_with_autoraise_false   sR    

6dU333&	2+223778 	 	: 	: 	: 	: 	:r   c                 l    |                      dddgd                    t                    g           d S )NrQ   re   rf   openURL({},new-window)r9   rh   r   s    r   rR   z!NetscapeCommandTest.test_open_new   sJ    

:$i06==cBBC 	 	E 	E 	E 	E 	Er   c                 l    |                      dddgd                    t                    g           d S )NrV   re   rf   openURL({},new-tab)r9   rh   r   s    r   rW   z%NetscapeCommandTest.test_open_new_tab   sJ    

>$i03::3??@ 	 	B 	B 	B 	B 	Br   N)
r   r   r   r=   Netscaper#   r;   rM   rR   rW   r   r   r   rc   rc   {   s`        'M: : :
: : :
E E E
B B B B Br   rc   c                   4    e Zd Zej        Zd Zd Zd Zd Z	dS )GaleonCommandTestc                 D    |                      ddgt          g           d S )Nr8   -nr9   r:   r   s    r   r;   zGaleonCommandTest.test_open   s3    

6 6!U 	 	$ 	$ 	$ 	$ 	$r   c                 d    |                      dt          d          ddgt          g           d S )Nr8   FrH   rk   rt   rJ   rK   r   s    r   rM   z0GaleonCommandTest.test_open_with_autoraise_false   sC    

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

: 6!U 	 	$ 	$ 	$ 	$ 	$r   c                 D    |                      ddgt          g           d S )NrV   rw   r9   r:   r   s    r   rW   z#GaleonCommandTest.test_open_new_tab   s3    

> 6!U 	 	$ 	$ 	$ 	$ 	$r   N)
r   r   r   r=   Galeonr#   r;   rM   rR   rW   r   r   r   rr   rr      rZ   r   rr   c                   4    e Zd Zej        Zd Zd Zd Zd Z	dS )OperaCommandTestc                 B    |                      dg t          g           d S r7   r:   r   s    r   r;   zOperaCommandTest.test_open   r<   r   c                 `    |                      dt          d          g t          g           d S rG   rK   r   s    r   rM   z/OperaCommandTest.test_open_with_autoraise_false   rN   r   c                 D    |                      ddgt          g           d S rP   r:   r   s    r   rR   zOperaCommandTest.test_open_new   rS   r   c                 B    |                      dg t          g           d S 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   r{   r{      sX        $M$ $ $
$ $ $
$ $ $
$ $ $ $ $r   r{   c                   4    e Zd Zej        Zd Zd Zd Zd Z	dS )ELinksCommandTestc                 j    |                      ddgd                    t                    g           d S Nr8   rf   rg   r9   rh   r   s    r   r;   zELinksCommandTest.test_open   sF    

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

6%;+223778 	 	: 	: 	: 	: 	:r   c                 j    |                      ddgd                    t                    g           d S )NrQ   rf   rm   r9   rh   r   s    r   rR   zELinksCommandTest.test_open_new   sG    

:%;6==cBBC 	 	E 	E 	E 	E 	Er   c                 j    |                      ddgd                    t                    g           d S )NrV   rf   ro   r9   rh   r   s    r   rW   z#ELinksCommandTest.test_open_new_tab   sG    

>%;3::3??@ 	 	B 	B 	B 	B 	Br   N)
r   r   r   r=   Elinksr#   r;   rM   rR   rW   r   r   r   r   r      sc        %MB B B: : :
E E E
B B B B Br   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )BrowserRegistrationTestc                 z    t           j        | _        g t           _        t           j        | _        i t           _        d S r   )r=   	_tryorder_saved_tryorder	_browsers_saved_browsersr   s    r   setUpzBrowserRegistrationTest.setUp   s.    )3!
)3!
r   c                 J    | j         t          _        | j        t          _        d S r   )r   r=   r   r   r   r   s    r   tearDownz BrowserRegistrationTest.tearDown   s    #3
#3
r   c                     G d d          }g }i }|                      t          j        |           |                      t          j        |           t          j        d|           dg}|d g|d<   |                      t          j        |           |                      t          j        |            |            }|t          j        d|||           nt          j        d||           |rddg}nddg}||g|d<   |                      t          j        |           |                      t          j        |           d S )Nc                       e Zd ZdS )CBrowserRegistrationTest._check_registration.<locals>.ExampleBrowserNr   r   r   r   r   r   ExampleBrowserr              Dr   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A-/@AAAJ777'L)7(>*%-/@AAA-/@AAA!>## 
NH*35 5 5 5 5 
NHEEE 	9!+Z 8!+Z 8)7(B*%-/@AAA-/@AAAAAr   c                 2    |                      d           d S )NFr   r   r   s    r   test_registerz%BrowserRegistrationTest.test_register	  s      5 11111r   c                 2    |                      d            d S )Nr   r   r   s    r   test_register_defaultz-BrowserRegistrationTest.test_register_default        4 00000r   c                 2    |                      d           d S )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      sq        " " "4 4 4B B B<2 2 21 1 11 1 1 1 1r   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )
ImportTestc                    t          j        d          }|                     |j                   |                     |j                    G d d          } |j        d|           |                     |j                   |                     |j        d         d           |                     |j                   | 	                    d|j                   |                     |j        d         |d g           d S )Nr=   c                       e Zd ZdS )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|DD
*.///-...	 	 	 	 	 	 	 	
J777
,----b1:>>>
,---j*"6777-j9ND;QRRRRRr   c                 N   t          j        d          }|                     |j                   |                     |j                   |                     |j                  5   |j        d           d d d            n# 1 swxY w Y   | 	                    |j                   d S )Nr=   fakebrowser)
r   r   r   r   r   r   assertRaisesErrorgetassertIsNotNone)r   r=   s     r   test_getzImportTest.test_get"  s    "6|DD
*.///-...z/00 	* 	*JN=)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*Z122222s   #B  BBc                    t          j        d          }t          j                            t
          j                                                  } |j        |d  |j	        |                      |j
        t
          j                   d S )Nr=   )r   r   ospathbasenamesys
executablelowerr   r>   r   )r   r=   r    s      r   test_synthesizezImportTest.test_synthesize+  st    "6|DD
w//5577
D$(A
(A$(G(GHHH
s~&&&&&r   c                 t   t          j        d          }	  |j                    j        }n9# |j        $ r,}|                     t          |                     Y d }~nd }~ww xY wt          j                    5 }||d<   t          j        d          } |j                     d d d            d S # 1 swxY w Y   d S )Nr=   BROWSER)	r   r   r   r    r   skipTeststrr   EnvironmentVarGuard)r   r=   r/   errenvs        r   test_environmentzImportTest.test_environment1  s   "6|DD
	$$jn&&+GG 	$ 	$ 	$MM#c((########	$*,, 	$C	N&:<HHJJN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s&   + 
A!"AA!7)B--B14B1c                    t          j        d          }	  |j                      |j        |j        d                   j        }n@# |j        t          f$ r,}|                     t          |                     Y d }~nd }~ww xY wt          j
                    5 }||d<   t          j        d          }|                      |j                    j        |           d d d            n# 1 swxY w Y   t          j
                    5 }t          j        |d<   t          j        d          }|                      |j                    j        t          j                   d d d            d S # 1 swxY w Y   d S )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<  s
   "6|DD
	$JN&4jnZ5I"5M&N&N&S## *- 	$ 	$ 	$MM#c((########	$ *,, 	M4C	N&:<HHJ^Z^--24KLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M
 *,, 	D ^C	N&:<HHJ^Z^--2CNCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds=   /A B"A>>BAC''C+.C+AE((E,/E,N)r   r   r   r   r   r   r   r   r   r   r   r   r     sg        S S S3 3 3' ' '	 	 	D D D D 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\   rc   rr   r{   r   r   r   r   mainr   r   r   <module>r      s        				 



                 & & & & & & " " " " " "% B
(
@
A
AA       0 0 0 0 0 0 0 04$ $ $ $ $ 0(2C $ $ $$ $ $ $ $#3X5F $ $ $$ $ $ $ $((*; $ $ $20 0 0 0 0)8+< 0 0 02B B B B B*H,= B B B2$ $ $ $ $((*; $ $ $2$ $ $ $ $'): $ $ $2B B B B B((*; B B B021 21 21 21 21h/ 21 21 21j9D 9D 9D 9D 9D" 9D 9D 9Dx ZHMOOOOO r   