========
Datetime
========

Let's setup all required adapters using zcml. This makes sure we test
the real configuration. Let's render the widgets in different
modes and try to extract the value form an request.

  >>> import datetime
  >>> import z3c.form
  >>> import zope.schema


12 o'clock
----------

Test widgets 12 o'clock PM. (12h (noon) is 12 PM wenn using AM/PM, 24h/0h is
12 AM).

  >>> field = zope.schema.Datetime(default=datetime.datetime(2007, 4, 1, 12))
  >>> widget = self.setupWidget(field)
  >>> widget.update()
  >>> widget.extract() is z3c.form.interfaces.NOVALUE
  True


INPUT_MODE
''''''''''

Render without AM/PM support:

  >>> widget.mode == z3c.form.interfaces.INPUT_MODE
  True
  >>> widget._js_value
  'new Date(2007, 3, 1, 12, 0)'
  >>> 'Date(2007, 3, 1, 12, 0)' in widget.render() #doctest: +ELLIPSIS
  True

  >>> widget.request = self.testrequest(
  ...     form={'bar-day': '1',
  ...           'bar-month': '4',
  ...           'bar-year': '2007',
  ...           'bar-hour': '12',
  ...           'bar-minute': '00',
  ...           'bar-empty-marker': '1',
  ...           }
  ...     )
  >>> widget.extract()
  ('2007', '4', '1', '12', '00')


Render with AM/PM support:

  >>> widget.ampm = True
  >>> '<option value="AM">AM</option>' in widget.render()
  True
  >>> widget.request = self.testrequest(
  ...     form={'bar-day': '1',
  ...           'bar-month': '4',
  ...           'bar-year': '2007',
  ...           'bar-hour': '12',
  ...           'bar-minute': '00',
  ...           'bar-ampm': 'PM',
  ...           'bar-empty-marker': '1',
  ...           }
  ...     )
  >>> widget.extract()
  ('2007', '4', '1', '12', '00')


DISPLAY_MODE
''''''''''''

  >>> widget.mode = z3c.form.interfaces.DISPLAY_MODE
  >>> print widget.render() #doctest: +ELLIPSIS
  <span id="foo"
        class="datetime-widget required datetime-field">4/1/2007 12:00 PM</span>


HIDDEN_MODE
'''''''''''

  >>> widget.mode = z3c.form.interfaces.HIDDEN_MODE
  >>> print widget.render() #doctest: +ELLIPSIS
  <BLANKLINE>
  <input type="hidden" name="bar" value="4/1/2007 12:00 PM"
         id="foo"
         class="datetime-widget required datetime-field" />
  <BLANKLINE>
  <BLANKLINE>

  >>> widget.request = self.testrequest(form={'bar': '4/1/2007 12:00 PM'})
  >>> widget.extract()
  ('2007', '4', '1', '12', '0', '')


13 o'clock
----------

Same as above, but with at 13h / 1 PM.


INPUT_MODE
''''''''''

  >>> field = zope.schema.Datetime(default=datetime.datetime(2007, 4, 1, 13))
  >>> widget = self.setupWidget(field)
  >>> widget.ampm = True
  >>> widget.update()
  >>> widget.extract() is z3c.form.interfaces.NOVALUE
  True
  >>> widget.request = self.testrequest(
  ...     form={'bar-day': '1',
  ...           'bar-month': '4',
  ...           'bar-year': '2007',
  ...           'bar-hour': '01',
  ...           'bar-minute': '00',
  ...           'bar-ampm': 'PM',
  ...           'bar-empty-marker': '1',
  ...           }
  ...     )
  >>> widget.extract()
  ('2007', '4', '1', '13', '00')

  >>> print widget.get_js()
  <BLANKLINE>
              <input type="hidden"
                  id="foo-calendar"
                  name="bar-calendar"
                  class="bar-calendar" />
              <script type="text/javascript">
  ...

DISPLAY_MODE
''''''''''''

  >>> widget.mode = z3c.form.interfaces.DISPLAY_MODE
  >>> print widget.render()
  <span id="foo"
        class="datetime-widget required datetime-field">4/1/2007 1:00 PM</span>


HIDDEN_MODE
'''''''''''

  >>> widget.mode = z3c.form.interfaces.HIDDEN_MODE
  >>> print widget.render() #doctest: +ELLIPSIS
  <BLANKLINE>
  <input type="hidden" name="bar" value="4/1/2007 1:00 PM"
         id="foo"
         class="datetime-widget required datetime-field" />
  <BLANKLINE>
  <BLANKLINE>

  >>> widget.request = self.testrequest(form={'bar': '4/1/2007 1:00 PM'})
  >>> widget.extract()
  ('2007', '4', '1', '13', '0', '')
