public
Fork of rails/rails
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/samoli/rails.git
Added :prompt option to date helpers

Set :prompt to true (for a generic prompt) or a prompt string. For date helpers 
with mutiple fields, specify the prompt
you wish to set in a hash. This prepends an option with a generic prompt (Day, 
Month, Year, Hour, Minute, Seconds) or the given prompt
string.

Example:
   date_select("post", "written_on", :prompt=>{:day=>'Select day', 
   :month=>'Select month', :year=>'Select year'})

This is similar to the :prompt option in collection_select
samoli (author)
Mon Jul 07 04:24:24 -0700 2008
commit  0d22364979bd882562035009a55e55efb1773385
tree    572f84329cbdbe74fb70bb5e9e74a8dcbd6651e9
parent  2f4aaed7b3feb3be787a316fab3144c06bb21a27
...
11
12
13
 
 
 
 
 
 
14
15
16
...
148
149
150
 
 
 
 
 
151
152
153
...
186
187
188
 
 
 
 
 
189
190
191
...
215
216
217
 
 
 
 
 
218
219
220
...
253
254
255
 
 
 
 
 
256
257
258
...
286
287
288
 
 
 
 
 
289
290
291
...
324
325
326
 
 
 
 
 
327
328
 
329
330
331
...
395
396
397
398
 
399
400
401
...
414
415
416
 
 
 
 
417
418
419
...
448
449
450
 
 
 
 
451
452
453
 
454
455
456
...
499
500
501
 
 
 
 
502
503
504
...
546
547
548
549
550
 
 
551
552
 
553
554
555
...
558
559
560
561
 
562
563
564
...
587
588
589
 
590
591
592
...
605
606
607
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
608
609
610
...
627
628
629
630
 
631
632
633
...
659
660
661
662
 
663
664
665
...
11
12
13
14
15
16
17
18
19
20
21
22
...
154
155
156
157
158
159
160
161
162
163
164
...
197
198
199
200
201
202
203
204
205
206
207
...
231
232
233
234
235
236
237
238
239
240
241
...
274
275
276
277
278
279
280
281
282
283
284
...
312
313
314
315
316
317
318
319
320
321
322
...
355
356
357
358
359
360
361
362
363
364
365
366
367
368
...
432
433
434
 
435
436
437
438
...
451
452
453
454
455
456
457
458
459
460
...
489
490
491
492
493
494
495
496
497
498
499
500
501
502
...
545
546
547
548
549
550
551
552
553
554
...
596
597
598
 
 
599
600
601
602
603
604
605
606
...
609
610
611
 
612
613
614
615
...
638
639
640
641
642
643
644
...
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
...
697
698
699
 
700
701
702
703
...
729
730
731
 
732
733
734
735
0
@@ -11,6 +11,12 @@ module ActionView
0
     # * <tt>:include_blank</tt> - set to true if it should be possible to set an empty date.
0
     # * <tt>:discard_type</tt> - set to true if you want to discard the type part of the select name. If set to true, the select_month
0
     #   method would use simply "date" (which can be overwritten using <tt>:prefix</tt>) instead of "date[month]".
0
+    # * <tt>:prompt</tt> - set to true (for a generic prompt) or a prompt string. For date helpers with mutiple fields, specify the prompt 
0
+    #   you wish to set in a hash. This prepends an option with a generic prompt (Day, Month, Year, Hour, Minute, Seconds) or the given prompt 
0
+    #   string.
0
+    #    
0
+    # Example:  
0
+    #   date_select("post", "written_on", :prompt=>{:day=>'Select day', :month=>'Select month', :year=>'Select year'})
0
     module DateHelper
0
       include ActionView::Helpers::TagHelper
0
       DEFAULT_PREFIX = 'date' unless const_defined?('DEFAULT_PREFIX')
0
@@ -148,6 +154,11 @@ 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 datetime select with a custom prompt. Use :prompt=>true for generic prompts.
0
+      #   date_select("post", "written_on", :prompt=>{:day=>'Choose day, :month=>'Choose month', :year=>'Choose year'})
0
+      #   date_select("post", "written_on", :prompt=>{:hours=>true) # generic prompt for hours
0
+      #   date_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 all month
0
@@ -186,6 +197,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
+      #   # Generates a datetime select 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 all month
0
@@ -215,6 +231,11 @@ module ActionView
0
       #   # 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
@@ -253,6 +274,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
         separator = options[:datetime_separator] || ''
0
         select_date(datetime, options, html_options) + separator + select_time(datetime, options, html_options)
0
@@ -286,6 +312,11 @@ module ActionView
0
       #   # prefixed with 'payday' rather than 'date'
0
       #   select_datetime(my_date_time, :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=>{:month=>true) # generic prompt for month
0
+      #   select_date(my_date, :prompt=>true) # generic prompts for all
0
+      #
0
       def select_date(date = Date.current, options = {}, html_options = {})
0
         options[:order] ||= []
0
         [:year, :month, :day].each { |o| options[:order].push(o) unless options[:order].include?(o) }
0
@@ -324,8 +355,14 @@ 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=>{:hours=>'Choose hours', :minutes=>'Choose minutes'})
0
+      #   select_time(my_time, :prompt=>{:hours=>true}) # prompt for hours only
0
+      #   select_time(my_time, :prompt=>true) # prompt for all
0
+      #
0
       def select_time(datetime = Time.current, options = {}, html_options = {})
0
         separator = options[:time_separator] || ''
0
+        select_time = ''
0
         select_hour(datetime, options, html_options) + separator + select_minute(datetime, options, html_options) + (options[:include_seconds] ? separator + select_second(datetime, options, html_options) : '')
0
       end
0
 
0
@@ -395,7 +432,7 @@ module ActionView
0
             minute_options << "\n"
0
           end
0
           select_html(options[:field_name] || 'minute', minute_options.join, options, html_options)
0
-         end
0
+        end
0
       end
0
 
0
       # Returns a select tag with options for each of the hours 0 through 23 with the current hour selected.
0
@@ -414,6 +451,10 @@ module ActionView
0
       #   # Generates a select field for minutes that defaults to the minutes for the time in my_time
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_hour(datetime, options = {}, html_options = {})
0
         val = datetime ? (datetime.kind_of?(Fixnum) ? datetime : datetime.hour) : ''
0
@@ -448,9 +489,14 @@ module ActionView
0
       #   # Generates a select field for days that defaults to the day for the date in my_date
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
         val = date ? (date.kind_of?(Fixnum) ? date : date.day) : ''
0
+
0
         if options[:use_hidden]
0
           hidden_html(options[:field_name] || 'day', val, options)
0
         else
0
@@ -499,6 +545,10 @@ module ActionView
0
       #   # Generates a select field for months that defaults to the current month that
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 that has a custom prompt. Use 
0
+      #   :prompt=>true for a generic prompt
0
+      #   select_month(Date.today, :prompt=>'Choose month')
0
       #
0
       def select_month(date, options = {}, html_options = {})
0
         val = date ? (date.kind_of?(Fixnum) ? date : date.month) : ''
0
@@ -546,10 +596,11 @@ module ActionView
0
       #   select_year(Date.today, :start_year => 2005, :end_year => 1900)
0
       #
0
       #   # Generates a select field for years that defaults to the year 2006 that
0
-      #   # has ascending year values
0
-      #   select_year(2006, :start_year => 2000, :end_year => 2010)
0
+      #   # has ascending year values, with a custom prompt
0
+      #   select_year(2006, :start_year => 2000, :end_year => 2010, :prompt=>'Choose year')
0
       #
0
       def select_year(date, options = {}, html_options = {})
0
+        
0
         if !date || date == 0
0
           value = ''
0
           middle_year = Date.today.year
0
@@ -558,7 +609,7 @@ module ActionView
0
         else
0
           value = middle_year = date.year
0
         end
0
-
0
+        
0
         if options[:use_hidden]
0
           hidden_html(options[:field_name] || 'year', value, options)
0
         else
0
@@ -587,6 +638,7 @@ module ActionView
0
           select_options.merge!(:disabled => 'disabled') if options[:disabled]
0
           select_options.merge!(select_tag_options) unless select_tag_options.empty?
0
           select_html = "\n"
0
+          select_html << prompt_option_tag(type, options)
0
           select_html << content_tag(:option, '', :value => '') + "\n" if options[:include_blank]
0
           select_html << html_options.to_s
0
           content_tag(:select, select_html, select_options) + "\n"
0
@@ -605,6 +657,24 @@ module ActionView
0
         def leading_zero_on_single_digits(number)
0
           number > 9 ? number : "0#{number}"
0
         end
0
+        
0
+        def prompt_option_tag(type, options)     
0
+         default_options = {:year=>false, :month=>false, :day=>false, :hour=>false, :minute=>false, :second=>false}
0
+         default_prompts = {:year=>'Year', :month=>'Month', :day=>'Day', :hour=>'Hour', :minute=>'Minute', :second=>'Seconds'}
0
+         options[:prompt] ||= default_options
0
+
0
+         case options[:prompt]
0
+         when Hash
0
+           prompt = default_options.merge(options[:prompt])[type.to_sym]
0
+         when String
0
+           prompt = options[:prompt]
0
+         else
0
+           prompt = default_prompts[type.to_sym]
0
+         end
0
+         
0
+         prompt ? content_tag(:option, prompt, :value => '') + "\n" : ''
0
+        end
0
+              
0
     end
0
 
0
     class InstanceTag #:nodoc:
0
@@ -627,7 +697,7 @@ module ActionView
0
           defaults = { :discard_type => true }
0
           options  = defaults.merge(options)
0
           datetime = value(object)
0
-          datetime ||= default_time_from_options(options[:default]) unless options[:include_blank]
0
+          datetime ||= default_time_from_options(options[:default]) unless options[:include_blank] || options[:prompt]
0
 
0
           position = { :year => 1, :month => 2, :day => 3, :hour => 4, :minute => 5, :second => 6 }
0
 
0
@@ -659,7 +729,7 @@ module ActionView
0
             # Send hidden fields for discarded elements once output has started
0
             # This ensures AR can reconstruct valid dates using ParseDate
0
             next if discard[param] && (date_or_time_select.empty? || options[:ignore_date])
0
-
0
+            
0
             date_or_time_select.insert(0, self.send("select_#{param}", datetime, options_with_prefix(position[param], options.merge(:use_hidden => discard[param])), html_options))
0
             date_or_time_select.insert(0,
0
               case param
...
152
153
154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
156
157
...
275
276
277
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278
279
280
...
343
344
345
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
346
347
348
...
391
392
393
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
394
395
396
...
469
470
471
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
472
473
474
...
523
524
525
 
 
 
 
 
 
 
 
 
 
 
 
 
526
 
 
 
527
528
529
...
856
857
858
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
859
860
861
...
934
935
936
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
937
938
939
...
1178
1179
1180
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1181
1182
1183
...
1277
1278
1279
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1280
1281
1282
...
1359
1360
1361
1362
 
1363
1364
1365
...
1765
1766
1767
 
 
 
 
 
 
 
 
 
 
 
 
1768
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1769
1770
1771
...
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
...
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
...
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
...
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
...
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
...
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
...
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
...
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
...
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
...
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
...
1619
1620
1621
 
1622
1623
1624
1625
...
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
0
@@ -152,6 +152,22 @@ class DateHelperTest < ActionView::TestCase
0
     assert_dom_equal expected, select_day(Time.mktime(2003, 8, 16), {}, :class => 'selector')
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
@@ -275,6 +291,22 @@ class DateHelperTest < ActionView::TestCase
0
     #assert result.include?('accesskey="M"')
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
@@ -343,6 +375,22 @@ class DateHelperTest < ActionView::TestCase
0
     #assert result.include?('accesskey="M"')
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
@@ -391,6 +439,22 @@ class DateHelperTest < ActionView::TestCase
0
 
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
@@ -469,6 +533,22 @@ class DateHelperTest < ActionView::TestCase
0
     #assert result.include?('accesskey="M"')
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
@@ -523,7 +603,23 @@ class DateHelperTest < ActionView::TestCase
0
     #assert result.include?('accesskey="M"')
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
@@ -856,6 +952,55 @@ class DateHelperTest < ActionView::TestCase
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]"}, :class => 'selector')
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, :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]", :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
@@ -934,6 +1079,39 @@ class DateHelperTest < ActionView::TestCase
0
     assert_dom_equal expected, select_time(Time.mktime(2003, 8, 16, 8, 4, 18), {:include_seconds => false}, :class => 'selector')
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, :prompt=>{:hour=>'Choose hour', :minute=>'Choose minute', :second=>'Choose seconds'})
0
+  end
0
+  
0
   uses_mocha 'TestDatetimeAndTimeSelectUseTimeCurrentAsDefault' do
0
     def test_select_datetime_uses_time_current_as_default
0
       time = stub(:year => 2004, :month => 6, :day => 15, :hour => 16, :min => 35, :sec => 0)
0
@@ -1178,6 +1356,46 @@ class DateHelperTest < ActionView::TestCase
0
 
0
     assert_dom_equal expected, output_buffer
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
@@ -1277,6 +1495,48 @@ class DateHelperTest < ActionView::TestCase
0
 
0
     assert_dom_equal expected, output_buffer
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="#{leading_zero_on_single_digits(i)}"#{' selected="selected"' if i == 15}>#{leading_zero_on_single_digits(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="#{leading_zero_on_single_digits(i)}"#{' selected="selected"' if i == 16}>#{leading_zero_on_single_digits(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="#{leading_zero_on_single_digits(i)}"#{' selected="selected"' if i == 15}>#{leading_zero_on_single_digits(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="#{leading_zero_on_single_digits(i)}"#{' selected="selected"' if i == 16}>#{leading_zero_on_single_digits(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
@@ -1359,7 +1619,7 @@ class DateHelperTest < ActionView::TestCase
0
 
0
     assert_dom_equal expected, output_buffer
0
   end
0
-
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) }
0
@@ -1765,7 +2025,65 @@ class DateHelperTest < ActionView::TestCase
0
 
0
     assert_dom_equal expected, datetime_select("post", "updated_at", {}, :class => 'selector')
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
   uses_mocha 'TestInstanceTagDefaultTimeFromOptions' do
0
     def test_instance_tag_default_time_from_options_uses_time_current_as_default_when_hash_passed_as_arg
0
       dummy_instance_tag = ActionView::Helpers::InstanceTag.new(1,2,3)

Comments