
    g%                         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y)    N)contextmanager)wraps)Path)settings)LiveServerTestCaseoverride_settingstag)classpropertyimport_string)capfirstc                   n     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                 l   t         
|   | |||      }|j                  s t        d |j	                         D              s|S |j
                  r|j
                  d   }||_        |j                  s|j                  nd}||_        | j                  |_        t        j                  |j                     }|j
                  dd D ]T  }| j                  | t        |      ||f||| j                  |j                  d      }	t        ||	j                  |	       V |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   ^   K   | ]%  \  }}|j                  d       xr t        |       ' yw)testN)
startswithcallable).0namevalues      l/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/test/selenium.py	<genexpr>z/SeleniumTestCaseBase.__new__.<locals>.<genexpr>!   s-      )
KXKD%DOOF#77=s   +-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__   s2   
 W_S$u=
S )
KP;;=)
 &
   
 '//2M!.J*4*A*A:??yD"JO'*'8'8J$ [[!6!67F%..qr2%([[&w/6M#* $),):):&0&;&;		
&"  2 ; ;=OP 3 6x}}56zBB    c                     t        d|z        S )Nz)selenium.webdriver.%s.webdriver.WebDriverr   r+   r   s     r   import_webdriverz%SeleniumTestCaseBase.import_webdriverD   s    H7RSSr3   c                     t        d|z        S )Nz%selenium.webdriver.%s.options.Optionsr   r5   s     r   import_optionsz#SeleniumTestCaseBase.import_optionsH   s    DwNOOr3   c                 B    ddl m} t        ||j                               S )Nr   )DesiredCapabilities).selenium.webdriver.common.desired_capabilitiesr:   getattrupper)r+   r   r:   s      r   get_capabilityz#SeleniumTestCaseBase.get_capabilityL   s    V*GMMO<<r3   c                      | j                  | j                               }| j                  rF| j                  xxdk(  rnxdk(  rn n  |j                  d       |S dk(  r|j                  d       |S |S )Nchromeedgez--headless=newfirefoxz	-headless)r8   r   headlessadd_argument)selfoptionss     r   create_optionsz#SeleniumTestCaseBase.create_optionsR   se    3$%%dll35==,,&X&(()9:  ((5wr3   c                 J   | j                         }| j                  rfddlm} | j	                  | j
                        j                         D ]  \  }}|j                  ||        |j                  | j                  |      S  | j                  | 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    %%'*"11$,,?EEG
U&&sE2 H ##T5F5FPW#XX2t$$T\\27CCr3   )r(   r   __qualname__r#   r$   r   r   rC   r    classmethodr6   r8   r>   rG   rO   __classcell__r2   s   @r   r   r      sn    HLMGH(CT T T P P = =
	Dr3   r   c                       e Zd Zd Zd Zd Zy)ChangeWindowSizec                 $    || _         ||f| _        y N)rK   new_size)rE   widthheightrK   s       r   __init__zChangeWindowSize.__init__i   s     r3   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   s3    557%%%t}}5r3   c                 p    | j                   j                  | j                  d   | j                  d          y )NrY   rZ   )rK   r_   r^   )rE   exc_type	exc_value	tracebacks       r   __exit__zChangeWindowSize.__exit__r   s(    %%dmmG&<dmmH>UVr3   N)r(   r   rP   r[   ra   rf    r3   r   rU   rU   h   s    (
Wr3   rU   rK   c                        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        |   di | | j                  sy t        | j                  j                               D ]  \  }}t        |d      st        | |       t        |d      D ]^  }t        |      ||dd       }| d| |_
        |j                   d| |_        ||_        ||_        t        | |j                  |       `  y )N_screenshot_cases)_func_casec                h     t        | |             5   || g|i |cd d d        S # 1 sw Y   y xY wrW   )r<   )rE   rm   rn   argskwargss        r   r   z0SeleniumTestCase.__init_subclass__.<locals>.test   s/    -u-/$T;D;F; 0//s   (1_rg   )r   __init_subclass__screenshotslist__dict__r"   hasattrdelattrr<   r   r(   rP   _screenshot_name_screenshot_caser'   )r+   rq   r   funcscreenshot_caser   r2   s         r   rs   z"SeleniumTestCase.__init_subclass__|   s    !+F+s||1134JD$4!45C#*41D#Et,0 < < $(&/): ;'+'8'8&9?:K$L!(,%(7%T]]D1 $F 5r3   c                 j    d| j                   xs | j                  d| j                  j                  S )Nzhttp://:)r   r   server_threadportr+   s    r   live_server_urlz SeleniumTestCase.live_server_url   s+    !$!2!2!>chh!>@Q@Q@V@VWWr3   c                 6    | j                   xs | j                  S rW   )r   r   r   s    r   allowed_hostzSeleniumTestCase.allowed_host   s      ,CHH,r3   c                     | j                         | _        | j                  j                  | j                         t        |           | j                  | j                         y rW   )rO   rK   implicitly_waitimplicit_waitr   
setUpClassaddClassCleanup_quit_selenium)r+   r2   s    r   r   zSeleniumTestCase.setUpClass   sJ    ++-$$S%6%67C../r3   c              #   l   K   t        dd| j                        5  d  d d d        y # 1 sw Y   y xY ww)Ni   i  rU   rK   r`   s    r   desktop_sizezSeleniumTestCase.desktop_size   $     dC7 877   4(	414c              #   l   K   t        dd| j                        5  d  d d d        y # 1 sw Y   y xY ww)Ni   i   r   r`   s    r   small_screen_sizez"SeleniumTestCase.small_screen_size   r   r   c              #   l   K   t        dd| j                        5  d  d d d        y # 1 sw Y   y xY ww)Nih  i   r   r`   s    r   mobile_sizezSeleniumTestCase.mobile_size   s$     c36 766r   c              #      K   | j                         5  t        t        j                  d         5  d  d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)N)LANGUAGE_CODE)r   r   r   LANGUAGES_BIDIr`   s    r   rtlzSeleniumTestCase.rtl   sE      "1H1H1LM N ! MM ! s1   AAAA	AA	AAAc              #   X  K   | j                   j                  | j                         | j                   j                  d       | j	                         5  	 d  | j                   j                  d       	 d d d        y # | j                   j                  d       w xY w# 1 sw Y   y xY ww)Nz&localStorage.setItem('theme', 'dark');z!localStorage.removeItem('theme');)rK   getr   execute_scriptr   r`   s    r   darkzSeleniumTestCase.dark   s      	$../$$%MN R,,-PQ	 !  ,,-PQ	 ! s6   AB*BA>B5	B*>BBB'#B*)mediafeaturesc                    | j                   dvr| j                  d       i }|||d<   |||d<   | j                  j                  dd|d       y )	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   sk    <<11MMT
 #F7O!)F: 	.76J 	 	
r3   c              #      K   | j                  dddg       | j                         5  	 d  | j                  dddg       	 d d d        y # | j                  dddg       w xY w# 1 sw Y   y xY ww)Nzforced-colorsactive)r   r   )r   none)r   r   r`   s    r   high_contrastzSeleniumTestCase.high_contrast   s     ?X*V)WX '''6HI ( 	 !  '''6HI ( 	 ! s2   'A6A*AA*	A6A''A**A3/A6c                 ,   | j                   sy t        | | j                        }|j                   d| d|j                   d}t        j                         dz  |z  }|j                  j                  dd       | j                  j                  |       y )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    tT112++,BtfBt7L7L6MTRxxzM)H446%%d+r3   c                 R    t        | d      r| j                  j                          y y )NrK   )rw   rK   quitr   s    r   r   zSeleniumTestCase._quit_selenium   s#    
 3
#LL $r3   c              #      K   | j                   j                  d       	 d | j                   j                  | j                         y# | j                   j                  | j                         w xY ww)z"Disable the default implicit wait.r   N)rK   r   r   r`   s    r   disable_implicit_waitz&SeleniumTestCase.disable_implicit_wait   sR      	%%a(	>MM))$*<*<=DMM))$*<*<=s   A3A	 &A3	'A00A3)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 20 X X - - 0 0        
 R R +/ 
(  ,     > >r3   ri   )	metaclassc                 T     t         t              r j                  d        fd}|S )N,c                 v    | _         t        | ddhj                  t        | dt	                                  | S )Ntags
screenshot)rl   r'   unionr<   set)r{   method_namess    r   wrapperz!screenshot_cases.<locals>.wrapper  s4    !-f|n22743OPQr3   )
isinstancestrsplit)r   r   s   ` r   screenshot_casesr      s)    ,$#))#.
 Nr3   )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   r3   r   <module>r      su    
  %     B B 1 5 &WD4 23 WDtW W ZD>)5I D> D>N	r3   