o
    .j                     @  sr   d Z ddlmZ ddlZddlmZmZ G dd dZG dd dZG d	d
 d
Z	G dd dZ
G dd dZdS )z4Tests for vCard ADR (Address) property per RFC 6350.    )annotationsN)	AdrFieldsvAdrc                   @  s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )TestVAdrCreationz$Test vAdr creation and field access.c              
   C  s,   t d}|jtddddddddksJ d	S )
z"Create ADR from tuple of 7 fields. r   123 Main StSpringfieldIL62701USAr   r   r	   r
   r   r   )po_boxextendedstreetlocalityregionpostal_codecountryN)r   fieldsr   selfadr r   ]/home/thesage/.local/lib/python3.10/site-packages/icalendar/tests/rfc_6350_vcard/test_vAdr.pytest_adr_creation_with_tuple   s   z-TestVAdrCreation.test_adr_creation_with_tuplec                 C  s    t g d}|jjdksJ dS )z!Create ADR from list of 7 fields.r   r   N)r   r   r   r   r   r   r   test_adr_creation_with_list   s   z,TestVAdrCreation.test_adr_creation_with_listc                 C  s,   t d}|jjdksJ |jjdksJ dS )z$Create ADR from vCard format string.&;;123 Main St;Springfield;IL;62701;USAr   r	   N)r   r   r   r   r   r   r   r   test_adr_creation_with_string      z.TestVAdrCreation.test_adr_creation_with_stringc                 C  s.   t ddddddd}t|}|j|u sJ dS )z&Create ADR from AdrFields named tuple.r   r   r	   r
   r   r   N)r   r   r   )r   r   r   r   r   r    test_adr_creation_with_adrfields%   s   z1TestVAdrCreation.test_adr_creation_with_adrfieldsc                 C  s<   t jtdd td W d   dS 1 sw   Y  dS )zADR must have exactly 7 fields.zexactly 7 fields)match)toofewN)pytestraises
ValueErrorr   )r   r   r   r   test_adr_requires_7_fields+   s   
"z+TestVAdrCreation.test_adr_requires_7_fieldsc                 C  s|   t d}|jjdksJ |jjdksJ |jjdksJ |jjdks$J |jjdks,J |jjdks4J |jjdks<J d	S )
zAccess ADR fields by name.PO Box 1	Suite 200r   CityState12345r   r(   r)   r   r*   r+   r,   r   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   test_adr_named_field_access0   s   z,TestVAdrCreation.test_adr_named_field_accessN)
__name__
__module____qualname____doc__r   r   r   r   r&   r-   r   r   r   r   r   
   s    r   c                   @  s(   e Zd ZdZdd Zdd Zdd ZdS )	TestVAdrSerializationz Test vAdr to_ical and from_ical.c                 C  s    t d}| }|dksJ dS )z1ADR to_ical generates semicolon-separated format.r   s&   ;;123 Main St;Springfield;IL;62701;USANr   to_ical)r   r   resultr   r   r   test_adr_to_icalA      z&TestVAdrSerialization.test_adr_to_icalc              	   C  s8   t d}t|tsJ |tdddddddksJ dS )	zParse ADR from vCard format.r   r   r   r	   r
   r   r   N)r   	from_ical
isinstancer   )r   r5   r   r   r   test_adr_from_icalG   s
   
z(TestVAdrSerialization.test_adr_from_icalc                 C  s>   t ddddddd}t|}| }t|}||ksJ dS )z6ADR survives round-trip through to_ical and from_ical.r   r   r	   r
   r   r   N)r   r   r4   r8   )r   originalr   icalparsedr   r   r   test_adr_round_tripO   s
   
z)TestVAdrSerialization.test_adr_round_tripN)r.   r/   r0   r1   r6   r:   r>   r   r   r   r   r2   >   s
    r2   c                   @  s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )TestVAdrEscapingzTest vAdr escaping behavior.c                 C  s2   t d}| }d|vsJ |ddksJ dS )z4Semicolons in ADR are field separators, not escaped.r'      \;   ;   N)r   r4   countr   r   r<   r   r   r   -test_adr_semicolons_not_escaped_as_separators[   s   z>TestVAdrEscaping.test_adr_semicolons_not_escaped_as_separatorsc                 C  s    t d}| }d|v sJ dS )z%Commas within ADR fields ARE escaped.)r   r   z123 Main St, Apt 4r	   r
   r   r   s   \,Nr3   rD   r   r   r   $test_adr_commas_in_field_are_escapede   r7   z5TestVAdrEscaping.test_adr_commas_in_field_are_escapedc                 C  sJ   t d}| }d|v sJ |ddksJ t |}|jdks#J dS )z/Semicolons within ADR field values ARE escaped.)r   r   123 Main St; Apt 4r	   r
   r   r   r@   rA      rG   N)r   r4   rC   r8   r   r   r   r<   r=   r   r   r   (test_adr_semicolons_in_field_are_escapedk   s   
z9TestVAdrEscaping.test_adr_semicolons_in_field_are_escapedc                 C  sH   t d}| }t |}|jdksJ |jdksJ |jdks"J dS )z"Empty fields are preserved in ADR.)r   r   r   r*   r   r,   r   r   N)r   r4   r8   r   r   r   rI   r   r   r   test_adr_empty_fields_preservedw   s   
z0TestVAdrEscaping.test_adr_empty_fields_preservedN)r.   r/   r0   r1   rE   rF   rJ   rK   r   r   r   r   r?   X   s    
r?   c                   @     e Zd ZdZdd ZdS )TestVAdrIcalValuezTest vAdr ical_value property.c                 C  s,   t d}|j|jksJ t|jtsJ dS )z*ical_value property returns the AdrFields.r   N)r   
ical_valuer   r9   r   r   r   r   r   test_ical_value_returns_fields   r   z0TestVAdrIcalValue.test_ical_value_returns_fieldsN)r.   r/   r0   r1   rO   r   r   r   r   rM          rM   c                   @  rL   )TestVAdrIssue137z'Test the exact example from Issue #137.c                 C  s   d}t |}t|dksJ |jdksJ |jdksJ |jdks$J |jdks+J |jdks2J |jdks9J |j	d	ks@J t |}|
 d
}||ksQJ dS )z5Parse and round-trip the ADR example from Issue #137.z/;2822 Email HQ;Suite 2821;RFCVille;PA;1521$;USArH   r   z2822 Email HQz
Suite 2821RFCVillePAz1521$r   zutf-8N)r   r8   lenr   r   r   r   r   r   r   r4   decode)r   	adr_valuer=   r   regeneratedr   r   r   test_issue_137_example   s   
z'TestVAdrIssue137.test_issue_137_exampleN)r.   r/   r0   r1   rX   r   r   r   r   rQ      rP   rQ   )r1   
__future__r   r#   icalendar.propr   r   r   r2   r?   rM   rQ   r   r   r   r   <module>   s    4)
