o
    +ij                     @   s  d Z ddlZddlZddlmZmZ ddlmZm	Z	m
Z
mZmZ dBddZdBdd	ZdBd
dZdBddZejdg ddededdfddZejdg ddededededdf
ddZejdg ddedeje deje dededdfdd ZdBd!d"ZdBd#d$ZdBd%d&ZdBd'd(ZdBd)d*ZdBd+d,ZdBd-d.ZdBd/d0Z dBd1d2Z!dBd3d4Z"dBd5d6Z#dBd7d8Z$ejdg d9dededdfd:d;Z%ejdd<gdededdfd=d>Z&ejdd?gdededdfd@dAZ'dS )Cz*Tests for Google-style docstring routines.    N)
ParseErrorRenderingStyle)GoogleParserSectionSectionTypecomposeparsereturnc                  C   sB   t  } | d}|jdksJ |jdksJ t|jdksJ dS )zQTest parsing an unknown section with default GoogleParser
    configuration.
    z.
        Unknown:
            spam: a
        zUnknown:zspam: ar   N)r   r   short_descriptionlong_descriptionlenmetaparser	docstring r   _/var/www/html/psymed-ai/venv/lib/python3.10/site-packages/docstring_parser/tests/test_google.py"test_google_parser_unknown_section   s   r   c                  C   s(   t  } | d}|jd jdksJ dS )zBTest parsing a multi-line parameter type with default GoogleParsera  Description of the function.

        Args:
            output_type (Literal["searchResults", "sourcedAnswer",
                "structured"]): The type of output.
                This can be one of the following:
                - "searchResults": Represents the search results.
                - "sourcedAnswer": Represents a sourced answer.
                - "structured": Represents a structured output format.

        Returns:
            bool: Indicates success or failure.

        r   output_typeN)r   r   paramsarg_namer   r   r   r   ,test_google_parser_multi_line_parameter_type    s
   r   c                  C   s|  t tddtjtddtjtddtjtddtjgd	d
} | d}|jdu s*J |jdu s1J t|j	dks:J |j	d j
dgksEJ |j	d jdksOJ |j	d j
ddgks[J |j	d jdkseJ |j	d j
ddgksqJ |j	d jdks{J |j	d j
ddgksJ |j	d jdksJ |j	d j
ddgksJ |j	d jdksJ |j	d j
dgksJ |j	d jdksJ dS )zPTest parsing an unknown section with custom GoogleParser
    configuration.
    DESCRIPTIONdesc	ARGUMENTSparam
ATTRIBUTES	attributeEXAMPLESexamplesFtitle_colona/  
        DESCRIPTION
            This is the description.

        ARGUMENTS
            arg1: first arg
            arg2: second arg

        ATTRIBUTES
            attr1: first attribute
            attr2: second attribute

        EXAMPLES
            Many examples
            More examples
        N   r   zThis is the description.   arg1z	first arg   arg2z
second arg   attr1zfirst attribute   attr2zsecond attribute   zMany examples
More examples)r   r   r   SINGULARMULTIPLEr   r
   r   r   r   argsdescriptionr   r   r   r   "test_google_parser_custom_sections6   s4   	r0   c                  C   s   t dd} | tddtj | d}|jdksJ |jdks"J | d}|jdks.J |jd	ks5J | d
}t|j	dksCJ |j	d j
dgksNJ |j	d jdksXJ dS )zjTest parsing an unknown section with custom GoogleParser configuration
    that was set at a runtime.
    Fr    NotenotezE
        short description

        Note:
            a note
        zshort descriptionzNote:
    a notez8
        short description

        Note a note
        zNote a notezD
        short description

        Note
            a note
        r#   r   za noteN)r   add_sectionr   r   r,   r   r
   r   r   r   r.   r/   r   r   r   r   (test_google_parser_custom_sections_afterg   s$   
r4   zsource, expected)) N)
NShort descriptionr8   z
Short description
r8   z
   Short description
r8   sourceexpectedc                 C   s2   t | }|j|ksJ |jdu sJ |jrJ dS )zTest parsing short description.N)r   r
   r   r   )r;   r<   r   r   r   r   test_short_description   s   r=   z?source, expected_short_desc, expected_long_desc, expected_blank))#Short description

Long descriptionr8   Long descriptionT)I
            Short description

            Long description
            r8   r?   T)a
            Short description

            Long description
            Second line
            r8   Long description
Second lineT)"Short description
Long descriptionr8   r?   F)H
            Short description
            Long description
            r8   r?   F)$
Short description
Long description
r8   r?   F)`
            Short description
            Long description
            Second line
            r8   rB   Fexpected_short_descexpected_long_descexpected_blankc                 C   s@   t | }|j|ksJ |j|ksJ |j|ksJ |jrJ dS )zTest parsing long description.N)r   r
   r   blank_after_short_descriptionr   )r;   rG   rH   rI   r   r   r   r   test_long_description   s
   FrK   zdsource, expected_short_desc, expected_long_desc, expected_blank_short_desc, expected_blank_long_desc))zR
            Short description
            Args:
                asd:
            r8   NFF)zo
            Short description
            Long description
            Args:
                asd:
            r8   r?   FF)z
            Short description
            First line
                Second line
            Args:
                asd:
            r8   First line
    Second lineFF)z
            Short description

            First line
                Second line
            Args:
                asd:
            r8   rL   TF)z
            Short description

            First line
                Second line

            Args:
                asd:
            r8   rL   TT)z4
            Args:
                asd:
            NNFFexpected_blank_short_descexpected_blank_long_descc                 C   sV   t | }|j|ksJ |j|ksJ |j|ksJ |j|ks J t|jdks)J dS )z2Test parsing newlines around description sections.r#   N)r   r
   r   rJ   blank_after_long_descriptionr   r   )r;   rG   rH   rM   rN   r   r   r   r   test_meta_newlines   s   YrP   c                  C   sl   t d} | jdksJ t| jdksJ | jd jddgks J | jd jdks*J | jd jdks4J dS )	z*Test parsing multiline meta documentation.z
        Short description

        Args:
            spam: asd
                1
                    2
                3
        r8   r#   r   r   spamasd
1
    2
3N)r   r
   r   r   r.   r   r/   r   r   r   r   $test_meta_with_multiline_descriptionO  s   rT   c                  C   sv   t d} | dus
J t| jdksJ | jd }|jdksJ |js$J |jdks+J |jdks2J |jdks9J dS )	zTest parsing default arguments.a  A sample function

A function the demonstrates docstrings

Args:
    arg1 (int): The firsty arg
    arg2 (str): The second arg
    arg3 (float, optional): The third arg. Defaults to 1.0.
    arg4 (Optional[Dict[str, Any]], optional): The last arg. Defaults to None.
    arg5 (str, optional): The fifth arg. Defaults to DEFAULT_ARG5.

Returns:
    Mapping[str, Any]: The args packed in a mapping
Nr+   r'   arg4zOptional[Dict[str, Any]]NonezThe last arg. Defaults to None.)r   r   r   r   is_optional	type_namedefaultr/   )r   rU   r   r   r   test_default_argsc  s   

rZ   c                  C   s   t d} | jdksJ t| jdksJ | jd jddgks J | jd jdks*J | jd jdks4J | jd jd	d
gks@J | jd jd
ksJJ | jd jdksTJ | jd jd	dgks`J | jd jdksjJ | jd jdkstJ dS )zTest parsing multiple meta.z
        Short description

        Args:
            spam: asd
                1
                    2
                3

        Raises:
            bla: herp
            yay: derp
        r8   r'   r   r   rQ   rR   r#   raisesblaherpr%   yayderpN)r   r
   r   r   r.   r   r/   rX   rS   r   r   r   test_multiple_meta  s   r`   c                  C     t d} t| jdksJ t d} t| jdksJ | jd jdks$J | jd jdu s.J | jd jdks8J | jd jr@J | jd jd	ksJJ | jd jd
ksTJ | jd jdks^J | jd jrfJ | jd jdkspJ | jd jdkszJ | jd jdksJ | jd jsJ | jd jdksJ | jd jdksJ | jd jdksJ | jd jsJ t d} t| jdksJ | jd jdksJ | jd jdu sJ | jd jdksJ | jd jd	ksJ | jd jd
ksJ | jd jdksJ dS )zTest parsing params.r8   r   z
        Short description

        Args:
            name: description 1
            priority (int): description 2
            sender (str?): description 3
            ratio (Optional[float], optional): description 4
        r)   nameNdescription 1r#   priorityintdescription 2r%   senderstrdescription 3r'   ratioOptional[float]description 4z
        Short description

        Args:
            name: description 1
                with multi-line text
            priority (int): description 2
        "description 1
with multi-line textr   r   r   r   rX   r/   rW   rS   r   r   r   test_params  D   

ro   c                  C   ra   )zTest parsing attributes.r8   r   z
        Short description

        Attributes:
            name: description 1
            priority (int): description 2
            sender (str?): description 3
            ratio (Optional[float], optional): description 4
        r)   rb   Nrc   r#   rd   re   rf   r%   rg   rh   ri   r'   rj   rk   rl   z
        Short description

        Attributes:
            name: description 1
                with multi-line text
            priority (int): description 2
        rm   rn   rS   r   r   r   test_attributes  rp   rq   c                  C   s  t d} | jdu sJ | jdusJ t| jdksJ t d} | jdus&J | jjdu s.J | jjdks6J | jdus=J t| jdksFJ | jd | jksPJ t d} | jdus[J | jjdu scJ | jjdkskJ | jdusrJ t| jdks{J | jd | jksJ t d	} | jdusJ | jjd
ksJ | jjdksJ | jdusJ t| jdksJ | jd | jksJ t d} | jdusJ | jjdksJ | jjdksJ | jdusJ t| jdksJ | jd | jksJ t d} | jdusJ | jjd
ksJ | jjdksJ | jdusJ t| jdksJ | jd | jks)J t d} | jdus5J | jjd
ks>J | jjdksGJ | jdusOJ t| jdksYJ | jd | jksdJ dS )zTest parsing returns.#
        Short description
        Nr   zL
        Short description
        Returns:
            description
        r/   r#   z[
        Short description
        Returns:
            description with: a colon!
        zdescription with: a colon!zQ
        Short description
        Returns:
            int: description
        re   ze
        Returns:
            Optional[Mapping[str, List[int]]]: A description: with a colon
        z!Optional[Mapping[str, List[int]]]zA description: with a colonzP
        Short description
        Yields:
            int: description
        z
        Short description
        Returns:
            int: description
            with much text

            even some spacing
        z-description
with much text

even some spacing)r   returnsmany_returnsr   rX   r/   rS   r   r   r   test_returns  s|   

ru   c                  C   s`   t d} t| jdksJ t d} t| jdksJ | jd jdks$J | jd jdks.J dS )zTest parsing raises.rr   r   zW
        Short description
        Raises:
            ValueError: description
        r#   
ValueErrorr/   N)r   r   r[   rX   r/   rS   r   r   r   test_raisesp  s   rw   c                  C   sF   t d} t| jdksJ | jd jdksJ | jd jdks!J dS )zTest parsing examples.z
        Short description
        Example:
            example: 1
        Examples:
            long example

            more here
        r%   r   z
example: 1r#   zlong example

more hereN)r   r   r   r/   rS   r   r   r   test_examples  s   rx   c                   C   sj   t t td W d   n1 sw   Y  t t td W d   dS 1 s.w   Y  dS )zTest parsing broken meta.zArgs:NzArgs:
    herp derppytestr[   r   r   r   r   r   r   test_broken_meta  s   

"r{   c                  C   s\   t d} | jd jdksJ | jd jdksJ | jd jdks"J | jd jdks,J dS )	zTest parsing unknown meta.zShort desc

        Unknown 0:
            title0: content0

        Args:
            arg0: desc0
            arg1: desc1

        Unknown1:
            title1: content1

        Unknown2:
            title2: content2
        r   arg0desc0r#   r$   desc1N)r   r   r   r/   rS   r   r   r   test_unknown_meta  s   r   c                   C   s8   t t td W d   dS 1 sw   Y  dS )zTest parsing broken arguments.zWThis is a test

            Args:
                param - poorly formatted
            Nry   r   r   r   r   test_broken_arguments  s
   "r   c                  C   sH   t d} t| jdksJ | jd jdgksJ | jd jdks"J dS )z$Test parsing empty examples section.z]Short description

        Example:

        Raises:
            IOError: some error
        r#   r   r   r5   N)r   r   r   r.   r/   rS   r   r   r   test_empty_example  s   
r   ))r5   r5   )r6   r5   r7   r9   r:   )r>   r>   )r@   r>   )rA   z/Short description

Long description
Second line)rC   rC   )rD   rC   )rE   rC   )rF   z.Short description
Long description
Second line)zQ
            Short description
            Meta:
                asd
            zShort description
Meta:
    asd)zn
            Short description
            Long description
            Meta:
                asd
            z0Short description
Long description
Meta:
    asd)z
            Short description
            First line
                Second line
            Meta:
                asd
            z:Short description
First line
    Second line
Meta:
    asd)z
            Short description

            First line
                Second line
            Meta:
                asd
            z;Short description

First line
    Second line
Meta:
    asd)z
            Short description

            First line
                Second line

            Meta:
                asd
            z<Short description

First line
    Second line

Meta:
    asd)z
            Short description

            Meta:
                asd
                    1
                        2
                    3
            zBShort description

Meta:
    asd
        1
            2
        3)z
            Short description

            Meta1:
                asd
                1
                    2
                3
            Meta2:
                herp
            Meta3:
                derp
            zWShort description

Meta1:
    asd
    1
        2
    3
Meta2:
    herp
Meta3:
    derp)  
            Short description

            Args:
                name: description 1
                priority (int): description 2
                sender (str, optional): description 3
                message (str, optional): description 4, defaults to 'hello'
                multiline (str?):
                    long description 5,
                        defaults to 'bye'
            zShort description

Args:
    name: description 1
    priority (int): description 2
    sender (str?): description 3
    message (str?): description 4, defaults to 'hello'
    multiline (str?): long description 5,
        defaults to 'bye')zg
            Short description
            Raises:
                ValueError: description
            z5Short description
Raises:
    ValueError: descriptionc                 C   s   t t| |ks
J dS )zTest compose in default mode.N)r   r   r;   r<   r   r   r   test_compose  s    Er   )r   a	  Short description

Args:
    name: description 1
    priority (int): description 2
    sender (str, optional): description 3
    message (str, optional): description 4, defaults to 'hello'
    multiline (str, optional): long description 5,
        defaults to 'bye'c                 C      t t| tjd|ksJ dS )zTest compose in clean mode.rendering_styleN)r   r   r   CLEANr   r   r   r   test_compose_clean  s   r   )r   a1  Short description

Args:
    name:
        description 1
    priority (int):
        description 2
    sender (str, optional):
        description 3
    message (str, optional):
        description 4, defaults to 'hello'
    multiline (str, optional):
        long description 5,
        defaults to 'bye'c                 C   r   )zTest compose in expanded mode.r   N)r   r   r   EXPANDEDr   r   r   r   test_compose_expanded  s   $r   )r	   N)(__doc__typingTrz   docstring_parser.commonr   r   docstring_parser.googler   r   r   r   r   r   r   r0   r4   markparametrizerh   r=   boolrK   OptionalrP   rT   rZ   r`   ro   rq   ru   rw   rx   r{   r   r   r   r   r   r   r   r   r   r   <module>   s    
	


1(
?Q




7
7
d


	

 C!