public
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/rails/rails.git
Added prompt options to date helpers [#561 state:resolved]

Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
samoli (author)
Sun Dec 21 11:46:33 -0800 2008
lifo (committer)
Sun Dec 21 15:24:05 -0800 2008
commit  389534c38c3baaa63ce5cc2ba3bd169415419167
tree    bb8d32ef8ee134f2020c04489cb63a9144e01429
parent  858a420ce18719c720b80508b336e37ce37a20bf
...
1
2
 
 
3
4
5
...
1
2
3
4
5
6
7
0
@@ -1,5 +1,7 @@
0
 *2.3.0 [Edge]*
0
 
0
+* Add :prompt option to date/time select helpers. #561 [Sam Oliver]
0
+
0
 * Fixed that send_file shouldn't set an etag #1578 [Hongli Lai]
0
 
0
 * Allow users to opt out of the spoofing checks in Request#remote_ip.  Useful for sites whose traffic regularly triggers false positives. [Darren Boyd]
...
136
137
138
 
 
 
 
139
140
141
...
171
172
173
 
 
 
174
175
176
...
210
211
212
 
 
 
 
 
213
214
215
...
241
242
243
 
 
 
 
 
244
245
246
...
285
286
287
 
 
 
 
 
288
289
290
...
321
322
323
 
 
 
 
 
324
325
326
...
352
353
354
 
 
 
 
 
355
356
357
...
373
374
375
 
 
 
 
376
377
378
...
395
396
397
 
 
 
 
398
399
400
...
416
417
418
 
 
 
 
419
420
421
...
437
438
439
 
 
 
 
440
441
442
...
475
476
477
 
 
 
 
478
479
480
...
502
503
504
 
 
 
 
505
506
507
...
516
517
518
 
 
 
 
519
520
521
...
764
765
766
 
767
768
769
770
771
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
772
773
774
...
136
137
138
139
140
141
142
143
144
145
...
175
176
177
178
179
180
181
182
183
...
217
218
219
220
221
222
223
224
225
226
227
...
253
254
255
256
257
258
259
260
261
262
263
...
302
303
304
305
306
307
308
309
310
311
312
...
343
344
345
346
347
348
349
350
351
352
353
...
379
380
381
382
383
384
385
386
387
388
389
...
405
406
407
408
409
410
411
412
413
414
...
431
432
433
434
435
436
437
438
439
440
...
456
457
458
459
460
461
462
463
464
465
...
481
482
483
484
485
486
487
488
489
490
...
523
524
525
526
527
528
529
530
531
532
...
554
555
556
557
558
559
560
561
562
563
...
572
573
574
575
576
577
578
579
580
581
...
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
0
@@ -136,6 +136,10 @@ module ActionView
0
       #   dates.
0
       # * <tt>:default</tt>           - Set a default date if the affected date isn't set or is nil.
0
       # * <tt>:disabled</tt>          - Set to true if you want show the select fields as disabled.
0
+      # * <tt>:prompt</tt>            - Set to true (for a generic prompt), a prompt string or a hash of prompt strings
0
+      #   for <tt>:year</tt>, <tt>:month</tt>, <tt>:day</tt>, <tt>:hour</tt>, <tt>:minute</tt> and <tt>:second</tt>.
0
+      #   Setting this option prepends a select option with a generic prompt  (Day, Month, Year, Hour, Minute, Seconds)
0
+      #   or the given prompt string.
0
       #
0
       # If anything is passed in the +html_options+ hash it will be applied to every select tag in the set.
0
       #
0
@@ -171,6 +175,9 @@ module ActionView
0
       #   # that will have a default day of 20.
0
       #   date_select("credit_card", "bill_due", :default => { :day => 20 })
0
       #
0
+      #   # Generates a date select with custom prompts
0
+      #   date_select("post", "written_on", :prompt => { :day => 'Select day', :month => 'Select month', :year => 'Select year' })
0
+      #
0
       # The selects are prepared for multi-parameter assignment to an Active Record object.
0
       #
0
       # Note: If the day is not included as an option but the month is, the day will be set to the 1st to ensure that
0
@@ -210,6 +217,11 @@ module ActionView
0
       #   # You can set the :minute_step to 15 which will give you: 00, 15, 30 and 45.
0
       #   time_select 'game', 'game_time', {:minute_step => 15}
0
       #
0
+      #   # Creates a time select tag with a custom prompt. Use :prompt => true for generic prompts.
0
+      #   time_select("post", "written_on", :prompt => {:hour => 'Choose hour', :minute => 'Choose minute', :second => 'Choose seconds'})
0
+      #   time_select("post", "written_on", :prompt => {:hour => true}) # generic prompt for hours
0
+      #   time_select("post", "written_on", :prompt => true) # generic prompts for all
0
+      #
0
       # The selects are prepared for multi-parameter assignment to an Active Record object.
0
       #
0
       # Note: If the day is not included as an option but the month is, the day will be set to the 1st to ensure that
0
@@ -241,6 +253,11 @@ module ActionView
0
       #   # as the written_on attribute.
0
       #   datetime_select("post", "written_on", :discard_type => true)
0
       #
0
+      #   # Generates a datetime select with a custom prompt. Use :prompt=>true for generic prompts.
0
+      #   datetime_select("post", "written_on", :prompt => {:day => 'Choose day', :month => 'Choose month', :year => 'Choose year'})
0
+      #   datetime_select("post", "written_on", :prompt => {:hour => true}) # generic prompt for hours
0
+      #   datetime_select("post", "written_on", :prompt => true) # generic prompts for all
0
+      #
0
       # The selects are prepared for multi-parameter assignment to an Active Record object.
0
       def datetime_select(object_name, method, options = {}, html_options = {})
0
         InstanceTag.new(object_name, method, self, options.delete(:object)).to_datetime_select_tag(options, html_options)
0
@@ -285,6 +302,11 @@ module ActionView
0
       #   # prefixed with 'payday' rather than 'date'
0
       #   select_datetime(my_date_time, :prefix => 'payday')
0
       #
0
+      #   # Generates a datetime select with a custom prompt. Use :prompt=>true for generic prompts.
0
+      #   select_datetime(my_date_time, :prompt => {:day => 'Choose day', :month => 'Choose month', :year => 'Choose year'})
0
+      #   select_datetime(my_date_time, :prompt => {:hour => true}) # generic prompt for hours
0
+      #   select_datetime(my_date_time, :prompt => true) # generic prompts for all
0
+      #
0
       def select_datetime(datetime = Time.current, options = {}, html_options = {})
0
         DateTimeSelector.new(datetime, options, html_options).select_datetime
0
       end
0
@@ -321,6 +343,11 @@ module ActionView
0
       #   # prefixed with 'payday' rather than 'date'
0
       #   select_date(my_date, :prefix => 'payday')
0
       #
0
+      #   # Generates a date select with a custom prompt. Use :prompt=>true for generic prompts.
0
+      #   select_date(my_date, :prompt => {:day => 'Choose day', :month => 'Choose month', :year => 'Choose year'})
0
+      #   select_date(my_date, :prompt => {:hour => true}) # generic prompt for hours
0
+      #   select_date(my_date, :prompt => true) # generic prompts for all
0
+      #
0
       def select_date(date = Date.current, options = {}, html_options = {})
0
         DateTimeSelector.new(date, options, html_options).select_date
0
       end
0
@@ -352,6 +379,11 @@ module ActionView
0
       #   # separated by ':' and includes an input for seconds
0
       #   select_time(my_time, :time_separator => ':', :include_seconds => true)
0
       #
0
+      #   # Generates a time select with a custom prompt. Use :prompt=>true for generic prompts.
0
+      #   select_time(my_time, :prompt => {:day => 'Choose day', :month => 'Choose month', :year => 'Choose year'})
0
+      #   select_time(my_time, :prompt => {:hour => true}) # generic prompt for hours
0
+      #   select_time(my_time, :prompt => true) # generic prompts for all
0
+      #
0
       def select_time(datetime = Time.current, options = {}, html_options = {})
0
         DateTimeSelector.new(datetime, options, html_options).select_time
0
       end
0
@@ -373,6 +405,10 @@ module ActionView
0
       #   # that is named 'interval' rather than 'second'
0
       #   select_second(my_time, :field_name => 'interval')
0
       #
0
+      #   # Generates a select field for seconds with a custom prompt.  Use :prompt=>true for a
0
+      #   # generic prompt.
0
+      #   select_minute(14, :prompt => 'Choose seconds')
0
+      #
0
       def select_second(datetime, options = {}, html_options = {})
0
         DateTimeSelector.new(datetime, options, html_options).select_second
0
       end
0
@@ -395,6 +431,10 @@ module ActionView
0
       #   # that is named 'stride' rather than 'second'
0
       #   select_minute(my_time, :field_name => 'stride')
0
       #
0
+      #   # Generates a select field for minutes with a custom prompt.  Use :prompt=>true for a
0
+      #   # generic prompt.
0
+      #   select_minute(14, :prompt => 'Choose minutes')
0
+      #
0
       def select_minute(datetime, options = {}, html_options = {})
0
         DateTimeSelector.new(datetime, options, html_options).select_minute
0
       end
0
@@ -416,6 +456,10 @@ module ActionView
0
       #   # that is named 'stride' rather than 'second'
0
       #   select_hour(my_time, :field_name => 'stride')
0
       #
0
+      #   # Generates a select field for hours with a custom prompt.  Use :prompt => true for a
0
+      #   # generic prompt.
0
+      #   select_hour(13, :prompt =>'Choose hour')
0
+      #
0
       def select_hour(datetime, options = {}, html_options = {})
0
         DateTimeSelector.new(datetime, options, html_options).select_hour
0
       end
0
@@ -437,6 +481,10 @@ module ActionView
0
       #   # that is named 'due' rather than 'day'
0
       #   select_day(my_time, :field_name => 'due')
0
       #
0
+      #   # Generates a select field for days with a custom prompt.  Use :prompt => true for a
0
+      #   # generic prompt.
0
+      #   select_day(5, :prompt => 'Choose day')
0
+      #
0
       def select_day(date, options = {}, html_options = {})
0
         DateTimeSelector.new(date, options, html_options).select_day
0
       end
0
@@ -475,6 +523,10 @@ module ActionView
0
       #   # will use keys like "Januar", "Marts."
0
       #   select_month(Date.today, :use_month_names => %w(Januar Februar Marts ...))
0
       #
0
+      #   # Generates a select field for months with a custom prompt.  Use :prompt => true for a
0
+      #   # generic prompt.
0
+      #   select_month(14, :prompt => 'Choose month')
0
+      #
0
       def select_month(date, options = {}, html_options = {})
0
         DateTimeSelector.new(date, options, html_options).select_month
0
       end
0
@@ -502,6 +554,10 @@ module ActionView
0
       #   # has ascending year values
0
       #   select_year(2006, :start_year => 2000, :end_year => 2010)
0
       #
0
+      #   # Generates a select field for years with a custom prompt.  Use :prompt => true for a
0
+      #   # generic prompt.
0
+      #   select_year(14, :prompt => 'Choose year')
0
+      #
0
       def select_year(date, options = {}, html_options = {})
0
         DateTimeSelector.new(date, options, html_options).select_year
0
       end
0
@@ -516,6 +572,10 @@ module ActionView
0
         :year => 1, :month => 2, :day => 3, :hour => 4, :minute => 5, :second => 6
0
       }.freeze unless const_defined?('POSITION')
0
 
1
+      DEFAULT_PROMPTS = {
0
+        :year => 'Year', :month => 'Month', :day => 'Day', :hour => 'Hour', :minute => 'Minute', :second => 'Seconds'
0
+      }.freeze unless const_defined?('DEFAULT_PROMPTS')
0
+
0
       def initialize(datetime, options = {}, html_options = {})
0
         @options      = options.dup
0
         @html_options = html_options.dup
0
@@ -764,11 +824,30 @@ module ActionView
0
 
0
           select_html = "\n"
0
           select_html << content_tag(:option, '', :value => '') + "\n" if @options[:include_blank]
0
+          select_html << prompt_option_tag(type, @options[:prompt]) + "\n" if @options[:prompt]
0
           select_html << select_options_as_html.to_s
0
 
0
           content_tag(:select, select_html, select_options) + "\n"
0
         end
0
 
0
+        # Builds a prompt option tag with supplied options or from default options
0
+        #  prompt_option_tag(:month, :prompt => 'Select month')
0
+        #  => "<option value="">Select month</option>"
0
+        def prompt_option_tag(type, options)
0
+          default_options = {:year => false, :month => false, :day => false, :hour => false, :minute => false, :second => false}
0
+
0
+          case options
0
+          when Hash
0
+            prompt = default_options.merge(options)[type.to_sym]
0
+          when String
0
+            prompt = options
0
+          else
0
+            prompt = ActionView::Helpers::DateTimeSelector::DEFAULT_PROMPTS[type.to_sym]
0
+          end
0
+
0
+          prompt ? content_tag(:option, prompt, :value => '')  : ''
0
+        end
0
+
0
         # Builds hidden input tag for date part and value
0
         #  build_hidden(:year, 2008)
0
         #  => "<input id="post_written_on_1i" name="post[written_on(1i)]" type="hidden" value="2008" />"
...
153
154
155
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
157
158
...
276
277
278
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
279
280
281
...
344
345
346
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
347
348
349
...
392
393
394
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
395
396
397
...
470
471
472
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
473
474
475
...
524
525
526
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
527
528
529
...
914
915
916
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
917
918
919
...
995
996
997
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
998
999
1000
...
1277
1278
1279
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1280
1281
1282
...
1403
1404
1405
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1406
1407
1408
...
1526
1527
1528
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1529
1530
1531
...
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
...
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
...
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
...
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
...
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
...
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
...
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
...
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
...
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
...
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
...
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
0
@@ -153,6 +153,22 @@ class DateHelperTest < ActionView::TestCase
0
     assert_dom_equal expected, select_day(16, {}, :class => 'selector')
0
   end
0
 
0
+  def test_select_day_with_default_prompt
0
+    expected = %(<select id="date_day" name="date[day]">\n)
0
+    expected << %(<option value="">Day</option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16" selected="selected">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_day(16, :prompt => true)
0
+  end
0
+
0
+  def test_select_day_with_custom_prompt
0
+    expected = %(<select id="date_day" name="date[day]">\n)
0
+    expected << %(<option value="">Choose day</option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16" selected="selected">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_day(16, :prompt => 'Choose day')
0
+  end
0
+
0
   def test_select_month
0
     expected = %(<select id="date_month" name="date[month]">\n)
0
     expected << %(<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8" selected="selected">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n)
0
@@ -276,6 +292,22 @@ class DateHelperTest < ActionView::TestCase
0
     #assert result.include?('<option value="1">January')
0
   end
0
 
0
+  def test_select_month_with_default_prompt
0
+    expected = %(<select id="date_month" name="date[month]">\n)
0
+    expected << %(<option value="">Month</option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8" selected="selected">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_month(8, :prompt => true)
0
+  end
0
+
0
+  def test_select_month_with_custom_prompt
0
+    expected = %(<select id="date_month" name="date[month]">\n)
0
+    expected << %(<option value="">Choose month</option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8" selected="selected">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_month(8, :prompt => 'Choose month')
0
+  end
0
+
0
   def test_select_year
0
     expected = %(<select id="date_year" name="date[year]">\n)
0
     expected << %(<option value="2003" selected="selected">2003</option>\n<option value="2004">2004</option>\n<option value="2005">2005</option>\n)
0
@@ -344,6 +376,22 @@ class DateHelperTest < ActionView::TestCase
0
     #assert result.include?('<option value="2003"')
0
   end
0
 
0
+  def test_select_year_with_default_prompt
0
+    expected = %(<select id="date_year" name="date[year]">\n)
0
+    expected << %(<option value="">Year</option>\n<option value="2003">2003</option>\n<option value="2004">2004</option>\n<option value="2005">2005</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_year(nil, :start_year => 2003, :end_year => 2005, :prompt => true)
0
+  end
0
+
0
+  def test_select_year_with_custom_prompt
0
+    expected = %(<select id="date_year" name="date[year]">\n)
0
+    expected << %(<option value="">Choose year</option>\n<option value="2003">2003</option>\n<option value="2004">2004</option>\n<option value="2005">2005</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_year(nil, :start_year => 2003, :end_year => 2005, :prompt => 'Choose year')
0
+  end
0
+
0
   def test_select_hour
0
     expected = %(<select id="date_hour" name="date[hour]">\n)
0
     expected << %(<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08" selected="selected">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n)
0
@@ -392,6 +440,22 @@ class DateHelperTest < ActionView::TestCase
0
     assert_dom_equal expected, select_hour(Time.mktime(2003, 8, 16, 8, 4, 18), {}, :class => 'selector', :accesskey => 'M')
0
   end
0
 
0
+  def test_select_hour_with_default_prompt
0
+    expected = %(<select id="date_hour" name="date[hour]">\n)
0
+    expected << %(<option value="">Hour</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08" selected="selected">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_hour(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt => true)
0
+  end
0
+
0
+  def test_select_hour_with_custom_prompt
0
+    expected = %(<select id="date_hour" name="date[hour]">\n)
0
+    expected << %(<option value="">Choose hour</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08" selected="selected">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_hour(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt => 'Choose hour')
0
+  end
0
+
0
   def test_select_minute
0
     expected = %(<select id="date_minute" name="date[minute]">\n)
0
     expected << %(<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04" selected="selected">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
0
@@ -470,6 +534,22 @@ class DateHelperTest < ActionView::TestCase
0
     #assert result.include?('<option value="00">00')
0
   end
0
 
0
+  def test_select_minute_with_default_prompt
0
+    expected = %(<select id="date_minute" name="date[minute]">\n)
0
+    expected << %(<option value="">Minute</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04" selected="selected">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_minute(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt => true)
0
+  end
0
+
0
+  def test_select_minute_with_custom_prompt
0
+    expected = %(<select id="date_minute" name="date[minute]">\n)
0
+    expected << %(<option value="">Choose minute</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04" selected="selected">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_minute(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt => 'Choose minute')
0
+  end
0
+
0
   def test_select_second
0
     expected = %(<select id="date_second" name="date[second]">\n)
0
     expected << %(<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18" selected="selected">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
0
@@ -524,6 +604,22 @@ class DateHelperTest < ActionView::TestCase
0
     #assert result.include?('<option value="00">00')
0
   end
0
 
0
+  def test_select_second_with_default_prompt
0
+    expected = %(<select id="date_second" name="date[second]">\n)
0
+    expected << %(<option value="">Seconds</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18" selected="selected">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_second(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt => true)
0
+  end
0
+
0
+  def test_select_second_with_custom_prompt
0
+    expected = %(<select id="date_second" name="date[second]">\n)
0
+    expected << %(<option value="">Choose seconds</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18" selected="selected">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_second(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt => 'Choose seconds')
0
+  end
0
+
0
   def test_select_date
0
     expected =  %(<select id="date_first_year" name="date[first][year]">\n)
0
     expected << %(<option value="2003" selected="selected">2003</option>\n<option value="2004">2004</option>\n<option value="2005">2005</option>\n)
0
@@ -914,6 +1010,57 @@ class DateHelperTest < ActionView::TestCase
0
     assert_nothing_raised { select_datetime(Date.today) }
0
   end
0
 
0
+  def test_select_datetime_with_default_prompt
0
+    expected =  %(<select id="date_first_year" name="date[first][year]">\n)
0
+    expected << %(<option value="">Year</option>\n<option value="2003" selected="selected">2003</option>\n<option value="2004">2004</option>\n<option value="2005">2005</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    expected << %(<select id="date_first_month" name="date[first][month]">\n)
0
+    expected << %(<option value="">Month</option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8" selected="selected">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    expected << %(<select id="date_first_day" name="date[first][day]">\n)
0
+    expected << %(<option value="">Day</option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16" selected="selected">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    expected << %(<select id="date_first_hour" name="date[first][hour]">\n)
0
+    expected << %(<option value="">Hour</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08" selected="selected">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    expected << %(<select id="date_first_minute" name="date[first][minute]">\n)
0
+    expected << %(<option value="">Minute</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04" selected="selected">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_datetime(Time.mktime(2003, 8, 16, 8, 4, 18), :start_year => 2003, :end_year => 2005,
0
+                                               :prefix => "date[first]", :prompt => true)
0
+  end
0
+
0
+  def test_select_datetime_with_custom_prompt
0
+
0
+    expected =  %(<select id="date_first_year" name="date[first][year]">\n)
0
+    expected << %(<option value="">Choose year</option>\n<option value="2003" selected="selected">2003</option>\n<option value="2004">2004</option>\n<option value="2005">2005</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    expected << %(<select id="date_first_month" name="date[first][month]">\n)
0
+    expected << %(<option value="">Choose month</option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8" selected="selected">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    expected << %(<select id="date_first_day" name="date[first][day]">\n)
0
+    expected << %(<option value="">Choose day</option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16" selected="selected">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    expected << %(<select id="date_first_hour" name="date[first][hour]">\n)
0
+    expected << %(<option value="">Choose hour</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08" selected="selected">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    expected << %(<select id="date_first_minute" name="date[first][minute]">\n)
0
+    expected << %(<option value="">Choose minute</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04" selected="selected">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_datetime(Time.mktime(2003, 8, 16, 8, 4, 18), :start_year => 2003, :end_year => 2005, :prefix => "date[first]",
0
+      :prompt => {:day => 'Choose day', :month => 'Choose month', :year => 'Choose year', :hour => 'Choose hour', :minute => 'Choose minute'})
0
+  end
0
+
0
   def test_select_time
0
     expected = %(<select id="date_hour" name="date[hour]">\n)
0
     expected << %(<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08" selected="selected">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n)
0
@@ -995,6 +1142,40 @@ class DateHelperTest < ActionView::TestCase
0
     assert_nothing_raised { select_time(Date.today) }
0
   end
0
 
0
+  def test_select_time_with_default_prompt
0
+    expected = %(<select id="date_hour" name="date[hour]">\n)
0
+    expected << %(<option value="">Hour</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08" selected="selected">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    expected << %(<select id="date_minute" name="date[minute]">\n)
0
+    expected << %(<option value="">Minute</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04" selected="selected">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    expected << %(<select id="date_second" name="date[second]">\n)
0
+    expected << %(<option value="">Seconds</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18" selected="selected">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_time(Time.mktime(2003, 8, 16, 8, 4, 18), :include_seconds => true, :prompt => true)
0
+  end
0
+
0
+  def test_select_time_with_custom_prompt
0
+
0
+    expected = %(<select id="date_hour" name="date[hour]">\n)
0
+    expected << %(<option value="">Choose hour</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08" selected="selected">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    expected << %(<select id="date_minute" name="date[minute]">\n)
0
+    expected << %(<option value="">Choose minute</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04" selected="selected">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    expected << %(<select id="date_second" name="date[second]">\n)
0
+    expected << %(<option value="">Choose seconds</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18" selected="selected">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, select_time(Time.mktime(2003, 8, 16, 8, 4, 18), :prompt => true, :include_seconds => true,
0
+      :prompt => {:hour => 'Choose hour', :minute => 'Choose minute', :second => 'Choose seconds'})
0
+  end
0
+
0
   def test_date_select
0
     @post = Post.new
0
     @post.written_on = Date.new(2004, 6, 15)
0
@@ -1277,6 +1458,46 @@ class DateHelperTest < ActionView::TestCase
0
     assert_dom_equal expected, date_select("post", "written_on", { :date_separator => " / " })
0
   end
0
 
0
+  def test_date_select_with_default_prompt
0
+    @post = Post.new
0
+    @post.written_on = Date.new(2004, 6, 15)
0
+
0
+    expected = %{<select id="post_written_on_1i" name="post[written_on(1i)]">\n}
0
+    expected << %{<option value="">Year</option>\n<option value="1999">1999</option>\n<option value="2000">2000</option>\n<option value="2001">2001</option>\n<option value="2002">2002</option>\n<option value="2003">2003</option>\n<option value="2004" selected="selected">2004</option>\n<option value="2005">2005</option>\n<option value="2006">2006</option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << %{<select id="post_written_on_2i" name="post[written_on(2i)]">\n}
0
+    expected << %{<option value="">Month</option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6" selected="selected">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << %{<select id="post_written_on_3i" name="post[written_on(3i)]">\n}
0
+    expected << %{<option value="">Day</option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15" selected="selected">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n}
0
+
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, date_select("post", "written_on", :prompt => true)
0
+  end
0
+
0
+  def test_date_select_with_custom_prompt
0
+    @post = Post.new
0
+    @post.written_on = Date.new(2004, 6, 15)
0
+
0
+    expected = %{<select id="post_written_on_1i" name="post[written_on(1i)]">\n}
0
+    expected << %{<option value="">Choose year</option>\n<option value="1999">1999</option>\n<option value="2000">2000</option>\n<option value="2001">2001</option>\n<option value="2002">2002</option>\n<option value="2003">2003</option>\n<option value="2004" selected="selected">2004</option>\n<option value="2005">2005</option>\n<option value="2006">2006</option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << %{<select id="post_written_on_2i" name="post[written_on(2i)]">\n}
0
+    expected << %{<option value="">Choose month</option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6" selected="selected">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << %{<select id="post_written_on_3i" name="post[written_on(3i)]">\n}
0
+    expected << %{<option value="">Choose day</option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15" selected="selected">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n}
0
+
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, date_select("post", "written_on", :prompt => {:year => 'Choose year', :month => 'Choose month', :day => 'Choose day'})
0
+  end
0
+
0
   def test_time_select
0
     @post = Post.new
0
     @post.written_on = Time.local(2004, 6, 15, 15, 16, 35)
0
@@ -1403,6 +1624,48 @@ class DateHelperTest < ActionView::TestCase
0
     assert_dom_equal expected, time_select("post", "written_on", { :time_separator => " - ", :include_seconds => true })
0
   end
0
 
0
+  def test_time_select_with_default_prompt
0
+    @post = Post.new
0
+    @post.written_on = Time.local(2004, 6, 15, 15, 16, 35)
0
+
0
+    expected = %{<input type="hidden" id="post_written_on_1i" name="post[written_on(1i)]" value="2004" />\n}
0
+    expected << %{<input type="hidden" id="post_written_on_2i" name="post[written_on(2i)]" value="6" />\n}
0
+    expected << %{<input type="hidden" id="post_written_on_3i" name="post[written_on(3i)]" value="15" />\n}
0
+
0
+    expected << %(<select id="post_written_on_4i" name="post[written_on(4i)]">\n)
0
+    expected << %(<option value="">Hour</option>\n)
0
+    0.upto(23) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 15}>#{sprintf("%02d", i)}</option>\n) }
0
+    expected << "</select>\n"
0
+    expected << " : "
0
+    expected << %(<select id="post_written_on_5i" name="post[written_on(5i)]">\n)
0
+        expected << %(<option value="">Minute</option>\n)
0
+    0.upto(59) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 16}>#{sprintf("%02d", i)}</option>\n) }
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, time_select("post", "written_on", :prompt => true)
0
+  end
0
+
0
+  def test_time_select_with_custom_prompt
0
+    @post = Post.new
0
+    @post.written_on = Time.local(2004, 6, 15, 15, 16, 35)
0
+
0
+    expected = %{<input type="hidden" id="post_written_on_1i" name="post[written_on(1i)]" value="2004" />\n}
0
+    expected << %{<input type="hidden" id="post_written_on_2i" name="post[written_on(2i)]" value="6" />\n}
0
+    expected << %{<input type="hidden" id="post_written_on_3i" name="post[written_on(3i)]" value="15" />\n}
0
+
0
+    expected << %(<select id="post_written_on_4i" name="post[written_on(4i)]">\n)
0
+    expected << %(<option value="">Choose hour</option>\n)
0
+    0.upto(23) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 15}>#{sprintf("%02d", i)}</option>\n) }
0
+    expected << "</select>\n"
0
+    expected << " : "
0
+    expected << %(<select id="post_written_on_5i" name="post[written_on(5i)]">\n)
0
+        expected << %(<option value="">Choose minute</option>\n)
0
+    0.upto(59) { |i| expected << %(<option value="#{sprintf("%02d", i)}"#{' selected="selected"' if i == 16}>#{sprintf("%02d", i)}</option>\n) }
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, time_select("post", "written_on", :prompt => {:hour => 'Choose hour', :minute => 'Choose minute'})
0
+  end
0
+
0
   def test_datetime_select
0
     @post = Post.new
0
     @post.updated_at = Time.local(2004, 6, 15, 16, 35)
0
@@ -1526,6 +1789,64 @@ class DateHelperTest < ActionView::TestCase
0
     assert_dom_equal expected, datetime_select("post", "updated_at", { :date_separator => " / ", :datetime_separator => " , ", :time_separator => " - ", :include_seconds => true })
0
   end
0
 
0
+  def test_datetime_select_with_default_prompt
0
+    @post = Post.new
0
+    @post.updated_at = Time.local(2004, 6, 15, 16, 35)
0
+
0
+    expected = %{<select id="post_updated_at_1i" name="post[updated_at(1i)]">\n}
0
+    expected << %{<option value="">Year</option>\n<option value="1999">1999</option>\n<option value="2000">2000</option>\n<option value="2001">2001</option>\n<option value="2002">2002</option>\n<option value="2003">2003</option>\n<option value="2004" selected="selected">2004</option>\n<option value="2005">2005</option>\n<option value="2006">2006</option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << %{<select id="post_updated_at_2i" name="post[updated_at(2i)]">\n}
0
+    expected << %{<option value="">Month</option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6" selected="selected">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << %{<select id="post_updated_at_3i" name="post[updated_at(3i)]">\n}
0
+    expected << %{<option value="">Day</option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15" selected="selected">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << " &mdash; "
0
+
0
+    expected << %{<select id="post_updated_at_4i" name="post[updated_at(4i)]">\n}
0
+    expected << %{<option value="">Hour</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16" selected="selected">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n}
0
+    expected << "</select>\n"
0
+    expected << " : "
0
+    expected << %{<select id="post_updated_at_5i" name="post[updated_at(5i)]">\n}
0
+    expected << %{<option value="">Minute</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35" selected="selected">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, datetime_select("post", "updated_at", :prompt => true)
0
+  end
0
+
0
+  def test_datetime_select_with_custom_prompt
0
+    @post = Post.new
0
+    @post.updated_at = Time.local(2004, 6, 15, 16, 35)
0
+
0
+    expected = %{<select id="post_updated_at_1i" name="post[updated_at(1i)]">\n}
0
+    expected << %{<option value="">Choose year</option>\n<option value="1999">1999</option>\n<option value="2000">2000</option>\n<option value="2001">2001</option>\n<option value="2002">2002</option>\n<option value="2003">2003</option>\n<option value="2004" selected="selected">2004</option>\n<option value="2005">2005</option>\n<option value="2006">2006</option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << %{<select id="post_updated_at_2i" name="post[updated_at(2i)]">\n}
0
+    expected << %{<option value="">Choose month</option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6" selected="selected">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << %{<select id="post_updated_at_3i" name="post[updated_at(3i)]">\n}
0
+    expected << %{<option value="">Choose day</option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15" selected="selected">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    expected << " &mdash; "
0
+
0
+    expected << %{<select id="post_updated_at_4i" name="post[updated_at(4i)]">\n}
0
+    expected << %{<option value="">Choose hour</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16" selected="selected">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n}
0
+    expected << "</select>\n"
0
+    expected << " : "
0
+    expected << %{<select id="post_updated_at_5i" name="post[updated_at(5i)]">\n}
0
+    expected << %{<option value="">Choose minute</option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35" selected="selected">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n}
0
+    expected << "</select>\n"
0
+
0
+    assert_dom_equal expected, datetime_select("post", "updated_at", :prompt => {:year => 'Choose year', :month => 'Choose month', :day => 'Choose day', :hour => 'Choose hour', :minute => 'Choose minute'})
0
+  end
0
+
0
   def test_date_select_with_zero_value_and_no_start_year
0
     expected =  %(<select id="date_first_year" name="date[first][year]">\n)
0
     (Date.today.year-5).upto(Date.today.year+1) { |y| expected << %(<option value="#{y}">#{y}</option>\n) }

Comments

Uhm, no I18n? :-/

lifo Mon Dec 22 03:34:28 -0800 2008

Patch please!

samoli Mon Dec 22 03:51:43 -0800 2008

Patch added to the lighthouse ticket #561

yaroslav Mon Dec 22 11:47:47 -0800 2008

@samoli thanks!