U
    }Ha\Q                     @   sN  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	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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" d dl#m$Z$ ddl%m&Z&m'Z' ddlm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/m0Z0 dd Z1dd Z2dd Z3dd Z4dd Z5dd Z6dd Z7e&G dd dZ8dS )     N)forms)ContextTemplate)
parse_html)activate
deactivate)gettext)	AccordionAccordionGroupAlertAppendedTextFieldWithButtonsInlineCheckboxesInlineRadiosPrependedAppendedTextPrependedTextStrictButtonTab	TabHolder)
FormHelper)HTMLFieldLayoutMultiWidgetField)contains_partial)render_crispy_form   )only_bootstraponly_bootstrap4)CheckboxesSampleFormCustomCheckboxSelectMultipleCustomRadioSelectGroupedChoiceForm
SampleFormSampleFormCustomWidgets)parse_expected
parse_formc                  C   s:   t  } t | _ttddd| j_t| }d|ks6td S )Nemailzcustom_field_template.html)templatez<h1>Special custom field</h1>)r#   r   helperr   r   layoutr   AssertionError)	test_formhtml r.   J/tmp/pip-unpacked-wheel-rp2i33ek/crispy_forms/tests/test_layout_objects.pytest_field_with_custom_template(   s
    r0   c                  C   s   t d} t }t |_ttdddiddddfd	|j_td
|i}| |}|	ddksbt
|	ddkstt
|	ddkst
|	ddkst
|	ddkst
d S )NzD
        {% load crispy_forms_tags %}
        {% crispy form %}
    datetime_fieldrelZtest_dateinputZtest_timeinputzwidth: 30px;hidden)r2   styletype)attrsformclass="dateinputr   zrel="test_dateinput"zrel="test_timeinput"   zstyle="width: 30px;"type="hidden")r   r#   r   r)   r   r   r*   r   rendercountr+   r(   r,   cr-   r.   r.   r/   test_multiwidget_field1   s$    
r?   c                  C   s   t d} t }t |_ttddddtd|j_td|i}| |}|	dd	ksZt
|	d
d	kslt
|	dd	ks~t
|	dd	kst
d S )NzI
        {% load crispy_forms_tags %}
        {% crispy test_form %}
    r'   r3      )r5   Z	data_testr1   r,   zdata-test="12"r   zname="email"r8   zclass="timeinput)r   r#   r   r)   r   r   r*   r   r;   r<   r+   r=   r.   r.   r/   test_field_type_hiddenM   s    
rA   c                 C   sh   t  }t |_ttddd|j_t|}| jdkrH|ddksdt	n| jdkrd|ddksdt	d S )	Nr'   Ztesting)Zwrapper_class	bootstrapzclass="control-group testing"r   
bootstrap3
bootstrap4zclass="form-group testing")
r#   r   r)   r   r   r*   r   CRISPY_TEMPLATE_PACKr<   r+   )settingsr7   r-   r.   r.   r/   test_field_wrapper_classf   s    

rH   c                 C   sx   t  }t |_ttd|j_t|}| jdkrD|ddkstt	n0| jdkrb|ddkstt	n|ddkstt	d S )Nzz
            if (a==b){
                // some comment
                a+1;
                foo();
            }
        Zuni_form
   rB         )
r#   r   r)   r   r   r*   r   rF   r<   r+   )rG   r,   r-   r.   r.   r/   test_html_with_carriage_returnsr   s    

rM   c                  C   sH   t d t } t | _tttd| j_t| }d|ks>t	t
  d S )NeszEnter a valid value.u   Introduzca un valor válido)r   r#   r   r)   r   r   _r*   r   r+   r   )r7   r-   r.   r.   r/   	test_i18n   s    rP   c                  C   s6   t  } | jd= | D ]
}d|_qt| }d|ks2td S )NZ
is_companyF<label)r#   fieldslabelr   r+   )r7   rR   r-   r.   r.   r/   test_remove_labels   s    rT   c                   @   s   e Zd Zdd Zdd Zedd Ze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ed!d" Zd#S )$TestBootstrapLayoutObjectsc                 C   s   t  }t|jd jtstt |_td|j_	t
|}|jdkrPd|ks\tnd|ks\tt|jd jtsrttd|j_	t
|}|jdkrd|kstnd|kstd S )Ninline_radiosrE   zclass="custom-control-input"zclass="radio"
checkboxeszclass="checkbox")r$   
isinstancerR   widgetr!   r+   r   r)   r   r*   r   rF   r    )selfrG   r7   r-   r.   r.   r/   test_custom_django_widget   s    

z4TestBootstrapLayoutObjects.test_custom_django_widgetc                 C   s  t  }t |_ttdddtddtdd|j_t|}t	|}|j
dkr|t	d	d
ksbt|t	dd
ksxt|t	dd
kst|t	dd
kst|j
dkr6|dd
kst|dd
kst|dd
kst|dd
kstttddddd|j_t|}d|ks&tt|ds6t|j
dkr|dd
ksVt|dd
ksjt|dd
ks~t|dd
kstttddddd|j_t|}d|kstt|dstd S )Nr'   @	gmail.com	password1#	password2$rB   z<span class="add-on">@</span>r   z%<span class="add-on">gmail.com</span>z<span class="add-on">#</span>z<span class="add-on">$</span>rD   z(<span class="input-group-addon">@</span>z0<span class="input-group-addon">gmail.com</span>z(<span class="input-group-addon">#</span>z(<span class="input-group-addon">$</span>zinput-lg	css_classzclass="input-lgz*<span class="input-group-addon input-lg"/>rE   z'<span class="input-group-text">@</span>z/<span class="input-group-text">gmail.com</span>z'<span class="input-group-text">#</span>z'<span class="input-group-text">$</span>zform-control-lgzclass="form-control-lgz <span class="input-group-text"/>)r#   r   r)   r   r   r   r   r*   r   r   rF   r<   r+   r   )rZ   rG   r,   r-   domr.   r.   r/   test_prepended_appended_text   sH    

z7TestBootstrapLayoutObjects.test_prepended_appended_textc                 C   sh   t  }tjdddgd|jd< t |_ttdd|j_t	|}|
ddksRt|
ddksdtd S )	NzSelect field)r   zChoice 1)r9   zChoice 2)rS   choicesselectZUSDzcustom-selectr   )r#   r   ZChoiceFieldrR   r   r)   r   r   r*   r   r<   r+   rZ   rG   r,   r-   r.   r.   r/   &test_prepended_appended_text_in_select   s     zATestBootstrapLayoutObjects.test_prepended_appended_text_in_selectc                 C   sn   t  }t |_ttdddddtddddtd	d
dd|j_t|}|	ddksXt
|	ddksjt
d S )Nr'   r\   r]   zinput-group-lg)Z
input_sizer^   r_   zinput-group-smr`   ra   z(<div class="input-group input-group-lg">r9   z(<div class="input-group input-group-sm">r   )r#   r   r)   r   r   r   r   r*   r   r<   r+   rh   r.   r.   r/   'test_prepended_appended_text_input_size   s    zBTestBootstrapLayoutObjects.test_prepended_appended_text_input_sizec                 C   s   t  }t |_ttd|j_t|}|jdkrD|ddks~t	n:|jdkrb|ddks~t	n|jdkr~|ddks~t	d S )	NrV   rB   zradio inline"r9   rD   zradio-inline"rE   custom-control-inline")
r   r   r)   r   r   r*   r   rF   r<   r+   rh   r.   r.   r/   test_inline_radios  s    


z-TestBootstrapLayoutObjects.test_inline_radiosc                 C   s  t  }t |_tttddtddd|j_t|}|jdkrx|	ddksRt
|	d	d
ksdt
|	dd
ksvt
n|jdkr|	dd
kst
|	ddkst
|	dd
kst
nj|jdkr$td|}|st
|d}|	dd
kst
|	dd
ks
t
|	d|d
ks$t
|	ddks8t
|	ddksLt
|	ddks`t
|	ddkstt
|	ddkst
d S )None
first_nametwor^   r`   rB   z<div class="accordion"r   z<div class="accordion-group">r9   z<div class="accordion-heading">rD   z <div class="panel panel-default"z<div class="panel-group"z<div class="panel-heading">rE   zdiv id="(accordion-\d+)"z<div class="card mb-2"z<div class="card-header"zdata-parent="#{}"z<div id="one"<div id="two"name="first_name"name="password1"name="password2")r#   r   r)   r   r	   r
   r*   r   rF   r<   r+   researchgroupformat)rZ   rG   r,   r-   matchZaccordion_idr.   r.   r/   !test_accordion_and_accordiongroup  s:    



z<TestBootstrapLayoutObjects.test_accordion_and_accordiongroupc                 C   s   t  }t |_tttdd|j_t|}|jdkr<d}n|jdkrLd}n|jdkrZd}|	d	| d
kspt
tttdddd|j_t|}|	d| dkst
d S )Nrm   rn   rB   zaccordion-body collapse inrD   zpanel-collapse collapse inrE   zcollapse showz<div id="one" class="%s"r   F)activez$<div id="one" class="%s collapse in"r   )r#   r   r)   r   r	   r
   r*   r   rF   r<   r+   )rZ   rG   r,   r-   Zaccordion_classr.   r.   r/   (test_accordion_active_false_not_rendered5  s,    


zCTestBootstrapLayoutObjects.test_accordion_active_false_not_renderedc                 C   sb   t  }t |_ttdd|j_t|}|ddks:t|ddksLt|ddks^td S )N
Testing...)contentz<div class="alert"r   z#<button type="button" class="close"	r#   r   r)   r   r   r*   r   r<   r+   rZ   r,   r-   r.   r.   r/   
test_alertU  s    z%TestBootstrapLayoutObjects.test_alertc                 C   sR   t  }t |_ttddd|j_t|}|ddks<t|ddksNtd S )Nr|   T)r}   blockz<div class="alert alert-block"r   r~   r   r.   r.   r/   test_alert_block_  s    z+TestBootstrapLayoutObjects.test_alert_blockc                 C   s  t  }t |_tttdddddtddd|j_t|}|jd	krl|	d
dksXt
|	ddkst
n6|	ddks~t
|	ddkst
|	ddkst
|	ddkst
|	ddkst
|	ddkst
|	ddkst
|	ddkst
|	ddkst
d S )Nrm   rn   zcustom-namezfirst-tab-class active)css_idrc   ro   r^   r`   rE   z|<ul class="nav nav-tabs"> <li class="nav-item"><a class="nav-link active" href="#custom-name" data-toggle="tab">One</a></li>r   tab-paner9   zk<ul class="nav nav-tabs"> <li class="tab-pane active"><a href="#custom-name" data-toggle="tab">One</a></li>z<li class="tab-pane   z'class="tab-pane first-tab-class active"z<div id="custom-name"rp   rq   rr   rs   )r#   r   r)   r   r   r   r*   r   rF   r<   r+   rh   r.   r.   r/   test_tab_and_tab_holderh  s>    

z2TestBootstrapLayoutObjects.test_tab_and_tab_holderc                 C   s   G dd dt j}| }t|}| }t|}|ddks@t|ddid}t|}d}|d	|dksrt|d
|dkstd S )Nc                   @   sF   e Zd ZejddZejddZe Ze	e
eddedde_dS )	zDTestBootstrapLayoutObjects.test_tab_helper_reuse.<locals>.SampleFormF)requiredTrm   val1ro   val2N)__name__
__module____qualname__r   Z	CharFieldr   r   r   r)   r   r   r   r*   r.   r.   r.   r/   r#     s   r#   zclass="nav-item active active"r   r   foo)datar   z#<div id="one" 
    class="{} activez#<div id="two" 
    class="{} activer   )r   ZFormr   r<   r+   rw   )rZ   r#   r,   r-   Z	tab_classr.   r.   r/   test_tab_helper_reuse  s    z0TestBootstrapLayoutObjects.test_tab_helper_reusec                 C   sN   t  }ddi|jd j_ddi|jd j_t|}d|ks>td|ksJtd S )NclassfirstrV   secondrW   zclass="first"zclass="second")r   rR   rY   r6   r   r+   )rZ   r7   r-   r.   r.   r/   test_radio_attrs  s    z+TestBootstrapLayoutObjects.test_radio_attrsc                 C   s  t  }t |_tttdddtdddtdddtd	d
dddddd|j_t|}d}|j	dkrhd}|
d| dks~t|
ddkst|
ddkst|
ddkst|
ddkst|
ddkst|
ddkst|
ddkst|
ddkst|
ddks$t|
ddks8t|j	dkrZ|
ddkstnB|j	d kr||
d!dkstn |j	d"kr|
d#dkstd S )$Nr^   Zspan4rb   zGo!z	go-button)r   zNo!extraZTestZsubmitZwhateverZ	something)r5   namevalueoff)rc   autocompletezcontrol-grouprC   z
form-groupzclass="%s extra"r   zautocomplete="off"zclass="span4zid="go-button"zclass="btn"r9   zclass="btn extra"ztype="submit"zname="whatever"zvalue="something"rB   zclass="input-append"rD   zclass="input-group-btnrE   zclass="input-group-append)r#   r   r)   r   r   r   r   r*   r   rF   r<   r+   )rZ   rG   r7   r-   Zform_group_classr.   r.   r/   test_field_with_buttons  sB    




z2TestBootstrapLayoutObjects.test_field_with_buttonsc                 C   s   t  }|jD ]}t |j| _qt |_ttddt	ddt
ddtdtd|j_t|}|dd	ksrt|d
d	kst|ddkstd S )Nr^   r   r`   barr'   rn   	last_namez<input   r:   rQ   r   )r#   rR   r   ZHiddenInputrY   r   r)   r   r   r   r   r   r   r*   r   r<   r+   )rZ   r7   fieldr-   r.   r.   r/   test_hidden_fields  s    
z-TestBootstrapLayoutObjects.test_hidden_fieldsc                 C   s   t  }t|}|ddks tt||_|jd jtdd t|}|jdkrv|ddksbt|d	dkstnV|jd
kr|ddkst|jdkr|ddkstn|jdkr|ddkstd S )Nchecked   r   T)inlinerB   zcheckbox inline"   zinline"rC   zinline="True"r   rD   zcheckbox-inline"rE   rk   )	r   r   r<   r+   r   r)   wrapr   rF   rh   r.   r.   r/   test_multiplecheckboxes  s    




z2TestBootstrapLayoutObjects.test_multiplecheckboxesc              	   C   sP   t  }t|}ddddddddd	g	}|D ]"}d
| d}||dks(tq(d S )NZcheckboxes_0Zcheckboxes_1Zcheckboxes_2Zalphacheckboxes_0Zalphacheckboxes_1Zalphacheckboxes_2Znumeric_multiple_checkboxes_0Znumeric_multiple_checkboxes_1Znumeric_multiple_checkboxes_2zid="id_"r   )r   r   r<   r+   )rZ   r,   r-   Zexpected_idsZ	id_suffixZexpected_strr.   r.   r/   #test_multiple_checkboxes_unique_ids
  s    z>TestBootstrapLayoutObjects.test_multiple_checkboxes_unique_idsc                 C   s   t  }t |_td|j_t|tdks.ttd|j_t|tdksNtt i }t |_td|j_t|tdks~ttd|j_t|tdkstd S )NZcheckbox_select_multiplez;bootstrap4/test_layout_objects/test_grouped_checkboxes.htmlZradioz7bootstrap4/test_layout_objects/test_grouped_radios.htmlzCbootstrap4/test_layout_objects/test_grouped_checkboxes_failing.htmlz?bootstrap4/test_layout_objects/test_grouped_radios_failing.html)r"   r   r)   r   r*   r&   r%   r+   )rZ   r7   r.   r.   r/   test_grouped_checkboxes_radios  s    
z9TestBootstrapLayoutObjects.test_grouped_checkboxes_radiosN)r   r   r   r[   re   r   ri   rj   rl   ry   r{   r   r   r   r   r   r   r   r   r   r   r.   r.   r.   r/   rU      s(   ,

$ 
	'&&rU   )9rt   Zdjangor   Zdjango.templater   r   Zdjango.test.htmlr   Zdjango.utils.translationr   r   r   rO   Zcrispy_forms.bootstrapr	   r
   r   r   r   r   r   r   r   r   r   r   Zcrispy_forms.helperr   Zcrispy_forms.layoutr   r   r   r   Zcrispy_forms.tests.utilsr   Zcrispy_forms.utilsr   Zconftestr   r   r   r    r!   r"   r#   r$   utilsr%   r&   r0   r?   rA   rH   rM   rP   rT   rU   r.   r.   r.   r/   <module>   s,   8 	