U
    ~fh                     @   sh   d dl Z d dlmZmZmZmZmZmZmZm	Z	m
Z
mZ ddlmZ G dd deZG dd deZdS )	    N)
CDataCommentDeclarationDoctypeNavigableStringRubyParenthesisStringRubyTextStringScript
StylesheetTemplateString   )SoupTestc                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestNavigableStringc                 C   s~  t d}td}td}d| ks(td|jks6td|jddksJtdgt|jks^tdgt|jksrtdgt|	 kstd| kstd|jkstd|jddkstdgt|jkstdgt|jkstdgt|	 kstd| ks
tg t|jkstg t|jks2tg t|	 ksHtd	|jdtd
ks`td|jtt fdksztd S )Nzfee zfie zfoe ZfeeTstripZfie Zfoer   typesr   )
r   r   r   get_textAssertionErrorstringliststringsZstripped_strings_all_strings)selfscdatacomment r   B/tmp/pip-unpacked-wheel-khbgcco8/bs4/tests/test_navigablestring.pytest_text_acquisition_methods   s*    z1TestNavigableString.test_text_acquisition_methodsc              	   C   s:   |  dj}d |jksttt d|_W 5 Q R X d S )Nr   foo)soupr   namer   pytestraisesAttributeError)r   r   r   r   r    'test_string_has_immutable_name_property5   s    z;TestNavigableString.test_string_has_immutable_name_propertyc              	   C   sd   |  dj}tt}|d  W 5 Q R X t|jdks<t|d dksLt|dd dks`td S )Nz
the stringattrzZstring indices must be integers, not 'str'. Are you treating a NavigableString like a Tag?   e   ze s)r#   r   r%   r&   	TypeErrorstrvaluer   )r   r   r+   r   r   r    ,test_string_detects_attribute_access_attempt<   s    z@TestNavigableString.test_string_detects_attribute_access_attemptN)__name__
__module____qualname__r!   r(   r0   r   r   r   r    r      s   !r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestNavigableStringSubclassesc                 C   sX   |  d}td}|d| t|dks.t|jdddksBt|jd dksTtd S )Nr   r"   r   z<![CDATA[foo]]>r   r   )r#   r   insertr.   r   findcontents)r   r#   r   r   r   r    
test_cdataI   s    
z(TestNavigableStringSubclasses.test_cdatac                    sV   d _  fdd} d}td}|d| d|j|dksDtd j ksRtd	S )
zkText inside a CData object is passed into the formatter.

        But the return value is ignored.
        r   c                     s     j d7  _ dS )Nr   zBITTER FAILURE)count)argsr   r   r    	increment[   s    zNTestNavigableStringSubclasses.test_cdata_is_never_formatted.<locals>.incrementr   z<><><>r   s   <![CDATA[<><><>]]>)	formatterN)r:   r#   r   r6   encoder   )r   r=   r#   r   r   r<   r    test_cdata_is_never_formattedS   s    
z;TestNavigableStringSubclasses.test_cdata_is_never_formattedc                 C   s2   t d}| d}|d| | dks.td S )Nr"   r   r   s   <!DOCTYPE foo>
)r   r#   r6   r?   r   )r   doctyper#   r   r   r    test_doctype_ends_in_newlinee   s    
z:TestNavigableStringSubclasses.test_doctype_ends_in_newlinec                 C   s   t d}d| kstd S )Nr"   z<?foo?>)r   Zoutput_readyr   )r   dr   r   r    test_declarationm   s    z.TestNavigableStringSubclasses.test_declarationc                 C   s   |  d}tttgdd |jddD ks.t|  d}tdd |jjd d	D sXt|jj	}t
|tsntt
|tr|td
}|  |}||jdkstd S )Nz7<div>text</div><script>text</script><style>text</style>c                 S   s   g | ]
}|j qS r   )	__class__.0xr   r   r    
<listcomp>u   s    zPTestNavigableStringSubclasses.test_default_string_containers.<locals>.<listcomp>Tr5   z><template>Some text<p>In a tag</p></template>Some text outsidec                 s   s   | ]}t |tV  qd S )N)
isinstancer   rF   r   r   r    	<genexpr>   s   zOTestNavigableStringSubclasses.test_default_string_containers.<locals>.<genexpr>r   sB   <template>Some text<p>In a tag</p><!--with a comment--></template>utf8)r#   r   r	   r
   Zfind_allr   alltemplater   Znext_siblingrJ   r   r?   )r   r#   Zoutsidemarkupr   r   r    test_default_string_containersq   s     


z<TestNavigableStringSubclasses.test_default_string_containersc                 C   sf   d}|  |}t|jjts tt|jjts2td|jddksFtd|jdt	ttfdksbtd S )NuU   <ruby>漢 <rp>(</rp><rt>kan</rt><rp>)</rp> 字 <rp>(</rp><rt>ji</rt><rp>)</rp></ruby>u   漢字Tr   u   漢(kan)字(ji)r   )
r#   rJ   rpr   r   r   rtr   r   r   )r   rO   r#   r   r   r    test_ruby_strings   s    
 z/TestNavigableStringSubclasses.test_ruby_stringsN)	r1   r2   r3   r9   r@   rB   rD   rP   rS   r   r   r   r    r4   H   s   
 r4   )r%   Zbs4.elementr   r   r   r   r   r   r   r	   r
   r   r   r   r   r4   r   r   r   r    <module>   s   05