U
    j                     @   s  d Z ddlmZmZmZ ddlZddlmZmZmZm	Z	m
Z
 ddlmZ ddlmZ ejee	eegddd	 Zd
d ZeedddZeedddZeedddZejdeddddddedddddfeddddddedddddfeddddddedddddfeddddedddfgejdeeegdd Zejd de gd!d" Zejd de
e gd#d$ Zd%d& Zd'd( ZdS ))z%Test common properties of components.    )datedatetime	timedeltaN)EventFreeBusyJournalTodo	vDDDTypes)	Component)InvalidCalendar)paramsc                 C   s   |   S )za component to test)param)request r   G/tmp/pip-unpacked-wheel-g40nyxg1/icalendar/tests/attr/test_component.pydtstamp_comp   s    r   c                 C   s   | j dkstdS )zWe have None as a value.N)DTSTAMPAssertionError)r   r   r   r   test_no_dtstamp   s    r   	componentvaluec                 C   s
   || _ dS )zUse the setter.N)r   r   r   r   r   set_dtstamp_attribute   s    r   c                 C   s   t || d< dS )zUse setitem.r   N)r	   r   r   r   r   set_dtstamp_item   s    r   c                 C   s   |  d| dS )zUse add.r   N)addr   r   r   r   set_dtstamp_add!   s    r   )r   timezoneexpectedi  
            zEurope/Berlin      UTCset_dtstampc           	      C   s^   |dkr|n
| ||}|| | ||}| dj}||ksL|tksLt|| jksZtdS )zSet and get the DTSTAMP value.Nr   )Zlocalizelocalize_utcgetdtr   r   r   )	r   r   r   r   tzpr%   ZdtstampZin_utc	get_valuer   r   r   test_set_value_and_get_it&   s    

r+   invalid_valuec              	   C   s:   t t}| |_W 5 Q R X |jjd d|  ks6tdS )!Check handling of invalid values.r   z%DTSTAMP takes a datetime in UTC, not N)pytestraises	TypeErrorr   r   argsr   r,   r   er   r   r   test_set_invalid_value>   s    r4   c              	   C   sJ   | |d< t t}|j W 5 Q R X |jjd dt| d|  ksFtdS )r-   r   r   z'DTSTAMP must be a datetime in UTC, not r(   N)r.   r/   r   r   r   r1   getattrr   r2   r   r   r   test_get_invalid_valueF   s    
r6   c                 C   s<   t ddd| _t ddd| _|tddd| jks8tdS )zSet the value twice.  r!      N)r   r   r&   r   r   r   r)   r   r   r   test_set_twiceR   s    r:   c                 C   s.   t ddd| _|tddd| jks*tdS )z9Check we can set LAST_MODIFIED in the same way as DTSTAMPr7   r!   r8   N)r   ZLAST_MODIFIEDr&   r   r   r9   r   r   r   test_last_modifiedY   s    r;   )__doc__r   r   r   r.   Z	icalendarr   r   r   r   r	   Zicalendar.calr
   Zicalendar.errorr   Zfixturer   r   r   r   r   markZparametrizer+   r4   r6   r:   r;   r   r   r   r   <module>   s<   
   	 

