a
    ùÜEbµ]  ã                   @   sR  d dl Z d dlmZ d dlmZ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lmZ d d	lmZmZ d d
lmZ d dlmZmZmZmZmZmZmZmZm Z  d dl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' ddlm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7 dd„ Z8dd„ Z9dd„ Z:dd„ Z;dd„ Z<dd„ Z=dd„ Z>dd „ Z?d!d"„ Z@e&d#d$„ ƒZAd%d&„ ZBd'd(„ ZCd)d*„ ZDd+d,„ ZEd-d.„ ZFd/d0„ ZGd1d2„ ZHd3d4„ ZIe'd5d6„ ƒZJe'd7d8„ ƒZKe$d9d:„ ƒZLe&d;d<„ ƒZMe&d=d>„ ƒZNe&e jO Pd?d@dAg¡dBdC„ ƒƒZQe%dDdE„ ƒZRe&dFdG„ ƒZSdHdI„ ZTe&dJdK„ ƒZUe&dLdM„ ƒZVe&dNdO„ ƒZWdS )Pé    N)Úforms)Úformset_factoryÚmodelformset_factory)Ú_get_new_csrf_string)Úrender)ÚContextÚTemplate)Úreverse)Úgettext_lazy)ÚFieldÚInlineCheckboxes)Ú
FormHelper)	ÚHTMLÚButtonHolderÚColumnÚDivÚFieldsetÚLayoutÚ
MultiFieldÚRowÚSubmit)Úrender_crispy_formé   )Úonly_bootstrapÚonly_bootstrap3Úonly_bootstrap4Úonly_uni_form)ÚAdvancedFileFormÚCheckboxesSampleFormÚCrispyEmptyChoiceTestModelÚCrispyTestModelÚFileFormÚ
SampleFormÚSampleForm2ÚSampleForm3ÚSampleForm4ÚSampleForm5ÚSampleForm6ÚSelectSampleForm)Úcontains_partialÚparse_expectedÚ
parse_formc                 C   sj   t ƒ }| tdƒ¡ tdƒ}ttƒ |dœƒ}d| _t t	¡� | 
|¡ W d   ƒ n1 s\0    Y  d S )Nu   espaÃ±aúP
        {% load crispy_forms_tags %}
        {% crispy form form_helper %}
    ©ÚformÚform_helperF©r   Ú
add_layoutr   r   r   r"   ZCRISPY_FAIL_SILENTLYÚpytestZraisesÚ	Exceptionr   ©Úsettingsr/   ÚtemplateÚc© r8   ú^/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/crispy_forms/tests/test_layout.pyÚtest_invalid_unicode_characters"   s    ÿr:   c                  C   s,   G dd„ dt jƒ} t| ƒ ƒ}d|v s(J ‚d S )Nc                       s,   e Zd Z‡ fdd„Zeƒ Zedƒe_‡  ZS )z,test_unicode_form_field.<locals>.UnicodeFormc                    s$   t ƒ j|i |¤Ž t ¡ | jd< d S )Nõ   contraseÃ±a)ÚsuperÚ__init__r   Ú	CharFieldÚfields)ÚselfÚargsÚkwargs©Ú	__class__r8   r9   r=   5   s    z5test_unicode_form_field.<locals>.UnicodeForm.__init__r;   )	Ú__name__Ú
__module__Ú__qualname__r=   r   Úhelperr   ÚlayoutÚ__classcell__r8   r8   rC   r9   ÚUnicodeForm4   s   rK   u   id="id_contraseÃ±a")r   ÚFormr   )rK   Úhtmlr8   r8   r9   Útest_unicode_form_field3   s    
rN   c                  C   s^   G dd„ dt ƒ} | ƒ }|jd= tƒ }tdƒ|_tdƒ}t||dœƒ}| |¡}d|vsZJ ‚d S )Nc                   @   s   e Zd ZG dd„ dƒZdS )z@test_meta_extra_fields_with_missing_fields.<locals>.FormWithMetac                   @   s   e Zd ZdZdS )zEtest_meta_extra_fields_with_missing_fields.<locals>.FormWithMeta.Meta)ÚemailÚ
first_nameÚ	last_nameN)rE   rF   rG   r?   r8   r8   r8   r9   ÚMetaB   s   rR   N)rE   rF   rG   rR   r8   r8   r8   r9   ÚFormWithMetaA   s   rS   rO   rP   r,   r-   )r"   r?   r   r   rI   r   r   r   )rS   r.   r/   r6   r7   rM   r8   r8   r9   Ú*test_meta_extra_fields_with_missing_fields@   s    
ÿ
rT   c                 C   sj   t ƒ }| tdƒ¡ tdƒ}ttƒ |dœƒ}d| _t t	¡� | 
|¡ W d   ƒ n1 s\0    Y  d S )NZtypor,   r-   Fr0   r4   r8   r8   r9   Útest_layout_unresolved_fieldW   s    ÿrU   c                 C   sl   t ƒ }| tddƒ¡ tdƒ}ttƒ |dœƒ}d| _t t	¡� | 
|¡ W d   ƒ n1 s^0    Y  d S )NÚ
is_companyr,   r-   Fr0   r4   r8   r8   r9   Útest_double_rendered_fieldg   s    ÿrW   c                  C   sf   G dd„ dt jƒ} | ƒ }tƒ }tdƒ}t||dœƒ}| |¡}| d¡dksPJ ‚| d¡dksbJ ‚d S )	Nc                   @   s   e Zd Ze ¡ ZdS )z+test_context_pollution.<locals>.ExampleFormN)rE   rF   rG   r   r>   Úcommentr8   r8   r8   r9   ÚExampleFormx   s   rY   zw
        {% load crispy_forms_tags %}
        {{ form.as_ul }}
        {% crispy form2 %}
        {{ form.as_ul }}
    )r.   Úform2zname="comment"é   zname="is_company"r   )r   rL   r"   r   r   r   Úcount)rY   r.   rZ   r6   r7   rM   r8   r8   r9   Útest_context_pollutionw   s    ÿ
r]   c                 C   s  t ƒ }| ttddddddd�tdd	td
dddd�tdƒtdƒddƒƒ¡ tdƒ}ttƒ |dddœƒ}| 	|¡}d|v s|J ‚d|v sˆJ ‚d|v s”J ‚d|v s J ‚d|v s¬J ‚| 
d¡dks¾J ‚| jdkrÖd|v súJ ‚n$| jd krîd!|v súJ ‚nd"|v súJ ‚d|v �sJ ‚d#|v �sJ ‚d S )$NúCompany DatarV   Zfieldset_company_dataZ	fieldsetsZfieldset_titleÚ123)Úcss_idÚ	css_classÚtitleZtest_fieldsetz	User DatarO   Ú	password1Ú	password2Zrow_passwordsÚrows©r`   ra   z'<a href="#" id="testLink">test link</a>zK
                    {% if flag %}{{ message }}{% endif %}
                rP   rQ   r,   TzHello!)r.   r/   ÚflagÚmessagezid="fieldset_company_data"zclass="fieldsetsztitle="fieldset_title"ztest-fieldset="123"zid="row_passwords"z<labelé   Úuni_formzclass="formRow rows"Ú
bootstrap4zclass="form-row rows"zclass="row rows"ZtestLink)r   r1   r   r   r   r   r   r   r"   r   r\   ÚCRISPY_TEMPLATE_PACK)r5   r/   r6   r7   rM   r8   r8   r9   Ú5test_layout_fieldset_row_html_with_unicode_fieldnames�   s^    úüÿð÷ÿÿ


rm   c                  C   s~   t dƒ} tƒ }tƒ }| ttddddddd�td	d
dd�ƒ¡ |jd= |jjd jd= t	||dœƒ}|  
|¡}d|vszJ ‚d S )Nr,   r^   rV   rO   rc   rd   Úmultifield_info©r`   rP   rQ   Úcolumn_namer   r   r-   )r   r"   r   r1   r   r   r   r?   rI   r   r   )r6   r.   r/   r7   rM   r8   r8   r9   Ú+test_change_layout_dynamically_delete_fieldÈ   s6    ÿúý÷ÿ
rq   c                 C   s´   t dƒ}tƒ }tƒ }| ttddddddd�td	d
ƒƒ¡ t||dœƒ}| |¡}| j	dkr‚| 
d¡dksnJ ‚| 
d¡dks°J ‚n.| j	dkr°| 
d¡dksžJ ‚| 
d¡dks°J ‚d S )Nr,   r^   rV   rO   rc   rd   rn   ro   rP   rQ   r-   rj   Ú
formColumnr   Úcolr   rk   úcol-md)r   r"   r   r1   r   r   r   r   r   rl   r\   ©r5   r6   r.   r/   r7   rM   r8   r8   r9   Útest_column_has_css_classesî   s4    ÿú÷ÿ


rv   c              
   C   s€   t dƒ}tƒ }tƒ }| ttddƒtdddd�tdddd�ƒ¡ t||dœƒ}| |¡}| d¡d	ksjJ ‚| d¡d
ks|J ‚d S )Nr,   rP   rQ   zcol-sm©ra   zmb-4r-   rt   r[   r   )	r   r"   r   r1   r   r   r   r   r\   ru   r8   r8   r9   Útest_bs4_column_css_classes  s     ÿýÿ
rx   c                 C   s¼  t tdd�}|ƒ }tƒ }d|_d|_d|_d|_ttddd	ƒt	d
ƒt
ddƒtdddƒƒ|_t||dtƒ id�}t|dƒs|J ‚t|dƒsŠJ ‚t|dƒs˜J ‚t|dƒs¦J ‚| d¡dks¸J ‚| d¡dksÊJ ‚| d¡dksÜJ ‚d|v sèJ ‚d|v sôJ ‚d|v �sJ ‚dtdƒ |v �sJ ‚d|v �s&J ‚d|v �s4J ‚d |v �sBJ ‚| d!¡dk�sVJ ‚| jd"k�rx| d#¡dk�s˜J ‚n | jd$v �r˜| d%¡dk�s˜J ‚| jd&k�r¸| d'¡d(k�s¸J ‚d S ))Né   )ÚextraZthisFormsetRockszformsets-that-rockÚPOSTZsimpleActionzItem {{ forloop.counter }}rV   rO   z9{% if forloop.first %}Note for first form only{% endif %}rc   rd   Ú rP   rQ   Z
csrf_token)r.   rH   ÚcontextúQ<input id="id_form-TOTAL_FORMS" name="form-TOTAL_FORMS" type="hidden" value="3"/>úU<input id="id_form-INITIAL_FORMS" name="form-INITIAL_FORMS" type="hidden" value="0"/>úX<input id="id_form-MAX_NUM_FORMS" name="form-MAX_NUM_FORMS" type="hidden" value="1000"/>zU<input id="id_form-MIN_NUM_FORMS" name="form-MIN_NUM_FORMS" type="hidden" value="0"/>Úhiddené   z<formr   Zcsrfmiddlewaretokenzmethod="post"zid="thisFormsetRocks"zaction="%s"zItem 1zItem 2zItem 3zNote for first form onlyrj   ZformRow)Ú
bootstrap3rk   Úrowrk   z
form-groupé   )r   r"   r   Zform_idÚ
form_classZform_methodZform_actionr   r   r   r   rI   r   r   r)   r\   r	   rl   )r5   ZSampleFormSetÚformsetrH   rM   r8   r8   r9   Útest_formset_layout+  sZ    ý
øÿÿÿrˆ   c                  C   sø   t ttdd�} | tj ¡ d�}tƒ }tdƒ|_t||d�}| 	d¡dksLJ ‚| 	d¡dks^J ‚| 	d	¡dkspJ ‚t
|d
ƒs~J ‚t
|dƒsŒJ ‚t
|dƒsšJ ‚| 	d¡dks¬J ‚| 	d¡dks¾J ‚| 	d¡dksÐJ ‚| 	d¡dksâJ ‚| 	d¡dksôJ ‚d S )Nry   )r.   rz   )ZquerysetrO   )r.   rH   zid_form-0-idr   zid_form-1-idzid_form-2-idr~   r   r€   zname="form-0-email"zname="form-1-email"zname="form-2-email"zname="form-3-email"r   Úpassword)r   r    r%   ÚobjectsÚnoner   r   rI   r   r\   r)   )ZCrispyModelFormSetr‡   rH   rM   r8   r8   r9   Útest_modelformset_layoutc  s(    
ÿÿrŒ   c                  C   sb   t dƒ} tƒ }tƒ }tttdƒƒttdƒddƒƒ|_||_|  	t
d|iƒ¡}| d¡dks^J ‚d S )NzP
        {% load crispy_forms_tags %}
        {% crispy form form.helper %}
    z	i18n textzi18n legendrP   rQ   r.   r   )r   r"   r   r   r   Ú_r   rI   rH   r   r   r\   )r6   r.   r/   rM   r8   r8   r9   Ú	test_i18n~  s     ÿ
ýþrŽ   c                  C   s    t ƒ } | jjjg d¢ksJ ‚d S )N)rV   rO   rc   rd   rP   rQ   Zdatetime_field)r#   rH   rI   r?   ©Ú	test_formr8   r8   r9   Útest_default_layout•  s    r‘   c                  C   s   t ƒ } | jjjdgksJ ‚d S )NrO   )r$   rH   rI   r?   r�   r8   r8   r9   Útest_default_layout_two¢  s    r’   c                  C   s>   t ƒ } tƒ | _tdƒ| j_t| ƒ}d|v s.J ‚d|vs:J ‚d S )NrO   r‰   )r%   r   rH   r   rI   r   ©r�   rM   r8   r8   r9   Ú"test_modelform_layout_without_meta§  s    r”   c                  C   sH   t ƒ } t ¡ | jd _tƒ | _tdtdƒƒ| j_	t
| ƒ}d|v sDJ ‚d S )NrO   z0<span>first span</span> <span>second span</span>)r"   r   ZTextarear?   Zwidgetr   rH   r   r   rI   r   r“   r8   r8   r9   Ú2test_specialspaceless_not_screwing_intended_spaces±  s    r•   c                  C   s.   t ƒ } d | _t| d�}t|ƒ}d|v s*J ‚d S )N)ÚinstanceÚchecked)r   Zfruitr'   r   )Zmodel_instancer�   rM   r8   r8   r9   Ú!test_choice_with_none_is_selected»  s
    
r˜   c                  C   sø   t ƒ } |  tttddddd�ƒtdddd	�ttd
d
dd�ƒtddddd	�ƒ¡ tdƒ}t	t
ƒ | dœƒ}| |¡}d|v s|J ‚d|v sˆJ ‚d|v s”J ‚d|v s J ‚d|v s¬J ‚d|v s¸J ‚d|v sÄJ ‚d|v sÐJ ‚d|v sÜJ ‚d|v sèJ ‚d|vsôJ ‚d S )NúSome company datarV   rO   rn   ro   rP   rp   Úcolumnsrf   ÚSaveúbutton whiterw   rc   rd   ú
custom-divÚ
customdivsú\
            {% load crispy_forms_tags %}
            {% crispy form form_helper %}
        r-   Ú
multiFieldrr   úid="multifield_info"úid="column_name"úclass="formColumn columns"úclass="buttonHolder">úinput type="submit"zname="Save"úid="custom-div"úclass="customdivs"rQ   ©r   r1   r   r   r   r   r   r   r   r   r"   r   ©r/   r6   r7   rM   r8   r8   r9   Útest_layout_compositionÄ  sV    üÿüÿüîÿÿ
rª   c                  C   s|  t ƒ } |  ttddddddd�tdd	d
dd�ttdddddd�tddƒƒtdddddd�ƒ¡ tdƒ}t	t
ƒ | ddœƒ}| |¡}d|v sŽJ ‚d|v sšJ ‚d|v s¦J ‚d|v s²J ‚d |v s¾J ‚d!|v sÊJ ‚d"|v sÖJ ‚d#|v sâJ ‚d$|v sîJ ‚d|v súJ ‚d%|v �sJ ‚d&|v �sJ ‚d'|v �s$J ‚d(|v �s2J ‚d)|v �s@J ‚d*|v �sNJ ‚d+|v �s\J ‚d,|v �sjJ ‚d-|v �sxJ ‚d S ).Nr™   rV   rO   rn   Zmultifield_titler_   )r`   rb   Zmultifield_testrP   rQ   rp   rš   rf   zSave the worldz{{ value_var }}rœ   Útest)ra   Zdata_idZ	data_nameÚstorezStore resultsrc   rd   r�   rž   )r`   ra   Ztest_markuprŸ   r›   )r.   r/   Z	value_varr    rr   r¡   ztitle="multifield_title"zmultifield-test="123"r¢   r£   r¤   r¥   zdata-id="test"zdata-name="test"zname="save-the-world"zvalue="Save"zname="store"zvalue="Store results"r¦   r§   ztest-markup="123"r¨   r©   r8   r8   r9   Ú<test_second_layout_multifield_column_buttonholder_submit_divù  sd    úü
ÿüëÿÿ
r­   c                 C   s®   t ƒ }tƒ |_tdtdƒdƒ|j_d|i}td d|d�}| jdkrX|j 	d¡d	ksªJ ‚nR| jd
krx|j 	d¡d	ksªJ ‚n2| jdkrª|j 	d¡d	ks–J ‚|j 	d¡dksªJ ‚d S )NÚ
checkboxesÚalphacheckboxesÚnumeric_multiple_checkboxesr.   zcrispy_render_template.html)ÚrequestZtemplate_namer}   Z	bootstraps   checkbox inlinery   rƒ   s   checkbox-inlinerk   s   custom-control-inlines   custom-checkboxr   )
r   r   rH   r   r   rI   r   rl   Úcontentr\   )r5   r.   r}   Úresponser8   r8   r9   Ú test_keepcontext_context_manager4  s    


r´   c                  C   sª   t ƒ } tƒ | _tdtdƒdƒ| j_t| ƒtdƒks6J ‚d| j_t| ƒtdƒksRJ ‚d| j_t| ƒtdƒksnJ ‚t i ƒ} tƒ | _tdtdƒdƒ| j_t| ƒtdƒks¦J ‚d S )	Nr®   r¯   r°   zNbootstrap4/test_layout/test_use_custom_control_is_used_in_checkboxes_true.htmlTFzObootstrap4/test_layout/test_use_custom_control_is_used_in_checkboxes_false.htmlzVbootstrap4/test_layout/test_use_custom_control_is_used_in_checkboxes_true_failing.html)	r   r   rH   r   r   rI   r+   r*   Úuse_custom_control©r.   r8   r8   r9   Ú-test_use_custom_control_is_used_in_checkboxesI  s8    ýÿ
ÿ
ÿ
ýÿr·   c                  C   sš   t ƒ } tƒ | _tdƒ| j_t| ƒtdƒks.J ‚d| j_t| ƒtdƒksJJ ‚d| j_t| ƒtdƒksfJ ‚t i ƒ} tƒ | _tdƒ| j_t| ƒtdƒks–J ‚d S )NZradio_selectzIbootstrap4/test_layout/test_use_custom_control_is_used_in_radio_true.htmlTFzJbootstrap4/test_layout/test_use_custom_control_is_used_in_radio_false.htmlzQbootstrap4/test_layout/test_use_custom_control_is_used_in_radio_true_failing.html)r&   r   rH   r   rI   r+   r*   rµ   r¶   r8   r8   r9   Ú(test_use_custom_control_is_used_in_radiom  s0    ÿÿ
ÿ
ÿ
ÿÿr¸   z!use_custom_control, expected_html)TzBbootstrap4/test_layout/test_use_custom_control_in_select_true.html)FzCbootstrap4/test_layout/test_use_custom_control_in_select_false.htmlc                 C   sB   t ƒ }tƒ |_d|j_tdƒ|j_| |j_t|ƒt|ƒks>J ‚d S )Nrk   Úselect)	r(   r   rH   Ztemplate_packr   rI   rµ   r+   r*   )rµ   Zexpected_htmlr.   r8   r8   r9   Ú!test_use_custom_control_in_select�  s    	rº   c                  C   s¦   t ƒ } tƒ | _d| j_d| j_tdddƒ| j_t| ƒ}| d¡dksHJ ‚| d¡d	ksZJ ‚| d
¡dkslJ ‚| d¡dks~J ‚| d¡dks�J ‚| d¡d	ks¢J ‚d S )Núform-inlinez#bootstrap3/layout/inline_field.htmlrO   rc   rQ   úclass="form-inline"r   zclass="form-group"ry   ú$<label for="id_email" class="sr-onlyz$id="div_id_email" class="form-group"úplaceholder="email"ú</label> <input©	r"   r   rH   r†   Zfield_templater   rI   r   r\   ©r.   rM   r8   r8   r9   Útest_form_inline   s     ýrÂ   c                  C   s¦   t ƒ } tƒ | _d| j_d| j_tdddƒ| j_t| ƒ}| d¡dksHJ ‚| d¡d	ksZJ ‚| d
¡dkslJ ‚| d¡dks~J ‚| d¡dks�J ‚| d¡d	ks¢J ‚d S )Nr»   z#bootstrap4/layout/inline_field.htmlrO   rc   rQ   r¼   r   zclass="input-group"ry   r½   z%id="div_id_email" class="input-group"r¾   r¿   rÀ   rÁ   r8   r8   r9   Útest_bootstrap4_form_inlineµ  s    rÃ   c                  C   sž   t ƒ } tƒ | _tdtdƒdƒ| j_| jd jdd� t| ƒ}| d¡dksNJ ‚tƒ | _tdtddd�dƒ| j_| jd jdd� t| ƒ}| d	¡dksšJ ‚d S )
NrO   rc   rd   Zhellorw   z class="hello textinputr   Zhello2z class="hello hello2 textinput)	r"   r   rH   r   r   rI   Zupdate_attributesr   r\   rÁ   r8   r8   r9   Útest_update_attributes_classÆ  s    
ýrÄ   c                  C   s’   t ƒ } tƒ | _tdƒ| j_t| ƒtdƒks.J ‚d| j_t| ƒtdƒksJJ ‚d| j_tdƒ| j_t| ƒtdƒksrJ ‚d| j_t| ƒtdƒksŽJ ‚d S )	NÚclearable_filezDbootstrap4/test_layout/test_file_field_clearable_custom_control.htmlFz5bootstrap4/test_layout/test_file_field_clearable.htmlTÚ
file_fieldz:bootstrap4/test_layout/test_file_field_custom_control.htmlz3bootstrap4/test_layout/test_file_field_default.html)r!   r   rH   r   rI   r+   r*   rµ   r¶   r8   r8   r9   Útest_file_fieldØ  s    rÇ   c                  C   sR   t ƒ } tƒ | _tdƒ| j_t| ƒtdƒks.J ‚tdƒ| j_t| ƒtdƒksNJ ‚d S )NrÅ   zGbootstrap4/test_layout/test_file_field_with_custom_class_clearable.htmlrÆ   z=bootstrap4/test_layout/test_file_field_with_custom_class.html)r   r   rH   r   rI   r+   r*   r¶   r8   r8   r9   Ú!test_file_field_with_custom_classê  s    ÿ
rÈ   c                  C   s:   t ƒ } tƒ | _ttddd�ƒ| j_t| ƒtdƒks6J ‚dS )z>CSS classes form-control and form-control-lg are both requiredrP   zform-control-lgrw   z2bootstrap4/test_layout/test_form_control_size.htmlN)r"   r   rH   r   r   rI   r+   r*   r¶   r8   r8   r9   Útest_form_control_size÷  s    rÉ   )Xr2   Údjangor   Zdjango.forms.modelsr   r   Zdjango.middleware.csrfr   Zdjango.shortcutsr   Zdjango.templater   r   Zdjango.urlsr	   Zdjango.utils.translationr
   r�   Zcrispy_forms.bootstrapr   r   Zcrispy_forms.helperr   Zcrispy_forms.layoutr   r   r   r   r   r   r   r   r   Zcrispy_forms.utilsr   Zconftestr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   Úutilsr)   r*   r+   r:   rN   rT   rU   rW   r]   rm   rq   rv   rx   rˆ   rŒ   rŽ   r‘   r’   r”   r•   r˜   rª   r­   r´   r·   r¸   ÚmarkZparametrizerº   rÂ   rÃ   rÄ   rÇ   rÈ   rÉ   r8   r8   r8   r9   Ú<module>   s|   ,8;&#
8

	
4
:

#
þþ



