o
    .j                      @   s  d Z ddlZddlZzddlmZ W n ey#   G dd deZY nw ddlmZmZm	Z	m
Z
 ddlZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dd	 Zd
d Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(d d! Z)d"d# Z*d$d% Z+d&d' Z,ej-.d(eed)d*d+d,d*ed)d*d+d,d,feed)d*d+ed)d,d-fee
d.d*d+e
d/d,d-feed)d*d+d,d*e
d.d*d+fed)d*d+d,d*e
d/d,d-ffeed)d*d+d,d+e
d.d*d+fed)d*d+d,d*e
d.d*d+ffeed)d*d+d,d+ed)d*d+d,d.fed)d*d+d,d+ed)d*d+d,d0ffee	d,d,d,e	d,d,d*fgej-.d1d2d3gej-.d4dd+gej-.d5dd+gej-.d6d7d8 e/gd9d: Z0d;d< Z1eg eed)d*d+d,d+geed)d*d+d,d+ed)d*d+ggZ2ej-.d=e2ej-.d>e2d?d@ Z3ej-.dAd+d0gdBdC Z4ej-.dDi i dEfdFdGii dHfdFdGidFdGidEfdFdGidFdGgidEfdIdGidFdGidEfdGd+dJdFdGidHfdKd+idFdGidHfgdLdM Z5dS )Nz/Test the equality and inequality of components.    N)UnknownTimeZoneErrorc                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   R/home/thesage/.local/lib/python3.10/site-packages/icalendar/tests/test_equality.pyr   
   s    r   )datedatetimetime	timedelta)Calendar	ComponentEventvBinaryvBoolean	vCategoryvDate	vDatetime	vDDDLists	vDDDTypes	vDurationvGeovPeriodvRecurvTextvTimec                 C   s   | |ksJ || ksJ dS )zMake sure both values are equalNr   actual_valueexpected_valuer   r   r   assert_equal&      r   c                 C   s   | |ksJ || ksJ dS )z#Make sure both values are not equalNr   r   r   r   r   assert_not_equal,   r    r!   c                 C   s   | j |  }t||  dS )zeEnsure that a calendar equals the same calendar.

    source -> calendar -> ics -> same calendar
    N)	__class__	from_icalto_icalr   source_filetzpcopy_of_calendarr   r   r   /test_parsed_calendars_are_equal_if_parsed_again2   s   r)   c                 C   s0   | j dkr
td t|  }t||  dS )zfEnsure that a calendar equals the same calendar.

    source -> calendar -> jcal -> same calendar
    zissue_464_invalid_rdate.icszDInvalid RDATE falls back to vBroken, which can't round-trip to jCal.N)r&   pytestskipr   	from_jcalto_jcalr   r%   r   r   r   4test_parsed_calendars_are_equal_if_parsed_again_jcal;   s   
r.   c                 C   s*   | j | j}| j | j}t|| dS )zcEnsure that a calendar equals the same calendar.

    ics -> calendar
    ics -> same calendar
    N)r"   r#   raw_icsr   )ics_filer'   cal1cal2r   r   r   3test_parsed_calendars_are_equal_if_from_same_sourceH   s   r3   c                 C   s&   t | j}t | j}t|| dS )zeEnsure that a calendar equals the same calendar.

    jcal -> calendar
    jcal -> same calendar
    N)r   r,   raw_jcalr   )	jcal_filer'   r1   r2   r   r   r   8test_parsed_calendars_are_equal_if_from_same_source_jcalS   s   r6   c                 C   sJ   |   }| j|_|   }| jdd |_t|| t||  t||  dS )zEnsure that copies are equal.N)copysubcomponentsr   )r&   r'   copy1copy2r   r   r   test_copies_are_equal^   s   

r;   c                  C   N   t  } t  }tjtddddddd}t }||g| _||g|_t| | dS )zYEnsure inequality of calendars when subcomponents are strict subset, regardless of order.           r   startN)r   r   newr	   r8   r!   )	calendar1	calendar2event1event2r   r   r   test_calendar_equality_orderi      

rH   c                  C   r<   )zZEnsure inequality of components when subcomponents are strict subset, regardless of order.r=   r>   r?   r@   r   rA   N)r   r   rC   r	   r8   r!   )
component1
component2rF   rG   r   r   r   test_component_equality_ordert   rI   rL   c                 C   s    | j jsJ | j  jrJ dS )zGIf we copy the subcomponents, assumptions around copies will be broken.N)	timezonedr8   r7   )	calendarsr'   r   r   r   %test_copy_does_not_copy_subcomponents   s   rO   c                 C   s   | j dkr| rtd tt tt	| t	|  W d   n1 s)w   Y  tt tt	| |  W d   dS 1 sGw   Y  dS )zEnsure that deep copies are equal.

    Ignore errors when a custom time zone is used.
    This is still covered by the parsing test.
    z+issue_722_timezone_transition_ambiguity.icszThis test fails for now.N)
r&   uses_zoneinfor*   r+   
contextlibsuppressr   r   r7   deepcopy)r&   r'   r   r   r   test_deep_copies_are_equal   s   

"rT   c                   C   s:   t tdtd ttdtd ttdtd dS )zCheck the equality of vGeo.)10012.33)z100.00z12.330)rU   z12.331)10rV   N)r   r   r!   r   r   r   r   	test_vGeo   s   rX   c                   C   (   t tdtd ttdtd d S )Nasdasdf)r   r   r!   r   r   r   r   test_vBinary      r\   c                   C   sF   t tdtd t tdtd ttdtd d S )NTRUEFALSE)r   r   r#   r!   r   r   r   r   test_vBoolean   s   r`   c                   C   sJ   t tdtd t tddgtddg ttddgtg d d S )NHELLOab)rb   rc   c)r   r   r!   r   r   r   r   test_vCategory   s   re   c                   C   rY   )Nra   HELLO1)r   r   r!   r   r   r   r   
test_vText   r]   rg   )v_typev1v2i     r>   
               eq==z!=cls1cls2hashc                 C   s   | S )Nr   )xr   r   r   <lambda>   s    rw   c           	      C   s   | t f| }| t f| }|dkr8||||ksJ ||||||ks(J ||||||ks6J dS ||||ksBJ ||||||ksPJ dS )zCheck equality and inequality.rr   N)r   )	rh   ri   rj   rs   rt   rq   ru   t1t2r   r   r   test_vDDDTypes_and_others   s     rz   c                   C   s    dt ttdddv sJ d S )Nr   rn   rk   r>   )reprr   r   r   r   r   r   test_repr_vDDDTypes   s    r|   l1l2c                 C   s6   | |u }t |}|| |kksJ || |kksJ dS )z*Check the equality functions of vDDDLists.N)r7   rS   )r}   r~   equalr   r   r   test_vDDDLists   s   
r   indexc                 C   s@   | d| d }| d| d }t | |  t || dS )z jcal and ical should be the samerfc_7265_appendix_example__ical_jcalN)r   r-   )rN   r   icaljcalr   r   r   2test_rfc_7265_equivalence_of_example_from_appendix   s   r   )ri   rj   r   TBYDAY1SUFbyday)r   countr   c                 C   s0   t | }t |}|rt|| dS t|| dS )z'Check the equality functions of vRecur.N)r   r   r!   )ri   rj   r   recur1recur2r   r   r   test_v_recur_equal   s
   r   )6__doc__rQ   r7   pytzr   ImportError	Exceptionr	   r   r
   r   r*   	icalendarr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r)   r.   r3   r6   r;   rH   rL   rO   rT   rX   r\   r`   re   rg   markparametrizeru   rz   r|   vDDDLists_examplesr   r   r   r   r   r   r   <module>   s    H	 
