function input($objectName, $method, $object, $options = array())
{
    $attr = $object->getAttribute($method);
    switch ($attr->type) {
        case 'string':
            $str = text_field($objectName, $method, $object, $options);
            break;
        case 'text':
            $str = text_area($objectName, $method, $object, $options);
            break;
        case 'date':
            $str = date_select($objectName, $method, $object);
            break;
        case 'datetime':
            $str = date_time_select($objectName, $method, $object);
            break;
        case 'integer':
            $str = text_field($objectName, $method, $object, $options);
            break;
        case 'float':
            $str = text_field($objectName, $method, $object, $options);
            break;
        case 'boolean':
            $str = check_box($objectName, $method, $object, $options);
            break;
        default:
            $str = hidden_field($objectName, $method, $object);
            break;
    }
    return error_wrapping($str, isset($object->errors[$method]));
}
    public function testDateTimeSelect()
    {
        $article = new MockArticle();
        $article->written_on = new SDateTime(2006, 3, 31, 1, 29, 35);
        $expect = <<<EOT
        <select name="article[written_on][year]">
        <option value="2001">2001</option><option value="2002">2002</option>
        <option value="2003">2003</option><option value="2004">2004</option>
        <option value="2005">2005</option><option value="2006" selected="selected">2006</option>
        <option value="2007">2007</option><option value="2008">2008</option>
        <option value="2009">2009</option><option value="2010">2010</option>
        <option value="2011">2011</option>
        </select>
        <select name="article[written_on][month]">
        <option value="1">January</option><option value="2">February</option>
        <option value="3" selected="selected">March</option><option value="4">April</option>
        <option value="5">May</option><option value="6">June</option>
        <option value="7">July</option><option value="8">August</option>
        <option value="9">September</option><option value="10">October</option>
        <option value="11">November</option><option value="12">December</option>
        </select>
        <select name="article[written_on][day]">
        <option value="1">1</option><option value="2">2</option>
        <option value="3">3</option><option value="4">4</option>
        <option value="5">5</option><option value="6">6</option>
        <option value="7">7</option><option value="8">8</option>
        <option value="9">9</option><option value="10">10</option>
        <option value="11">11</option><option value="12">12</option>
        <option value="13">13</option><option value="14">14</option>
        <option value="15">15</option><option value="16">16</option>
        <option value="17">17</option><option value="18">18</option>
        <option value="19">19</option><option value="20">20</option>
        <option value="21">21</option><option value="22">22</option>
        <option value="23">23</option><option value="24">24</option>
        <option value="25">25</option><option value="26">26</option>
        <option value="27">27</option><option value="28">28</option>
        <option value="29">29</option><option value="30">30</option>
        <option value="31" selected="selected">31</option>
        </select>
        <select name="article[written_on][hour]">
        <option value="00">00</option>
        <option value="01" selected="selected">01</option><option value="02">02</option>
        <option value="03">03</option><option value="04">04</option>
        <option value="05">05</option><option value="06">06</option>
        <option value="07">07</option><option value="08">08</option>
        <option value="09">09</option><option value="10">10</option>
        <option value="11">11</option><option value="12">12</option>
        <option value="13">13</option><option value="14">14</option>
        <option value="15">15</option><option value="16">16</option>
        <option value="17">17</option><option value="18">18</option>
        <option value="19">19</option><option value="20">20</option>
        <option value="21">21</option><option value="22">22</option>
        <option value="23">23</option>
        </select>
        <select name="article[written_on][min]">
        <option value="00">00</option>
        <option value="01">01</option><option value="02">02</option><option value="03">03</option>
        <option value="04">04</option><option value="05">05</option><option value="06">06</option>
        <option value="07">07</option><option value="08">08</option><option value="09">09</option>
        <option value="10">10</option><option value="11">11</option><option value="12">12</option>
        <option value="13">13</option><option value="14">14</option><option value="15">15</option>
        <option value="16">16</option><option value="17">17</option><option value="18">18</option>
        <option value="19">19</option><option value="20">20</option><option value="21">21</option>
        <option value="22">22</option><option value="23">23</option><option value="24">24</option>
        <option value="25">25</option><option value="26">26</option><option value="27">27</option>
        <option value="28">28</option><option value="29" selected="selected">29</option><option value="30">30</option>
        <option value="31">31</option><option value="32">32</option><option value="33">33</option>
        <option value="34">34</option><option value="35">35</option><option value="36">36</option>
        <option value="37">37</option><option value="38">38</option><option value="39">39</option>
        <option value="40">40</option><option value="41">41</option><option value="42">42</option>
        <option value="43">43</option><option value="44">44</option><option value="45">45</option>
        <option value="46">46</option><option value="47">47</option><option value="48">48</option>
        <option value="49">49</option><option value="50">50</option><option value="51">51</option>
        <option value="52">52</option><option value="53">53</option><option value="54">54</option>
        <option value="55">55</option><option value="56">56</option><option value="57">57</option>
        <option value="58">58</option><option value="59">59</option>
        </select>
        <select name="article[written_on][sec]">
        <option value="00">00</option>
        <option value="01">01</option><option value="02">02</option><option value="03">03</option>
        <option value="04">04</option><option value="05">05</option><option value="06">06</option>
        <option value="07">07</option><option value="08">08</option><option value="09">09</option>
        <option value="10">10</option><option value="11">11</option><option value="12">12</option>
        <option value="13">13</option><option value="14">14</option><option value="15">15</option>
        <option value="16">16</option><option value="17">17</option><option value="18">18</option>
        <option value="19">19</option><option value="20">20</option><option value="21">21</option>
        <option value="22">22</option><option value="23">23</option><option value="24">24</option>
        <option value="25">25</option><option value="26">26</option><option value="27">27</option>
        <option value="28">28</option><option value="29">29</option><option value="30">30</option>
        <option value="31">31</option><option value="32">32</option><option value="33">33</option>
        <option value="34">34</option><option value="35" selected="selected">35</option><option value="36">36</option>
        <option value="37">37</option><option value="38">38</option><option value="39">39</option>
        <option value="40">40</option><option value="41">41</option><option value="42">42</option>
        <option value="43">43</option><option value="44">44</option><option value="45">45</option>
        <option value="46">46</option><option value="47">47</option><option value="48">48</option>
        <option value="49">49</option><option value="50">50</option><option value="51">51</option>
        <option value="52">52</option><option value="53">53</option><option value="54">54</option>
        <option value="55">55</option><option value="56">56</option><option value="57">57</option>
        <option value="58">58</option><option value="59">59</option>
        </select>
EOT;
        $this->assertDomEqual($expect, date_time_select('article', 'written_on', $article));
    }
 public function date_time_select($method, $options = array())
 {
     return date_time_select($this->objectName, $method, $this->object, $options);
 }