a
    ze)                     @   sB  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ZdZ	G dd dej
ZG dd	 d	ZG d
d deejZG dd deejZG dd deejZG dd deejZG dd deejZG dd deejZG dd deejZG dd deejZG dd dejZG dd dejZedkr>e  dS )    N)mock)supportzhttp://www.example.comtestc                   @   s   e Zd Zdd ZdddZdS )	PopenMockc                 C   s   dS Nr    selfr   r   */usr/lib/python3.9/test/test_webbrowser.pypoll   s    zPopenMock.pollNc                 C   s   dS r   r   )r	   Zsecondsr   r   r
   wait   s    zPopenMock.wait)N)__name__
__module____qualname__r   r   r   r   r   r
   r      s   r   c                   @   s   e Zd Zegi dddZdS )CommandTestMixin)argskwc          
      C   s   t  }t| td| | jtd}t|||i | tjjd d }| 	|d t |
d |D ] }	| |	| |
||	 qd| 	|| d S )NPopen)namer   )r   r   Zpatch
subprocessbrowser_classCMD_NAMEgetattrr   Z	call_argsassertEqualpopassertInindex)
r	   methr   r   options	argumentspopenbrowserZ
popen_argsoptionr   r   r
   _test   s    
zCommandTestMixin._testN)r   r   r   URLr#   r   r   r   r
   r      s   r   c                   @   s   e Zd ZejZdd ZdS )GenericBrowserCommandTestc                 C   s   | j dg tgd d S Nopenr   r   r#   r$   r   r   r   r
   	test_open5   s    z#GenericBrowserCommandTest.test_openN)r   r   r   
webbrowserGenericBrowserr   r*   r   r   r   r
   r%   1   s   r%   c                   @   s   e Zd ZejZdd ZdS )BackgroundBrowserCommandTestc                 C   s   | j dg tgd d S r&   r)   r   r   r   r
   r*   ?   s    z&BackgroundBrowserCommandTest.test_openN)r   r   r   r+   ZBackgroundBrowserr   r*   r   r   r   r
   r-   ;   s   r-   c                   @   s2   e Zd ZejZdd Zdd Zdd Zdd Z	d	S )
ChromeCommandTestc                 C   s   | j dg tgd d S r&   r)   r   r   r   r
   r*   I   s    zChromeCommandTest.test_openc                 C   s   | j dtddg tgd d S Nr'   FZ	autoraiser   r   r   r#   dictr$   r   r   r   r
   test_open_with_autoraise_falseN   s    z0ChromeCommandTest.test_open_with_autoraise_falsec                 C   s   | j ddgtgd d S Nopen_newz--new-windowr(   r)   r   r   r   r
   test_open_newS   s    zChromeCommandTest.test_open_newc                 C   s   | j dg tgd d S Nopen_new_tabr(   r)   r   r   r   r
   test_open_new_tabX   s    z#ChromeCommandTest.test_open_new_tabN)
r   r   r   r+   ZChromer   r*   r4   r7   r:   r   r   r   r
   r.   E   s
   r.   c                   @   s2   e Zd ZejZdd Zdd Zdd Zdd Z	d	S )
MozillaCommandTestc                 C   s   | j dg tgd d S r&   r)   r   r   r   r
   r*   b   s    zMozillaCommandTest.test_openc                 C   s   | j dtddg tgd d S r/   r2   r   r   r   r
   r4   g   s    z1MozillaCommandTest.test_open_with_autoraise_falsec                 C   s   | j dg dtgd d S )Nr6   z-new-windowr(   r)   r   r   r   r
   r7   l   s    z MozillaCommandTest.test_open_newc                 C   s   | j dg dtgd d S )Nr9   z-new-tabr(   r)   r   r   r   r
   r:   q   s    z$MozillaCommandTest.test_open_new_tabN)
r   r   r   r+   ZMozillar   r*   r4   r7   r:   r   r   r   r
   r;   ^   s
   r;   c                   @   s2   e Zd ZejZdd Zdd Zdd Zdd Z	d	S )
NetscapeCommandTestc                 C   s    | j dddgdtgd d S )Nr'   -raise-remoteopenURL({})r(   r#   formatr$   r   r   r   r
   r*   {   s    
zNetscapeCommandTest.test_openc                 C   s(   | j dtddddgdtgd d S )Nr'   Fr0   -noraiser>   r?   r1   )r#   r3   rA   r$   r   r   r   r
   r4      s    
z2NetscapeCommandTest.test_open_with_autoraise_falsec                 C   s    | j dddgdtgd d S )Nr6   r=   r>   openURL({},new-window)r(   r@   r   r   r   r
   r7      s    
z!NetscapeCommandTest.test_open_newc                 C   s    | j dddgdtgd d S )Nr9   r=   r>   openURL({},new-tab)r(   r@   r   r   r   r
   r:      s    
z%NetscapeCommandTest.test_open_new_tabN)
r   r   r   r+   ZNetscaper   r*   r4   r7   r:   r   r   r   r
   r<   w   s
   r<   c                   @   s2   e Zd ZejZdd Zdd Zdd Zdd Z	d	S )
GaleonCommandTestc                 C   s   | j ddgtgd d S )Nr'   -nr(   r)   r   r   r   r
   r*      s    zGaleonCommandTest.test_openc                 C   s"   | j dtddddgtgd d S )Nr'   Fr0   rB   rF   r1   r2   r   r   r   r
   r4      s    z0GaleonCommandTest.test_open_with_autoraise_falsec                 C   s   | j ddgtgd d S )Nr6   -wr(   r)   r   r   r   r
   r7      s    zGaleonCommandTest.test_open_newc                 C   s   | j ddgtgd d S )Nr9   rG   r(   r)   r   r   r   r
   r:      s    z#GaleonCommandTest.test_open_new_tabN)
r   r   r   r+   ZGaleonr   r*   r4   r7   r:   r   r   r   r
   rE      s
   rE   c                   @   s2   e Zd ZejZdd Zdd Zdd Zdd Z	d	S )
OperaCommandTestc                 C   s   | j dg tgd d S r&   r)   r   r   r   r
   r*      s    zOperaCommandTest.test_openc                 C   s   | j dtddg tgd d S r/   r2   r   r   r   r
   r4      s    z/OperaCommandTest.test_open_with_autoraise_falsec                 C   s   | j ddgtgd d S r5   r)   r   r   r   r
   r7      s    zOperaCommandTest.test_open_newc                 C   s   | j dg tgd d S r8   r)   r   r   r   r
   r:      s    z"OperaCommandTest.test_open_new_tabN)
r   r   r   r+   ZOperar   r*   r4   r7   r:   r   r   r   r
   rH      s
   rH   c                   @   s2   e Zd ZejZdd Zdd Zdd Zdd Z	d	S )
ELinksCommandTestc                 C   s   | j ddgdtgd d S Nr'   r>   r?   r(   r@   r   r   r   r
   r*      s    

zELinksCommandTest.test_openc                 C   s   | j ddgdtgd d S rJ   r@   r   r   r   r
   r4      s    
z0ELinksCommandTest.test_open_with_autoraise_falsec                 C   s   | j ddgdtgd d S )Nr6   r>   rC   r(   r@   r   r   r   r
   r7      s    
zELinksCommandTest.test_open_newc                 C   s   | j ddgdtgd d S )Nr9   r>   rD   r(   r@   r   r   r   r
   r:      s    
z#ELinksCommandTest.test_open_new_tabN)
r   r   r   r+   ZElinksr   r*   r4   r7   r:   r   r   r   r
   rI      s
   rI   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )BrowserRegistrationTestc                 C   s    t j| _g t _t j| _i t _d S N)r+   	_tryorder_saved_tryorder	_browsers_saved_browsersr   r   r   r
   setUp   s    zBrowserRegistrationTest.setUpc                 C   s   | j t_| jt_d S rL   )rN   r+   rM   rP   rO   r   r   r   r
   tearDown   s    z BrowserRegistrationTest.tearDownc                 C   s   G dd d}g }i }|  tj| |  tj| td| dg}|d g|d< |  tj| |  tj| | }|d urtjd|||d ntd|| |rddg}nddg}||g|d< |  tj| |  tj| d S )Nc                   @   s   e Zd ZdS )zCBrowserRegistrationTest._check_registration.<locals>.ExampleBrowserNr   r   r   r   r   r   r
   ExampleBrowser   s   rT   Example1example1Zexample2	preferred)r   r+   rM   rO   register)r	   rX   rT   Zexpected_tryorderZexpected_browsersinstancer   r   r
   _check_registration   s,    

z+BrowserRegistrationTest._check_registrationc                 C   s   | j dd d S )NFrW   r[   r   r   r   r
   test_register  s    z%BrowserRegistrationTest.test_registerc                 C   s   | j d d d S )NrW   r\   r   r   r   r
   test_register_default  s    z-BrowserRegistrationTest.test_register_defaultc                 C   s   | j dd d S )NTrW   r\   r   r   r   r
   test_register_preferred  s    z/BrowserRegistrationTest.test_register_preferredN)	r   r   r   rQ   rR   r[   r]   r^   r_   r   r   r   r
   rK      s   rK   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )
ImportTestc                 C   s   t d}| |j | |j G dd d}|d| | |j | |jd d | |j | 	d|j | |jd |d g d S )Nr+   c                   @   s   e Zd ZdS )z0ImportTest.test_register.<locals>.ExampleBrowserNrS   r   r   r   r
   rT     s   rT   rU   rV   )
r   import_fresh_moduleassertIsNonerM   assertFalserO   rY   Z
assertTruer   r   )r	   r+   rT   r   r   r
   r]     s    
zImportTest.test_registerc                 C   sh   t d}| |j | |j | |j |d W d    n1 sN0    Y  | 	|j d S )Nr+   Zfakebrowser)
r   rb   rc   rM   rd   rO   ZassertRaisesErrorgetZassertIsNotNone)r	   r+   r   r   r
   test_get  s    
(zImportTest.test_getc                 C   s@   t d}tjtj }||d |	| |
tj d S )Nr+   )r   rb   ospathbasenamesys
executablelowerrY   r,   rf   )r	   r+   r   r   r   r
   test_synthesize'  s    
zImportTest.test_synthesizec              
   C   s   t d}z| j}W n8 |jtfyP } z| t| W Y d }~n
d }~0 0 t  *}||d< t d}|  W d    n1 s0    Y  d S )Nr+   BROWSER)	r   rb   rf   r   re   AttributeErrorskipTeststrEnvironmentVarGuard)r	   r+   r!   errenvr   r   r
   test_environment-  s    
$

zImportTest.test_environmentc              
   C   s  t d}z|  ||jd j}W n: |jttfyb } z| t	| W Y d }~n
d }~0 0 t 
 4}||d< t d}| | j| W d    n1 s0    Y  t 
 8}tj|d< t d}| | jtj W d    n1 s0    Y  d S )Nr+   ra   ro   )r   rb   rf   rM   r   re   rp   
IndexErrorrq   rr   rs   r   rk   rl   )r	   r+   Zleast_preferred_browserrt   ru   r   r   r
   test_environment_preferred8  s    
$

0


z%ImportTest.test_environment_preferredN)r   r   r   r]   rg   rn   rv   rx   r   r   r   r
   r`     s
   	r`   __main__)r+   Zunittestrh   rk   r   r   r   r   r$   r   Z	MagicMockr   r   ZTestCaser%   r-   r.   r;   r<   rE   rH   rI   rK   r`   r   mainr   r   r   r
   <module>   s,   	

5<
