
^Q\G                 @   s3  d  d l  m Z d  d l Z 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 d  d	 l 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. m/ Z/ d d l0 m1 Z1 y d  d l2 m3 Z3 Wn" e4 k
 rd  d l2 m5 Z3 Yn Xy d  d l6 m7 Z7 Wn" e4 k
 rd  d l8 m7 Z7 Yn Xd d   Z9 d d   Z: d d   Z; d d   Z< d d   Z= d d   Z> d  d!   Z? d" d#   Z@ d$ d%   ZA d& d'   ZB d( d)   ZC e jD jE e jF dC k d+ d, d- d.    ZG d/ d0   ZH d1 d2   ZI d3 d4   ZJ d5 d6   ZK d7 d8   ZL e& d9 d:    ZM e& d; d<    ZN e# d= d>    ZO e$ d? d@    ZP e% dA dB    ZQ d S)D    )unicode_literalsN)forms)formset_factorymodelformset_factory)render_to_response)ContextTemplate)ugettext_lazy)InlineCheckboxes)PY2)
FormHelper)	HTMLButtonHolderColumnDivFieldsetLayout
MultiFieldRowSubmit)render_crispy_form   )only_bootstraponly_bootstrap3only_bootstrap4only_uni_form)	CheckboxesSampleFormCrispyTestModelCrispyEmptyChoiceTestModel
SampleFormSampleForm2SampleForm3SampleForm4SampleForm5SampleForm6)contains_partial)_get_new_csrf_key)_get_new_csrf_string)reversec          	   C   su   t    } | j t d   t d  } t i t   d 6| d 6 } d |  _ t j t	   | j
 |  Wd  QXd  S)Nu   españazP
        {% load crispy_forms_tags %}
        {% crispy form form_helper %}
    formform_helperF)r   
add_layoutr   r   r   r   CRISPY_FAIL_SILENTLYpytestraises	Exceptionrender)settingsr*   templatec r4   Q/var/www/dbchiro/venv/build/django-crispy-forms/crispy_forms/tests/test_layout.pytest_invalid_unicode_characters*   s    	
		r6   c           	      sp   G  f d d   d t  j    t rK t j t   t      Wd  QXn! t      }  d |  k sl t  d  S)Nc                   s=   e  Z d  Z    f d d   Z e   Z e d  e _   S)z,test_unicode_form_field.<locals>.UnicodeFormc                s0   t    |   j | |   t j   |  j d <d  S)Nu   contraseña)super__init__r   	CharFieldfields)selfargskwargs)UnicodeForm	__class__r4   r5   r8   ?   s    z5test_unicode_form_field.<locals>.UnicodeForm.__init__u   contraseña)__name__
__module____qualname__r8   r   helperr   layoutr4   )r>   )r?   r5   r>   >   s   	r>   u   id="id_contraseña")r   Formr   r-   r.   r/   r   AssertionError)htmlr4   )r>   r5   test_unicode_form_field=   s    rH   c              C   s   Gd d   d t   }  |    } | j d =t   } t d  | _ t d  } t i | d 6| d 6 } | j |  } d | k s t  d  S)Nc               @   s#   e  Z d  Z Gd 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)zemailrJ   rK   )r@   rA   rB   r:   r4   r4   r4   r5   MetaP   s   rL   N)r@   rA   rB   rL   r4   r4   r4   r5   FormWithMetaO   s   rM   rI   rJ   zP
        {% load crispy_forms_tags %}
        {% crispy form form_helper %}
    r)   r*   )	r   r:   r   r   rD   r   r   r0   rF   )rM   r)   r*   r2   r3   rG   r4   r4   r5   *test_meta_extra_fields_with_missing_fieldsN   s    	
		rN   c          	   C   su   t    } | j t d   t d  } t i t   d 6| d 6 } d |  _ t j t	   | j
 |  Wd  QXd  S)NZtypozP
        {% load crispy_forms_tags %}
        {% crispy form form_helper %}
    r)   r*   F)r   r+   r   r   r   r   r,   r-   r.   r/   r0   )r1   r*   r2   r3   r4   r4   r5   test_layout_unresolved_fielde   s    	
		rO   c          	   C   sx   t    } | j t d d   t d  } t i t   d 6| d 6 } d |  _ t j t	   | j
 |  Wd  QXd  S)N
is_companyzP
        {% load crispy_forms_tags %}
        {% crispy form form_helper %}
    r)   r*   F)r   r+   r   r   r   r   r,   r-   r.   r/   r0   )r1   r*   r2   r3   r4   r4   r5   test_double_rendered_fieldw   s    	
		rQ   c              C   s   Gd d   d t  j  }  |    } t   } t d  } t i | d 6| d 6 } | j |  } | j d  d k s{ t  | j d  d	 k s t  d  S)
Nc               @   s   e  Z d  Z e j   Z d S)z+test_context_pollution.<locals>.ExampleFormN)r@   rA   rB   r   r9   commentr4   r4   r4   r5   ExampleForm   s   rS   zw
        {% load crispy_forms_tags %}
        {{ form.as_ul }}
        {% crispy form2 %}
        {{ form.as_ul }}
    r)   form2zname="comment"   zname="is_company"r   )r   rE   r   r   r   r0   countrF   )rS   r)   rT   r2   r3   rG   r4   r4   r5   test_context_pollution   s    			rW   c             C   s  t    } | j t t d d d d d d d d d	 d
 t d d t d d d d d d t d  t d  d d    t d  } t i t   d 6| d 6d d 6d d 6 } | j	 |  } d | k s t
  d | k s t
  d | k s t
  d | k st
  d  | k st
  | j d!  d" k s4t
  |  j d# k rXd$ | k sjt
  n d% | k sjt
  d | k s|t
  d& | k st
  d  S)'NzCompany DatarP   css_idZfieldset_company_data	css_classZ	fieldsetstitleZfieldset_titleZtest_fieldset123z	User DatarI   	password1	password2Zrow_passwordsrowsz'<a href="#" id="testLink">test link</a>zK
                    {% if flag %}{{ message }}{% endif %}
                rJ   rK   zP
        {% load crispy_forms_tags %}
        {% crispy form form_helper %}
    r)   r*   TflagzHello!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"zclass="row rows"ZtestLink)r   r+   r   r   r   r   r   r   r   r0   rF   rV   CRISPY_TEMPLATE_PACK)r1   r*   r2   r3   rG   r4   r4   r5   5test_layout_fieldset_row_html_with_unicode_fieldnames   sT    			
rd   c           
   C   s   t  d  }  t   } t   } | j t t d d d d d d d t d	 d
 d d   | j d =| j j d j d =t	 i | d 6| d 6 } |  j
 |  } d | k s t  d  S)NzP
        {% load crispy_forms_tags %}
        {% crispy form form_helper %}
    zCompany DatarP   rI   r\   r]   rX   multifield_inforJ   rK   column_namer   r   r)   r*   )r   r   r   r+   r   r   r   r:   rD   r   r0   rF   )r2   r)   r*   r3   rG   r4   r4   r5   +test_change_layout_dynamically_delete_field   s,    			
rg   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 | d | d i t   d 6 } t | d  s t  t | d  s t  t | d  s t  t | d  s t  | j d  d k st  | j d  d k s6t  | j d  d k sQt  d | k sct  d | k sut  d | k st  d t d  | k st  d  | k st  d! | k st  d" | k st  | j d#  d k st  |  j d$ k r!| j d%  d k s<t  n | j d&  d k s<t  d  S)'Nextra   ZthisFormsetRockszformsets-that-rockPOSTZsimpleActionzItem {{ forloop.counter }}rP   rI   z9{% if forloop.first %}Note for first form only{% endif %}r\   r]    rJ   rK   r)   rC   contextZ
csrf_tokenzQ<input id="id_form-TOTAL_FORMS" name="form-TOTAL_FORMS" type="hidden" value="3"/>zU<input id="id_form-INITIAL_FORMS" name="form-INITIAL_FORMS" type="hidden" value="0"/>zX<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/<input type='hidden' name='csrfmiddlewaretoken'zmethod="post"zid="thisFormsetRocks"zaction="%s"zItem 1zItem 2zItem 3zNote for first form onlyrb   ZformRowrow)r   r   r   Zform_id
form_classZform_methodZform_actionr   r   r   r   rD   r   r&   r%   rF   rV   r(   rc   )r1   ZSampleFormSetformsetrC   rG   r4   r4   r5   test_formset_layout   sT    							rr   c              C   sx  t  t d t d d }  |  d t j j    } t   } t d  | _ t d | d |  } | j	 d  d k sx t
  | j	 d	  d k s t
  | j	 d
  d k s t
  t | d  s t
  t | d  s t
  t | d  s t
  | j	 d  d k st
  | j	 d  d k s#t
  | j	 d  d k s>t
  | j	 d  d k sYt
  | j	 d  d k stt
  d  S)Nr)   rh   ri   ZquerysetrI   rC   zid_form-0-idr   zid_form-1-idzid_form-2-idzQ<input id="id_form-TOTAL_FORMS" name="form-TOTAL_FORMS" type="hidden" value="3"/>zU<input id="id_form-INITIAL_FORMS" name="form-INITIAL_FORMS" type="hidden" value="0"/>zX<input id="id_form-MAX_NUM_FORMS" name="form-MAX_NUM_FORMS" type="hidden" value="1000"/>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"   Zobjectsnoner   r   rD   r   rV   rF   r%   )ZCrispyModelFormSetrq   rC   rG   r4   r4   r5   test_modelformset_layout9  s(    	ru   c              C   s   t  d  }  t   } t   } t t t d   t t d  d d   | _ | | _ |  j	 t
 i | d 6  } | j d  d k s t  d  S)NzP
        {% load crispy_forms_tags %}
        {% crispy form form.helper %}
    z	i18n textzi18n legendrJ   rK   r)   r   )r   r   r   r   r   _r   rD   rC   r0   r   rV   rF   )r2   r)   r*   rG   r4   r4   r5   	test_i18nX  s    					rw      reasonz6See #683: Not localising labels/values changed in 1.11c             C   s   d |  _  d |  _ t d i d d 6 } t |  } d | k sF t  d } |  j d k rd d } n |  j d	 k r| d
 } n  | j |  d k s t  d  S)NTdatai  pkzvalue="1,000"z>1000rb   z/> 1000<
bootstrap4z>
            1000rU   )ZUSE_L10NZUSE_THOUSAND_SEPARATORr#   r   rF   rc   rV   )r1   r)   rG   Z
label_textr4   r4   r5   	test_l10nl  s    				r}   c              C   s=   t    }  |  j j j d d d d d d d g k s9 t  d  S)NrP   rI   r\   r]   rJ   rK   Zdatetime_field)r    rC   rD   r:   rF   )	test_formr4   r4   r5   test_default_layout  s    	r   c              C   s+   t    }  |  j j j d g k s' t  d  S)NrI   )r!   rC   rD   r:   rF   )r~   r4   r4   r5   test_default_layout_two  s    	r   c              C   s[   t    }  t   |  _ t d  |  j _ t |   } d | k sE t  d | k sW t  d  S)NrI   rs   )r"   r   rC   r   rD   r   rF   )r~   rG   r4   r4   r5   "test_modelform_layout_without_meta  s    	r   c              C   sh   t    }  t j   |  j d _ t   |  _ t d t d   |  j _	 t
 |   } d | k sd t  d  S)NrI   z0<span>first span</span> <span>second span</span>)r   r   ZTextarear:   Zwidgetr   rC   r   r   rD   r   rF   )r~   rG   r4   r4   r5   2test_specialspaceless_not_screwing_intended_spaces  s    	r   c              C   sC   t    }  d  |  _ t d |   } t |  } d | k s? t  d  S)Ninstancechecked)r   Zfruitr$   r   rF   )Zmodel_instancer~   rG   r4   r4   r5   !test_choice_with_none_is_selected  s
    		r   c              C   s{  t    }  |  j t t t d d d d d  t d d d d d	 t t d
 d
 d d  t d d d d d d   t d  } t	 i t
   d 6|  d 6 } | j |  } d | k s t  d | k s t  d | k s t  d | k s t  d | k st  d | k st  d | k s/t  d | k sAt  d | k sSt  d | k set  d | k swt  d  S)NzSome company datarP   rI   rX   re   rJ   rf   rY   columnsSavezbutton whiter\   r]   z
custom-div
customdivsz\
            {% load crispy_forms_tags %}
            {% crispy form form_helper %}
        r)   r*   
multiField
formColumnzid="multifield_info"zid="column_name"zclass="formColumn columns"zclass="buttonHolder">zinput type="submit"zname="Save"zid="custom-div"zclass="customdivs"rK   )r   r+   r   r   r   r   r   r   r   r   r   r0   rF   )r*   r2   r3   rG   r4   r4   r5   test_layout_composition  sF    			r   c              C   s9  t    }  |  j t t d d d d d d d d d	 t d
 d d d d d t t d d d d d d d d t d d   t d d d d d d d d	   t d  } t	 i t
   d 6|  d 6d d  6 } | j |  } d! | k s t  d" | k st  d# | k st  d$ | k s't  d% | k s9t  d& | k sKt  d' | k s]t  d( | k sot  d) | k st  d | k st  d* | k st  d+ | k st  d, | k st  d- | k st  d. | k st  d/ | k st  d0 | k st  d1 | k s#t  d2 | k s5t  d  S)3NzSome company datarP   rI   rX   re   rZ   Zmultifield_titleZmultifield_testr[   rJ   rK   rf   rY   r   zSave the worldz{{ value_var }}zbutton whiteZdata_idtestZ	data_namestorezStore resultsr\   r]   z
custom-divr   Ztest_markupz\
            {% load crispy_forms_tags %}
            {% crispy form form_helper %}
        r)   r*   r   Z	value_varr   r   zid="multifield_info"ztitle="multifield_title"zmultifield-test="123"zid="column_name"zclass="formColumn columns"zclass="buttonHolder">zinput type="submit"zdata-id="test"zdata-name="test"zname="save-the-world"zvalue="Save"zname="store"zvalue="Store results"zid="custom-div"zclass="customdivs"ztest-markup="123")r   r+   r   r   r   r   r   r   r   r   r   r0   rF   )r*   r2   r3   rG   r4   r4   r5   <test_second_layout_multifield_column_buttonholder_submit_div  s^    		$r   c             C   s   t    } t   | _ t d t d  d  | j _ i | d 6} t d |  } |  j d k r | j j	 d  d k s t
  n0 |  j d k r | j j	 d  d k s t
  n  d  S)NZ
checkboxesZalphacheckboxesZnumeric_multiple_checkboxesr)   zcrispy_render_template.html	bootstraps   checkbox inlineri   
bootstrap3r|   s   checkbox-inline)r   z
bootstrap4)r   r   rC   r   r
   rD   r   rc   contentrV   rF   )r1   r)   rl   responser4   r4   r5    test_keepcontext_context_manager  s    		!r   c              C   s   t    }  t   |  _ d |  j _ d |  j _ t d d d  |  j _ t |   } | j d  d k sl t	  | j d  d	 k s t	  | j d
  d k s t	  | j d  d k s t	  | j d  d k s t	  | j d  d	 k s t	  d  S)Nzform-inlinez#bootstrap3/layout/inline_field.htmlrI   r\   rK   zclass="form-inline"r   zclass="form-group"ri   z$<label for="id_email" class="sr-onlyz$id="div_id_email" class="form-group"zplaceholder="email"z</label> <input)
r   r   rC   rp   field_templater   rD   r   rV   rF   )r)   rG   r4   r4   r5   test_form_inline3  s    	r   c              C   s   t    }  t   |  _ d |  j _ d |  j _ t d d d  |  j _ t |   } | j d  d k sl t	  | j d  d	 k s t	  | j d
  d k s t	  | j d  d k s t	  | j d  d k s t	  | j d  d	 k s t	  d  S)Nzform-inlinez#bootstrap4/layout/inline_field.htmlrI   r\   rK   zclass="form-inline"r   zclass="form-group"ri   z$<label for="id_email" class="sr-onlyz$id="div_id_email" class="form-group"zplaceholder="email"z</label> <input)
r   r   rC   rp   r   r   rD   r   rV   rF   )r)   rG   r4   r4   r5   test_bootstrap4_form_inlineH  s    	r   )r   rx   )R
__future__r   r-   Zdjangor   Zdjango.forms.modelsr   r   Zdjango.shortcutsr   Zdjango.templater   r   Zdjango.utils.translationr	   rv   Zcrispy_forms.bootstrapr
   Zcrispy_forms.compatibilityr   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$   utilsr%   Zdjango.middleware.csrfr&   ImportErrorr'   Zdjango.urlsr(   Zdjango.core.urlresolversr6   rH   rN   rO   rQ   rW   rd   rg   rr   ru   rw   markZskipifVERSIONr}   r   r   r   r   r   r   r   r   r   r   r4   r4   r4   r5   <module>   s\   @"@:$=
3=