active_form 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data.tar.gz.sig +2 -0
- data/History.txt +4 -0
- data/License.txt +20 -0
- data/MIT-LICENSE +19 -0
- data/Manifest.txt +181 -0
- data/README.txt +1 -0
- data/Rakefile +4 -0
- data/config/hoe.rb +71 -0
- data/config/requirements.rb +17 -0
- data/init.rb +5 -0
- data/lib/active_form.rb +86 -0
- data/lib/active_form/core_extensions.rb +179 -0
- data/lib/active_form/definition.rb +72 -0
- data/lib/active_form/element.rb +50 -0
- data/lib/active_form/elements/base.rb +67 -0
- data/lib/active_form/elements/builder.rb +103 -0
- data/lib/active_form/elements/button.rb +15 -0
- data/lib/active_form/elements/checkbox.rb +18 -0
- data/lib/active_form/elements/file.rb +15 -0
- data/lib/active_form/elements/hidden.rb +9 -0
- data/lib/active_form/elements/image.rb +7 -0
- data/lib/active_form/elements/input.rb +23 -0
- data/lib/active_form/elements/password.rb +12 -0
- data/lib/active_form/elements/radio.rb +18 -0
- data/lib/active_form/elements/reset.rb +15 -0
- data/lib/active_form/elements/section.rb +37 -0
- data/lib/active_form/elements/select.rb +42 -0
- data/lib/active_form/elements/submit.rb +19 -0
- data/lib/active_form/elements/text.rb +9 -0
- data/lib/active_form/elements/textarea.rb +18 -0
- data/lib/active_form/errors.rb +73 -0
- data/lib/active_form/facets/checkbox_group.rb +11 -0
- data/lib/active_form/facets/collection_input.rb +96 -0
- data/lib/active_form/facets/radio_group.rb +11 -0
- data/lib/active_form/facets/select_date.rb +10 -0
- data/lib/active_form/facets/select_datetime.rb +10 -0
- data/lib/active_form/facets/select_day.rb +17 -0
- data/lib/active_form/facets/select_from_model.rb +60 -0
- data/lib/active_form/facets/select_hour.rb +17 -0
- data/lib/active_form/facets/select_minute.rb +17 -0
- data/lib/active_form/facets/select_month.rb +46 -0
- data/lib/active_form/facets/select_numeric_range.rb +59 -0
- data/lib/active_form/facets/select_second.rb +17 -0
- data/lib/active_form/facets/select_time.rb +10 -0
- data/lib/active_form/facets/select_timebased.rb +145 -0
- data/lib/active_form/facets/select_weekday.rb +46 -0
- data/lib/active_form/facets/select_year.rb +24 -0
- data/lib/active_form/mixins/attribute_methods.rb +33 -0
- data/lib/active_form/mixins/casting.rb +152 -0
- data/lib/active_form/mixins/collection_element_methods.rb +204 -0
- data/lib/active_form/mixins/common_methods.rb +350 -0
- data/lib/active_form/mixins/container_methods.rb +417 -0
- data/lib/active_form/mixins/css_methods.rb +70 -0
- data/lib/active_form/mixins/element_methods.rb +314 -0
- data/lib/active_form/mixins/javascript_methods.rb +99 -0
- data/lib/active_form/mixins/loader_methods.rb +72 -0
- data/lib/active_form/mixins/option_element_methods.rb +61 -0
- data/lib/active_form/mixins/validation_methods.rb +253 -0
- data/lib/active_form/validator.rb +47 -0
- data/lib/active_form/validators/alpha.rb +9 -0
- data/lib/active_form/validators/alphanum.rb +9 -0
- data/lib/active_form/validators/base.rb +132 -0
- data/lib/active_form/validators/digits.rb +9 -0
- data/lib/active_form/validators/email.rb +29 -0
- data/lib/active_form/validators/format.rb +15 -0
- data/lib/active_form/validators/length_range.rb +24 -0
- data/lib/active_form/validators/number.rb +9 -0
- data/lib/active_form/validators/option_count.rb +24 -0
- data/lib/active_form/validators/proc.rb +22 -0
- data/lib/active_form/validators/required.rb +9 -0
- data/lib/active_form/validators/set.rb +21 -0
- data/lib/active_form/validators/time_range.rb +30 -0
- data/lib/active_form/validators/uri.rb +54 -0
- data/lib/active_form/version.rb +9 -0
- data/lib/active_form/views/fieldsets.rb +34 -0
- data/lib/active_form/views/plain.rb +32 -0
- data/lib/active_form/views/tables.rb +28 -0
- data/lib/active_form/widget.rb +43 -0
- data/lib/active_form/widgets/base.rb +28 -0
- data/lib/loob/uri_validator.rb +140 -0
- data/lib/rails/acts_as_dropdown/MIT-LICENSE +20 -0
- data/lib/rails/acts_as_dropdown/acts_as_dropdown.rb +119 -0
- data/lib/rails/acts_as_dropdown/dropdown.rb +27 -0
- data/lib/rails/controller_helper.rb +19 -0
- data/lib/rails/model/loader.rb +206 -0
- data/lib/rails/view_helper.rb +20 -0
- data/samples/html/css/style.css +175 -0
- data/samples/html/js/effects.js +958 -0
- data/samples/html/js/prototype.js +2006 -0
- data/samples/html/js/validation.js +228 -0
- data/samples/html/plain_view.html +77 -0
- data/samples/html/sample001.html +158 -0
- data/samples/html/sample002.html +76 -0
- data/samples/html/sample003.html +34 -0
- data/samples/layouts/default.rhtml +18 -0
- data/samples/layouts/plain.rhtml +21 -0
- data/samples/layouts/sample003.rhtml +25 -0
- data/samples/plain_view.rb +58 -0
- data/samples/sample001.rb +111 -0
- data/samples/sample002.rb +92 -0
- data/samples/sample003.rb +30 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +74 -0
- data/setup.rb +1585 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/website.rake +17 -0
- data/test/elements/test_base_element.rb +159 -0
- data/test/elements/test_builder_element.rb +81 -0
- data/test/elements/test_button_element.rb +12 -0
- data/test/elements/test_checkbox_element.rb +233 -0
- data/test/elements/test_file_element.rb +20 -0
- data/test/elements/test_hidden_element.rb +11 -0
- data/test/elements/test_image_element.rb +11 -0
- data/test/elements/test_input_element.rb +39 -0
- data/test/elements/test_password_element.rb +16 -0
- data/test/elements/test_radio_element.rb +197 -0
- data/test/elements/test_reset_element.rb +12 -0
- data/test/elements/test_section_element.rb +162 -0
- data/test/elements/test_select_element.rb +364 -0
- data/test/elements/test_submit_element.rb +12 -0
- data/test/elements/test_text_element.rb +91 -0
- data/test/elements/test_textarea_element.rb +23 -0
- data/test/facets/test_checkbox_group_element.rb +388 -0
- data/test/facets/test_radio_group_element.rb +312 -0
- data/test/facets/test_select_date_element.rb +211 -0
- data/test/facets/test_select_datetime_element.rb +56 -0
- data/test/facets/test_select_day_element.rb +37 -0
- data/test/facets/test_select_from_model_element.rb +86 -0
- data/test/facets/test_select_hour_element.rb +37 -0
- data/test/facets/test_select_minute_element.rb +52 -0
- data/test/facets/test_select_month_element.rb +79 -0
- data/test/facets/test_select_numeric_range_element.rb +14 -0
- data/test/facets/test_select_second_element.rb +48 -0
- data/test/facets/test_select_time_element.rb +148 -0
- data/test/facets/test_select_weekday_element.rb +71 -0
- data/test/facets/test_select_year_element.rb +73 -0
- data/test/fixtures/author.rb +11 -0
- data/test/fixtures/authors.yml +0 -0
- data/test/fixtures/book.rb +14 -0
- data/test/fixtures/books.yml +8 -0
- data/test/fixtures/categories.yml +0 -0
- data/test/fixtures/categorization.rb +2 -0
- data/test/fixtures/categorizations.yml +0 -0
- data/test/fixtures/category.rb +8 -0
- data/test/fixtures/publisher.rb +5 -0
- data/test/fixtures/publishers.yml +10 -0
- data/test/fixtures/schema.rb +43 -0
- data/test/rails/test_model_autodefinition.rb +121 -0
- data/test/rails/test_model_loader.rb +61 -0
- data/test/resources/elements/chunky.rb +11 -0
- data/test/resources/forms/demo.rb +5 -0
- data/test/resources/models/book.rb +8 -0
- data/test/resources/models/register_publisher.rb +5 -0
- data/test/resources/sections/demo.rb +6 -0
- data/test/resources/sections/foo.rb +6 -0
- data/test/resources/validators/foo.rb +9 -0
- data/test/resources/widgets/custom.rb +13 -0
- data/test/test_active_form.rb +1050 -0
- data/test/test_casting.rb +124 -0
- data/test/test_definition.rb +68 -0
- data/test/test_definition_class.rb +118 -0
- data/test/test_element_class.rb +201 -0
- data/test/test_helper.rb +74 -0
- data/test/test_javascript.rb +234 -0
- data/test/test_load_definition.rb +68 -0
- data/test/test_load_element.rb +35 -0
- data/test/test_load_section_element.rb +43 -0
- data/test/test_load_validator.rb +31 -0
- data/test/test_load_widget.rb +93 -0
- data/test/test_validation.rb +722 -0
- data/test/validators/test_validates_as_alpha.rb +26 -0
- data/test/validators/test_validates_as_alphanum.rb +26 -0
- data/test/validators/test_validates_as_digits.rb +26 -0
- data/test/validators/test_validates_as_email.rb +29 -0
- data/test/validators/test_validates_as_number.rb +26 -0
- data/test/validators/test_validates_as_uri.rb +128 -0
- data/test/validators/test_validates_with_format.rb +26 -0
- data/test/validators/test_validates_within_length_range.rb +46 -0
- data/test/validators/test_validates_within_set.rb +46 -0
- data/test/validators/test_validates_within_time_range.rb +53 -0
- metadata +307 -0
- metadata.gz.sig +4 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestTextareaElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_set_attributes
|
|
6
|
+
[:title, :lang, :rows, :cols].each do |attribute|
|
|
7
|
+
assert ActiveForm::Element::Textarea.element_attribute_names.include?(attribute)
|
|
8
|
+
end
|
|
9
|
+
elem = ActiveForm::Element::Textarea.new :elem, :rows => 5, :cols => 30
|
|
10
|
+
expected = {"name"=>"elem", "class"=>"elem_textarea", "id"=>"elem", "rows"=>5, "cols"=>30}
|
|
11
|
+
assert_equal expected, elem.element_attributes
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_element_to_html
|
|
15
|
+
elem = ActiveForm::Element::Textarea.new :elem, :value => 'test'
|
|
16
|
+
expected = %|<textarea class="elem_textarea" cols="40" id="elem" name="elem" rows="20">test</textarea>\n|
|
|
17
|
+
assert_equal expected, elem.to_html
|
|
18
|
+
elem = ActiveForm::Element::Textarea.new :elem, :value => 'test', :rows => 5, :cols => 30
|
|
19
|
+
expected = %|<textarea class="elem_textarea" cols="30" id="elem" name="elem" rows="5">test</textarea>\n|
|
|
20
|
+
assert_equal expected, elem.to_html
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestCheckboxGroupElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_multiple
|
|
6
|
+
elem = ActiveForm::Element::CheckboxGroup.new :choices, :options => %w{ one two three four }
|
|
7
|
+
assert elem.multiple?
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_add_options
|
|
11
|
+
elem = ActiveForm::Element::CheckboxGroup.new :choices, :options => %w{ one two three four }
|
|
12
|
+
assert_equal ['one', 'two', 'three', 'four'], elem.options.collect(&:label)
|
|
13
|
+
assert_equal ['one', 'two', 'three', 'four'], elem.options.collect(&:value)
|
|
14
|
+
|
|
15
|
+
elem = ActiveForm::Element::CheckboxGroup.new :choices, :options => [ ['one', 1], ['two', 2], ['three', 3], ['four', 4] ]
|
|
16
|
+
assert_equal ['one', 'two', 'three', 'four'], elem.options.collect(&:label)
|
|
17
|
+
assert_equal [1, 2, 3, 4], elem.options.collect(&:value)
|
|
18
|
+
|
|
19
|
+
elem.option('five', 5)
|
|
20
|
+
assert_equal ['one', 'two', 'three', 'four', 'five'], elem.options.collect(&:label)
|
|
21
|
+
assert_equal [1, 2, 3, 4, 5], elem.options.collect(&:value)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_element_value
|
|
25
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => %w{ Barney Fred Wilma }, :value => "Fred"
|
|
26
|
+
assert_equal ["Fred"], elem.element_value
|
|
27
|
+
assert elem.selected?("Fred")
|
|
28
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => %w{ Barney Fred Wilma }, :selected => "Fred"
|
|
29
|
+
assert_equal ["Fred"], elem.element_value
|
|
30
|
+
assert elem.selected?("Fred")
|
|
31
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => %w{ Barney Fred Wilma }, :selected => ["Fred", "Wilma"]
|
|
32
|
+
assert_equal ["Fred", "Wilma"], elem.element_value
|
|
33
|
+
assert elem.selected?("Fred")
|
|
34
|
+
assert elem.selected?("Wilma")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_default_value
|
|
38
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem
|
|
39
|
+
assert_equal [], elem.default_value
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_fallback_value
|
|
43
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => ['this', 'that', 'other'], :default => 'no preference'
|
|
44
|
+
assert_equal [], elem.value
|
|
45
|
+
assert_equal [], elem.default_value
|
|
46
|
+
assert_equal ['no preference'], elem.fallback_value
|
|
47
|
+
assert_equal ['no preference'], elem.export_value
|
|
48
|
+
elem.value = 'other'
|
|
49
|
+
assert_equal ['other'], elem.export_value
|
|
50
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => ['red', 'green', 'blue'], :default => ['red', 'green']
|
|
51
|
+
assert_equal [], elem.value
|
|
52
|
+
assert_equal [], elem.default_value
|
|
53
|
+
assert_equal ['red', 'green'], elem.fallback_value
|
|
54
|
+
assert_equal ['red', 'green'], elem.export_value
|
|
55
|
+
elem.value = 'blue'
|
|
56
|
+
assert_equal ['blue'], elem.export_value
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_simple_group_options_multiple
|
|
60
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => %w{ Barney Fred Wilma }, :value => "Fred"
|
|
61
|
+
assert_equal ["Barney", "Fred", "Wilma"], elem.options.collect(&:value)
|
|
62
|
+
assert_equal ["Fred"], elem.element_value
|
|
63
|
+
assert elem.selected?("Fred")
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_normal_group_options_multiple
|
|
67
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => [["Barney", 1], ["Fred", 2], ["Wilma", 3]], :value => 3
|
|
68
|
+
assert_equal [1, 2, 3], elem.options.collect(&:value)
|
|
69
|
+
assert_equal [3], elem.element_value
|
|
70
|
+
assert elem.selected?(3)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def test_group_options_multiple
|
|
74
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => [["Barney", 1], ["Fred", 2], ["Wilma", 3]], :value => [2, 3]
|
|
75
|
+
assert_equal [1, 2, 3], elem.options.collect(&:value)
|
|
76
|
+
assert_equal [2, 3], elem.element_value
|
|
77
|
+
assert elem.selected?(2)
|
|
78
|
+
assert elem.selected?(3)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_each_option_column
|
|
82
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => ('a'..'e'), :columns => 2
|
|
83
|
+
result = []
|
|
84
|
+
elem.each_option_column { |options| result << options.compact.collect(&:value) }
|
|
85
|
+
assert_equal [["a", "b", "c"], ["d", "e"]], result
|
|
86
|
+
elem.columns = 3
|
|
87
|
+
result = []
|
|
88
|
+
elem.each_option_column { |options| result << options.compact.collect(&:value) }
|
|
89
|
+
assert_equal [["a", "b"], ["c", "d"], ["e"]], result
|
|
90
|
+
elem.columns = 10
|
|
91
|
+
result = []
|
|
92
|
+
elem.each_option_column { |options| result << options.compact.collect(&:value) }
|
|
93
|
+
assert_equal [["a"], ["b"], ["c"], ["d"], ["e"], [], [], [], [], [], [], []], result
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_element_to_html
|
|
97
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :value => [2, 3]
|
|
98
|
+
assert_equal [2, 3], elem.values
|
|
99
|
+
assert elem.selected?(2)
|
|
100
|
+
assert elem.selected?(3)
|
|
101
|
+
|
|
102
|
+
expected = %|<fieldset class="elem_checkbox_group" id="elem">
|
|
103
|
+
<span class="elem">
|
|
104
|
+
<input class="elem_checkbox" id="elem_barney" name="elem[]" type="checkbox" value="1"/>
|
|
105
|
+
<label for="elem_barney">Barney</label>
|
|
106
|
+
</span>
|
|
107
|
+
<span class="elem">
|
|
108
|
+
<input checked="checked" class="elem_checkbox" id="elem_fred" name="elem[]" type="checkbox" value="2"/>
|
|
109
|
+
<label for="elem_fred">Fred</label>
|
|
110
|
+
</span>
|
|
111
|
+
<span class="elem">
|
|
112
|
+
<input checked="checked" class="elem_checkbox" id="elem_wilma" name="elem[]" type="checkbox" value="3"/>
|
|
113
|
+
<label for="elem_wilma">Wilma</label>
|
|
114
|
+
</span>
|
|
115
|
+
</fieldset>\n|
|
|
116
|
+
assert_equal expected, elem.to_html
|
|
117
|
+
|
|
118
|
+
elem.disabled = true
|
|
119
|
+
elem.legend = true
|
|
120
|
+
elem.value = 2
|
|
121
|
+
expected = %|<fieldset class="elem_checkbox_group disabled" id="elem">
|
|
122
|
+
<legend>Elem</legend>
|
|
123
|
+
<span class="elem">
|
|
124
|
+
<input class="elem_checkbox" disabled="disabled" id="elem_barney" name="elem[]" type="checkbox" value="1"/>
|
|
125
|
+
<label for="elem_barney">Barney</label>
|
|
126
|
+
</span>
|
|
127
|
+
<span class="elem">
|
|
128
|
+
<input checked="checked" class="elem_checkbox" disabled="disabled" id="elem_fred" name="elem[]" type="checkbox" value="2"/>
|
|
129
|
+
<label for="elem_fred">Fred</label>
|
|
130
|
+
</span>
|
|
131
|
+
<span class="elem">
|
|
132
|
+
<input class="elem_checkbox" disabled="disabled" id="elem_wilma" name="elem[]" type="checkbox" value="3"/>
|
|
133
|
+
<label for="elem_wilma">Wilma</label>
|
|
134
|
+
</span>
|
|
135
|
+
</fieldset>\n|
|
|
136
|
+
assert_equal expected, elem.to_html
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def test_element_to_html_in_columns
|
|
140
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :columns => 2, :options => ('a'..'c'), :value => 'b'
|
|
141
|
+
expected = %|<fieldset class="elem_checkbox_group" id="elem">
|
|
142
|
+
<div class="column column-1">
|
|
143
|
+
<span class="elem">
|
|
144
|
+
<input class="elem_checkbox" id="elem_a" name="elem[]" type="checkbox" value="a"/>
|
|
145
|
+
<label for="elem_a">a</label>
|
|
146
|
+
</span>
|
|
147
|
+
<span class="elem">
|
|
148
|
+
<input checked="checked" class="elem_checkbox" id="elem_b" name="elem[]" type="checkbox" value="b"/>
|
|
149
|
+
<label for="elem_b">b</label>
|
|
150
|
+
</span>
|
|
151
|
+
</div>
|
|
152
|
+
<div class="column column-2">
|
|
153
|
+
<span class="elem">
|
|
154
|
+
<input class="elem_checkbox" id="elem_c" name="elem[]" type="checkbox" value="c"/>
|
|
155
|
+
<label for="elem_c">c</label>
|
|
156
|
+
</span>
|
|
157
|
+
</div>
|
|
158
|
+
</fieldset>\n|
|
|
159
|
+
assert_equal expected, elem.to_html
|
|
160
|
+
|
|
161
|
+
elem.render_empty = true
|
|
162
|
+
expected = %|<fieldset class="elem_checkbox_group" id="elem">
|
|
163
|
+
<div class="column column-1">
|
|
164
|
+
<span class="elem">
|
|
165
|
+
<input class="elem_checkbox" id="elem_a" name="elem[]" type="checkbox" value="a"/>
|
|
166
|
+
<label for="elem_a">a</label>
|
|
167
|
+
</span>
|
|
168
|
+
<span class="elem">
|
|
169
|
+
<input checked="checked" class="elem_checkbox" id="elem_b" name="elem[]" type="checkbox" value="b"/>
|
|
170
|
+
<label for="elem_b">b</label>
|
|
171
|
+
</span>
|
|
172
|
+
</div>
|
|
173
|
+
<div class="column column-2">
|
|
174
|
+
<span class="elem">
|
|
175
|
+
<input class="elem_checkbox" id="elem_c" name="elem[]" type="checkbox" value="c"/>
|
|
176
|
+
<label for="elem_c">c</label>
|
|
177
|
+
</span>
|
|
178
|
+
<span class="empty-elem">
|
|
179
|
+
</span>
|
|
180
|
+
</div>
|
|
181
|
+
</fieldset>\n|
|
|
182
|
+
assert_equal expected, elem.to_html
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def test_element_to_html_options_group
|
|
186
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :value => 'Wilma', :legend => true do |e|
|
|
187
|
+
e.option_group 'People' do |og|
|
|
188
|
+
og.option 'Barney'
|
|
189
|
+
og.option 'Fred'
|
|
190
|
+
og.option 'Wilma'
|
|
191
|
+
end
|
|
192
|
+
e.option_group('Animals', ['Dino', 'Pluto'])
|
|
193
|
+
e.option_group('Cartoons', [['Simpsons', 'si'], ['Cow&Chicken', 'cc']])
|
|
194
|
+
end
|
|
195
|
+
expected = %|<fieldset class="elem_checkbox_group" id="elem">
|
|
196
|
+
<legend>Elem</legend>
|
|
197
|
+
<fieldset class="options">
|
|
198
|
+
<legend>People</legend>
|
|
199
|
+
<span class="elem">
|
|
200
|
+
<input class="elem_checkbox" id="elem_barney" name="elem[]" type="checkbox" value="Barney"/>
|
|
201
|
+
<label for="elem_barney">Barney</label>
|
|
202
|
+
</span>
|
|
203
|
+
<span class="elem">
|
|
204
|
+
<input class="elem_checkbox" id="elem_fred" name="elem[]" type="checkbox" value="Fred"/>
|
|
205
|
+
<label for="elem_fred">Fred</label>
|
|
206
|
+
</span>
|
|
207
|
+
<span class="elem">
|
|
208
|
+
<input checked="checked" class="elem_checkbox" id="elem_wilma" name="elem[]" type="checkbox" value="Wilma"/>
|
|
209
|
+
<label for="elem_wilma">Wilma</label>
|
|
210
|
+
</span>
|
|
211
|
+
</fieldset>
|
|
212
|
+
<fieldset class="options">
|
|
213
|
+
<legend>Animals</legend>
|
|
214
|
+
<span class="elem">
|
|
215
|
+
<input class="elem_checkbox" id="elem_dino" name="elem[]" type="checkbox" value="Dino"/>
|
|
216
|
+
<label for="elem_dino">Dino</label>
|
|
217
|
+
</span>
|
|
218
|
+
<span class="elem">
|
|
219
|
+
<input class="elem_checkbox" id="elem_pluto" name="elem[]" type="checkbox" value="Pluto"/>
|
|
220
|
+
<label for="elem_pluto">Pluto</label>
|
|
221
|
+
</span>
|
|
222
|
+
</fieldset>
|
|
223
|
+
<fieldset class="options">
|
|
224
|
+
<legend>Cartoons</legend>
|
|
225
|
+
<span class="elem">
|
|
226
|
+
<input class="elem_checkbox" id="elem_simpsons" name="elem[]" type="checkbox" value="si"/>
|
|
227
|
+
<label for="elem_simpsons">Simpsons</label>
|
|
228
|
+
</span>
|
|
229
|
+
<span class="elem">
|
|
230
|
+
<input class="elem_checkbox" id="elem_cow_chicken" name="elem[]" type="checkbox" value="cc"/>
|
|
231
|
+
<label for="elem_cow_chicken">Cow&Chicken</label>
|
|
232
|
+
</span>
|
|
233
|
+
</fieldset>
|
|
234
|
+
</fieldset>\n|
|
|
235
|
+
assert_equal expected, elem.to_html
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def test_render_within_form
|
|
239
|
+
form = ActiveForm::compose :myform do |f|
|
|
240
|
+
f.checkbox_group_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
|
|
241
|
+
end
|
|
242
|
+
expected = %|<form action="#myform" class="active_form" id="myform" method="post">
|
|
243
|
+
<fieldset class="elem_checkbox_group" id="myform_people">
|
|
244
|
+
<span class="elem">
|
|
245
|
+
<input class="elem_checkbox" id="myform_people_barney" name="myform[people][]" type="checkbox" value="1"/>
|
|
246
|
+
<label for="myform_people_barney">Barney</label>
|
|
247
|
+
</span>
|
|
248
|
+
<span class="elem">
|
|
249
|
+
<input class="elem_checkbox" id="myform_people_fred" name="myform[people][]" type="checkbox" value="2"/>
|
|
250
|
+
<label for="myform_people_fred">Fred</label>
|
|
251
|
+
</span>
|
|
252
|
+
<span class="elem">
|
|
253
|
+
<input class="elem_checkbox" id="myform_people_wilma" name="myform[people][]" type="checkbox" value="3"/>
|
|
254
|
+
<label for="myform_people_wilma">Wilma</label>
|
|
255
|
+
</span>
|
|
256
|
+
</fieldset>
|
|
257
|
+
</form>\n|
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def test_render_frozen
|
|
261
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :frozen => true
|
|
262
|
+
assert_equal "<span class=\"blank\">-</span>\n", elem.to_html
|
|
263
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :selected => 2, :frozen => true
|
|
264
|
+
assert_equal 'Fred', elem.to_html
|
|
265
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :values => [2, 3], :frozen => true
|
|
266
|
+
assert_equal 'Fred, Wilma', elem.to_html
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def test_reset_options
|
|
270
|
+
elem = ActiveForm::Element::CheckboxGroup.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :add_empty => true
|
|
271
|
+
assert_equal ["--", "Barney", "Fred", "Wilma"], elem.options.collect(&:label)
|
|
272
|
+
elem.reset_options!
|
|
273
|
+
assert_equal [], elem.options.collect(&:label)
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def test_set_initial_value
|
|
277
|
+
values = { :people => 2 }
|
|
278
|
+
form = ActiveForm::compose :myform, :values => values do |f|
|
|
279
|
+
f.checkbox_group_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
|
|
280
|
+
end
|
|
281
|
+
assert_equal [2], form[:people].value
|
|
282
|
+
assert_equal [2], form[:people].export_value
|
|
283
|
+
form.values = { :people => [2, 3] }
|
|
284
|
+
assert_equal [2, 3], form[:people].value
|
|
285
|
+
assert_equal [2, 3], form[:people].export_value
|
|
286
|
+
expected = { "people" => [2, 3] }
|
|
287
|
+
assert_equal expected, form.export_values
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
def test_export_value
|
|
291
|
+
form = ActiveForm::compose :myform do |f|
|
|
292
|
+
f.checkbox_group_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
|
|
293
|
+
end
|
|
294
|
+
form[:people].selected = [2, 3]
|
|
295
|
+
expected = { "people" => [2, 3] }
|
|
296
|
+
assert_equal expected, form.export_values
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
def test_update_from_params
|
|
300
|
+
form = ActiveForm::compose :myform do |f|
|
|
301
|
+
f.checkbox_group_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
|
|
302
|
+
end
|
|
303
|
+
params = { :myform => { :people => [3] } }
|
|
304
|
+
form.update_from_params(params)
|
|
305
|
+
expected = { "people" => [3] }
|
|
306
|
+
assert_equal expected, form.export_values
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
def test_required_validation
|
|
310
|
+
form = ActiveForm::compose :myform do |f|
|
|
311
|
+
f.checkbox_group_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :required => true
|
|
312
|
+
end
|
|
313
|
+
assert form[:people].blank?
|
|
314
|
+
assert !form.validate
|
|
315
|
+
assert_equal ["required"], form[:people].errors.collect(&:code)
|
|
316
|
+
form[:people].value = 2
|
|
317
|
+
assert form.validate
|
|
318
|
+
form[:people].value = [6, 7]
|
|
319
|
+
assert form[:people].blank?
|
|
320
|
+
assert !form.validate
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
def test_option_count_validation
|
|
324
|
+
form = ActiveForm::compose :myform do |f|
|
|
325
|
+
f.checkbox_group_element :alpha, :options => ('a'..'z'), :required => true
|
|
326
|
+
end
|
|
327
|
+
assert !form.validate
|
|
328
|
+
assert_equal ["required"], form[:alpha].errors.collect(&:code)
|
|
329
|
+
assert_equal ["Alpha: can't be blank"], form[:alpha].errors.collect(&:msg)
|
|
330
|
+
form[:alpha].value = 'a'
|
|
331
|
+
assert form.validate
|
|
332
|
+
|
|
333
|
+
form = ActiveForm::compose :myform do |f|
|
|
334
|
+
f.checkbox_group_element :alpha, :options => ('a'..'z'), :required => 3
|
|
335
|
+
end
|
|
336
|
+
assert !form.validate
|
|
337
|
+
assert_equal ["required"], form[:alpha].errors.collect(&:code)
|
|
338
|
+
assert_equal ["Alpha: you need to select 3 items"], form[:alpha].errors.collect(&:msg)
|
|
339
|
+
form[:alpha].value = ['a', 'b', 'c']
|
|
340
|
+
assert form.validate
|
|
341
|
+
|
|
342
|
+
form = ActiveForm::compose :myform do |f|
|
|
343
|
+
f.checkbox_group_element :alpha, :options => ('a'..'z'), :required => 2..4 do |e|
|
|
344
|
+
e.required_message = "%1$s: you need to select between %3$s and %4$s items"
|
|
345
|
+
end
|
|
346
|
+
end
|
|
347
|
+
assert !form.validate
|
|
348
|
+
assert_equal ["required"], form[:alpha].errors.collect(&:code)
|
|
349
|
+
assert_equal ["Alpha: you need to select between 2 and 4 items"], form[:alpha].errors.collect(&:msg)
|
|
350
|
+
form[:alpha].value = ['a']
|
|
351
|
+
assert !form.validate
|
|
352
|
+
form[:alpha].value = ['a', 'b']
|
|
353
|
+
assert form.validate
|
|
354
|
+
form[:alpha].value = ['a', 'b', 'c']
|
|
355
|
+
assert form.validate
|
|
356
|
+
form[:alpha].value = ['a', 'b', 'c', 'd']
|
|
357
|
+
assert form.validate
|
|
358
|
+
form[:alpha].value = ['a', 'b', 'c', 'd', 'e']
|
|
359
|
+
assert !form.validate
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
def test_option_count_validation_with_zero_minimum
|
|
363
|
+
form = ActiveForm::compose :myform do |f|
|
|
364
|
+
f.checkbox_group_element :alpha, :options => ('a'..'z'), :required => [0, 2] do |e|
|
|
365
|
+
e.required_message = "%1$s: you shouldn't select more than two items"
|
|
366
|
+
end
|
|
367
|
+
end
|
|
368
|
+
assert_equal ["Alpha: you shouldn't select more than two items"], form[:alpha].gather_validation_advice.collect(&:msg)
|
|
369
|
+
form.values[:alpha] = []
|
|
370
|
+
assert form.validate
|
|
371
|
+
form.values[:alpha] = ['a']
|
|
372
|
+
assert form.validate
|
|
373
|
+
form.values[:alpha] = ['a', 'b', 'c']
|
|
374
|
+
assert !form.validate
|
|
375
|
+
assert_equal ["Alpha: you shouldn't select more than two items"], form[:alpha].errors.collect(&:msg)
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
def test_option_count_validation_with_custom_message
|
|
379
|
+
form = ActiveForm::compose :myform do |f|
|
|
380
|
+
f.checkbox_group_element :alpha, :options => ('a'..'z'), :value => ['a'], :required => [2, 8] do |e|
|
|
381
|
+
e.required_message = "%1$s: you need to select between %3$s and %4$s items (you selected %5$s)"
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
assert !form.validate
|
|
385
|
+
assert_equal ["Alpha: you need to select between 2 and 8 items (you selected 1)"], form[:alpha].errors.collect(&:msg)
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
end
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestRadioGroupElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_multiple
|
|
6
|
+
elem = ActiveForm::Element::RadioGroup.new :choices, :options => %w{ one two three four }
|
|
7
|
+
assert !elem.multiple?
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_element_value
|
|
11
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :options => %w{ Barney Fred Wilma }, :value => "Fred"
|
|
12
|
+
assert_equal "Fred", elem.element_value
|
|
13
|
+
assert elem.selected?("Fred")
|
|
14
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :options => %w{ Barney Fred Wilma }, :selected => "Fred"
|
|
15
|
+
assert_equal "Fred", elem.element_value
|
|
16
|
+
assert elem.selected?("Fred")
|
|
17
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :options => %w{ Barney Fred Wilma }, :selected => ["Fred", "Wilma"]
|
|
18
|
+
assert_equal "Fred", elem.element_value
|
|
19
|
+
assert elem.selected?("Fred")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_default_value
|
|
23
|
+
elem = ActiveForm::Element::RadioGroup.new :elem
|
|
24
|
+
assert_equal nil, elem.default_value
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_fallback_value
|
|
28
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :options => ['this', 'that', 'other'], :default => 'no preference'
|
|
29
|
+
assert_equal nil, elem.value
|
|
30
|
+
assert_equal nil, elem.default_value
|
|
31
|
+
assert_equal 'no preference', elem.fallback_value
|
|
32
|
+
assert_equal 'no preference', elem.export_value
|
|
33
|
+
elem.value = 'other'
|
|
34
|
+
assert_equal 'other', elem.export_value
|
|
35
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :options => ['red', 'green', 'blue'], :default => ['red', 'green']
|
|
36
|
+
assert_equal nil, elem.value
|
|
37
|
+
assert_equal nil, elem.default_value
|
|
38
|
+
assert_equal 'red', elem.fallback_value
|
|
39
|
+
assert_equal 'red', elem.export_value
|
|
40
|
+
elem.value = 'blue'
|
|
41
|
+
assert_equal 'blue', elem.export_value
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_simple_group_options_multiple
|
|
45
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :options => %w{ Barney Fred Wilma }, :value => "Fred"
|
|
46
|
+
assert_equal ["Barney", "Fred", "Wilma"], elem.options.collect(&:value)
|
|
47
|
+
assert_equal "Fred", elem.element_value
|
|
48
|
+
assert elem.selected?("Fred")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_normal_group_options_multiple
|
|
52
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :options => [["Barney", 1], ["Fred", 2], ["Wilma", 3]], :value => 3
|
|
53
|
+
assert_equal [1, 2, 3], elem.options.collect(&:value)
|
|
54
|
+
assert_equal 3, elem.element_value
|
|
55
|
+
assert elem.selected?(3)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_element_to_html
|
|
59
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :value => 2
|
|
60
|
+
assert_equal 2, elem.value
|
|
61
|
+
assert elem.selected?(2)
|
|
62
|
+
|
|
63
|
+
expected = %|<fieldset class="elem_radio_group" id="elem">
|
|
64
|
+
<span class="elem">
|
|
65
|
+
<input class="elem_radio" id="elem_barney" name="elem" type="radio" value="1"/>
|
|
66
|
+
<label for="elem_barney">Barney</label>
|
|
67
|
+
</span>
|
|
68
|
+
<span class="elem">
|
|
69
|
+
<input checked="checked" class="elem_radio" id="elem_fred" name="elem" type="radio" value="2"/>
|
|
70
|
+
<label for="elem_fred">Fred</label>
|
|
71
|
+
</span>
|
|
72
|
+
<span class="elem">
|
|
73
|
+
<input class="elem_radio" id="elem_wilma" name="elem" type="radio" value="3"/>
|
|
74
|
+
<label for="elem_wilma">Wilma</label>
|
|
75
|
+
</span>
|
|
76
|
+
</fieldset>\n|
|
|
77
|
+
assert_equal expected, elem.to_html
|
|
78
|
+
|
|
79
|
+
elem.disabled = true
|
|
80
|
+
elem.legend = true
|
|
81
|
+
elem.value = 2
|
|
82
|
+
expected = %|<fieldset class="elem_radio_group disabled" id="elem">
|
|
83
|
+
<legend>Elem</legend>
|
|
84
|
+
<span class="elem">
|
|
85
|
+
<input class="elem_radio" disabled="disabled" id="elem_barney" name="elem" type="radio" value="1"/>
|
|
86
|
+
<label for="elem_barney">Barney</label>
|
|
87
|
+
</span>
|
|
88
|
+
<span class="elem">
|
|
89
|
+
<input checked="checked" class="elem_radio" disabled="disabled" id="elem_fred" name="elem" type="radio" value="2"/>
|
|
90
|
+
<label for="elem_fred">Fred</label>
|
|
91
|
+
</span>
|
|
92
|
+
<span class="elem">
|
|
93
|
+
<input class="elem_radio" disabled="disabled" id="elem_wilma" name="elem" type="radio" value="3"/>
|
|
94
|
+
<label for="elem_wilma">Wilma</label>
|
|
95
|
+
</span>
|
|
96
|
+
</fieldset>\n|
|
|
97
|
+
assert_equal expected, elem.to_html
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def test_element_to_html_in_columns
|
|
101
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :columns => 2, :options => ('a'..'c'), :value => 'b'
|
|
102
|
+
expected = %|<fieldset class="elem_radio_group" id="elem">
|
|
103
|
+
<div class="column column-1">
|
|
104
|
+
<span class="elem">
|
|
105
|
+
<input class="elem_radio" id="elem_a" name="elem" type="radio" value="a"/>
|
|
106
|
+
<label for="elem_a">a</label>
|
|
107
|
+
</span>
|
|
108
|
+
<span class="elem">
|
|
109
|
+
<input checked="checked" class="elem_radio" id="elem_b" name="elem" type="radio" value="b"/>
|
|
110
|
+
<label for="elem_b">b</label>
|
|
111
|
+
</span>
|
|
112
|
+
</div>
|
|
113
|
+
<div class="column column-2">
|
|
114
|
+
<span class="elem">
|
|
115
|
+
<input class="elem_radio" id="elem_c" name="elem" type="radio" value="c"/>
|
|
116
|
+
<label for="elem_c">c</label>
|
|
117
|
+
</span>
|
|
118
|
+
</div>
|
|
119
|
+
</fieldset>\n|
|
|
120
|
+
assert_equal expected, elem.to_html
|
|
121
|
+
|
|
122
|
+
elem.render_empty = true
|
|
123
|
+
expected = %|<fieldset class="elem_radio_group" id="elem">
|
|
124
|
+
<div class="column column-1">
|
|
125
|
+
<span class="elem">
|
|
126
|
+
<input class="elem_radio" id="elem_a" name="elem" type="radio" value="a"/>
|
|
127
|
+
<label for="elem_a">a</label>
|
|
128
|
+
</span>
|
|
129
|
+
<span class="elem">
|
|
130
|
+
<input checked="checked" class="elem_radio" id="elem_b" name="elem" type="radio" value="b"/>
|
|
131
|
+
<label for="elem_b">b</label>
|
|
132
|
+
</span>
|
|
133
|
+
</div>
|
|
134
|
+
<div class="column column-2">
|
|
135
|
+
<span class="elem">
|
|
136
|
+
<input class="elem_radio" id="elem_c" name="elem" type="radio" value="c"/>
|
|
137
|
+
<label for="elem_c">c</label>
|
|
138
|
+
</span>
|
|
139
|
+
<span class="empty-elem">
|
|
140
|
+
</span>
|
|
141
|
+
</div>
|
|
142
|
+
</fieldset>\n|
|
|
143
|
+
assert_equal expected, elem.to_html
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def test_element_to_html_options_group
|
|
147
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :value => 'Wilma', :legend => true do |e|
|
|
148
|
+
e.option_group 'People' do |og|
|
|
149
|
+
og.option 'Barney'
|
|
150
|
+
og.option 'Fred'
|
|
151
|
+
og.option 'Wilma'
|
|
152
|
+
end
|
|
153
|
+
e.option_group('Animals', ['Dino', 'Pluto'])
|
|
154
|
+
e.option_group('Cartoons', [['Simpsons', 'si'], ['Cow&Chicken', 'cc']])
|
|
155
|
+
end
|
|
156
|
+
expected = %|<fieldset class="elem_radio_group" id="elem">
|
|
157
|
+
<legend>Elem</legend>
|
|
158
|
+
<fieldset class="options">
|
|
159
|
+
<legend>People</legend>
|
|
160
|
+
<span class="elem">
|
|
161
|
+
<input class="elem_radio" id="elem_barney" name="elem" type="radio" value="Barney"/>
|
|
162
|
+
<label for="elem_barney">Barney</label>
|
|
163
|
+
</span>
|
|
164
|
+
<span class="elem">
|
|
165
|
+
<input class="elem_radio" id="elem_fred" name="elem" type="radio" value="Fred"/>
|
|
166
|
+
<label for="elem_fred">Fred</label>
|
|
167
|
+
</span>
|
|
168
|
+
<span class="elem">
|
|
169
|
+
<input checked="checked" class="elem_radio" id="elem_wilma" name="elem" type="radio" value="Wilma"/>
|
|
170
|
+
<label for="elem_wilma">Wilma</label>
|
|
171
|
+
</span>
|
|
172
|
+
</fieldset>
|
|
173
|
+
<fieldset class="options">
|
|
174
|
+
<legend>Animals</legend>
|
|
175
|
+
<span class="elem">
|
|
176
|
+
<input class="elem_radio" id="elem_dino" name="elem" type="radio" value="Dino"/>
|
|
177
|
+
<label for="elem_dino">Dino</label>
|
|
178
|
+
</span>
|
|
179
|
+
<span class="elem">
|
|
180
|
+
<input class="elem_radio" id="elem_pluto" name="elem" type="radio" value="Pluto"/>
|
|
181
|
+
<label for="elem_pluto">Pluto</label>
|
|
182
|
+
</span>
|
|
183
|
+
</fieldset>
|
|
184
|
+
<fieldset class="options">
|
|
185
|
+
<legend>Cartoons</legend>
|
|
186
|
+
<span class="elem">
|
|
187
|
+
<input class="elem_radio" id="elem_simpsons" name="elem" type="radio" value="si"/>
|
|
188
|
+
<label for="elem_simpsons">Simpsons</label>
|
|
189
|
+
</span>
|
|
190
|
+
<span class="elem">
|
|
191
|
+
<input class="elem_radio" id="elem_cow_chicken" name="elem" type="radio" value="cc"/>
|
|
192
|
+
<label for="elem_cow_chicken">Cow&Chicken</label>
|
|
193
|
+
</span>
|
|
194
|
+
</fieldset>
|
|
195
|
+
</fieldset>\n|
|
|
196
|
+
assert_equal expected, elem.to_html
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def test_render_within_form
|
|
200
|
+
form = ActiveForm::compose :myform do |f|
|
|
201
|
+
f.radio_group_element :person, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
|
|
202
|
+
end
|
|
203
|
+
expected = %|<form action="#myform" class="active_form" id="myform" method="post">
|
|
204
|
+
<fieldset class="elem_radio_group" id="myform_person">
|
|
205
|
+
<span class="elem">
|
|
206
|
+
<input class="elem_radio" id="myform_person_1" name="myform[person]" type="radio" value="1"/>
|
|
207
|
+
<label for="myform_person_1">Barney</label>
|
|
208
|
+
</span>
|
|
209
|
+
<span class="elem">
|
|
210
|
+
<input class="elem_radio" id="myform_person_2" name="myform[person]" type="radio" value="2"/>
|
|
211
|
+
<label for="myform_person_2">Fred</label>
|
|
212
|
+
</span>
|
|
213
|
+
<span class="elem">
|
|
214
|
+
<input class="elem_radio" id="myform_person_3" name="myform[person]" type="radio" value="3"/>
|
|
215
|
+
<label for="myform_person_3">Wilma</label>
|
|
216
|
+
</span>
|
|
217
|
+
</fieldset>
|
|
218
|
+
</form>\n|
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def test_render_frozen
|
|
222
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :frozen => true
|
|
223
|
+
assert_equal "<span class=\"blank\">-</span>\n", elem.to_html
|
|
224
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :selected => 2, :frozen => true
|
|
225
|
+
assert_equal 'Fred', elem.to_html
|
|
226
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :values => [2, 3], :frozen => true
|
|
227
|
+
assert_equal 'Fred', elem.to_html
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def test_reset_options
|
|
231
|
+
elem = ActiveForm::Element::RadioGroup.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :add_empty => true
|
|
232
|
+
assert_equal ["--", "Barney", "Fred", "Wilma"], elem.options.collect(&:label)
|
|
233
|
+
elem.reset_options!
|
|
234
|
+
assert_equal [], elem.options.collect(&:label)
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def test_set_initial_value
|
|
238
|
+
values = { :person => 2 }
|
|
239
|
+
form = ActiveForm::compose :myform, :values => values do |f|
|
|
240
|
+
f.radio_group_element :person, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
|
|
241
|
+
end
|
|
242
|
+
assert_equal 2, form[:person].value
|
|
243
|
+
assert_equal 2, form[:person].export_value
|
|
244
|
+
form.values = { :person => 3 }
|
|
245
|
+
assert_equal 3, form[:person].value
|
|
246
|
+
assert_equal 3, form[:person].export_value
|
|
247
|
+
expected = { "person" => 3 }
|
|
248
|
+
assert_equal expected, form.export_values
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
def test_export_value
|
|
252
|
+
form = ActiveForm::compose :myform do |f|
|
|
253
|
+
f.radio_group_element :person, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
|
|
254
|
+
end
|
|
255
|
+
form[:person].selected = 3
|
|
256
|
+
expected = { "person" => 3 }
|
|
257
|
+
assert_equal expected, form.export_values
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def test_update_from_params
|
|
261
|
+
form = ActiveForm::compose :myform do |f|
|
|
262
|
+
f.radio_group_element :person, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
|
|
263
|
+
end
|
|
264
|
+
params = { :myform => { :person => 3 } }
|
|
265
|
+
form.update_from_params(params)
|
|
266
|
+
expected = { "person" => 3 }
|
|
267
|
+
assert_equal expected, form.export_values
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
def test_required_validation
|
|
271
|
+
form = ActiveForm::compose :myform do |f|
|
|
272
|
+
f.radio_group_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :required => true
|
|
273
|
+
end
|
|
274
|
+
assert form[:people].blank?
|
|
275
|
+
assert !form.validate
|
|
276
|
+
assert_equal ["required"], form[:people].errors.collect(&:code)
|
|
277
|
+
form[:people].value = 2
|
|
278
|
+
assert form.validate
|
|
279
|
+
form[:people].value = 7
|
|
280
|
+
assert form[:people].blank?
|
|
281
|
+
assert !form.validate
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
def test_option_count_validation
|
|
285
|
+
# remember: you can't have multiple values for radio group
|
|
286
|
+
form = ActiveForm::compose :myform do |f|
|
|
287
|
+
f.radio_group_element :alpha, :options => ('a'..'z'), :required => true
|
|
288
|
+
end
|
|
289
|
+
assert !form.validate
|
|
290
|
+
assert_equal ["required"], form[:alpha].errors.collect(&:code)
|
|
291
|
+
assert_equal ["Alpha: can't be blank"], form[:alpha].errors.collect(&:msg)
|
|
292
|
+
form[:alpha].value = 'a'
|
|
293
|
+
assert form.validate
|
|
294
|
+
|
|
295
|
+
form = ActiveForm::compose :myform do |f|
|
|
296
|
+
f.radio_group_element :alpha, :options => ('a'..'z'), :required => 1
|
|
297
|
+
end
|
|
298
|
+
assert !form.validate
|
|
299
|
+
assert_equal ["required"], form[:alpha].errors.collect(&:code)
|
|
300
|
+
assert_equal ["Alpha: you need to select 1 items"], form[:alpha].errors.collect(&:msg)
|
|
301
|
+
form[:alpha].value = 'a'
|
|
302
|
+
assert form.validate
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def test_select_first
|
|
306
|
+
form = ActiveForm::compose :myform do |f|
|
|
307
|
+
f.radio_group_element :alpha, :options => ('a'..'z'), :select_first => true
|
|
308
|
+
end
|
|
309
|
+
assert_equal 'a', form[:alpha].value
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
end
|