3
d\8                 @   s   d Z ddlZddlmZ ddlZddlZddlmZmZmZm	Z	m
Z
 dd Z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 )z6
testing of anchors and the aliases referring to them
    N)dedent   )
round_tripr   round_trip_loadround_trip_dumpYAMLc             C   s   t t| S )N)r   r   )s r	   W/var/www/html/virt/lib64/python3.6/site-packages/srsly/tests/ruamel_yaml/test_anchor.pyload   s    r   c             C   s   t | t|kstd S )N)r   r   AssertionError)dr   r	   r	   r
   compare   s    r   c               @   s   e Zd Zdd Zdd Zdd Zdd Zejj	e
j d	kd
ddd Zdd Ze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#S )$TestAnchorsAliasesc             C   s0   ddl m} |jdksttd}t|d d S )Nr   )
Serializerzid%03dzK
        a: &id002
          b: 1
          c: 2
        d: *id002
        zK
        a: &id001
          b: 1
          c: 2
        d: *id001
        )srsly.ruamel_yaml.serializerr   ZANCHOR_TEMPLATEr   r   r   )selfr   datar	   r	   r
   test_anchor_id_renumber   s    z*TestAnchorsAliases.test_anchor_id_renumberc             C   sv   ddl m} |dst|ds$t|ds0t|ds<t|dsHt|d sVt|d	 sdt|d
 srtdS )z&test if id matches the anchor templater   )templated_idZid001Zid999Zid1000Zid0001Zid0000Zid02Zid000Zx000N)r   r   r   )r   r   r	   r	   r
   test_template_matcher2   s    z(TestAnchorsAliases.test_template_matcherc             C   sx   ddl m} td}|d }t||s*t|j d ks:t|d }t||sPt|j jdksbt|j jdksttd S )Nr   )CommentedMapz
        a: &id002
          b: 1
          c: 2
        d: *id002
        e: &etemplate
          b: 1
          c: 2
        f: *etemplate
        r   eZ	etemplateF)srsly.ruamel_yaml.commentsr   r   
isinstancer   yaml_anchorvaluealways_dump)r   r   r   r   r   r	   r	   r
   test_anchor_assignedE   s    
z'TestAnchorsAliases.test_anchor_assignedc             C   s   t d}t|d d S )Nz
        a: &id002
          b: 1
          c: 2
        d: *id002
        e: &etemplate
          b: 1
          c: 2
        f: *etemplate
        z
        a: &id001
          b: 1
          c: 2
        d: *id001
        e: &etemplate
          b: 1
          c: 2
        f: *etemplate
        )r   r   )r   r   r	   r	   r
   test_anchor_id_retained\   s
    

z*TestAnchorsAliases.test_anchor_id_retainedJythonzJython throws RepresenterError)reasonc          	   C   s2   ddl m} tj| td}|}W d Q R X d S )Nr   )ComposerErrorz_
            d: *id002
            a: &id002
              b: 1
              c: 2
            )Zsrsly.ruamel_yaml.composerr"   pytestraisesr   )r   r"   r   r	   r	   r
   test_alias_before_anchorw   s
    z+TestAnchorsAliases.test_alias_before_anchorc             C   sP   ddl m} td}|d }t||s*t|j d k	s:t|j jdksLtd S )Nr   )CommentedSeqz
        nut1: &alice
         - 1
         - 2
        nut2: &blake
         - some data
         - *alice
        nut3:
         - *blake
         - *alice
        Znut1Zalice)r   r&   r   r   r   r   r   )r   r&   r   rr	   r	   r
   test_anchor_on_sequence   s    z*TestAnchorsAliases.test_anchor_on_sequencea  
        - &CENTER {x: 1, y: 2}
        - &LEFT {x: 0, y: 2}
        - &BIG {r: 10}
        - &SMALL {r: 1}
        # All the following maps are equal:
        # Explicit keys
        - x: 1
          y: 2
          r: 10
          label: center/small
        # Merge one map
        - <<: *CENTER
          r: 10
          label: center/medium
        # Merge multiple maps
        - <<: [*CENTER, *BIG]
          label: center/big
        # Override
        - <<: [*BIG, *LEFT, *SMALL]
          x: 1
          label: center/huge
        c             C   s   t | j}|d }d}x|D ]z}xtd
D ]l}|j|}|| j|}t|tsh|jdd }|jdd }||kr&d}td	||j||| j| q&W qW |std S )N   T         /r   Fkey)r*   r+   r,   )r   
merge_yamlgetr   intsplitprintr   )r   r   r   okkoxyr	   r	   r
   test_merge_00   s    




&z TestAnchorsAliases.test_merge_00c             C   s@   ddl m}m} td}|d }t||s.tt||s<td S )Nr   )r   merge_attribz
        k: &level_2 { a: 1, b2 }
        l: &level_1 { a: 10, c: 3 }
        m:
          <<: *level_1
          c: 30
          d: 40
        m)r   r   r:   r   r   r   hasattr)r   r   r:   r   r   r	   r	   r
   test_merge_accessible   s    z(TestAnchorsAliases.test_merge_accessiblec             C   s   t | j}t|| j d S )N)r   r/   r   )r   r   r	   r	   r
   test_merge_01   s    
z TestAnchorsAliases.test_merge_01c             C   s   d}t |}d S )Nz
        a:
          <<: &content
            1: plugh
            2: plover
          0: xyzzy
        b:
          <<: *content
        )r   )r   yamlr   r	   r	   r
   test_merge_nested   s    	z$TestAnchorsAliases.test_merge_nestedc             C   s   d}t |}d S )Nz
        a:
          <<: &content
            <<: &y2
              1: plugh
            2: plover
          0: xyzzy
        b:
          <<: [*content, *y2]
        )r   )r   r?   r   r	   r	   r
   test_merge_nested_with_sequence   s    
z2TestAnchorsAliases.test_merge_nested_with_sequencec             C   s^   ddl m} | }| }||d< d|d< d|d< |jdd	d
 |d jdd	d
 t|d d S )Nr   )r   a   c   bZklmT)r   ZxyzzB
        &klm
        a: &xyz
          c: 3
        b: 2
        )r   r   Zyaml_set_anchorr   )r   r   r   Zdata_ar	   r	   r
   test_add_anchor   s    z"TestAnchorsAliases.test_add_anchorc          	   C   s2   ddl m} d}tj| t|}W d Q R X d S )Nr   )ReusedAnchorWarningzc
        - &a
          x: 1
        - <<: *a
        - &a
          x: 2
        - <<: *a
        )Zsrsly.ruamel_yaml.errorrH   r#   warnsr   )r   rH   r?   r   r	   r	   r
   test_reused_anchor  s    	z%TestAnchorsAliases.test_reused_anchorc             C   s8   t d}tjj|}|d d d d d dks4td S )Na          components:
          server: &server_component
            type: spark.server:ServerComponent
            host: 0.0.0.0
            port: 8000
          shell: &shell_component
            type: spark.shell:ShellComponent

        services:
          server: &server_service
            <<: *server_component
          shell: &shell_service
            <<: *shell_component
            components:
              server: {<<: *server_service}
        servicesshell
componentsserverporti@  )r   srslyruamel_yaml	safe_loadr   )r   ysr   r	   r	   r
   test_issue_130  s    z!TestAnchorsAliases.test_issue_130c             C   s8   t d}tjj|}|d d d d d dks4td S )Na          components:
          server: &server_component
            type: spark.server:ServerComponent
            host: 0.0.0.0
            port: 8000
          shell: &shell_component
            type: spark.shell:ShellComponent

        services:
          server: &server_service
            <<: *server_component
            port: 4000
          shell: &shell_service
            <<: *shell_component
            components:
              server: {<<: *server_service}
        rK   rL   rM   rN   rO   i  )r   rP   rQ   rR   r   )r   rS   r   r	   r	   r
   test_issue_130a3  s    z"TestAnchorsAliases.test_issue_130aN)__name__
__module____qualname__r   r   r   r   r#   markZskipifplatformpython_implementationr%   r(   r   r/   r9   r=   r>   r@   rA   rG   rJ   rT   rU   r	   r	   r	   r
   r      s&   
r   c               @   sT   e Zd Ze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S )TestMergeKeysValuesz    - &mx
      a: x1
      b: x2
      c: x3
    - &my
      a: y1
      b: y2  # masked by the one in &mx
      d: y4
    -
      a: 1
      <<: [*mx, *my]
      m: 6
    c             C   s`   ddl m} || j}t| j}d}x"|d D ]}|d7 }t|| q.W |t|d ks\td S )Nr   )rR   rE   r   )srsly.ruamel_yamlrR   yaml_strr   r3   lenr   )r   rR   r   r   countr7   r	   r	   r
   test_merge_forb  s    

z"TestMergeKeysValues.test_merge_forc             C   sd   ddl m} || j}t| j}d}x&|d j D ]}|d7 }t|| q2W |t|d ks`td S )Nr   )rR   rE   r   )r]   rR   r^   r   keysr3   r_   r   )r   rR   r   r   r`   r7   r	   r	   r
   test_merge_keysm  s    

z#TestMergeKeysValues.test_merge_keysc             C   sd   ddl m} || j}t| j}d}x&|d j D ]}|d7 }t|| q2W |t|d ks`td S )Nr   )rR   rE   r   )r]   rR   r^   r   valuesr3   r_   r   )r   rR   r   r   r`   r7   r	   r	   r
   test_merge_valuesx  s    

z%TestMergeKeysValues.test_merge_valuesc             C   sd   ddl m} || j}t| j}d}x&|d j D ]}|d7 }t|| q2W |t|d ks`td S )Nr   )rR   rE   r   )r]   rR   r^   r   itemsr3   r_   r   )r   rR   r   r   r`   r7   r	   r	   r
   test_merge_items  s    

z$TestMergeKeysValues.test_merge_itemsc             C   s   ddl m} ddlm} || j}t| j}|d j }td|d j t|d j |t| t|d j }td| t||kst	|d d= |r|d8 }t||kst	|d d	= |r|d8 }t||kst	|d d
= |r|d8 }t||kst	d S )Nr   )rR   )PY3rE   zd2 itemsrefr;   r   r   rB   )
r]   rR   Zsrsly.ruamel_yaml.compatrh   r^   r   rf   r3   r_   r   )r   rR   rh   r   r   r7   ri   r	   r	   r
   test_len_items_delete  s*    

(



z)TestMergeKeysValues.test_len_items_deletec             C   s4  ddl m} | }|jdd }x|D ]}td| q&W x|j D ]}td| qBW tdt|j  tdt|j  tdt|j  tt	| td d	|kst
i }x|D ]}|| ||< qW d	|kst
d	|j kst
|d	 d
kst
|jd	d
kst
d	t|kst
d	t|j ks0t
d S )Nr   )r   zi        anchored: &anchor
          a : 1

        mapping:
          <<: *anchor
          b: 2
        mappingr5   Zkcvz-----rB   r   )r]   r   r   r3   copylistrb   rd   rf   r_   r   __getitem__dict)r   Zcapsysr   r?   rk   r5   r7   r	   r	   r
   test_issue_196_cast_of_dict  s0    

z/TestMergeKeysValues.test_issue_196_cast_of_dictc             C   sH   ddl m} | }|jt| j}t|d j dddddgksDtd S )	Nr   )r   rE   r   r+   Zx2Zx3Zy4)r]   r   r   r   r^   rn   rd   r   )r   r   r?   r   r	   r	   r
   test_values_of_merged  s    z)TestMergeKeysValues.test_values_of_mergedc             C   st   ddl m} | }|jdd }|d dks0t|j }|d dksHttd| |d= d|ksdtd|ksptd S )Nr   )r   zY        foo: &foo
          a: a
        foo2:
          <<: *foo
          b: b
        Zfoo2rB   r   )r]   r   r   r   rm   r3   )r   r   r?   r   Zd2r	   r	   r
   test_issue_213_copy_of_merge  s    
z0TestMergeKeysValues.test_issue_213_copy_of_mergeN)rV   rW   rX   r   r^   ra   rc   re   rg   rj   rq   rr   rs   r	   r	   r	   r
   r\   M  s   (r\   c               @   s   e Zd Zdd Zdd ZdS )TestDuplicateKeyThroughAnchorc             C   s   ddl m} ddl m}m} ddlm}m} td}|d	k r>n|d
k rtj	| || W d Q R X tj	| || W d Q R X n<tj
| || W d Q R X tj
| || W d Q R X d S )Nr   )version_info)rR   r   )DuplicateKeyFutureWarningDuplicateKeyErrorz        &anchor foo:
            foo: bar
            *anchor : duplicate key
            baz: bat
            *anchor : duplicate key
           r      )r   rx   r   )r   ry   r   )r]   ru   rR   r   srsly.ruamel_yaml.constructorrv   rw   r   r#   rI   r$   )r   ru   rR   r   rv   rw   r   r	   r	   r
   test_duplicate_key_00  s     z3TestDuplicateKeyThroughAnchor.test_duplicate_key_00c             C   s~   ddl m} ddlm} td}|d	k r*nPtj| tdd}|j| W d Q R X tj| t }|j| W d Q R X d S )
Nr   )ru   )rw   z        - &name-name
          a: 1
        - &help-name
          b: 2
        - <<: *name-name
          <<: *help-name
        rx   r   safe)typ)r   rx   r   )	r]   ru   rz   rw   r   r#   r$   r   r   )r   ru   rw   r   r?   r	   r	   r
   test_duplicate_key_01
  s    
z3TestDuplicateKeyThroughAnchor.test_duplicate_key_01N)rV   rW   rX   r{   r~   r	   r	   r	   r
   rt     s   rt   c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestFullCharSetAnchorsc             C   s   d}t |}d S )Nz
        - collection: &Backend.Civilizations.RacialPerk
            items:
                  - key: perk_population_growth_modifier
        - *Backend.Civilizations.RacialPerk
        )r   )r   r^   r   r	   r	   r
   test_master_of_orion%  s    z+TestFullCharSetAnchors.test_master_of_orionc             C   s   d}t |}d S )Nza
        - &dotted.words.here
          a: 1
          b: 2
        - *dotted.words.here
        )r   )r   r^   r   r	   r	   r
   test_roundtrip_000  s    z(TestFullCharSetAnchors.test_roundtrip_00c             C   s"   d}t |}t||jdd d S )NzI
        - &dotted.words.here[a, b]
        - *dotted.words.here
        [z [)r   r   replace)r   r^   r   r	   r	   r
   test_roundtrip_019  s    z(TestFullCharSetAnchors.test_roundtrip_01N)rV   rW   rX   r   r   r   r	   r	   r	   r
   r   $  s   	r   )__doc__r#   textwrapr   rZ   rP   Z	roundtripr   r   r   r   r   r   r   r\   rt   r   r	   r	   r	   r
   <module>   s   	  4 9