o
    qoiF                     @   s   d Z ddlZddlZddlmZ ddlmZ ddlZddl	m
Z
 ddl	mZ ddlmZ ddlZdd	 Zd
d Zdd ZG dd dejZdedefddZejG dd dZG dd dejZdefddZG dd dejZedkr{e  dS dS )zTests for yaml_serialization.    N)Any)absltest)serialization)yaml_serialization)	test_utilc                   C   s   t t d S )Nz!fiddle/_src/experimental/testdata)pathlibPathr   get_default_test_srcdir r
   r
   d/home/ubuntu/.local/lib/python3.10/site-packages/fiddle/_src/experimental/yaml_serialization_test.py_testdata_dir   s   r   c                 C   sD   | j |dd}|d}tt |d |d }tj|fi |S )NT)deep__fn_or_cls__modulename)construct_mappingpopr   import_symbolDefaultPyrefPolicyfdlConfig)loadernode	argumentsfn_or_cls_pyref	fn_or_clsr
   r
   r   _config_constructor$   s   
r   c                 C   s   t t jt| |S )N)r   castPartialr   )r   r   r
   r
   r   _partial_constructor/   s   r   c                   @      e Zd ZdZdS )SemiSafeLoaderz0Intermediate class that can load Fiddle configs.N__name__
__module____qualname____doc__r
   r
   r
   r   r!   3       r!   
serializedreturnc                 C   s&   t dt t dt tj| t dS )a  Test-only method that returns a Fiddle configuration from YAML.

  As mentioned by the yaml_serialization module docstring, YAML serialization
  is primarily provided for debug printing. However, sometimes reversing that
  transformation (loading) can be useful for testing that all values were
  serialized.

  Args:
    serialized: Serialized configuration.

  Returns:
    Loaded object.
  z!fdl.Configz!fdl.Partial)Loader)r!   add_constructorr   r   yamlload)r(   r
   r
   r   load_yaml_test_only7   s   r.   c                   @   s&   e Zd ZU eed< eed< eed< dS )FooabcN)r#   r$   r%   int__annotations__strr   r
   r
   r
   r   r/   J   s   
 r/   c                   @   r    )FakeTagzFake/test tag class.Nr"   r
   r
   r
   r   r6   Q   r'   r6   
config_strc                 C   s   |  ddS )Nz0fiddle._src.experimental.yaml_serialization_test__main__)replace)r7   r
   r
   r   _normalize_expected_configU   s   r:   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )YamlSerializationTestc              
   C   sD   t jtddt jtddd dd}tj|d}t|}| || d S N   hi   byer0   r1   r2   valuer   r   r/   r   	dump_yamlr.   assertEqualselfconfigr(   loadedr
   r
   r   test_dump_yaml_config\      z+YamlSerializationTest.test_dump_yaml_configc              
   C   sT   t jtddt jtddd ddddgd gdd}tj|d}t|}| || d S )	Nr=   r>   r?   r@   rA      )	subconfiglistrB   rD   rG   r
   r
   r   test_various_python_collectionsc   s   	z5YamlSerializationTest.test_various_python_collectionsc              
   C   sD   t jtddt jtddd dd}tj|d}t|}| || d S r<   )r   r   r/   r   r   rE   r.   rF   rG   r
   r
   r   test_dump_yaml_partials   rL   z,YamlSerializationTest.test_dump_yaml_partialc                 C   s"   |  tjtdd d d S )Nr?   rB   z6!fdl\.TaggedValue
tags:
- [\w\d_\.]+\.FakeTag
value: 2)assertRegexr   rE   r6   newstrip)rH   r
   r
   r   test_dump_tagged_valuez   s   z,YamlSerializationTest.test_dump_tagged_valuec                 C   s   t jtddd d}t jtdd||gd}tj|d}tt d }| }W d    n1 s0w   Y  | t	|t	| t
|}| || d S )Nr=   sharedrA   r?   rootrB   zyaml_serialization_diamond.yaml)r   r   r/   r   rE   openr   readrF   r:   r.   assertDagEqual)rH   rV   rI   r(   fexpectedrJ   r
   r
   r   test_dump_diamond   s   
z'YamlSerializationTest.test_dump_diamondN)r#   r$   r%   rK   rP   rQ   rU   r]   r
   r
   r
   r   r;   Z   s    r;   r8   )r&   dataclassesr   typingr   absl.testingr   fiddler   fiddle._src.experimentalr   r   fiddle._src.testingr   r,   r   r   r   
SafeLoaderr!   r5   r.   	dataclassr/   Tagr6   r:   TestCaser;   r#   mainr
   r
   r
   r   <module>   s.   5