a
    Dg3                    @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ	 d dl
mZmZ d dlmZ dd	d
ZG dd deZG dd deZdS )    N)patch)TestCase)DOM)HTML)ContentstateConverterpersist_key_for_block)EmbedFc                    s   t | t krdS t| trVt|  t kr:dS t fdd|  D S t| trt| tkrtdS t fddt	| D S | kS dS )zaTest whether two contentState structures are equal, ignoring 'key' properties if match_keys=FalseFc                 3   s2   | ]*\}}|d kr  p(t ||  dV  qdS )key
match_keysNcontent_state_equal).0kvr   v2 d/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/admin/tests/test_contentstate.py	<genexpr>   s   z&content_state_equal.<locals>.<genexpr>c                 3   s    | ]\}}t || d V  qdS )r
   Nr   )r   abr
   r   r   r      s   N)
type
isinstancedictsetkeysallitemslistlenzip)v1r   r   r   r   r   r      s    

r   c                   @   s\  e Zd ZdgZdSd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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+d, Zd-d. Zd/d0 Zed1d2d3 Zed1d4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRS )TTestHtmlToContentStatez	test.jsonFc              	   C   s6   |  t|||ddtj|ddtj|ddf  dS )zcAssert that two contentState structures are equal, ignoring 'key' properties if match_keys is Falser
   z%s does not match %s   )indentN)
assertTruer   jsondumps)selfr"   r   r   r   r   r   assertContentStateEqual)   s    z.TestHtmlToContentState.assertContentStateEqualc                 C   sT   t g d}t|d}| j|i g ddddg dg dddd	g dgd
dd d S )Nfeatures}
            <p data-block-key='00000'>Hello world!</p>
            <p data-block-key='00001'>Goodbye world!</p>
            Hello world!r   unstyled00000inlineStyleRangestextdepthr   r	   entityRangesGoodbye world!00001	entityMapblocksTr
   r   r'   loadsfrom_database_formatr*   r)   	converterresultr   r   r   test_paragraphs1   s6    
	z&TestHtmlToContentState.test_paragraphsc                 C   s`   t g d}t|d}| |i g ddddg dg ddddg dg d	dddg dgd
 d S )Nr+   z~
            <foo>Hello world!</foo>
            <foo>I said hello world!</foo>
            <p>Goodbye world!</p>
            r.   r   r/   r0   r1   zI said hello world!r6   r8   r;   r>   r   r   r   $test_unknown_block_becomes_paragraphU   sB    
			z;TestHtmlToContentState.test_unknown_block_becomes_paragraphc                 C   s   t g d}t|d}| |i g ddddg dg ddddg dg d	dddg dg ddddg dg d
dddg dgd d S )Nr+   z
            before
            <p>paragraph</p>
            between
            <p>paragraph</p>
            after
            beforer   r/   r0   r1   Z	paragraphZbetweenafterr8   r;   r>   r   r   r    test_bare_text_becomes_paragraph   s^    
				z7TestHtmlToContentState.test_bare_text_becomes_paragraphc                 C   s@   t g d}t|d}| |i g ddddg dgd d S )	Nr+   zB
            <p>Hello <foo>frabjuous</foo> world!</p>
            zHello frabjuous world!r   r/   r0   r1   r8   r;   r>   r   r   r   'test_ignore_unrecognised_tags_in_blocks   s&    
z>TestHtmlToContentState.test_ignore_unrecognised_tags_in_blocksc                 C   sX   t ddgd}t|d}| |i ddddd	d
ddgddddg dgd d S )Nbolditalicr+   R
            <p>You <b>do <em>not</em> talk</b> about Fight Club.</p>
            r$      BOLDoffsetlengthstyle      ITALIC!You do not talk about Fight Club.r   r/   r0   r1   r8   r;   r>   r   r   r   test_inline_styles   s*    

z)TestHtmlToContentState.test_inline_stylesc                 C   sX   t ddgd}t|d}| |i ddddd	d
ddgddddg dgd d S )NrG   rH   r+   zK
            You <b>do <em>not</em> talk</b> about Fight Club.
            r$   rJ   rK   rL   rP   rQ   rR   rS   r   r/   r0   r1   r8   r;   r>   r   r   r   test_inline_styles_at_top_level   s*    

z6TestHtmlToContentState.test_inline_styles_at_top_levelc                 C   sX   t ddgd}t|d}| |i ddddd	d
ddgddddg dgd d S )NrG   rH   r+   z?<b>Seriously</b>, stop talking about <i>Fight Club</i> already.r   	   rK   rL      
   rR   z1Seriously, stop talking about Fight Club already.r/   r0   r1   r8   r;   r>   r   r   r   )test_inline_styles_at_start_of_bare_block  s*    

z@TestHtmlToContentState.test_inline_styles_at_start_of_bare_blockc                 C   sN   t ddgd}t|d}| |i ddddgd	d
ddg dgd d S )NrH   zjust-made-it-upr+   rI   rP   rQ   rR   rL   rS   r   r/   r0   r1   r8   r;   r>   r   r   r   %test_inline_styles_depend_on_features.  s(    
z<TestHtmlToContentState.test_inline_styles_depend_on_featuresc                 C   s|   t g dd}t|d}| j|i g ddddg dg d	dd
dg dddddddddgd	dd
dg dgddd d S )Nh1olrG   rH   r+   a(  
            <h1 data-block-key='00000'>The rules of Fight Club</h1>
            <ol>
                <li data-block-key='00001'>You do not talk about Fight Club.</li>
                <li data-block-key='00002'>You <b>do <em>not</em> talk</b> about Fight Club.</li>
            </ol>
            The rules of Fight Clubr   
header-oner0   r1   rS   ordered-list-itemr7   r$   rJ   rK   rL   rP   rQ   rR   00002r8   Tr
   r;   r>   r   r   r   test_ordered_listJ  sH    	


 z(TestHtmlToContentState.test_ordered_listc                 C   s   t ddgd}t|d}| j|i g ddddg d	g d
dddg d	g ddddg d	g ddddg d	g ddddg d	g ddddg d	gddd d S )Nr\   ulr+   a  
            <h1 data-block-key='00000'>Shopping list</h1>
            <ul>
                <li data-block-key='00001'>Milk</li>
                <li data-block-key='00002'>
                    Flour
                    <ul>
                        <li data-block-key='00003'>Plain</li>
                        <li data-block-key='00004'>Self-raising</li>
                    </ul>
                </li>
                <li data-block-key='00005'>Eggs</li>
            </ul>
            zShopping listr   r_   r0   r1   Milkunordered-list-itemr7   ZFlourra   ZPlain   Z00003zSelf-raisingZ00004EggsZ00005r8   Tr
   r;   r>   r   r   r   test_nested_list|  sn    					5z'TestHtmlToContentState.test_nested_listc                 C   s\   t dgd}t|d}| |dddddid	ig d
dddddddgdgd d S )Nlinkr+   zR
            <p>an <a href="http://wagtail.org">external</a> link</p>
            0MUTABLELINKurlhttp://wagtail.org
mutabilityr   dataan external linkr   r/   r0   rQ      rM   rN   r	   r1   r8   r;   r>   r   r   r   test_external_link  s0    	z)TestHtmlToContentState.test_external_linkc                 C   s\   t dgd}t|d}| |dddddid	ig d
dddddddgdgd d S )Nri   r+   z1an <a href="http://wagtail.org">external</a> linkrj   rk   rl   rm   rn   ro   rr   r   r/   r0   rQ   rs   rt   r1   r8   r;   r>   r   r   r   test_link_in_bare_text  s0    	z-TestHtmlToContentState.test_link_in_bare_textc                 C   st   t dgd}t|d}| |ddddiddddd	idd
g ddddddddddddgdgd d S )Nri   r+   z_<a href="http://wagtail.org">an external link</a> and <a href="http://torchbox.com">another</a>rk   rl   rm   rn   ro   zhttp://torchbox.comrj   1zan external link and anotherr   r/   r0      rt      rP   rf   r1   r8   r;   r>   r   r   r   test_link_at_start_of_bare_text  s:    

z6TestHtmlToContentState.test_link_at_start_of_bare_textc                 C   s`   t dgd}t|d}| |dddddd	d
dig ddddddddgdgd d S )Nri   r+   zO
            <p>an <a linktype="page" id="3">internal</a> link</p>
            rj   rk   rl   rQ   z/events/   idrm   ZparentIdro   an internal linkr   r/   r0   rs   rt   r1   r8   r;   r>   r   r   r   test_page_link.  s0    
	z%TestHtmlToContentState.test_page_linkc                 C   s`   t dgd}t|d}| |ddddd d dd	ig d
dddddddgdgd d S )Nri   r+   zR
            <p>an <a linktype="page" id="9999">internal</a> link</p>
            rj   rk   rl   '  r}   ro   r   r   r/   r0   rQ   rs   rt   r1   r8   r;   r>   r   r   r   test_broken_page_linkN  s6    z,TestHtmlToContentState.test_broken_page_linkc                 C   s`   t dgd}t|d}| |ddddd d dd	ig d
dddddddgdgd d S )Nri   r+   zO
            <p>an <a linktype="page" id="1">internal</a> link</p>
            rj   rk   rl   rf   r}   ro   r   r   r/   r0   rQ   rs   rt   r1   r8   r;   r>   r   r   r   test_link_to_root_pager  s0    
	z-TestHtmlToContentState.test_link_to_root_pagec                 C   s`   t dgd}t|d}| |dddddd	d
dig ddddddddgdgd d S )Ndocument-linkr+   zR
            <p>a <a linktype="document" id="1">document</a> link</p>
            rj   rk   DOCUMENTrf   z/documents/1/test.pdfztest.pdf)r~   rm   filenamero   a document linkr   r/   r0   r|   rs   rt   r1   r8   r;   r>   r   r   r   test_document_link  s6    z)TestHtmlToContentState.test_document_linkc                 C   s\   t dgd}t|d}| |dddddid	ig d
dddddddgdgd d S )Nr   r+   zU
            <p>a <a linktype="document" id="9999">document</a> link</p>
            rj   rk   r   r~   r   ro   r   r   r/   r0   r|   rs   rt   r1   r8   r;   r>   r   r   r   test_broken_document_link  s0    	z0TestHtmlToContentState.test_broken_document_linkc                 C   sX   t dgd}t|d}| |dddi dig dd	d
dddd	dgdgd d S )Nr   r+   zK
            <p>a <a linktype="document">document</a> link</p>
            rj   rk   r   ro   r   r   r/   r0   r|   rs   rt   r1   r8   r;   r>   r   r   r   "test_document_link_with_missing_id  s(    z9TestHtmlToContentState.test_document_link_with_missing_idc                 C   s   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g ddddgdddddddddid d S )Nimager+   z
            <p>before</p>
            <embed embedtype="image" alt="an image" id="1" format="left" />
            <p>after</p>
            r0   r   rC   r/   r	   r2   r5   r4   r3   r   rf   r	   rM   rN    atomicrD   rj   leftan imagerx   /media/not-foundformatZaltr~   src	IMMUTABLEIMAGErq   rp   r   r:   r9   r;   r>   r   r   r   test_image_embed  sT    			z'TestHtmlToContentState.test_image_embedc                 C   s   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g dddddg d	dd	d
gdddddg g ddddgdddddddddddddddddd d S )Nr   r+   z
            <embed embedtype="image" alt="an image" id="1" format="left" />
            <embed embedtype="image" alt="an image" id="1" format="left" />
            r0   r    r/   r   rf   r   r   r   r   r   rx   r   r   r   r   r   rw   r   r;   r>   r   r   r   .test_add_spacer_paragraph_between_image_embeds)  s~    				-zETestHtmlToContentState.test_add_spacer_paragraph_between_image_embedsc                 C   s   t ddgd}t|d}| |ddddd	d
dddig ddddg dg ddddg ddg ddddgddddg ddddg dg ddddg dgd dS )zZ
        There should be no spacer paragraph inserted between a list and an image
        rc   r   r+   a!  
            <ul>
                <li>Milk</li>
                <li>Eggs</li>
            </ul>
            <embed embedtype="image" alt="an image" id="1" format="left" />
            <ul>
                <li>More milk</li>
                <li>More eggs</li>
            </ul>
            rj   r   r   rx   r   r   r   r   r   rd   r   re   r0   r1   rg   rf   r   r   r   r   z	More milkz	More eggsr8   Nr;   r>   r   r   r   test_image_after_listy  sp    				z,TestHtmlToContentState.test_image_after_listzwagtail.embeds.embeds.get_embedc                 C   s   t dd ddddddddd	
|_td
gd}t|d}| |dg g dddddg ddddgdddddg g ddddgdddddddddddid d S )N+https://www.youtube.com/watch?v=Kh0Y2hVe_bwvideo	test htmlwhat are birdslook around youYouTubehttp://test/thumbnail.url  
rm   	max_widthr   htmltitleZauthor_nameZprovider_nameZthumbnail_urlwidthheightembedr+   z
            <p>before</p>
            <embed embedtype="media" url="https://www.youtube.com/watch?v=Kh0Y2hVe_bw" />
            <p>after</p>
            r0   r   rC   r/   r   rf   r   r   r   rD   rj   Z	thumbnailZ	embedTypeZproviderNamer   Z
authorNamerm   r   EMBEDr   r   r   Zreturn_valuer   r'   r<   r=   r*   r)   Z	get_embedr?   r@   r   r   r   test_media_embed  sp    			z'TestHtmlToContentState.test_media_embedc                 C   s   t dd ddddddddd	
|_td
gd}t|d}| |dg g dddddg ddddgdddddg g dddddg ddddgdddddg g ddddgdddddddddddddddddddddd d S )Nr   r   r   r   r   r   r   r   r   r   r+   z
            <embed embedtype="media" url="https://www.youtube.com/watch?v=Kh0Y2hVe_bw" />
            <embed embedtype="media" url="https://www.youtube.com/watch?v=Kh0Y2hVe_bw" />
            r0   r   r   r/   r   rf   r   r   r   r   r   r   r   rw   r   r   r   r   r   r   *test_add_spacer_paras_between_media_embeds  s    				-zATestHtmlToContentState.test_add_spacer_paras_between_media_embedsc                 C   sx   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g ddddgdi dddid d S )Nhrr+   zS
            <p>before</p>
            <hr />
            <p>after</p>
            r0   r   rC   r/   r   rf   r   r   r   rD   rj   r   HORIZONTAL_RULEr   r   r;   r>   r   r   r   test_hrr  sL    			zTestHtmlToContentState.test_hrc                 C   s   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g dddddg d	dd	d
gdddddg g ddddgi dddi ddddd d S )Nr   r+   z3
            <hr />
            <hr />
            r0   r   r   r/   r   rf   r   r   r   r   r   r   rw   r   r;   r>   r   r   r   %test_add_spacer_paragraph_between_hrs  sn    				,z<TestHtmlToContentState.test_add_spacer_paragraph_between_hrsc                 C   sx   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g ddddgdi dddid d S )Nr   r+   z2
            <p>before<hr />after</p>
            r0   r   rC   r/   r   rf   r   r   r   rD   rj   r   r   r   r   r;   r>   r   r   r   test_block_element_in_paragraph  sL    		z6TestHtmlToContentState.test_block_element_in_paragraphc                 C   s@   t g d}t|d}| |i dg g ddddgd d S )	Nr+   z1
            <p>before<br/>after</p>
            r0   r   zbefore
afterr/   r   r8   r;   r>   r   r   r   test_br_element_in_paragraph  s&    
z3TestHtmlToContentState.test_br_element_in_paragraphc                 C   sP   t g d}t|d}| |i dg g dddddg g ddddgd	 d S )
Nr+   zS
            <p>before</p>
            <br />
            <p>after</p>
            r0   r   rC   r/   r   rD   r8   r;   r>   r   r   r   "test_br_element_between_paragraphs4  s4    
		z9TestHtmlToContentState.test_br_element_between_paragraphsc                 C   sx   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g ddddgdi dddid d S )Nr   r+   z'
            <p><hr /></p>
            r0   r   r   r/   r   rf   r   r   r   rj   r   r   r   r   r;   r>   r   r   r   %test_block_element_in_empty_paragraphX  sL    
		z<TestHtmlToContentState.test_block_element_in_empty_paragraphc                 C   s@   t g d}t|d}| |i g ddddg dgd d S )	Nr+   zf
            <p>Arthur &quot;two sheds&quot; Jackson &lt;the third&gt; &amp; his wife</p>
            z1Arthur "two sheds" Jackson <the third> & his wifer   r/   r0   r1   r8   r;   r>   r   r   r   test_html_entities  s&    
z)TestHtmlToContentState.test_html_entitiesc                 C   sP   t g d}t|d}| |i g ddddg dg ddddg dgd	 d S )
Nr+   u   
            <p>Multiple whitespaces:     should  be reduced</p>
            <p>Multiple non-breaking whitespace characters:       should be preserved</p>
            z'Multiple whitespaces: should be reducedr   r/   r0   r1   uG   Multiple non-breaking whitespace characters:     should be preservedr8   r;   r>   r   r   r   ,test_collapse_targeted_whitespace_characters  s4    
	zCTestHtmlToContentState.test_collapse_targeted_whitespace_charactersc                 C   s@   t g d}t|d}| |i g ddddg dgd d S )	Nr+   z8
            </p>
            <p>Before</p>
            ZBeforer   r/   r0   r1   r8   r;   r>   r   r   r   test_extra_end_tag_before  s&    

z0TestHtmlToContentState.test_extra_end_tag_beforec                 C   s@   t g d}t|d}| |i g ddddg dgd d S )	Nr+   z7
            <p>After</p>
            </p>
            ZAfterr   r/   r0   r1   r8   r;   r>   r   r   r   test_extra_end_tag_after  s&    

z/TestHtmlToContentState.test_extra_end_tag_afterc                 C   sR   t dgd}t|d}| |dg g dddddg g dd	d
dgi d d S )NZintror+   zN
            <p class="intro">before</p>
            <p>after</p>
            r0   r   rC   zintro-paragraphr   rD   r/   r   r;   r>   r   r   r   test_p_with_class  s4    	z(TestHtmlToContentState.test_p_with_classc                 C   s   t dgd}t|d}| |dg g dddddg ddd	d
gdddddg g ddddgdddddddddid d S )Nr   r+   zm
            <p>before <embed embedtype="image" alt="an image" id="1" format="left" /> after</p>
            r0   r   rC   r/   r   rf   r   r   r   rD   rj   r   r   rx   r   r   r   r   r   r   r;   r>   r   r   r   test_image_inside_paragraph*  sT    		z2TestHtmlToContentState.test_image_inside_paragraphc                 C   s   t ddgd}t|d}| |ddddd	gg dd
dddg ddddgddddddddd	gg ddddddddd	gg dddddg ddddgddddddddd	gg ddddgdddddddddddddddddd d S )Nr   rH   r+   z
            <p><i>before <embed embedtype="image" alt="an image" id="1" format="left" /> after</i></p>
            <p><i><embed embedtype="image" alt="an image" id="1" format="left" /></i></p>
            r0   r      rR   rL   rC   r/   r   rf   r   r   r      rD   r   r   r   rx   r   r   r   r   r   rw   r   r;   r>   r   r   r   test_image_inside_stylea  s    
	

	
=z.TestHtmlToContentState.test_image_inside_stylec                 C   s  t ddgd}t|d}| |dg ddddgdd	d
ddg ddddgdddddg ddddgddd
ddg ddddgddd
ddg ddddgdddddg ddddgddd
dgddddiddddddddd ddddiddddddddd d!d" d S )#Nr   ri   r+   a  
            <p><a href="https://wagtail.org">before <embed embedtype="image" alt="an image" id="1" format="left" /> after</a></p>
            <p><a href="https://wagtail.org"><embed embedtype="image" alt="an image" id="1" format="left" /></a></p>
            r0   r   r   r   rC   r/   r   rf   r   r   r   rD   r|   r   rQ   rk   rl   rm   zhttps://wagtail.orgro   r   r   rx   r   r   r   r   r   )rj   rx   23r   r;   r>   r   r   r   test_image_inside_link  s    					4z-TestHtmlToContentState.test_image_inside_linkN)F),__name__
__module____qualname__Zfixturesr*   rA   rB   rE   rF   rT   rU   rY   rZ   rb   rh   ru   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   &   sT   
$,>2N & $ $ 7PP
F
a2F0$3%&7cr#   c                   @   sD   e Z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 )TestContentStateToHtmlc                 C   s`   t dgd}tdddddidig d	d
ddddd
dgdgd}||}| |d d S )Nri   r+   rj   rk   rl   rm   rn   ro   rr   r   r/   r0   rQ   rs   rt   r1   r8   zO<p data-block-key="00000">an <a href="http://wagtail.org">external</a> link</p>r   r'   r(   to_database_formatassertEqualr)   r?   Zcontentstate_jsonr@   r   r   r   ru   +  s.    	
z)TestContentStateToHtml.test_external_linkc                 C   s`   t dgd}tdddddidig d	d
ddddd
dgdgd}||}| |d d S )Nri   r+   rj   rk   rl   rm   z/some/local/path/ro   rr   r   r/   r0   rQ   rs   rt   r1   r8   zN<p data-block-key="00000">an <a href="/some/local/path/">external</a> link</p>r   r   r   r   r   test_local_linkI  s.    	
z&TestContentStateToHtml.test_local_linkc                 C   s`   t dgd}tdddddidig d	d
ddddd
dgdgd}||}| |d d S )Nri   r+   rj   rk   rl   rm   zjavascript:alert('oh no')ro   rr   r   r/   r0   rQ   rs   rt   r1   r8   z5<p data-block-key="00000">an <a>external</a> link</p>r   r   r   r   r   test_reject_javascript_linkg  s,    	
z2TestContentStateToHtml.test_reject_javascript_linkc                 C   sT   t g d}ti g ddddg dg ddddg dgd	}||}| |d
 d S )Nr+   r.   r   r/   r0   r1   r6   r7   r8   r-   )r   r'   r(   r   assertHTMLEqual)r)   r?   contentStater@   r   r   r   test_paragraphs_retain_keys  s2    
	
z2TestContentStateToHtml.test_paragraphs_retain_keysc                 C   sd   t g dd}|ti g ddddg dg ddd	d
g dg ddd	dg dgd}| |d d S )Nr[   r+   r^   r   r_   r0   r1   rS   r`   r7   ra   r8   a  
            <h1 data-block-key='00000'>The rules of Fight Club</h1>
            <ol>
                <li data-block-key='00001'>You do not talk about Fight Club.</li>
                <li data-block-key='00002'>You do not talk about Fight Club.</li>
            </ol>
        )r   r   r'   r(   r   r>   r   r   r   test_wrapped_block_retains_key  sB    		!z5TestContentStateToHtml.test_wrapped_block_retains_keyc              	   C   sf   dt dd ii i g tjd}i g ddddg dg d	ddd
g dgd}t||}| |d d S )Nr/   c                 S   s   t di | d S )Npchildren)r   Zcreate_element)propsr   r   r   <lambda>      zATestContentStateToHtml.test_wrap_block_function.<locals>.<lambda>)Z	block_mapZ	style_mapZentity_decoratorsZcomposite_decoratorsZenginer.   r   r0   r1   r6   r7   r8   r-   )r   r   STRINGHTMLExporterrenderr   )r)   Zexporter_configr   r@   r   r   r   test_wrap_block_function  s>    	z/TestContentStateToHtml.test_wrap_block_functionc                 C   s   t g d}| jdd@}|ti ddddgddd	d
g dgd}W d    n1 s\0    Y  | |d | d|jd  d S )Nr+   WARNING)levelr      Z	UNDERLINErL   r.   r/   r0   r1   r8   z^
            <p data-block-key="00000">
                Hello world!
            </p>
        z/Missing config for "UNDERLINE". Deleting style.)r   Z
assertLogsr   r'   r(   r   ZassertInoutput)r)   r?   Z
log_outputr@   r   r   r   test_style_fallback  s0    

"
z*TestContentStateToHtml.test_style_fallbackN)
r   r   r   ru   r   r   r   r   r   r   r   r   r   r   r   *  s   "/-r   )F)r'   Zunittest.mockr   Zdjango.testr   Zdraftjs_exporter.domr   Zdraftjs_exporter.htmlr   r   Z/wagtail.admin.rich_text.converters.contentstater   r   Zwagtail.embeds.modelsr   r   r#   r   r   r   r   r   <module>   s.   
              