a
    .b}                     @   s   d Z ddl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ZdZd	ZG d
d deZeeefddZedkr~e  dS )u%   
Dépend de websites_test_framework.
    N)List)WebsiteTestrun_and_collecttest)
TestReturn)warnzC/home/nicolas/Travail/enseignements/S1/SAE/SAE105/rendus/*/www/S105z1/home/nicolas/Travail/enseignements/S1/SAE/SAE105z/S105c                       s  e Zd Zdd Zeddded fddZed	d
dedddZedd
dedddZedd
ddedddZ	edd
ddedddZ
edd
ddedddZedddedddZedddedd d!Zed"d
dedd#d$Z  ZS )%S105WebsiteTestc                    sT   z| j d d}W n& ty:   tdt| j  d}Y n0  fdd|dD S )Nauteurs.txtutf8Pas de fichier auteurs.txt c                    s   g | ]}|    r qS  )strip.0lineauthorr   a/home/manager/.local/lib/python3.9/site-packages/websites_test_framework/scripts/evaluate_S105.py
<listcomp>       z/S105WebsiteTest.get_authors.<locals>.<listcomp>
)path	read_textFileNotFoundErrorr   strsplitselfZfile_contentr   r   r   get_authors   s    
zS105WebsiteTest.get_authorsz
Broken URLr   )titleweight)returnc                    s
   t   S N)supertest_broken_url_in_htmlr   	__class__r   r   r%      s    z'S105WebsiteTest.test_broken_url_in_htmlr	         ?c                 C   s\   z| j d d}W n ty0   ddgf Y S 0 tdd |dD rTddgfS d	g fS )
Nr	   r
   r   r   c                 s   s   | ]}t d |V  qdS )z\dN)researchr   r   r   r   	<genexpr>(   r   z?S105WebsiteTest.test_authors_file_conformity.<locals>.<genexpr>r   zContenu incorrect (chiffre)   )r   r   r   anyr   r   r   r   r   test_authors_file_conformity"   s    
z,S105WebsiteTest.test_authors_file_conformityz1 seule pagec                 C   s@   t | jjdkrddgfS | jjd jjdkr8ddgfS dg fS )Nr-   r   Plusieurs pages HTMLz
index.htmlg      ?zNom incorrect)lenwebsite
html_filesr   namer&   r   r   r   test_une_seule_page,   s
    

z#S105WebsiteTest.test_une_seule_pagezinput typesT)r    r!   relativec                 C   sD   t | jjdkrddgfS | jjd jd}t dd |D g fS )Nr-   r   r0   inputc                 S   s   h | ]}| d qS type)get)r   tagr   r   r   	<setcomp>9   r   z=S105WebsiteTest.test_input_types_diversity.<locals>.<setcomp>)r1   r2   r3   	structurefind_all)r   
input_tagsr   r   r   test_input_types_diversity4   s    
z*S105WebsiteTest.test_input_types_diversityzinput attributesc                 C   sX   t | jjdkrddgfS | jjd jd}t }|D ]}|t|jO }q8t |g fS )Nr-   r   r0   r7   r1   r2   r3   r=   r>   setattrs)r   r?   rC   r;   r   r   r   test_input_attrs_diversity;   s    
z*S105WebsiteTest.test_input_attrs_diversityzspecific attributesc                 C   s   t | jjdkrddgfS | jjd jd}t }|D ]}|t|jO }q8dd|v  dd|v   dd	|v   d
|v  d|v  }|d g fS )Nr-   r   r0   r7      patternplaceholder   requiredminmax
   rA   )r   r?   rC   r;   scorer   r   r   test_for_specific_attributesE   s"    



z,S105WebsiteTest.test_for_specific_attributeszform pseudo-eltsr-   c                    sZ   t | jjdkrddgfS d}dD ]& t fdd| jjD r"|d7 }q"|d d g fS )	Nr-   r   r0   )z:validez:invalidz	:requiredz	:optionalc                 3   s   | ]} |v V  qd S r#   r   )r   selectorZ
pseudo_eltr   r   r,   \   r   z<S105WebsiteTest.test_form_pseudo_elements.<locals>.<genexpr>r)   rE   )r1   r2   r3   r.   Zall_selectors)r   rM   r   rP   r   test_form_pseudo_elementsV   s    

z)S105WebsiteTest.test_form_pseudo_elementszform structurec              	   C   s   d}g }z| j jd jj}|d}|r2|d7 }n
|d t|dkrR|d7 }n
|d |jjd urp|d7 }|jj	d ur|d7 }|jj
d ur|d7 }|jjddds|jd	r|d7 }W n ttfy   Y n0 |d
 |fS )Nr   formr-   zNo <form> !z!There should be only one <form> !r7   submitr8   button   )r2   r3   r=   htmlr>   appendr1   rR   fieldsetr7   labelfindAttributeError
IndexError)r   rM   logrV   Zformsr   r   r   	test_form`   s,    




zS105WebsiteTest.test_formZLabelsc              	   C   s   d}g }z| j jd jj}d}d}|jdD ]L}|d7 }|jd}t|jjd|ddkrh|d7 }q.|j	d ur.|d7 }q.|dkr|| }W n t
tfy   Y n0 ||fS )Nr   rY   r-   forr7   )id)r2   r3   r=   rV   rR   r>   rC   r:   r1   r7   r[   r\   )r   rM   r]   rV   ZgoodtotalrY   Zfor_r   r   r   test_label_linked_to_input{   s$    


z*S105WebsiteTest.test_label_linked_to_input)__name__
__module____qualname__r   r   r   r%   r/   r5   r@   rD   rN   rQ   r^   rb   __classcell__r   r   r'   r   r      s&   	

	
	
	

r   c                 C   s   t t| || d S r#   )r   r   )r   outputZpath_on_serverr   r   r   main   s    rh   __main__)__doc__r*   typingr   Zwebsites_test_frameworkr   r   r   Z$websites_test_framework.custom_typesr   Zwebsites_test_framework.toolsr   ZWEBSITES_PATHZ
OUTPUT_DIRZPATH_ON_SERVERr   rh   rc   r   r   r   r   <module>   s    