+
    ¾¾j»<  ã                   ó¾   € R t ^ RIHtHtHt ^ RIt^ RIHtHt ^ RIH	t	H
t
  ! R R4      t ! R R4      t ! R	 R
4      t ! R R4      t ! R R4      t ! R R4      tR# )aR  Tests for issue #860: Improved setters for start/duration/end.

This test suite defines the desired behavior for the improved setter implementations
as described in https://github.com/collective/icalendar/issues/860

The tests ensure RFC 5545 compliance, proper property locking mechanisms,
and backward compatibility with existing code.
)ÚdateÚdatetimeÚ	timedeltaN)ÚEventÚTodo)ÚIncompleteComponentÚInvalidCalendarc                   ó<   a € ] tR t^t o RtR tR tR tR tRt	V t
R# )ÚTestDurationSetterz+Test the new duration setter functionality.c                óŽ  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        R^^^^ 4      Vn        \        ^R7      Vn        VP                  \        R^^^^ 4      8X  g   Q hVP                  \        R^^^^ 4      8X  g   Q hVP                  \        ^R7      8X  g   Q hRV9   g   Q hRV9  g   Q hR# )z;Test setting duration with start locked (default behavior).ÚUIDztest-duration-setteréê  ©ÚhoursÚDURATIONÚDTENDN©r   Úaddr   ÚstartÚendr   Úduration©ÚselfÚevents   & Ún/home/ralf/ical-fahrzeuge/venv/lib/python3.14/site-packages/icalendar/tests/test_issue_860_improved_setters.pyÚ,test_event_duration_setter_with_start_lockedÚ?TestDurationSetter.test_event_duration_setter_with_start_locked   s¿   € ä“ˆØ�	‰	�%Ð/Ô0Ü˜t Q¨¨2¨qÓ1ˆŒÜ˜T 1 a¨¨QÓ/ˆŒ	ô #¨Ô+ˆŒà�{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9Ø�y‰yœH T¨1¨a°°QÓ7Ô7Ð7Ð7Ø�~‰~¤°Ô!3Ô3Ð3Ð3Ø˜UÔ"Ð"Ð"Ø˜eÔ#Ð#Ò#ó    c                ó2  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        R^^^^ 4      Vn        RV9   g   Q hRV9  g   Q h\        ^R7      Vn        RV9   g   Q hRV9  g   Q hVP                  \        ^R7      8X  g   Q hR# )zGTest that setting duration creates DURATION property and removes DTEND.r   ztest-duration-propertyr   r   r   r   Nr   r   s   & r   Ú4test_event_duration_setter_creates_duration_propertyÚGTestDurationSetter.test_event_duration_setter_creates_duration_property%   sŸ   € ä“ˆØ�	‰	�%Ð1Ô2Ü˜t Q¨¨2¨qÓ1ˆŒÜ˜T 1 a¨¨QÓ/ˆŒ	ð ˜%ÔÐÐØ Ô&Ð&Ð&ô #¨Ô+ˆŒà˜UÔ"Ð"Ð"Ø˜eÔ#Ð#Ð#Ø�~‰~¤°Ô!3Ô3Ð3Ò3r   c                óŽ  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        R^^^^ 4      Vn        \        ^R7      Vn        VP                  \        R^^^^ 4      8X  g   Q hVP                  \        R^^^^ 4      8X  g   Q hVP                  \        ^R7      8X  g   Q hRV9   g   Q hRV9  g   Q hR# )z1Test setting duration for Todo with start locked.r   ztest-todo-durationr   r   r   ÚDUEN)r   r   r   r   r   r   r   ©r   Útodos   & r   Ú+test_todo_duration_setter_with_start_lockedÚ>TestDurationSetter.test_todo_duration_setter_with_start_locked7   s¿   € ä‹vˆØ�‰�Ð,Ô-Ü˜d A q¨"¨aÓ0ˆŒ
Ü˜D ! Q¨¨AÓ.ˆŒô "¨Ô*ˆŒà�z‰zœX d¨A¨q°"°aÓ8Ô8Ð8Ð8Ø�x‰xœ8 D¨!¨Q°°AÓ6Ô6Ð6Ð6Ø�}‰}¤	°Ô 2Ô2Ð2Ð2Ø˜TÔ!Ð!Ð!Ø˜DÔ Ð Ò r   c                óÞ   € \        4       pVP                  RR4       \        P                  ! \        4      ;_uu_ 4        \        ^R7      Vn        RRR4       R#   + '       g   i     R# ; i)zBTest that setting duration without start raises appropriate error.r   ztest-no-startr   N)r   r   ÚpytestÚraisesr   r   r   r   s   & r   Ú/test_duration_setter_without_start_raises_errorÚBTestDurationSetter.test_duration_setter_without_start_raises_errorG   sB   € ä“ˆØ�	‰	�%˜Ô)ä�]Š]Ô.×/Õ/Ü&¨QÔ/ˆEŒN÷ 0×/×/Ò/ús   ¿AÁA,	© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r%   r*   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r
   r
      s!   ø‡ € Ù5ò$ò 4ò$!÷ 0ð 0r   r
   c                   óN   a € ] tR t^Pt o RtR tR tR tR tR t	R t
R tR	tV tR
# )ÚTestExplicitLockingMethodszITest the explicit locking methods set_start(), set_end(), set_duration().c                ó~  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        R^^^^ 4      Vn        VP                  \        ^R7      4       VP                  \        R^^^^ 4      8X  g   Q hVP                  \        R^^^^ 4      8X  g   Q hVP                  \        ^R7      8X  g   Q hR# )z0Test set_duration() with start locked (default).r   ztest-set-durationr   r   N©r   r   r   r   r   Úset_durationr   r   r   s   & r   Ú#test_set_duration_with_start_lockedÚ>TestExplicitLockingMethods.test_set_duration_with_start_lockedS   sª   € ä“ˆØ�	‰	�%Ð,Ô-Ü˜t Q¨¨2¨qÓ1ˆŒÜ˜T 1 a¨¨QÓ/ˆŒ	ð 	×Ñœ9¨1Ô-Ô.à�{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9Ø�y‰yœH T¨1¨a°°QÓ7Ô7Ð7Ð7Ø�~‰~¤°Ô!3Ô3Ð3Ò3r   c                ó‚  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        R^^^^ 4      Vn        VP                  \        ^R7      RR7       VP                  \        R^^^^ 4      8X  g   Q hVP                  \        R^^^^ 4      8X  g   Q hVP                  \        ^R7      8X  g   Q hR# )z$Test set_duration() with end locked.r   ztest-set-duration-end-lockedr   r   r   ©ÚlockedNr9   r   s   & r   Ú!test_set_duration_with_end_lockedÚ<TestExplicitLockingMethods.test_set_duration_with_end_lockeda   s¯   € ä“ˆØ�	‰	�%Ð7Ô8Ü˜t Q¨¨2¨qÓ1ˆŒÜ˜T 1 a¨¨QÓ/ˆŒ	ð 	×Ñœ9¨1Ô-°eÐÔ<à�{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9Ø�y‰yœH T¨1¨a°°QÓ7Ô7Ð7Ð7Ø�~‰~¤°Ô!3Ô3Ð3Ò3r   c                ó  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        R^^^^ 4      Vn        VP                  R4       RV9   g   Q hRV9  g   Q hVP                  \        ^R7      8X  g   Q hR# )z>Test set_duration() with None to convert to DURATION property.r   ztest-convert-durationr   Nr   r   r   )r   r   r   r   r   r:   r   r   r   s   & r   Ú.test_set_duration_convert_to_duration_propertyÚITestExplicitLockingMethods.test_set_duration_convert_to_duration_propertyo   sƒ   € ä“ˆØ�	‰	�%Ð0Ô1Ü˜t Q¨¨2¨qÓ1ˆŒÜ˜T 1 a¨¨QÓ/ˆŒ	ð 	×Ñ˜4Ô à˜UÔ"Ð"Ð"Ø˜eÔ#Ð#Ð#Ø�~‰~¤°Ô!3Ô3Ð3Ò3r   c           	     ó”  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        VP                  R\	        ^R7      4       VP                  \        R^^^
^ 4      4       VP                  \        R^^^
^ 4      8X  g   Q hVP                  \        R^^^^ 4      8X  g   Q hVP                  \	        ^R7      8X  g   Q hR# )z&Test set_start() with duration locked.r   ztest-set-startr   r   r   N)r   r   r   r   r   Ú	set_startr   r   r   s   & r   Ú#test_set_start_with_duration_lockedÚ>TestExplicitLockingMethods.test_set_start_with_duration_locked}   s¯   € ä“ˆØ�	‰	�%Ð)Ô*Ü˜t Q¨¨2¨qÓ1ˆŒØ�	‰	�*œi¨aÔ0Ô1ð 	�‰œ  q¨!¨R°Ó3Ô4à�{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9Ø�y‰yœH T¨1¨a°°QÓ7Ô7Ð7Ð7Ø�~‰~¤°Ô!3Ô3Ð3Ò3r   c           	     óˆ  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        R^^^^ 4      Vn        VP                  \        R^^^
^ 4      RR7       VP                  \        R^^^
^ 4      8X  g   Q hVP                  \        R^^^^ 4      8X  g   Q hVP                  \        ^R7      8X  g   Q hR# )z!Test set_start() with end locked.r   ztest-set-start-end-lockedr   r   r>   r   N)r   r   r   r   r   rF   r   r   r   s   & r   Útest_set_start_with_end_lockedÚ9TestExplicitLockingMethods.test_set_start_with_end_locked‹   s´   € ä“ˆØ�	‰	�%Ð4Ô5Ü˜t Q¨¨2¨qÓ1ˆŒÜ˜T 1 a¨¨QÓ/ˆŒ	ð 	�‰œ  q¨!¨R°Ó3¸EˆÔBà�{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9Ø�y‰yœH T¨1¨a°°QÓ7Ô7Ð7Ð7Ø�~‰~¤°Ô!3Ô3Ð3Ò3r   c           	     ó„  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        R^^^^ 4      Vn        VP                  \        R^^^^ 4      4       VP                  \        R^^^^ 4      8X  g   Q hVP                  \        R^^^^ 4      8X  g   Q hVP                  \        ^R7      8X  g   Q hR# )z+Test set_end() with start locked (default).r   ztest-set-endr   r   N)r   r   r   r   r   Úset_endr   r   r   s   & r   Útest_set_end_with_start_lockedÚ9TestExplicitLockingMethods.test_set_end_with_start_locked™   s¯   € ä“ˆØ�	‰	�%˜Ô(Ü˜t Q¨¨2¨qÓ1ˆŒÜ˜T 1 a¨¨QÓ/ˆŒ	ð 	�‰”h˜t Q¨¨2¨qÓ1Ô2à�{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9Ø�y‰yœH T¨1¨a°°QÓ7Ô7Ð7Ð7Ø�~‰~¤°Ô!3Ô3Ð3Ò3r   c           	     ó˜  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        VP                  R\	        ^R7      4       VP                  \        R^^^^ 4      RR7       VP                  \        R^^^^ 4      8X  g   Q hVP                  \        R^^^^ 4      8X  g   Q hVP                  \	        ^R7      8X  g   Q hR# )	z$Test set_end() with duration locked.r   ztest-set-end-duration-lockedr   r   r   r   r>   N)r   r   r   r   r   rM   r   r   r   s   & r   Ú!test_set_end_with_duration_lockedÚ<TestExplicitLockingMethods.test_set_end_with_duration_locked§   s³   € ä“ˆØ�	‰	�%Ð7Ô8Ü˜t Q¨¨2¨qÓ1ˆŒØ�	‰	�*œi¨aÔ0Ô1ð 	�‰”h˜t Q¨¨2¨qÓ1¸*ˆÔEà�{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9Ø�y‰yœH T¨1¨a°°QÓ7Ô7Ð7Ð7Ø�~‰~¤°Ô!3Ô3Ð3Ò3r   r,   N)r-   r.   r/   r0   r1   r;   r@   rC   rG   rJ   rN   rQ   r2   r3   r4   s   @r   r7   r7   P   s0   ø‡ € ÙSò4ò4ò4ò4ò4ò4÷4ð 4r   r7   c                   ó6   a € ] tR t^¶t o RtR tR tR tRtV t	R# )ÚTestImprovedPropertySettersz7Test the improved property setters with smart defaults.c                ó€  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        VP                  R\	        ^R7      4       \        R^^^
^ 4      Vn        VP                  \        R^^^
^ 4      8X  g   Q hVP
                  \        R^^^^ 4      8X  g   Q hVP                  \	        ^R7      8X  g   Q hR# )zGTest start setter when DURATION property exists (should lock duration).r   ztest-start-durationr   r   r   N©r   r   r   r   r   r   r   r   s   & r   Ú(test_start_setter_with_duration_propertyÚDTestImprovedPropertySetters.test_start_setter_with_duration_property¹   sª   € ä“ˆØ�	‰	�%Ð.Ô/Ü˜t Q¨¨2¨qÓ1ˆŒØ�	‰	�*œi¨aÔ0Ô1ô ˜t Q¨¨2¨qÓ1ˆŒà�{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9Ø�y‰yœH T¨1¨a°°QÓ7Ô7Ð7Ð7Ø�~‰~¤°Ô!3Ô3Ð3Ò3r   c                óp  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        R^^^^ 4      Vn        \        R^^^
^ 4      Vn        VP                  \        R^^^
^ 4      8X  g   Q hVP                  \        R^^^^ 4      8X  g   Q hVP
                  \        ^R7      8X  g   Q hR# )z?Test start setter when DTEND property exists (should lock end).r   ztest-start-dtendr   r   N©r   r   r   r   r   r   r   r   s   & r   Ú%test_start_setter_with_dtend_propertyÚATestImprovedPropertySetters.test_start_setter_with_dtend_propertyÇ   s«   € ä“ˆØ�	‰	�%Ð+Ô,Ü˜t Q¨¨2¨qÓ1ˆŒÜ˜T 1 a¨¨QÓ/ˆŒ	ô ˜t Q¨¨2¨qÓ1ˆŒà�{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9Ø�y‰yœH T¨1¨a°°QÓ7Ô7Ð7Ð7Ø�~‰~¤°Ô!3Ô3Ð3Ò3r   c                ó¤  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        VP                  R\	        ^R7      4       \        R^^^^ 4      Vn        VP                  \        R^^^^ 4      8X  g   Q hVP
                  \        R^^^^ 4      8X  g   Q hVP                  \	        ^R7      8X  g   Q hRV9   g   Q hRV9  g   Q hR# )zGTest end setter when DURATION property exists (should remove DURATION).r   ztest-end-durationr   r   r   r   NrV   r   s   & r   Ú&test_end_setter_with_duration_propertyÚBTestImprovedPropertySetters.test_end_setter_with_duration_propertyÕ   sÆ   € ä“ˆØ�	‰	�%Ð,Ô-Ü˜t Q¨¨2¨qÓ1ˆŒØ�	‰	�*œi¨aÔ0Ô1ô ˜T 1 a¨¨QÓ/ˆŒ	à�{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9Ø�y‰yœH T¨1¨a°°QÓ7Ô7Ð7Ð7Ø�~‰~¤°Ô!3Ô3Ð3Ð3Ø˜%ÔÐÐØ Ô&Ð&Ò&r   r,   N)
r-   r.   r/   r0   r1   rW   r[   r^   r2   r3   r4   s   @r   rT   rT   ¶   s   ø‡ € ÙAò4ò4÷'ð 'r   rT   c                   ó6   a € ] tR t^æt o RtR tR tR tRtV t	R# )ÚTestRFCCompliancez<Test that the improved setters maintain RFC 5545 compliance.c                ó   € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        R^^^^ 4      Vn        \        ^R7      Vn        RV9   g   Q hRV9  g   Q h\        R^^^^ 4      Vn        RV9   g   Q hRV9  g   Q hR# )z4Test that DTEND and DURATION are mutually exclusive.r   ztest-mutual-exclusionr   r   r   r   Nr   r   s   & r   Ú(test_dtend_and_duration_mutual_exclusionÚ:TestRFCCompliance.test_dtend_and_duration_mutual_exclusioné   sœ   € ä“ˆØ�	‰	�%Ð0Ô1Ü˜t Q¨¨2¨qÓ1ˆŒÜ˜T 1 a¨¨QÓ/ˆŒ	ô #¨Ô+ˆŒØ˜UÔ"Ð"Ð"Ø˜eÔ#Ð#Ð#ô ˜T 1 a¨¨QÓ/ˆŒ	Ø˜%ÔÐÐØ Ô&Ð&Ò&r   c                ó\  € \        4       pVP                  RR4       \        R^^4      Vn        \        P
                  ! \        4      ;_uu_ 4        \        ^R7      Vn        RRR4       \        ^R7      Vn        VP                  \        ^R7      8X  g   Q hR#   + '       g   i     L@; i)z=Test that date DTSTART with time-based DURATION raises error.r   ztest-date-durationr   r   N)Údays)	r   r   r   r   r(   r)   r   r   r   r   s   & r   Útest_date_duration_validationÚ/TestRFCCompliance.test_date_duration_validationú   sx   € ä“ˆØ�	‰	�%Ð-Ô.Ü˜4  AÓ&ˆŒô �]Š]œ?×+Õ+Ü&¨QÔ/ˆEŒN÷ ,ô #¨Ô*ˆŒØ�~‰~¤°Ô!2Ô2Ð2Ò2÷ ,×+ús   ÁBÂB+	c                ó   € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \	        R^^4      Vn        \        P                  ! \        4      ;_uu_ 4        VP
                  pRRR4       R#   + '       g   i     R# ; i)z0Test that DTSTART and DTEND must have same type.r   ztest-type-consistencyr   N)	r   r   r   r   r   r   r(   r)   r   )r   r   Ú_s   &  r   Útest_datetime_type_consistencyÚ0TestRFCCompliance.test_datetime_type_consistency  se   € ä“ˆØ�	‰	�%Ð0Ô1Ü˜t Q¨¨2¨qÓ1ˆŒô ˜˜q !Ó$ˆŒ	Ü�]Š]œ?×+Õ+Ø—	‘	ˆA÷ ,×+×+Ò+ús   Á%A<Á<B	r,   N)
r-   r.   r/   r0   r1   rc   rg   rk   r2   r3   r4   s   @r   ra   ra   æ   s   ø‡ € ÙFò'ò"3÷	ð 	r   ra   c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚTestBackwardCompatibilityi  z?Test that the improved setters maintain backward compatibility.c                óH  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        R^^^^ 4      Vn        VP                  \        R^^^^ 4      8X  g   Q hVP                  \        R^^^^ 4      8X  g   Q hVP
                  \        ^R7      8X  g   Q hR# )z4Test that existing simple usage patterns still work.r   ztest-backward-compatr   r   NrZ   r   s   & r   Ú&test_existing_simple_usage_still_worksÚ@TestBackwardCompatibility.test_existing_simple_usage_still_works  s—   € ä“ˆØ�	‰	�%Ð/Ô0ô ˜t Q¨¨2¨qÓ1ˆŒÜ˜T 1 a¨¨QÓ/ˆŒ	à�{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9Ø�y‰yœH T¨1¨a°°QÓ7Ô7Ð7Ð7Ø�~‰~¤°Ô!3Ô3Ð3Ò3r   c                ó¸  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        VP                  R\	        ^R7      4       VP
                  f   Q hVP                  f   Q hVP                  e   Q hVP                  \        R^^^^ 4      8X  g   Q hVP                  \        R^^^^ 4      8X  g   Q hVP                  \	        ^R7      8X  g   Q hR# )z-Test that property access remains compatible.r   ztest-property-accessr   r   r   N)
r   r   r   r   r   ÚDTSTARTr   r   r   r   r   s   & r   Ú"test_property_access_compatibilityÚ<TestBackwardCompatibility.test_property_access_compatibility$  sÈ   € ä“ˆØ�	‰	�%Ð/Ô0Ü˜t Q¨¨2¨qÓ1ˆŒØ�	‰	�*œi¨aÔ0Ô1ð �}‰}Ò(Ð(Ð(Ø�~‰~Ò)Ð)Ð)Ø�{‰{Ò"Ð"Ð"ð �{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9Ø�y‰yœH T¨1¨a°°QÓ7Ô7Ð7Ð7Ø�~‰~¤°Ô!3Ô3Ð3Ò3r   r,   N)	r-   r.   r/   r0   r1   rp   rt   r2   r3   r4   s   @r   rn   rn     s   ø‡ € ÙIò4÷4ð 4r   rn   c                   óN   a € ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
tV tR# )ÚTestErrorConditionsi6  z;Test error conditions and edge cases for improved coverage.c                ó"  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        P
                  ! \        RR7      ;_uu_ 4        VP                  \        ^R7      RR7       R	R	R	4       R	#   + '       g   i     R	# ; i)
ú9Test that invalid locked values raise appropriate errors.r   útest-invalid-lockedr   ú.locked must be 'start' or 'end', not 'invalid'©Úmatchr   Úinvalidr>   N)	r   r   r   r   r(   r)   Ú
ValueErrorr:   r   r   s   & r   Ú&test_set_duration_invalid_locked_valueÚ:TestErrorConditions.test_set_duration_invalid_locked_value9  sr   € ä“ˆØ�	‰	�%Ð.Ô/Ü˜t Q¨¨2¨qÓ1ˆŒä�]Š]ÜÐN÷
ö 
ð ×Ñœy¨qÔ1¸)ÐÔD÷
÷ 
÷ 
ò 
ús   ÁA=Á=B	c                ó(  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        P
                  ! \        RR7      ;_uu_ 4        VP                  \        R^^^^ 4      RR7       RRR4       R#   + '       g   i     R# ; i)	ry   r   rz   r   ú8locked must be 'duration', 'end', or None, not 'invalid'r|   r~   r>   N)r   r   r   r   r(   r)   r   rF   r   s   & r   Ú#test_set_start_invalid_locked_valueÚ7TestErrorConditions.test_set_start_invalid_locked_valueD  sw   € ä“ˆØ�	‰	�%Ð.Ô/Ü˜t Q¨¨2¨qÓ1ˆŒä�]Š]ÜÐX÷
ö 
ð �O‰OœH T¨1¨a°°QÓ7À	ˆOÔJ÷
÷ 
÷ 
ò 
úó   Á!B Â B	c                ó(  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        P
                  ! \        RR7      ;_uu_ 4        VP                  \        R^^^^ 4      RR7       RRR4       R#   + '       g   i     R# ; i)	ry   r   rz   r   ú3locked must be 'start' or 'duration', not 'invalid'r|   r~   r>   N)r   r   r   r   r(   r)   r   rM   r   s   & r   Ú!test_set_end_invalid_locked_valueÚ5TestErrorConditions.test_set_end_invalid_locked_valueO  sw   € ä“ˆØ�	‰	�%Ð.Ô/Ü˜t Q¨¨2¨qÓ1ˆŒä�]Š]ÜÐS÷
ö 
ð �M‰Mœ( 4¨¨A¨r°1Ó5¸iˆMÔH÷
÷ 
÷ 
ò 
úr†   c                óö   € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        P
                  ! \        RR7      ;_uu_ 4        RVn        RRR4       R#   + '       g   i     R# ; i)z0Test that duration setter rejects invalid types.r   útest-invalid-typer   zUse timedelta, not strr|   z2 hoursN)r   r   r   r   r(   r)   Ú	TypeErrorr   r   s   & r   Ú!test_duration_setter_invalid_typeÚ5TestErrorConditions.test_duration_setter_invalid_typeZ  sU   € ä“ˆØ�	‰	�%Ð,Ô-Ü˜t Q¨¨2¨qÓ1ˆŒä�]Š]œ9Ð,D×EÖEØ&ˆEŒN÷ F×E×EÒEús   ÁA'Á'A8	c                ó  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        P
                  ! \        RR7      ;_uu_ 4        VP                  RRR7       R	R	R	4       R	#   + '       g   i     R	# ; i)
z-Test that set_duration rejects invalid types.r   rŒ   r   zUse timedelta, not intr|   i   r   r>   N)r   r   r   r   r(   r)   r�   r:   r   s   & r   Útest_set_duration_invalid_typeÚ2TestErrorConditions.test_set_duration_invalid_typec  sa   € ä“ˆØ�	‰	�%Ð,Ô-Ü˜t Q¨¨2¨qÓ1ˆŒä�]Š]œ9Ð,D×EÖEØ×Ñ˜t¨GÐÔ4÷ F×E×EÒEús   ÁA3Á3B	c                ó¢  € \        4       pVP                  RR4       \        R^^^^ 4      Vn        \        P
                  ! \        RR7      ;_uu_ 4        VP                  \        ^R7      RR7       R	R	R	4       \        P
                  ! \        R
R7      ;_uu_ 4        VP                  \        R^^^^ 4      RR7       R	R	R	4       \        P
                  ! \        RR7      ;_uu_ 4        VP                  \        R^^^^ 4      RR7       R	R	R	4       R	#   + '       g   i     L¬; i  + '       g   i     Lr; i  + '       g   i     R	# ; i)z%Test error conditions for Todo class.r   ztest-todo-errorsr   r{   r|   r   r~   r>   Nrƒ   rˆ   )r   r   r   r   r(   r)   r   r:   r   rF   rM   r#   s   & r   Útest_todo_error_conditionsÚ.TestErrorConditions.test_todo_error_conditionsl  s	  € ä‹vˆØ�‰�Ð*Ô+Ü˜d A q¨"¨aÓ0ˆŒ
ô �]Š]ÜÐN÷
ö 
ð ×Ñœi¨aÔ0¸ÐÔC÷
ô
 �]Š]ÜÐX÷
ö 
ð �N‰Nœ8 D¨!¨Q°°AÓ6¸yˆNÔI÷
ô
 �]Š]ÜÐS÷
ö 
ð �L‰Lœ $¨¨1¨b°!Ó4¸YˆLÔG÷
ñ 
÷
÷ 
ú÷

÷ 
ú÷

÷ 
ð 
ús$   ÁDÂ!D*Ã,!D=ÄD'	Ä*D:	Ä=E	c           	     óæ   € \        4       pVP                  RR4       VP                  \        R^^^^ 4      RR7       VP                  \        R^^^^ 4      8X  g   Q h\        R^^^^ 4      Vn        R# )z6Test auto-detection when no existing properties exist.r   ztest-auto-detectr   Nr>   )r   r   rF   r   r   r   r   s   & r   Ú1test_set_start_auto_detect_no_existing_propertiesÚETestErrorConditions.test_set_start_auto_detect_no_existing_properties‚  sl   € ä“ˆØ�	‰	�%Ð+Ô,ð 	�‰œ  q¨!¨R°Ó3¸DˆÔAØ�{‰{œh t¨Q°°2°qÓ9Ô9Ð9Ð9ô ˜T 1 a¨¨QÓ/ˆŽ	r   r,   N)r-   r.   r/   r0   r1   r€   r„   r‰   rŽ   r‘   r”   r—   r2   r3   r4   s   @r   rw   rw   6  s4   ø‡ € ÙEò	Eò	Kò	Iò'ò5òH÷,
0ð 
0r   rw   )r1   r   r   r   r(   Ú	icalendarr   r   Úicalendar.errorr   r   r
   r7   rT   ra   rn   rw   r,   r   r   Ú<module>r›      s`   ðñ÷ /Ñ .ã ç !ß @÷;0ñ ;0÷|c4ñ c4÷L-'ñ -'÷`+ñ +÷\4ñ 4÷DV0ó V0r   