o
    .j(                  
   @   s  d Z ddlmZmZmZmZ ddlZddlZddlmZmZm	Z	m
Z
 ddlmZ dd Zdd	 Zd
d Zejdedd Zi ejdejdejdejdejdejdejdejdejdejdejdejdejdej dej!dej"dZ#ejde$e#% dej&de'fd d!Z(d"d# Z)d$d% Z*ejd&e	e
gejd'ed(d)d)dfed(d)d)dfed)d)dfed)d)dfgd*d+ Z+d,d- Z,d.d/ Z-d0d1 Z.d2d3 Z/d4d5 Z0d6d7 Z1ejd8g d9d:d; Z2d<d= Z3d>d? Z4d@dA Z5dS )BzCheck some module consistency.    )datedatetimetime	timedeltaN)
Parametersprop	vDDDLists	vDDDTypes)PARAMETER_NAMESc                 C   sH   | t jv sJ | tjv sJ tt | ddusJ tt| ddus"J dS )z2icalendar.prop should export all these properties.N)r   __all__	icalendargetattr)v_prop_name r   c/home/thesage/.local/lib/python3.10/site-packages/icalendar/tests/prop/test_common_functionality.pytest_all_propeties_are_exported   s   r   c                    sn      }t|tsJ dt|dksJ dt fdd|D s&J d j j j d v s5J ddS )	zCAll properties have a class method that returns a list of examples.zWe expect a list of examples.r   zWe have examples.c                 3   s    | ]}t | V  qd S )N)
isinstance).0examplev_propr   r   	<genexpr>   s    z>test_all_properties_have_an_examples_method.<locals>.<genexpr>z$All examples should be of that type.ztype is in docstringN)examplesr   listlenall__name____doc__
splitlines)r   r   r   r   r   +test_all_properties_have_an_examples_method   s   r   c                 C   s   | t jjv sJ dS )z6Check the union type captures all vProperty instances.Nr   	VPROPERTY__args__r   r   r   r   .test_all_properties_are_part_of_the_union_type!   s   r#   no_propc                 C   s   | t jjvsJ dS )zCIf these are not properties rather parameters, do not include them.Nr    )r$   r   r   r   @test_if_not_part_of_properties_they_are_not_included_in_the_type&   s   r%   BOOLEANzCAL-ADDRESSTEXTDATE	DATE-TIMEDURATIONFLOATINTEGERPERIODRECURTIMEz
UTC-OFFSETURIBINARY)r   default_valuev_prop_exampler2   c                 C   s$   | ` | j |ks	J d| jvsJ dS )z*Check the default value of all properties.VALUEN)r4   params)r3   r2   r   r   r   test_get_default_value@   s   r6   c                 C   s(   d| _ | j dks
J | jjdksJ dS )z!Test setting the VALUE parameter.zX-OTHER-VALUEN)r4   r5   valuer3   r   r   r   test_set_valueH   s   r9   c                 C   s>   d| _ | ` | j dksJ |tv r| j t| ksJ ddS dS )z%The value is defaulting after delete.zX-VALUEzdeleted value defaultsN)r4   default_value_map)r3   r   r   r   r   test_delete_the_set_valueO   s   r;   r   )dtr7        c                 C   s   | |j |ks	J dS )z7Check that the VALUE parameter is correctly determined.Nr4   )r   r<   r7   r   r   r   test_dt_valueZ   s   r@   c                   C   s   t g jdks	J dS )z,If the list is empty, we still need a value.r)   N)r   r4   r   r   r   r   test_special_case_no_dtsi   s   rA   c                   C   sN   t tdddtddfgjdksJ ttdddtddfjdks%J dS )z)Check PERIOD for vDDDLists and vDDDTypes.r=   r>   r-   N)r   r   r   r4   r	   r   r   r   r   special_case_periodn   s   &(rB   c                  C   s"   t  } d| d< |  i ksJ dS )z.The VALUE parameter should not turn up if set.r)   r4   N)r   to_jcal)r5   r   r   r   -test_value_parameter_does_not_turn_up_in_jcalt   s   rD   c                 C   s   d| _ | j dks
J dS z/The VALUE parameter should always be uppercase.unknownUNKNOWNNr?   r8   r   r   r   test_value_is_always_uppercase{   s   rH   c                  C   s   t  } d| _| jdksJ dS rE   )r   r7   
parametersr   r   r   )test_setting_the_value_turns_it_uppercase   s   rK   c                  C   s8   t d tddi} | jdksJ | d dksJ dS )z-The default value should always be uppercase.z@TODO at a later stage when the __init__ function is implemented.r4   unknown1UNKNOWN1N)pytestskipr   r7   rI   r   r   r   &test_default_value_is_always_uppercase   s   
rP   	attribute)r4   rC   to_icalc                 C   s$   t | |sJ | j d| ddS )z;Check that common functionality is provided by all of them.z* is missing a function or property named "z".N)hasattrr   )r   rQ   r   r   r   test_common_methods   s   rT   c                 C   sH   |   D ]}|tjjv sJ d| d|| jv s!J d| dqdS )zDCheck that all values types added are also part of the TypesFactory.The value type z is not part of VPROPERTY.z is not part of TypesFactory.N)valuesr   r!   r"   	all_types)types_factoryr7   r   r   r   (test_all_possible_value_types_are_listed   s   

rY   c                 C   s   | |j v sJ d|  ddS )z<Check that all vProperty types are part of the TypesFactory.rU   z' is not part of TypesFactory.all_types.N)rW   )r   rX   r   r   r   'test_all_value_types_are_in_the_factory   s   
rZ   c                 C   s   |  d|  du sJ dS )z)Check that the result is always the same.VCUSTOMN)get_component_class)component_factoryr   r   r   )test_an_new_component_class_is_registered   s
   r^   )6r   r   r   r   r   rN   r   r   r   r   r	   icalendar.tests.datar
   r   r   r#   markparametrizer%   vBooleanvCalAddress	vCategoryvDate	vDatetime	vDurationvFloatvIntvPeriodvRecurvTextvTime
vUTCOffsetvUrivBinaryvGeor:   r   itemsr!   strr6   r9   r;   r@   rA   rB   rD   rH   rK   rP   rT   rY   rZ   r^   r   r   r   r   <module>   s    
	
	
