Changesets can be listed by changeset number.
The Git repository is here.
- Revision:
- 373
- Log:
Initial import of Radiant 0.9.1, which is now packaged as a gem. This is an
import of the tagged 0.9.1 source checked out from GitHub, which isn't quite
the same as the gem distribution - but it doesn't seem to be available in an
archived form and the installed gem already has modifications, so this is
the closest I can get.
- Author:
- rool
- Date:
- Mon Mar 21 13:40:05 +0000 2011
- Size:
- 36677 Bytes
1 | require 'abstract_unit' |
2 | require 'tzinfo' |
3 | |
4 | TZInfo::Timezone.cattr_reader :loaded_zones |
5 | |
6 | class FormOptionsHelperTest < ActionView::TestCase |
7 | tests ActionView::Helpers::FormOptionsHelper |
8 | |
9 | silence_warnings do |
10 | Post = Struct.new('Post', :title, :author_name, :body, :secret, :written_on, :category, :origin) |
11 | Continent = Struct.new('Continent', :continent_name, :countries) |
12 | Country = Struct.new('Country', :country_id, :country_name) |
13 | Firm = Struct.new('Firm', :time_zone) |
14 | Album = Struct.new('Album', :id, :title, :genre) |
15 | end |
16 | |
17 | def setup |
18 | @fake_timezones = %w(A B C D E).inject([]) do |zones, id| |
19 | tz = TZInfo::Timezone.loaded_zones[id] = stub(:name => id, :to_s => id) |
20 | ActiveSupport::TimeZone.stubs(:[]).with(id).returns(tz) |
21 | zones << tz |
22 | end |
23 | ActiveSupport::TimeZone.stubs(:all).returns(@fake_timezones) |
24 | end |
25 | |
26 | def test_collection_options |
27 | assert_dom_equal( |
28 | "<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>", |
29 | options_from_collection_for_select(dummy_posts, "author_name", "title") |
30 | ) |
31 | end |
32 | |
33 | |
34 | def test_collection_options_with_preselected_value |
35 | assert_dom_equal( |
36 | "<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\" selected=\"selected\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>", |
37 | options_from_collection_for_select(dummy_posts, "author_name", "title", "Babe") |
38 | ) |
39 | end |
40 | |
41 | def test_collection_options_with_preselected_value_array |
42 | assert_dom_equal( |
43 | "<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\" selected=\"selected\">Babe went home</option>\n<option value=\"Cabe\" selected=\"selected\">Cabe went home</option>", |
44 | options_from_collection_for_select(dummy_posts, "author_name", "title", [ "Babe", "Cabe" ]) |
45 | ) |
46 | end |
47 | |
48 | def test_collection_options_with_proc_for_selected |
49 | assert_dom_equal( |
50 | "<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\" selected=\"selected\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>", |
51 | options_from_collection_for_select(dummy_posts, "author_name", "title", lambda{|p| p.author_name == 'Babe' }) |
52 | ) |
53 | end |
54 | |
55 | def test_collection_options_with_disabled_value |
56 | assert_dom_equal( |
57 | "<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\" disabled=\"disabled\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>", |
58 | options_from_collection_for_select(dummy_posts, "author_name", "title", :disabled => "Babe") |
59 | ) |
60 | end |
61 | |
62 | def test_collection_options_with_disabled_array |
63 | assert_dom_equal( |
64 | "<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\" disabled=\"disabled\">Babe went home</option>\n<option value=\"Cabe\" disabled=\"disabled\">Cabe went home</option>", |
65 | options_from_collection_for_select(dummy_posts, "author_name", "title", :disabled => [ "Babe", "Cabe" ]) |
66 | ) |
67 | end |
68 | |
69 | def test_collection_options_with_preselected_and_disabled_value |
70 | assert_dom_equal( |
71 | "<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\" disabled=\"disabled\">Babe went home</option>\n<option value=\"Cabe\" selected=\"selected\">Cabe went home</option>", |
72 | options_from_collection_for_select(dummy_posts, "author_name", "title", :selected => "Cabe", :disabled => "Babe") |
73 | ) |
74 | end |
75 | |
76 | def test_collection_options_with_proc_for_disabled |
77 | assert_dom_equal( |
78 | "<option value=\"<Abe>\"><Abe> went home</option>\n<option value=\"Babe\" disabled=\"disabled\">Babe went home</option>\n<option value=\"Cabe\" disabled=\"disabled\">Cabe went home</option>", |
79 | options_from_collection_for_select(dummy_posts, "author_name", "title", :disabled => lambda{|p| %w(Babe Cabe).include? p.author_name }) |
80 | ) |
81 | end |
82 | |
83 | def test_string_options_for_select |
84 | options = "<option value=\"Denmark\">Denmark</option><option value=\"USA\">USA</option><option value=\"Sweden\">Sweden</option>" |
85 | assert_dom_equal( |
86 | options, |
87 | options_for_select(options) |
88 | ) |
89 | end |
90 | |
91 | def test_array_options_for_select |
92 | assert_dom_equal( |
93 | "<option value=\"<Denmark>\"><Denmark></option>\n<option value=\"USA\">USA</option>\n<option value=\"Sweden\">Sweden</option>", |
94 | options_for_select([ "<Denmark>", "USA", "Sweden" ]) |
95 | ) |
96 | end |
97 | |
98 | def test_array_options_for_select_with_selection |
99 | assert_dom_equal( |
100 | "<option value=\"Denmark\">Denmark</option>\n<option value=\"<USA>\" selected=\"selected\"><USA></option>\n<option value=\"Sweden\">Sweden</option>", |
101 | options_for_select([ "Denmark", "<USA>", "Sweden" ], "<USA>") |
102 | ) |
103 | end |
104 | |
105 | def test_array_options_for_select_with_selection_array |
106 | assert_dom_equal( |
107 | "<option value=\"Denmark\">Denmark</option>\n<option value=\"<USA>\" selected=\"selected\"><USA></option>\n<option value=\"Sweden\" selected=\"selected\">Sweden</option>", |
108 | options_for_select([ "Denmark", "<USA>", "Sweden" ], [ "<USA>", "Sweden" ]) |
109 | ) |
110 | end |
111 | |
112 | def test_array_options_for_select_with_disabled_value |
113 | assert_dom_equal( |
114 | "<option value=\"Denmark\">Denmark</option>\n<option value=\"<USA>\" disabled=\"disabled\"><USA></option>\n<option value=\"Sweden\">Sweden</option>", |
115 | options_for_select([ "Denmark", "<USA>", "Sweden" ], :disabled => "<USA>") |
116 | ) |
117 | end |
118 | |
119 | def test_array_options_for_select_with_disabled_array |
120 | assert_dom_equal( |
121 | "<option value=\"Denmark\">Denmark</option>\n<option value=\"<USA>\" disabled=\"disabled\"><USA></option>\n<option value=\"Sweden\" disabled=\"disabled\">Sweden</option>", |
122 | options_for_select([ "Denmark", "<USA>", "Sweden" ], :disabled => ["<USA>", "Sweden"]) |
123 | ) |
124 | end |
125 | |
126 | def test_array_options_for_select_with_selection_and_disabled_value |
127 | assert_dom_equal( |
128 | "<option value=\"Denmark\" selected=\"selected\">Denmark</option>\n<option value=\"<USA>\" disabled=\"disabled\"><USA></option>\n<option value=\"Sweden\">Sweden</option>", |
129 | options_for_select([ "Denmark", "<USA>", "Sweden" ], :selected => "Denmark", :disabled => "<USA>") |
130 | ) |
131 | end |
132 | |
133 | def test_array_options_for_string_include_in_other_string_bug_fix |
134 | assert_dom_equal( |
135 | "<option value=\"ruby\">ruby</option>\n<option value=\"rubyonrails\" selected=\"selected\">rubyonrails</option>", |
136 | options_for_select([ "ruby", "rubyonrails" ], "rubyonrails") |
137 | ) |
138 | assert_dom_equal( |
139 | "<option value=\"ruby\" selected=\"selected\">ruby</option>\n<option value=\"rubyonrails\">rubyonrails</option>", |
140 | options_for_select([ "ruby", "rubyonrails" ], "ruby") |
141 | ) |
142 | assert_dom_equal( |
143 | %(<option value="ruby" selected="selected">ruby</option>\n<option value="rubyonrails">rubyonrails</option>\n<option value=""></option>), |
144 | options_for_select([ "ruby", "rubyonrails", nil ], "ruby") |
145 | ) |
146 | end |
147 | |
148 | def test_hash_options_for_select |
149 | assert_dom_equal( |
150 | "<option value=\"<Kroner>\"><DKR></option>\n<option value=\"Dollar\">$</option>", |
151 | options_for_select("$" => "Dollar", "<DKR>" => "<Kroner>").split("\n").sort.join("\n") |
152 | ) |
153 | assert_dom_equal( |
154 | "<option value=\"<Kroner>\"><DKR></option>\n<option value=\"Dollar\" selected=\"selected\">$</option>", |
155 | options_for_select({ "$" => "Dollar", "<DKR>" => "<Kroner>" }, "Dollar").split("\n").sort.join("\n") |
156 | ) |
157 | assert_dom_equal( |
158 | "<option value=\"<Kroner>\" selected=\"selected\"><DKR></option>\n<option value=\"Dollar\" selected=\"selected\">$</option>", |
159 | options_for_select({ "$" => "Dollar", "<DKR>" => "<Kroner>" }, [ "Dollar", "<Kroner>" ]).split("\n").sort.join("\n") |
160 | ) |
161 | end |
162 | |
163 | def test_ducktyped_options_for_select |
164 | quack = Struct.new(:first, :last) |
165 | assert_dom_equal( |
166 | "<option value=\"<Kroner>\"><DKR></option>\n<option value=\"Dollar\">$</option>", |
167 | options_for_select([quack.new("<DKR>", "<Kroner>"), quack.new("$", "Dollar")]) |
168 | ) |
169 | assert_dom_equal( |
170 | "<option value=\"<Kroner>\"><DKR></option>\n<option value=\"Dollar\" selected=\"selected\">$</option>", |
171 | options_for_select([quack.new("<DKR>", "<Kroner>"), quack.new("$", "Dollar")], "Dollar") |
172 | ) |
173 | assert_dom_equal( |
174 | "<option value=\"<Kroner>\" selected=\"selected\"><DKR></option>\n<option value=\"Dollar\" selected=\"selected\">$</option>", |
175 | options_for_select([quack.new("<DKR>", "<Kroner>"), quack.new("$", "Dollar")], ["Dollar", "<Kroner>"]) |
176 | ) |
177 | end |
178 | |
179 | def test_option_groups_from_collection_for_select |
180 | @continents = [ |
181 | Continent.new("<Africa>", [Country.new("<sa>", "<South Africa>"), Country.new("so", "Somalia")] ), |
182 | Continent.new("Europe", [Country.new("dk", "Denmark"), Country.new("ie", "Ireland")] ) |
183 | ] |
184 | |
185 | assert_dom_equal( |
186 | "<optgroup label=\"<Africa>\"><option value=\"<sa>\"><South Africa></option>\n<option value=\"so\">Somalia</option></optgroup><optgroup label=\"Europe\"><option value=\"dk\" selected=\"selected\">Denmark</option>\n<option value=\"ie\">Ireland</option></optgroup>", |
187 | option_groups_from_collection_for_select(@continents, "countries", "continent_name", "country_id", "country_name", "dk") |
188 | ) |
189 | end |
190 | |
191 | def test_grouped_options_for_select_with_array |
192 | assert_dom_equal( |
193 | "<optgroup label=\"North America\"><option value=\"US\">United States</option>\n<option value=\"Canada\">Canada</option></optgroup><optgroup label=\"Europe\"><option value=\"GB\">Great Britain</option>\n<option value=\"Germany\">Germany</option></optgroup>", |
194 | grouped_options_for_select([ |
195 | ["North America", |
196 | [['United States','US'],"Canada"]], |
197 | ["Europe", |
198 | [["Great Britain","GB"], "Germany"]] |
199 | ]) |
200 | ) |
201 | end |
202 | |
203 | def test_grouped_options_for_select_with_selected_and_prompt |
204 | assert_dom_equal( |
205 | "<option value=\"\">Choose a product...</option><optgroup label=\"Hats\"><option value=\"Baseball Cap\">Baseball Cap</option>\n<option selected=\"selected\" value=\"Cowboy Hat\">Cowboy Hat</option></optgroup>", |
206 | grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], "Cowboy Hat", "Choose a product...") |
207 | ) |
208 | end |
209 | |
210 | def test_optgroups_with_with_options_with_hash |
211 | assert_dom_equal( |
212 | "<optgroup label=\"Europe\"><option value=\"Denmark\">Denmark</option>\n<option value=\"Germany\">Germany</option></optgroup><optgroup label=\"North America\"><option value=\"United States\">United States</option>\n<option value=\"Canada\">Canada</option></optgroup>", |
213 | grouped_options_for_select({'North America' => ['United States','Canada'], 'Europe' => ['Denmark','Germany']}) |
214 | ) |
215 | end |
216 | |
217 | def test_time_zone_options_no_parms |
218 | opts = time_zone_options_for_select |
219 | assert_dom_equal "<option value=\"A\">A</option>\n" + |
220 | "<option value=\"B\">B</option>\n" + |
221 | "<option value=\"C\">C</option>\n" + |
222 | "<option value=\"D\">D</option>\n" + |
223 | "<option value=\"E\">E</option>", |
224 | opts |
225 | end |
226 | |
227 | def test_time_zone_options_with_selected |
228 | opts = time_zone_options_for_select( "D" ) |
229 | assert_dom_equal "<option value=\"A\">A</option>\n" + |
230 | "<option value=\"B\">B</option>\n" + |
231 | "<option value=\"C\">C</option>\n" + |
232 | "<option value=\"D\" selected=\"selected\">D</option>\n" + |
233 | "<option value=\"E\">E</option>", |
234 | opts |
235 | end |
236 | |
237 | def test_time_zone_options_with_unknown_selected |
238 | opts = time_zone_options_for_select( "K" ) |
239 | assert_dom_equal "<option value=\"A\">A</option>\n" + |
240 | "<option value=\"B\">B</option>\n" + |
241 | "<option value=\"C\">C</option>\n" + |
242 | "<option value=\"D\">D</option>\n" + |
243 | "<option value=\"E\">E</option>", |
244 | opts |
245 | end |
246 | |
247 | def test_time_zone_options_with_priority_zones |
248 | zones = [ ActiveSupport::TimeZone.new( "B" ), ActiveSupport::TimeZone.new( "E" ) ] |
249 | opts = time_zone_options_for_select( nil, zones ) |
250 | assert_dom_equal "<option value=\"B\">B</option>\n" + |
251 | "<option value=\"E\">E</option>" + |
252 | "<option value=\"\" disabled=\"disabled\">-------------</option>\n" + |
253 | "<option value=\"A\">A</option>\n" + |
254 | "<option value=\"C\">C</option>\n" + |
255 | "<option value=\"D\">D</option>", |
256 | opts |
257 | end |
258 | |
259 | def test_time_zone_options_with_selected_priority_zones |
260 | zones = [ ActiveSupport::TimeZone.new( "B" ), ActiveSupport::TimeZone.new( "E" ) ] |
261 | opts = time_zone_options_for_select( "E", zones ) |
262 | assert_dom_equal "<option value=\"B\">B</option>\n" + |
263 | "<option value=\"E\" selected=\"selected\">E</option>" + |
264 | "<option value=\"\" disabled=\"disabled\">-------------</option>\n" + |
265 | "<option value=\"A\">A</option>\n" + |
266 | "<option value=\"C\">C</option>\n" + |
267 | "<option value=\"D\">D</option>", |
268 | opts |
269 | end |
270 | |
271 | def test_time_zone_options_with_unselected_priority_zones |
272 | zones = [ ActiveSupport::TimeZone.new( "B" ), ActiveSupport::TimeZone.new( "E" ) ] |
273 | opts = time_zone_options_for_select( "C", zones ) |
274 | assert_dom_equal "<option value=\"B\">B</option>\n" + |
275 | "<option value=\"E\">E</option>" + |
276 | "<option value=\"\" disabled=\"disabled\">-------------</option>\n" + |
277 | "<option value=\"A\">A</option>\n" + |
278 | "<option value=\"C\" selected=\"selected\">C</option>\n" + |
279 | "<option value=\"D\">D</option>", |
280 | opts |
281 | end |
282 | |
283 | def test_select |
284 | @post = Post.new |
285 | @post.category = "<mus>" |
286 | assert_dom_equal( |
287 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"<mus>\" selected=\"selected\"><mus></option>\n<option value=\"hest\">hest</option></select>", |
288 | select("post", "category", %w( abe <mus> hest)) |
289 | ) |
290 | end |
291 | |
292 | def test_select_under_fields_for |
293 | @post = Post.new |
294 | @post.category = "<mus>" |
295 | |
296 | fields_for :post, @post do |f| |
297 | concat f.select(:category, %w( abe <mus> hest)) |
298 | end |
299 | |
300 | assert_dom_equal( |
301 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"<mus>\" selected=\"selected\"><mus></option>\n<option value=\"hest\">hest</option></select>", |
302 | output_buffer |
303 | ) |
304 | end |
305 | |
306 | def test_select_under_fields_for_with_index |
307 | @post = Post.new |
308 | @post.category = "<mus>" |
309 | |
310 | fields_for :post, @post, :index => 108 do |f| |
311 | concat f.select(:category, %w( abe <mus> hest)) |
312 | end |
313 | |
314 | assert_dom_equal( |
315 | "<select id=\"post_108_category\" name=\"post[108][category]\"><option value=\"abe\">abe</option>\n<option value=\"<mus>\" selected=\"selected\"><mus></option>\n<option value=\"hest\">hest</option></select>", |
316 | output_buffer |
317 | ) |
318 | end |
319 | |
320 | def test_select_under_fields_for_with_auto_index |
321 | @post = Post.new |
322 | @post.category = "<mus>" |
323 | def @post.to_param; 108; end |
324 | |
325 | fields_for "post[]", @post do |f| |
326 | concat f.select(:category, %w( abe <mus> hest)) |
327 | end |
328 | |
329 | assert_dom_equal( |
330 | "<select id=\"post_108_category\" name=\"post[108][category]\"><option value=\"abe\">abe</option>\n<option value=\"<mus>\" selected=\"selected\"><mus></option>\n<option value=\"hest\">hest</option></select>", |
331 | output_buffer |
332 | ) |
333 | end |
334 | |
335 | def test_select_under_fields_for_with_string_and_given_prompt |
336 | @post = Post.new |
337 | options = "<option value=\"abe\">abe</option><option value=\"mus\">mus</option><option value=\"hest\">hest</option>" |
338 | |
339 | fields_for :post, @post do |f| |
340 | concat f.select(:category, options, :prompt => 'The prompt') |
341 | end |
342 | |
343 | assert_dom_equal( |
344 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">The prompt</option>\n#{options}</select>", |
345 | output_buffer |
346 | ) |
347 | end |
348 | |
349 | def test_select_with_blank |
350 | @post = Post.new |
351 | @post.category = "<mus>" |
352 | assert_dom_equal( |
353 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"\"></option>\n<option value=\"abe\">abe</option>\n<option value=\"<mus>\" selected=\"selected\"><mus></option>\n<option value=\"hest\">hest</option></select>", |
354 | select("post", "category", %w( abe <mus> hest), :include_blank => true) |
355 | ) |
356 | end |
357 | |
358 | def test_select_with_blank_as_string |
359 | @post = Post.new |
360 | @post.category = "<mus>" |
361 | assert_dom_equal( |
362 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">None</option>\n<option value=\"abe\">abe</option>\n<option value=\"<mus>\" selected=\"selected\"><mus></option>\n<option value=\"hest\">hest</option></select>", |
363 | select("post", "category", %w( abe <mus> hest), :include_blank => 'None') |
364 | ) |
365 | end |
366 | |
367 | def test_select_with_default_prompt |
368 | @post = Post.new |
369 | @post.category = "" |
370 | assert_dom_equal( |
371 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">Please select</option>\n<option value=\"abe\">abe</option>\n<option value=\"<mus>\"><mus></option>\n<option value=\"hest\">hest</option></select>", |
372 | select("post", "category", %w( abe <mus> hest), :prompt => true) |
373 | ) |
374 | end |
375 | |
376 | def test_select_no_prompt_when_select_has_value |
377 | @post = Post.new |
378 | @post.category = "<mus>" |
379 | assert_dom_equal( |
380 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"<mus>\" selected=\"selected\"><mus></option>\n<option value=\"hest\">hest</option></select>", |
381 | select("post", "category", %w( abe <mus> hest), :prompt => true) |
382 | ) |
383 | end |
384 | |
385 | def test_select_with_given_prompt |
386 | @post = Post.new |
387 | @post.category = "" |
388 | assert_dom_equal( |
389 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">The prompt</option>\n<option value=\"abe\">abe</option>\n<option value=\"<mus>\"><mus></option>\n<option value=\"hest\">hest</option></select>", |
390 | select("post", "category", %w( abe <mus> hest), :prompt => 'The prompt') |
391 | ) |
392 | end |
393 | |
394 | def test_select_with_prompt_and_blank |
395 | @post = Post.new |
396 | @post.category = "" |
397 | assert_dom_equal( |
398 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">Please select</option>\n<option value=\"\"></option>\n<option value=\"abe\">abe</option>\n<option value=\"<mus>\"><mus></option>\n<option value=\"hest\">hest</option></select>", |
399 | select("post", "category", %w( abe <mus> hest), :prompt => true, :include_blank => true) |
400 | ) |
401 | end |
402 | |
403 | def test_select_with_selected_value |
404 | @post = Post.new |
405 | @post.category = "<mus>" |
406 | assert_dom_equal( |
407 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\" selected=\"selected\">abe</option>\n<option value=\"<mus>\"><mus></option>\n<option value=\"hest\">hest</option></select>", |
408 | select("post", "category", %w( abe <mus> hest ), :selected => 'abe') |
409 | ) |
410 | end |
411 | |
412 | def test_select_with_index_option |
413 | @album = Album.new |
414 | @album.id = 1 |
415 | |
416 | expected = "<select id=\"album__genre\" name=\"album[][genre]\"><option value=\"rap\">rap</option>\n<option value=\"rock\">rock</option>\n<option value=\"country\">country</option></select>" |
417 | |
418 | assert_dom_equal( |
419 | expected, |
420 | select("album[]", "genre", %w[rap rock country], {}, { :index => nil }) |
421 | ) |
422 | end |
423 | |
424 | def test_select_with_selected_nil |
425 | @post = Post.new |
426 | @post.category = "<mus>" |
427 | assert_dom_equal( |
428 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"<mus>\"><mus></option>\n<option value=\"hest\">hest</option></select>", |
429 | select("post", "category", %w( abe <mus> hest ), :selected => nil) |
430 | ) |
431 | end |
432 | |
433 | def test_select_with_disabled_value |
434 | @post = Post.new |
435 | @post.category = "<mus>" |
436 | assert_dom_equal( |
437 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"<mus>\" selected=\"selected\"><mus></option>\n<option value=\"hest\" disabled=\"disabled\">hest</option></select>", |
438 | select("post", "category", %w( abe <mus> hest ), :disabled => 'hest') |
439 | ) |
440 | end |
441 | |
442 | def test_select_with_disabled_array |
443 | @post = Post.new |
444 | @post.category = "<mus>" |
445 | assert_dom_equal( |
446 | "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\" disabled=\"disabled\">abe</option>\n<option value=\"<mus>\" selected=\"selected\"><mus></option>\n<option value=\"hest\" disabled=\"disabled\">hest</option></select>", |
447 | select("post", "category", %w( abe <mus> hest ), :disabled => ['hest', 'abe']) |
448 | ) |
449 | end |
450 | |
451 | def test_collection_select |
452 | @post = Post.new |
453 | @post.author_name = "Babe" |
454 | |
455 | assert_dom_equal( |
456 | "<select id=\"post_author_name\" name=\"post[author_name]\"><option value=\"<Abe>\"><Abe></option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>", |
457 | collection_select("post", "author_name", dummy_posts, "author_name", "author_name") |
458 | ) |
459 | end |
460 | |
461 | def test_collection_select_under_fields_for |
462 | @post = Post.new |
463 | @post.author_name = "Babe" |
464 | |
465 | fields_for :post, @post do |f| |
466 | concat f.collection_select(:author_name, dummy_posts, :author_name, :author_name) |
467 | end |
468 | |
469 | assert_dom_equal( |
470 | "<select id=\"post_author_name\" name=\"post[author_name]\"><option value=\"<Abe>\"><Abe></option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>", |
471 | output_buffer |
472 | ) |
473 | end |
474 | |
475 | def test_collection_select_under_fields_for_with_index |
476 | @post = Post.new |
477 | @post.author_name = "Babe" |
478 | |
479 | fields_for :post, @post, :index => 815 do |f| |
480 | concat f.collection_select(:author_name, dummy_posts, :author_name, :author_name) |
481 | end |
482 | |
483 | assert_dom_equal( |
484 | "<select id=\"post_815_author_name\" name=\"post[815][author_name]\"><option value=\"<Abe>\"><Abe></option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>", |
485 | output_buffer |
486 | ) |
487 | end |
488 | |
489 | def test_collection_select_under_fields_for_with_auto_index |
490 | @post = Post.new |
491 | @post.author_name = "Babe" |
492 | def @post.to_param; 815; end |
493 | |
494 | fields_for "post[]", @post do |f| |
495 | concat f.collection_select(:author_name, dummy_posts, :author_name, :author_name) |
496 | end |
497 | |
498 | assert_dom_equal( |
499 | "<select id=\"post_815_author_name\" name=\"post[815][author_name]\"><option value=\"<Abe>\"><Abe></option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>", |
500 | output_buffer |
501 | ) |
502 | end |
503 | |
504 | def test_collection_select_with_blank_and_style |
505 | @post = Post.new |
506 | @post.author_name = "Babe" |
507 | |
508 | assert_dom_equal( |
509 | "<select id=\"post_author_name\" name=\"post[author_name]\" style=\"width: 200px\"><option value=\"\"></option>\n<option value=\"<Abe>\"><Abe></option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>", |
510 | collection_select("post", "author_name", dummy_posts, "author_name", "author_name", { :include_blank => true }, "style" => "width: 200px") |
511 | ) |
512 | end |
513 | |
514 | def test_collection_select_with_blank_as_string_and_style |
515 | @post = Post.new |
516 | @post.author_name = "Babe" |
517 | |
518 | assert_dom_equal( |
519 | "<select id=\"post_author_name\" name=\"post[author_name]\" style=\"width: 200px\"><option value=\"\">No Selection</option>\n<option value=\"<Abe>\"><Abe></option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>", |
520 | collection_select("post", "author_name", dummy_posts, "author_name", "author_name", { :include_blank => 'No Selection' }, "style" => "width: 200px") |
521 | ) |
522 | end |
523 | |
524 | def test_collection_select_with_multiple_option_appends_array_brackets |
525 | @post = Post.new |
526 | @post.author_name = "Babe" |
527 | |
528 | expected = "<select id=\"post_author_name\" name=\"post[author_name][]\" multiple=\"multiple\"><option value=\"\"></option>\n<option value=\"<Abe>\"><Abe></option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>" |
529 | |
530 | # Should suffix default name with []. |
531 | assert_dom_equal expected, collection_select("post", "author_name", dummy_posts, "author_name", "author_name", { :include_blank => true }, :multiple => true) |
532 | |
533 | # Shouldn't suffix custom name with []. |
534 | assert_dom_equal expected, collection_select("post", "author_name", dummy_posts, "author_name", "author_name", { :include_blank => true, :name => 'post[author_name][]' }, :multiple => true) |
535 | end |
536 | |
537 | def test_collection_select_with_blank_and_selected |
538 | @post = Post.new |
539 | @post.author_name = "Babe" |
540 | |
541 | assert_dom_equal( |
542 | %{<select id="post_author_name" name="post[author_name]"><option value=""></option>\n<option value="<Abe>" selected="selected"><Abe></option>\n<option value="Babe">Babe</option>\n<option value="Cabe">Cabe</option></select>}, |
543 | collection_select("post", "author_name", dummy_posts, "author_name", "author_name", {:include_blank => true, :selected => "<Abe>"}) |
544 | ) |
545 | end |
546 | |
547 | def test_collection_select_with_disabled |
548 | @post = Post.new |
549 | @post.author_name = "Babe" |
550 | |
551 | assert_dom_equal( |
552 | "<select id=\"post_author_name\" name=\"post[author_name]\"><option value=\"<Abe>\"><Abe></option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\" disabled=\"disabled\">Cabe</option></select>", |
553 | collection_select("post", "author_name", dummy_posts, "author_name", "author_name", :disabled => 'Cabe') |
554 | ) |
555 | end |
556 | |
557 | def test_time_zone_select |
558 | @firm = Firm.new("D") |
559 | html = time_zone_select( "firm", "time_zone" ) |
560 | assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" + |
561 | "<option value=\"A\">A</option>\n" + |
562 | "<option value=\"B\">B</option>\n" + |
563 | "<option value=\"C\">C</option>\n" + |
564 | "<option value=\"D\" selected=\"selected\">D</option>\n" + |
565 | "<option value=\"E\">E</option>" + |
566 | "</select>", |
567 | html |
568 | end |
569 | |
570 | def test_time_zone_select_under_fields_for |
571 | @firm = Firm.new("D") |
572 | |
573 | fields_for :firm, @firm do |f| |
574 | concat f.time_zone_select(:time_zone) |
575 | end |
576 | |
577 | assert_dom_equal( |
578 | "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" + |
579 | "<option value=\"A\">A</option>\n" + |
580 | "<option value=\"B\">B</option>\n" + |
581 | "<option value=\"C\">C</option>\n" + |
582 | "<option value=\"D\" selected=\"selected\">D</option>\n" + |
583 | "<option value=\"E\">E</option>" + |
584 | "</select>", |
585 | output_buffer |
586 | ) |
587 | end |
588 | |
589 | def test_time_zone_select_under_fields_for_with_index |
590 | @firm = Firm.new("D") |
591 | |
592 | fields_for :firm, @firm, :index => 305 do |f| |
593 | concat f.time_zone_select(:time_zone) |
594 | end |
595 | |
596 | assert_dom_equal( |
597 | "<select id=\"firm_305_time_zone\" name=\"firm[305][time_zone]\">" + |
598 | "<option value=\"A\">A</option>\n" + |
599 | "<option value=\"B\">B</option>\n" + |
600 | "<option value=\"C\">C</option>\n" + |
601 | "<option value=\"D\" selected=\"selected\">D</option>\n" + |
602 | "<option value=\"E\">E</option>" + |
603 | "</select>", |
604 | output_buffer |
605 | ) |
606 | end |
607 | |
608 | def test_time_zone_select_under_fields_for_with_auto_index |
609 | @firm = Firm.new("D") |
610 | def @firm.to_param; 305; end |
611 | |
612 | fields_for "firm[]", @firm do |f| |
613 | concat f.time_zone_select(:time_zone) |
614 | end |
615 | |
616 | assert_dom_equal( |
617 | "<select id=\"firm_305_time_zone\" name=\"firm[305][time_zone]\">" + |
618 | "<option value=\"A\">A</option>\n" + |
619 | "<option value=\"B\">B</option>\n" + |
620 | "<option value=\"C\">C</option>\n" + |
621 | "<option value=\"D\" selected=\"selected\">D</option>\n" + |
622 | "<option value=\"E\">E</option>" + |
623 | "</select>", |
624 | output_buffer |
625 | ) |
626 | end |
627 | |
628 | def test_time_zone_select_with_blank |
629 | @firm = Firm.new("D") |
630 | html = time_zone_select("firm", "time_zone", nil, :include_blank => true) |
631 | assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" + |
632 | "<option value=\"\"></option>\n" + |
633 | "<option value=\"A\">A</option>\n" + |
634 | "<option value=\"B\">B</option>\n" + |
635 | "<option value=\"C\">C</option>\n" + |
636 | "<option value=\"D\" selected=\"selected\">D</option>\n" + |
637 | "<option value=\"E\">E</option>" + |
638 | "</select>", |
639 | html |
640 | end |
641 | |
642 | def test_time_zone_select_with_blank_as_string |
643 | @firm = Firm.new("D") |
644 | html = time_zone_select("firm", "time_zone", nil, :include_blank => 'No Zone') |
645 | assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" + |
646 | "<option value=\"\">No Zone</option>\n" + |
647 | "<option value=\"A\">A</option>\n" + |
648 | "<option value=\"B\">B</option>\n" + |
649 | "<option value=\"C\">C</option>\n" + |
650 | "<option value=\"D\" selected=\"selected\">D</option>\n" + |
651 | "<option value=\"E\">E</option>" + |
652 | "</select>", |
653 | html |
654 | end |
655 | |
656 | def test_time_zone_select_with_style |
657 | @firm = Firm.new("D") |
658 | html = time_zone_select("firm", "time_zone", nil, {}, |
659 | "style" => "color: red") |
660 | assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\" style=\"color: red\">" + |
661 | "<option value=\"A\">A</option>\n" + |
662 | "<option value=\"B\">B</option>\n" + |
663 | "<option value=\"C\">C</option>\n" + |
664 | "<option value=\"D\" selected=\"selected\">D</option>\n" + |
665 | "<option value=\"E\">E</option>" + |
666 | "</select>", |
667 | html |
668 | assert_dom_equal html, time_zone_select("firm", "time_zone", nil, {}, |
669 | :style => "color: red") |
670 | end |
671 | |
672 | def test_time_zone_select_with_blank_and_style |
673 | @firm = Firm.new("D") |
674 | html = time_zone_select("firm", "time_zone", nil, |
675 | { :include_blank => true }, "style" => "color: red") |
676 | assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\" style=\"color: red\">" + |
677 | "<option value=\"\"></option>\n" + |
678 | "<option value=\"A\">A</option>\n" + |
679 | "<option value=\"B\">B</option>\n" + |
680 | "<option value=\"C\">C</option>\n" + |
681 | "<option value=\"D\" selected=\"selected\">D</option>\n" + |
682 | "<option value=\"E\">E</option>" + |
683 | "</select>", |
684 | html |
685 | assert_dom_equal html, time_zone_select("firm", "time_zone", nil, |
686 | { :include_blank => true }, :style => "color: red") |
687 | end |
688 | |
689 | def test_time_zone_select_with_blank_as_string_and_style |
690 | @firm = Firm.new("D") |
691 | html = time_zone_select("firm", "time_zone", nil, |
692 | { :include_blank => 'No Zone' }, "style" => "color: red") |
693 | assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\" style=\"color: red\">" + |
694 | "<option value=\"\">No Zone</option>\n" + |
695 | "<option value=\"A\">A</option>\n" + |
696 | "<option value=\"B\">B</option>\n" + |
697 | "<option value=\"C\">C</option>\n" + |
698 | "<option value=\"D\" selected=\"selected\">D</option>\n" + |
699 | "<option value=\"E\">E</option>" + |
700 | "</select>", |
701 | html |
702 | assert_dom_equal html, time_zone_select("firm", "time_zone", nil, |
703 | { :include_blank => 'No Zone' }, :style => "color: red") |
704 | end |
705 | |
706 | def test_time_zone_select_with_priority_zones |
707 | @firm = Firm.new("D") |
708 | zones = [ ActiveSupport::TimeZone.new("A"), ActiveSupport::TimeZone.new("D") ] |
709 | html = time_zone_select("firm", "time_zone", zones ) |
710 | assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" + |
711 | "<option value=\"A\">A</option>\n" + |
712 | "<option value=\"D\" selected=\"selected\">D</option>" + |
713 | "<option value=\"\" disabled=\"disabled\">-------------</option>\n" + |
714 | "<option value=\"B\">B</option>\n" + |
715 | "<option value=\"C\">C</option>\n" + |
716 | "<option value=\"E\">E</option>" + |
717 | "</select>", |
718 | html |
719 | end |
720 | |
721 | def test_time_zone_select_with_priority_zones_as_regexp |
722 | @firm = Firm.new("D") |
723 | @fake_timezones.each_with_index do |tz, i| |
724 | tz.stubs(:=~).returns(i.zero? || i == 3) |
725 | end |
726 | |
727 | html = time_zone_select("firm", "time_zone", /A|D/) |
728 | assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" + |
729 | "<option value=\"A\">A</option>\n" + |
730 | "<option value=\"D\" selected=\"selected\">D</option>" + |
731 | "<option value=\"\" disabled=\"disabled\">-------------</option>\n" + |
732 | "<option value=\"B\">B</option>\n" + |
733 | "<option value=\"C\">C</option>\n" + |
734 | "<option value=\"E\">E</option>" + |
735 | "</select>", |
736 | html |
737 | end |
738 | |
739 | def test_time_zone_select_with_default_time_zone_and_nil_value |
740 | @firm = Firm.new() |
741 | @firm.time_zone = nil |
742 | html = time_zone_select( "firm", "time_zone", nil, :default => 'B' ) |
743 | assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" + |
744 | "<option value=\"A\">A</option>\n" + |
745 | "<option value=\"B\" selected=\"selected\">B</option>\n" + |
746 | "<option value=\"C\">C</option>\n" + |
747 | "<option value=\"D\">D</option>\n" + |
748 | "<option value=\"E\">E</option>" + |
749 | "</select>", |
750 | html |
751 | end |
752 | |
753 | def test_time_zone_select_with_default_time_zone_and_value |
754 | @firm = Firm.new('D') |
755 | html = time_zone_select( "firm", "time_zone", nil, :default => 'B' ) |
756 | assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" + |
757 | "<option value=\"A\">A</option>\n" + |
758 | "<option value=\"B\">B</option>\n" + |
759 | "<option value=\"C\">C</option>\n" + |
760 | "<option value=\"D\" selected=\"selected\">D</option>\n" + |
761 | "<option value=\"E\">E</option>" + |
762 | "</select>", |
763 | html |
764 | end |
765 | |
766 | def test_grouped_collection_select |
767 | @continents = [ |
768 | Continent.new("<Africa>", [Country.new("<sa>", "<South Africa>"), Country.new("so", "Somalia")] ), |
769 | Continent.new("Europe", [Country.new("dk", "Denmark"), Country.new("ie", "Ireland")] ) |
770 | ] |
771 | |
772 | @post = Post.new |
773 | @post.origin = 'dk' |
774 | |
775 | assert_dom_equal( |
776 | %Q{<select id="post_origin" name="post[origin]"><optgroup label="<Africa>"><option value="<sa>"><South Africa></option>\n<option value="so">Somalia</option></optgroup><optgroup label="Europe"><option value="dk" selected="selected">Denmark</option>\n<option value="ie">Ireland</option></optgroup></select>}, |
777 | grouped_collection_select("post", "origin", @continents, :countries, :continent_name, :country_id, :country_name) |
778 | ) |
779 | end |
780 | |
781 | def test_grouped_collection_select_under_fields_for |
782 | @continents = [ |
783 | Continent.new("<Africa>", [Country.new("<sa>", "<South Africa>"), Country.new("so", "Somalia")] ), |
784 | Continent.new("Europe", [Country.new("dk", "Denmark"), Country.new("ie", "Ireland")] ) |
785 | ] |
786 | |
787 | @post = Post.new |
788 | @post.origin = 'dk' |
789 | |
790 | fields_for :post, @post do |f| |
791 | concat f.grouped_collection_select("origin", @continents, :countries, :continent_name, :country_id, :country_name) |
792 | end |
793 | |
794 | assert_dom_equal( |
795 | %Q{<select id="post_origin" name="post[origin]"><optgroup label="<Africa>"><option value="<sa>"><South Africa></option>\n<option value="so">Somalia</option></optgroup><optgroup label="Europe"><option value="dk" selected="selected">Denmark</option>\n<option value="ie">Ireland</option></optgroup></select>}, |
796 | output_buffer |
797 | ) |
798 | end |
799 | |
800 | private |
801 | |
802 | def dummy_posts |
803 | [ Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"), |
804 | Post.new("Babe went home", "Babe", "To a little house", "shh!"), |
805 | Post.new("Cabe went home", "Cabe", "To a little house", "shh!") ] |
806 | end |
807 | end |