====================
J01form control test
====================

For more information about this test, see j01form.txt.

This test will test the same as j01form.txt but including all controls.

from __future__ import absolute_import
from __future__ import print_function
  >>> from pprint import pprint
  >>> from p01.testbrowser.testing import getWSGITestBrowser
  >>> from p01.testbrowser.ftests.wsgitestapp import WSGITestApplication

Setup the wsgi test application:

  >>> wsgi_app = WSGITestApplication()

Let's setup the demo app and get a j01 form:

  >>> url = 'http://localhost/j01controls.html'
  >>> browser = getWSGITestBrowser(url, wsgi_app=wsgi_app)

Check the page content:

  >>> print((browser.contents))
  <html>
  <body>
  <h1>Controls Tests</h1>
  <form action="controls.html" method="get">
  <div id="left">
    <div>
      <label for="TextAreaControl">TextAreaControl</label>
      <textarea name="TextAreaControl" id="TextAreaControl"></textarea>
    </div>
    <div>
      <label for="TextControl">TextControl</label>
      <input type="text" name="TextControl" id="TextControl"
             value="" />
    </div>
    <div>
      <label for="HiddenControl">HiddenControl</label>
      <input type="hidden" name="HiddenControl" id="HiddenControl"
             value="" />
    </div>
    <div>
      <label for="SelectControl:list">SelectControl</label>
      <select name="SelectControl:list" id="SelectControl">
        <option value="1">Uno</option>
        <option value="2">Dos</option>
        <option value="3">Tres</option>
      </select>
    </div>
    <div>
      <label for="CheckboxControl-1">One</label>
      <input type="checkbox" name="CheckboxControl:list" id="CheckboxControl-1"
             value="1"
             checked="checked" />
      <label for="CheckboxControl-1-2">Two</label>
      <input type="checkbox" name="CheckboxControl:list" id="CheckboxControl-2"
             value="2" />
    </div>
    <div>
      <label for="RadioControl-1">One</label>
      <input type="radio" name="RadioControl:list" id="RadioControl-1"
             value="1"
             checked="checked" />
      <label for="RadioControl-2">Two</label>
      <input type="radio" name="RadioControl:list" id="RadioControl-2"
             value="2" />
    </div>
  </div>
  <div id="right">No Content</div>
  </form>
  </body>
  </html>


TextAreaControl
---------------

  >>> control = browser.getControl(name='TextAreaControl')
  >>> control
  <TextAreaControl name='TextAreaControl' id='TextAreaControl'>

  >>> control.asDomString
  '<textarea id="TextAreaControl" name="TextAreaControl"></textarea>'

  >>> control.value = u'textarea'


FileControl
-----------

Check
PasswordControl
---------------


HiddenControl
-------------

  >>> control = browser.getControl(name='HiddenControl')
  >>> control
  <HiddenControl name='HiddenControl' id='HiddenControl'>

  >>> control.asDomString
  '<input type="hidden" id="HiddenControl" name="HiddenControl" value="">'

  >>> control.value = u'hidden'


TextControl
-----------

  >>> control = browser.getControl(name='TextControl')
  >>> control
  <TextControl name='TextControl' id='TextControl'>

  >>> control.asDomString
  '<input type="text" id="TextControl" name="TextControl" value="">'

  >>> control.value = u'text'


EMailControl
------------


DateControl
-----------


DatetimeControl
---------------


DatetimeLocalControl
--------------------


TimeControl
-----------


WeekControl
-----------


MonthControl
------------


ColorControl
------------


SearchControl
-------------


URLControl
----------


NumberControl
-------------


TelControl
----------


SubmitControl
-------------


ButtonControl
-------------


ImageControl
------------


JSONRPCButtonControl
--------------------


JSONRPCClickButtonControl
-------------------------


JSONRPCContentButtonControl
---------------------------


CloseButtonControl
------------------


ClickControlBase
----------------


JSONRPCClickControl
-------------------


DialogButtonControl
-------------------


DialogContentButtonControl
--------------------------


ShowDialogButtonControl
-----------------------


DialogCloseButtonControl
------------------------


DialogLinkControl
-----------------


ItemControl
-----------


CheckboxControl
---------------


SelectControl
-------------


RadioControl
------------


ListControl
-----------


SelectControl
-------------

  >>> control = browser.getControl(name='SelectControl:list')
  >>> control
  <SelectListControl name='SelectControl:list'>

  >>> control.asDomString
  Traceback (most recent call last):
  ... 
  NotImplementedError: Can't render ... as dom element string

  >>> for ctr in control.controls:
  ...     print(ctr.asDomString)
  <option value="1" selected="selected">
         Uno
        </option>
  <option value="2">
         Dos
        </option>
  <option value="3">
         Tres
        </option>

Now set a value:

  >>> control.value = ['2']
  >>> control.value
  ['2']

As you can see, the options get correctly dumped to string:

  >>> for ctr in control.controls:
  ...     print(ctr.asDomString)
  <option value="1">
         Uno
        </option>
  <option value="2" selected="selected">
         Dos
        </option>
  <option value="3">
         Tres
        </option>


RadioControl
------------

  >>> control = browser.getControl(name='RadioControl:list')
  >>> control
  <RadioListControl name='RadioControl:list'>

  >>> control.asDomString
  Traceback (most recent call last):
  ... 
  NotImplementedError: Can't render ... as dom element string

  >>> for ctr in control.controls:
  ...     print(ctr.asDomString)
  <input type="radio" id="RadioControl-1" name="RadioControl:list"
         value="1" checked="checked">
  <input type="radio" id="RadioControl-2" name="RadioControl:list"
         value="2">

Now set a value:

  >>> control.value = ['2']
  >>> control.value
  ['2']

As you can see, the options get correctly dumped to string:

  >>> for ctr in control.controls:
  ...     print(ctr.asDomString)
  <input type="radio" id="RadioControl-1" name="RadioControl:list"
         value="1">
  <input type="radio" id="RadioControl-2" name="RadioControl:list"
         value="2" checked="checked">


CheckboxControl
---------------

  >>> control = browser.getControl(name='CheckboxControl:list')
  >>> control
  <CheckboxListControl name='CheckboxControl:list'>

  >>> control.asDomString
  Traceback (most recent call last):
  ... 
  NotImplementedError: Can't render ... as dom element string

  >>> for ctr in control.controls:
  ...     print(ctr.asDomString)
  <input type="checkbox" id="CheckboxControl-1"
         name="CheckboxControl:list" value="1" checked="checked">
  <input type="checkbox" id="CheckboxControl-2"
         name="CheckboxControl:list" value="2">

Now set a value:

  >>> control.value = ['2']
  >>> control.value
  ['2']

As you can see, the options get correctly dumped to string:

  >>> for ctr in control.controls:
  ...     print(ctr.asDomString)
  <input type="checkbox" id="CheckboxControl-1" name="CheckboxControl:list" value="1">
  <input type="checkbox" id="CheckboxControl-2" name="CheckboxControl:list" value="2" checked="checked">


Now check if the dom get update by set the different control values:

  >>> print((browser.contents))
  <html>
   <body>
    <h1>
     Controls Tests
    </h1>
    <form action="controls.html" method="get">
     <div id="left">
      <div>
       <label for="TextAreaControl">
        TextAreaControl
       </label>
       <textarea id="TextAreaControl" name="TextAreaControl">textarea</textarea>
      </div>
      <div>
       <label for="TextControl">
        TextControl
       </label>
       <input id="TextControl" name="TextControl" type="text" value="text"/>
      </div>
      <div>
       <label for="HiddenControl">
        HiddenControl
       </label>
       <input id="HiddenControl" name="HiddenControl" type="hidden" value="hidden"/>
      </div>
      <div>
       <label for="SelectControl:list">
        SelectControl
       </label>
       <select id="SelectControl" name="SelectControl:list">
        <option value="1">
         Uno
        </option>
        <option selected="selected" value="2">
         Dos
        </option>
        <option value="3">
         Tres
        </option>
       </select>
      </div>
      <div>
       <label for="CheckboxControl-1">
        One
       </label>
       <input id="CheckboxControl-1" name="CheckboxControl:list" type="checkbox" value="1"/>
       <label for="CheckboxControl-1-2">
        Two
       </label>
       <input checked="checked" id="CheckboxControl-2" name="CheckboxControl:list" type="checkbox" value="2"/>
      </div>
      <div>
       <label for="RadioControl-1">
        One
       </label>
       <input id="RadioControl-1" name="RadioControl:list" type="radio" value="1"/>
       <label for="RadioControl-2">
        Two
       </label>
       <input checked="checked" id="RadioControl-2" name="RadioControl:list" type="radio" value="2"/>
      </div>
     </div>
     <div id="right">
      No Content
     </div>
    </form>
   </body>
  </html>


TextArea
---------

Make sure we don't get additional space in textarea elements. And also
make sure that empty elements don't get rendered as single closing tags:

  >>> control = browser.getControl(name='TextAreaControl')
  >>> control.value
  'textarea'

  >>> control.asDomString
  '<textarea id="TextAreaControl" name="TextAreaControl">textarea</textarea>'

  >>> control.value = ''
  >>> control.asDomString
  '<textarea id="TextAreaControl" name="TextAreaControl"></textarea>'

  >>> print((browser.contents))
  <html>
   <body>
    <h1>
     Controls Tests
    </h1>
    <form action="controls.html" method="get">
     <div id="left">
      <div>
       <label for="TextAreaControl">
        TextAreaControl
       </label>
       <textarea id="TextAreaControl" name="TextAreaControl"></textarea>
      </div>
      <div>
       <label for="TextControl">
        TextControl
       </label>
       <input id="TextControl" name="TextControl" type="text" value="text"/>
      </div>
      <div>
       <label for="HiddenControl">
        HiddenControl
       </label>
       <input id="HiddenControl" name="HiddenControl" type="hidden" value="hidden"/>
      </div>
      <div>
       <label for="SelectControl:list">
        SelectControl
       </label>
       <select id="SelectControl" name="SelectControl:list">
        <option value="1">
         Uno
        </option>
        <option selected="selected" value="2">
         Dos
        </option>
        <option value="3">
         Tres
        </option>
       </select>
      </div>
      <div>
       <label for="CheckboxControl-1">
        One
       </label>
       <input id="CheckboxControl-1" name="CheckboxControl:list" type="checkbox" value="1"/>
       <label for="CheckboxControl-1-2">
        Two
       </label>
       <input checked="checked" id="CheckboxControl-2" name="CheckboxControl:list" type="checkbox" value="2"/>
      </div>
      <div>
       <label for="RadioControl-1">
        One
       </label>
       <input id="RadioControl-1" name="RadioControl:list" type="radio" value="1"/>
       <label for="RadioControl-2">
        Two
       </label>
       <input checked="checked" id="RadioControl-2" name="RadioControl:list" type="radio" value="2"/>
      </div>
     </div>
     <div id="right">
      No Content
     </div>
    </form>
   </body>
  </html>
