
    Evg%                        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	 d dl
mZmZmZ d dlmZ d dlmZ d d	lmZ  G d
 d ee                    Z G d d          Z ed           G d dee                      Zd ZdS )    N)contextmanager)wraps)Path)settings)LiveServerTestCaseoverride_settingstag)classpropertyimport_string)capfirstc                        e Zd Zg ZdZdZdZdZ fdZe	d             Z
e	d             Ze	d             Zd Zd Z xZS )	SeleniumTestCaseBaseNFc                 ^   t                                          | |||          }|j        s+t          d |                                D                       s|S |j        r|j        d         }||_        |j        s|j        nd}||_        | j        |_        t          j
        |j                 }|j        dd         D ]Q}|                     | t          |          ||f||| j        |j        d          }	t          ||	j        |	           R|S  t          j        d          |          S )z
        Dynamically create new classes and add them to the test module when
        multiple browsers specs are provided (e.g. --selenium=firefox,chrome).
        c              3   d   K   | ]+\  }}|                     d           ot          |          V  ,dS )testN)
startswithcallable).0namevalues      Q/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/test/selenium.py	<genexpr>z/SeleniumTestCaseBase.__new__.<locals>.<genexpr>!   sN       )
 )
<GD%DOOF##7)
 )
 )
 )
 )
 )
    r   z0.0.0.0   N)browserhostexternal_host
__module__zNo browsers specified.)super__new__r   anyitemsbrowsersselenium_hubr   r   sysmodulesr   r   setattr__name__unittestskip)clsr   basesattrs
test_classfirst_browserr   moduler   browser_test_class	__class__s             r   r!   zSeleniumTestCaseBase.__new__   sg   
 WW__S$u==
 	S )
 )
KP;;==)
 )
 )
 &
 &
 	   	
 '/2M!.J*4*AP:??yD"JO'*'8J$ [!67F%.qrr2 Q Q%([[&w///6M#* $),):&0&;	 	
& 
&"  2 ;=OPPPP6x}566zBBBr   c                 &    t          d|z            S )Nz)selenium.webdriver.%s.webdriver.WebDriverr   r,   r   s     r   import_webdriverz%SeleniumTestCaseBase.import_webdriverD   s    H7RSSSr   c                 &    t          d|z            S )Nz%selenium.webdriver.%s.options.Optionsr   r5   s     r   import_optionsz#SeleniumTestCaseBase.import_optionsH   s    DwNOOOr   c                 R    ddl m} t          ||                                          S )Nr   )DesiredCapabilities).selenium.webdriver.common.desired_capabilitiesr:   getattrupper)r,   r   r:   s      r   get_capabilityz#SeleniumTestCaseBase.get_capabilityL   s-    VVVVVV*GMMOO<<<r   c                      |                      | j                              }| j        rI| j        xxdk    rn	xdk    rn n  |                    d           ndk    r|                    d           |S )Nchromeedgez--headless=newfirefoxz	-headless)r8   r   headlessadd_argument)selfoptionss     r   create_optionsz#SeleniumTestCaseBase.create_optionsR   s    3$%%dl3355= 	6,&XXXXX(()9::::YY((555r   c                 T   |                                  }| j        rjddlm} |                     | j                                                  D ]\  }}|                    ||           |                    | j        |          S  | 	                    | j                  |          S )Nr   )	webdriver)command_executorrF   )rF   )
rG   r%   seleniumrI   r>   r   r#   set_capabilityRemoter6   )rE   rF   rI   keyr   s        r   create_webdriverz%SeleniumTestCaseBase.create_webdriver\   s    %%'' 	Y******"11$,??EEGG 3 3
U&&sE2222##T5FPW#XXX2t$$T\227CCCCr   )r)   r   __qualname__r$   r%   r   r   rC   r!   classmethodr6   r8   r>   rG   rO   __classcell__r3   s   @r   r   r      s        HLMGH(C (C (C (C (CT T T [T P P [P = = [=
  	D 	D 	D 	D 	D 	D 	Dr   r   c                        e Zd Zd Zd Zd ZdS )ChangeWindowSizec                 &    || _         ||f| _        d S N)rK   new_size)rE   widthheightrK   s       r   __init__zChangeWindowSize.__init__i   s     r   c                 j    | j                                         | _         | j         j        | j          | S rW   )rK   get_window_sizeold_sizeset_window_sizerX   rE   s    r   	__enter__zChangeWindowSize.__enter__m   s0    5577%%t}55r   c                 h    | j                             | j        d         | j        d                    d S )NrY   rZ   )rK   r_   r^   )rE   exc_type	exc_value	tracebacks       r   __exit__zChangeWindowSize.__exit__r   s.    %%dmG&<dmH>UVVVVVr   N)r)   r   rP   r[   ra   rf    r   r   rU   rU   h   sF        ( ( (  
W W W W Wr   rU   rK   c                   D    e Zd ZdZdZdZe fd            Zed             Z	ed             Z
e fd            Zed             Zed	             Zed
             Zed             Zed             ZddddZed             Zd Zed             Zed             Z xZS )SeleniumTestCase
   NFc                     t                      j        di | | j        sd S t          | j                                                  D ]\  }}t          |d          st          | |           t          |d          D ]_}t          |          ||dd            }| d| |_
        |j         d| |_        ||_        ||_        t          | |j
        |           `d S )N_screenshot_cases)_func_casec                ~     t          | |                      5   || g|R i |cd d d            S # 1 swxY w Y   d S rW   )r<   )rE   rm   rn   argskwargss        r   r   z0SeleniumTestCase.__init_subclass__.<locals>.test   s    -u--// < <$uT;D;;;F;;< < < < < < < < < < < < < < < < < <s   266_rg   )r    __init_subclass__screenshotslist__dict__r#   hasattrdelattrr<   r   r)   rP   _screenshot_name_screenshot_caser(   )r,   rq   r   funcscreenshot_caser   r3   s         r   rs   z"SeleniumTestCase.__init_subclass__|   s,   !!++F+++ 	Fs|113344 	2 	2JD$4!455 C#*41D#E#E 2 2t,0 < < < < < $( ; ;/ ; ;'+'8$L$L?$L$L!(,%(7%T]D11112	2 	2r   c                 >    d| j         p| j        d| j        j        S )Nzhttp://:)r   r   server_threadportr,   s    r   live_server_urlz SeleniumTestCase.live_server_url   s(     !$!2!>ch!>!>@Q@V@VWWr   c                     | j         p| j        S rW   )r   r   r   s    r   allowed_hostzSeleniumTestCase.allowed_host   s     ,CH,r   c                     |                                  | _        | j                            | j                   t	                                                       |                     | j                   d S rW   )rO   rK   implicitly_waitimplicit_waitr    
setUpClassaddClassCleanup_quit_selenium)r,   r3   s    r   r   zSeleniumTestCase.setUpClass   sb    ++--$$S%6777C./////r   c              #   p   K   t          dd| j                  5  d V  d d d            d S # 1 swxY w Y   d S )Ni   i  rU   rK   r`   s    r   desktop_sizezSeleniumTestCase.desktop_size         dC77 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   +//c              #   p   K   t          dd| j                  5  d V  d d d            d S # 1 swxY w Y   d S )Ni   i   r   r`   s    r   small_screen_sizez"SeleniumTestCase.small_screen_size   r   r   c              #   p   K   t          dd| j                  5  d V  d d d            d S # 1 swxY w Y   d S )Nih  i   r   r`   s    r   mobile_sizezSeleniumTestCase.mobile_size   s      c366 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   c              #      K   |                                  5  t          t          j        d                   5  d V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N)LANGUAGE_CODE)r   r   r   LANGUAGES_BIDIr`   s    r   rtlzSeleniumTestCase.rtl   s         	 	"1H1LMMM                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s3   !A!A	A!	A	A!A	A!!A%(A%c              #   V  K   | j                             | j                   | j                             d           |                                 5  	 d V  | j                             d           n# | j                             d           w xY w	 d d d            d S # 1 swxY w Y   d S )Nz&localStorage.setItem('theme', 'dark');z!localStorage.removeItem('theme');)rK   getr   execute_scriptr   r`   s    r   darkzSeleniumTestCase.dark   s      	$.///$$%MNNN   	R 	RR,,-PQQQQ,,-PQQQQQ		R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	Rs*   BA1B1BBB"%B")mediafeaturesc                    | j         dvr|                     d           i }|||d<   |||d<   | j                            dd|d           d S )	N>   rA   r@   zEmulation.setEmulatedMedia is only supported on Chromium and Chrome-based browsers. See https://chromedevtools.github.io/devtools-protocol/1-3/Emulation/#method-setEmulatedMedia for more details.r   r   executeCdpCommandzEmulation.setEmulatedMedia)cmdparams)driver_commandr   )r   skipTestrK   execute)rE   r   r   r   s       r   set_emulated_mediaz#SeleniumTestCase.set_emulated_media   s    <111MMT  
 #F7O!)F: 	.76JJ 	 	
 	
 	
 	
 	
r   c              #     K   |                      dddg           |                                 5  	 d V  |                      dddg           n# |                      dddg           w xY w	 d d d            d S # 1 swxY w Y   d S )Nzforced-colorsactive)r   r   )r   none)r   r   r`   s    r   high_contrastzSeleniumTestCase.high_contrast   s     ?X*V*V)WXXX   	 	'''6HHI (    '''6HHI (     		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s'   A?AA?A..A??BBc                 
   | j         sd S t          | | j                  }|j         d| d|j         d}t          j                    dz  |z  }|j                            dd           | j	        
                    |           d S )Nz--z.pngrt   T)exist_okparents)rt   r<   _testMethodNamery   rz   r   cwdparentmkdirrK   save_screenshot)rE   r   r   filenamepaths        r   take_screenshotz SeleniumTestCase.take_screenshot   s     	FtT122+RRtRRt7LRRRxzzM)H44666%%d+++++r   c                 \    t          | d          r| j                                         d S d S )NrK   )rw   rK   quitr   s    r   r   zSeleniumTestCase._quit_selenium   s:    
 3
## 	 L	  	 r   c              #      K   | j                             d           	 dV  | j                             | j                   dS # | j                             | j                   w xY w)z"Disable the default implicit wait.r   N)rK   r   r   r`   s    r   disable_implicit_waitz&SeleniumTestCase.disable_implicit_wait   sj       	%%a(((	>EEEM))$*<=====DM))$*<====s   A !A$)r)   r   rP   r   r   rt   rQ   rs   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rR   rS   s   @r   ri   ri   v   s       MMK2 2 2 2 [20 X X ]X - - ]- 0 0 0 0 [0   ^   ^   ^   ^
 R R ^R +/ 
 
 
 
 
(   ^, , ,     [  > > ^> > > > >r   ri   )	metaclassc                 f     t           t                    r                     d            fd}|S )N,c                     | _         t          | ddh                    t          | dt	                                                     | S )Ntags
screenshot)rl   r(   unionr<   set)r{   method_namess    r   wrapperz!screenshot_cases.<locals>.wrapper  sB    !-f|n22743O3OPPQQQr   )
isinstancestrsplit)r   r   s   ` r   screenshot_casesr      sH    ,$$ /#))#..    
 Nr   )r&   r*   
contextlibr   	functoolsr   pathlibr   django.confr   django.testr   r   r	   django.utils.functionalr
   django.utils.module_loadingr   django.utils.textr   typer   rU   ri   r   rg   r   r   <module>r      s   



  % % % % % %                         B B B B B B B B B B 1 1 1 1 1 1 5 5 5 5 5 5 & & & & & &WD WD WD WD WD44 233 WD WD WDtW W W W W W W W ZD> D> D> D> D>)5I D> D> D> D>N	 	 	 	 	r   