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,364 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestSelectElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_set_attributes
|
|
6
|
+
[:title, :lang, :size].each do |attribute|
|
|
7
|
+
assert ActiveForm::Element::Select.element_attribute_names.include?(attribute)
|
|
8
|
+
end
|
|
9
|
+
elem = ActiveForm::Element::Select.new :elem, :size => 20
|
|
10
|
+
expected = {"name"=>"elem", "class"=>"elem_select", "id"=>"elem", "size"=>20}
|
|
11
|
+
assert_equal expected, elem.element_attributes
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_multiple
|
|
15
|
+
elem = ActiveForm::Element::Select.new :choices, :options => %w{ one two three four }
|
|
16
|
+
assert !elem.multiple?
|
|
17
|
+
|
|
18
|
+
elem = ActiveForm::Element::Select.new :choices, :options => %w{ one two three four }, :multiple => true
|
|
19
|
+
assert elem.multiple?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_html_flags
|
|
23
|
+
assert ActiveForm::Element::Select.element_html_flag_names.include?(:multiple)
|
|
24
|
+
elem = ActiveForm::Element::Select.new :elem, :size => 20, :multiple => true, :disabled => true
|
|
25
|
+
expected = {"name"=>"elem[]", "class"=>"elem_select disabled", "id"=>"elem", "size"=>20, "disabled"=>"disabled", "multiple"=>"multiple"}
|
|
26
|
+
assert_equal expected, elem.element_attributes
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_element_value
|
|
30
|
+
elem = ActiveForm::Element::Select.new :elem, :options => %w{ Barney Fred Wilma }, :value => "Fred"
|
|
31
|
+
assert_equal "Fred", elem.element_value
|
|
32
|
+
assert elem.selected?("Fred")
|
|
33
|
+
elem = ActiveForm::Element::Select.new :elem, :options => %w{ Barney Fred Wilma }, :selected => "Fred"
|
|
34
|
+
assert_equal "Fred", elem.element_value
|
|
35
|
+
assert elem.selected?("Fred")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_default_value
|
|
39
|
+
elem = ActiveForm::Element::Select.new :elem
|
|
40
|
+
assert_equal nil, elem.default_value
|
|
41
|
+
elem = ActiveForm::Element::Select.new :elem, :multiple => true
|
|
42
|
+
assert_equal [], elem.default_value
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_fallback_value
|
|
46
|
+
elem = ActiveForm::Element::Select.new :elem, :options => ['this', 'that', 'other'], :default => 'no preference'
|
|
47
|
+
assert_equal nil, elem.value
|
|
48
|
+
assert_equal nil, elem.default_value
|
|
49
|
+
assert_equal 'no preference', elem.fallback_value
|
|
50
|
+
assert_equal 'no preference', elem.export_value
|
|
51
|
+
elem.value = 'other'
|
|
52
|
+
assert_equal 'other', elem.export_value
|
|
53
|
+
elem = ActiveForm::Element::Select.new :elem, :options => ['this', 'that', 'other'], :default => 'no preference', :multiple => true
|
|
54
|
+
assert_equal [], elem.value
|
|
55
|
+
assert_equal [], elem.default_value
|
|
56
|
+
assert_equal ['no preference'], elem.fallback_value
|
|
57
|
+
assert_equal ['no preference'], elem.export_value
|
|
58
|
+
elem.value = 'other'
|
|
59
|
+
assert_equal ['other'], elem.export_value
|
|
60
|
+
elem = ActiveForm::Element::Select.new :elem, :options => ['red', 'green', 'blue'], :default => ['red', 'green'], :multiple => true
|
|
61
|
+
assert_equal [], elem.value
|
|
62
|
+
assert_equal [], elem.default_value
|
|
63
|
+
assert_equal ['red', 'green'], elem.fallback_value
|
|
64
|
+
assert_equal ['red', 'green'], elem.export_value
|
|
65
|
+
elem.value = 'blue'
|
|
66
|
+
assert_equal ['blue'], elem.export_value
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_set_select_options
|
|
70
|
+
elem = ActiveForm::Element::Select.new :elem do |e|
|
|
71
|
+
e << 'Barney'
|
|
72
|
+
e << 'Fred'
|
|
73
|
+
e << ['Wilma', 3]
|
|
74
|
+
e.option('Betty')
|
|
75
|
+
e.option('Pebbles', 5)
|
|
76
|
+
end
|
|
77
|
+
assert_equal ["Barney", "Fred", 'Wilma', 'Betty', 'Pebbles'], elem.options.collect(&:label)
|
|
78
|
+
assert_equal ["Barney", "Fred", 3, 'Betty', 5], elem.options.collect(&:value)
|
|
79
|
+
elem = ActiveForm::Element::Select.new :elem do |e|
|
|
80
|
+
e << 'Barney' << 'Fred' << 'Wilma'
|
|
81
|
+
end
|
|
82
|
+
assert_equal ["Barney", "Fred", 'Wilma'], elem.options.collect(&:label)
|
|
83
|
+
assert_equal ["Barney", "Fred", 'Wilma'], elem.options.collect(&:value)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def test_simple_select_options
|
|
87
|
+
elem = ActiveForm::Element::Select.new :elem, :options => %w{ Barney Fred Wilma }, :value => "Fred"
|
|
88
|
+
assert_equal ["Barney", "Fred", "Wilma"], elem.options.collect(&:value)
|
|
89
|
+
assert_equal "Fred", elem.element_value
|
|
90
|
+
assert elem.selected?("Fred")
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def test_normal_select_options
|
|
94
|
+
elem = ActiveForm::Element::Select.new :elem, :options => [["Barney", 1], ["Fred", 2], ["Wilma", 3]], :value => 3
|
|
95
|
+
assert_equal [1, 2, 3], elem.options.collect(&:value)
|
|
96
|
+
assert_equal 3, elem.element_value
|
|
97
|
+
assert elem.selected?(3)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def test_simple_select_options_multiple
|
|
101
|
+
elem = ActiveForm::Element::Select.new :elem, :multiple => true, :options => %w{ Barney Fred Wilma }, :value => "Fred"
|
|
102
|
+
assert_equal ["Barney", "Fred", "Wilma"], elem.options.collect(&:value)
|
|
103
|
+
assert_equal ["Fred"], elem.element_value
|
|
104
|
+
assert elem.selected?("Fred")
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def test_normal_select_options_multiple
|
|
108
|
+
elem = ActiveForm::Element::Select.new :elem, :multiple => true, :options => [["Barney", 1], ["Fred", 2], ["Wilma", 3]], :value => 3
|
|
109
|
+
assert_equal [1, 2, 3], elem.options.collect(&:value)
|
|
110
|
+
assert_equal [3], elem.element_value
|
|
111
|
+
assert elem.selected?(3)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_select_options_multiple
|
|
115
|
+
elem = ActiveForm::Element::Select.new :elem, :multiple => true, :options => [["Barney", 1], ["Fred", 2], ["Wilma", 3]], :value => [2, 3]
|
|
116
|
+
assert_equal [1, 2, 3], elem.options.collect(&:value)
|
|
117
|
+
assert_equal [2, 3], elem.element_value
|
|
118
|
+
assert elem.selected?(2)
|
|
119
|
+
assert elem.selected?(3)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def test_element_to_html
|
|
123
|
+
elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :selected => 2
|
|
124
|
+
expected = %`<select class="elem_select" id="elem" name="elem">
|
|
125
|
+
<option value="1">Barney</option>
|
|
126
|
+
<option selected="selected" value="2">Fred</option>
|
|
127
|
+
<option value="3">Wilma</option>
|
|
128
|
+
</select>\n`
|
|
129
|
+
assert_equal expected, elem.to_html
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def test_element_to_html_multiple
|
|
133
|
+
elem = ActiveForm::Element::Select.new :elem, :multiple => true, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :value => [2, 3]
|
|
134
|
+
expected = %`<select class="elem_select" id="elem" multiple="multiple" name="elem[]">
|
|
135
|
+
<option value="1">Barney</option>
|
|
136
|
+
<option selected="selected" value="2">Fred</option>
|
|
137
|
+
<option selected="selected" value="3">Wilma</option>
|
|
138
|
+
</select>\n`
|
|
139
|
+
assert_equal expected, elem.to_html
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def test_element_to_html_options_group
|
|
143
|
+
elem = ActiveForm::Element::Select.new :elem, :value => 'Wilma' do |e|
|
|
144
|
+
e.option_group 'People' do |og|
|
|
145
|
+
og.option 'Barney'
|
|
146
|
+
og.option 'Fred'
|
|
147
|
+
og.option 'Wilma'
|
|
148
|
+
end
|
|
149
|
+
e.option_group('Animals', ['Dino', 'Pluto'])
|
|
150
|
+
e.option_group('Cartoons', [['Simpsons', 'si'], ['Cow&Chicken', 'cc']])
|
|
151
|
+
end
|
|
152
|
+
expected = %`<select class="elem_select" id="elem" name="elem">
|
|
153
|
+
<optgroup label="People">
|
|
154
|
+
<option value="Barney">Barney</option>
|
|
155
|
+
<option value="Fred">Fred</option>
|
|
156
|
+
<option selected="selected" value="Wilma">Wilma</option>
|
|
157
|
+
</optgroup>
|
|
158
|
+
<optgroup label="Animals">
|
|
159
|
+
<option value="Dino">Dino</option>
|
|
160
|
+
<option value="Pluto">Pluto</option>
|
|
161
|
+
</optgroup>
|
|
162
|
+
<optgroup label="Cartoons">
|
|
163
|
+
<option value="si">Simpsons</option>
|
|
164
|
+
<option value="cc">Cow&Chicken</option>
|
|
165
|
+
</optgroup>
|
|
166
|
+
</select>\n`
|
|
167
|
+
assert_equal expected, elem.to_html
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def test_element_to_html_options_group_multiple
|
|
171
|
+
elem = ActiveForm::Element::Select.new :elem, :multiple => true, :value => %w{ Wilma Dino } do |e|
|
|
172
|
+
e.option_group 'People', ['Barney', 'Fred', 'Wilma']
|
|
173
|
+
e.option_group('Animals', ['Dino', 'Pluto'])
|
|
174
|
+
e.option_group('Cartoons', [['Simpsons', 'si'], ['Cow&Chicken', 'cc']])
|
|
175
|
+
end
|
|
176
|
+
expected = %`<select class="elem_select" id="elem" multiple="multiple" name="elem[]">
|
|
177
|
+
<optgroup label="People">
|
|
178
|
+
<option value="Barney">Barney</option>
|
|
179
|
+
<option value="Fred">Fred</option>
|
|
180
|
+
<option selected="selected" value="Wilma">Wilma</option>
|
|
181
|
+
</optgroup>
|
|
182
|
+
<optgroup label="Animals">
|
|
183
|
+
<option selected="selected" value="Dino">Dino</option>
|
|
184
|
+
<option value="Pluto">Pluto</option>
|
|
185
|
+
</optgroup>
|
|
186
|
+
<optgroup label="Cartoons">
|
|
187
|
+
<option value="si">Simpsons</option>
|
|
188
|
+
<option value="cc">Cow&Chicken</option>
|
|
189
|
+
</optgroup>
|
|
190
|
+
</select>\n`
|
|
191
|
+
assert_equal expected, elem.to_html
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def test_render_frozen
|
|
195
|
+
elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :frozen => true
|
|
196
|
+
assert_equal "<span class=\"blank\">-</span>\n", elem.to_html
|
|
197
|
+
elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :selected => 2, :frozen => true
|
|
198
|
+
assert_equal 'Fred', elem.to_html
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def test_render_frozen_multiple
|
|
202
|
+
elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :multiple => true, :frozen => true
|
|
203
|
+
assert_equal "<span class=\"blank\">-</span>\n", elem.to_html
|
|
204
|
+
elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :selected => [2, 3], :multiple => true, :frozen => true
|
|
205
|
+
assert_equal 'Fred, Wilma', elem.to_html
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def test_reset_options
|
|
209
|
+
elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :add_empty => true
|
|
210
|
+
assert_equal ["--", "Barney", "Fred", "Wilma"], elem.options.collect(&:label)
|
|
211
|
+
elem.reset_options!
|
|
212
|
+
assert_equal [], elem.options.collect(&:label)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def test_add_empty_option
|
|
216
|
+
elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :add_empty => true
|
|
217
|
+
assert_equal ['--', :blank], [elem.options.first.label, elem.options.first.value]
|
|
218
|
+
elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :empty_option => 'choose a name:'
|
|
219
|
+
assert_equal ['choose a name:', :blank], [elem.options.first.label, elem.options.first.value]
|
|
220
|
+
elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :empty => 'choose a name:'
|
|
221
|
+
assert_equal ['choose a name:', :blank], [elem.options.first.label, elem.options.first.value]
|
|
222
|
+
elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ] do |e|
|
|
223
|
+
e.add_empty_option
|
|
224
|
+
end
|
|
225
|
+
assert_equal ['--', :blank], [elem.options.first.label, elem.options.first.value]
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def test_no_initial_value
|
|
229
|
+
form = ActiveForm::compose :myform do |f|
|
|
230
|
+
f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
|
|
231
|
+
end
|
|
232
|
+
assert_equal nil, form[:people].value
|
|
233
|
+
form = ActiveForm::compose :myform do |f|
|
|
234
|
+
f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :multiple => true
|
|
235
|
+
end
|
|
236
|
+
assert_equal [], form[:people].value
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def test_set_initial_value
|
|
240
|
+
values = { :people => 2 }
|
|
241
|
+
form = ActiveForm::compose :myform, :values => values do |f|
|
|
242
|
+
f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :multiple => true
|
|
243
|
+
end
|
|
244
|
+
assert_equal [2], form[:people].value
|
|
245
|
+
assert_equal [2], form[:people].export_value
|
|
246
|
+
form.values = { :people => [2, 3] }
|
|
247
|
+
assert_equal [2, 3], form[:people].value
|
|
248
|
+
assert_equal [2, 3], form[:people].export_value
|
|
249
|
+
expected = { "people" => [2, 3] }
|
|
250
|
+
assert_equal expected, form.export_values
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def test_export_value
|
|
254
|
+
form = ActiveForm::compose :myform do |f|
|
|
255
|
+
f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :multiple => true
|
|
256
|
+
end
|
|
257
|
+
form[:people].selected = [2, 3]
|
|
258
|
+
expected = { "people" => [2, 3] }
|
|
259
|
+
assert_equal expected, form.export_values
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def test_update_from_params
|
|
263
|
+
form = ActiveForm::compose :myform do |f|
|
|
264
|
+
f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
|
|
265
|
+
end
|
|
266
|
+
params = { :myform => { :people => [3] } }
|
|
267
|
+
form.update_from_params(params)
|
|
268
|
+
expected = { "people" => 3 }
|
|
269
|
+
assert_equal expected, form.export_values
|
|
270
|
+
|
|
271
|
+
form = ActiveForm::compose :myform do |f|
|
|
272
|
+
f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :multiple => true
|
|
273
|
+
end
|
|
274
|
+
params = { :myform => { :people => [3] } }
|
|
275
|
+
form.update_from_params(params)
|
|
276
|
+
expected = { "people" => [3] }
|
|
277
|
+
assert_equal expected, form.export_values
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
def test_required_validation
|
|
281
|
+
form = ActiveForm::compose :myform do |f|
|
|
282
|
+
f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :required => true
|
|
283
|
+
end
|
|
284
|
+
assert form[:people].blank?
|
|
285
|
+
assert !form.validate
|
|
286
|
+
assert_equal ["required"], form[:people].errors.collect(&:code)
|
|
287
|
+
form[:people].value = 2
|
|
288
|
+
assert form.validate
|
|
289
|
+
form[:people].value = 7
|
|
290
|
+
assert form[:people].blank?
|
|
291
|
+
assert !form.validate
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
def test_option_count_validation
|
|
295
|
+
form = ActiveForm::compose :myform do |f|
|
|
296
|
+
f.select_element :alpha, :options => ('a'..'z'), :required => true
|
|
297
|
+
end
|
|
298
|
+
assert !form.validate
|
|
299
|
+
assert_equal ["required"], form[:alpha].errors.collect(&:code)
|
|
300
|
+
assert_equal ["Alpha: can't be blank"], form[:alpha].errors.collect(&:msg)
|
|
301
|
+
form[:alpha].value = 'a'
|
|
302
|
+
assert form.validate
|
|
303
|
+
|
|
304
|
+
form = ActiveForm::compose :myform do |f|
|
|
305
|
+
f.select_element :alpha, :options => ('a'..'z'), :required => 3, :multiple => true
|
|
306
|
+
end
|
|
307
|
+
assert !form.validate
|
|
308
|
+
assert_equal ["required"], form[:alpha].errors.collect(&:code)
|
|
309
|
+
assert_equal ["Alpha: you need to select 3 items"], form[:alpha].errors.collect(&:msg)
|
|
310
|
+
form[:alpha].value = ['a', 'b', 'c']
|
|
311
|
+
assert form.validate
|
|
312
|
+
|
|
313
|
+
form = ActiveForm::compose :myform do |f|
|
|
314
|
+
f.select_element :alpha, :options => ('a'..'z'), :required => 2..4, :multiple => true do |e|
|
|
315
|
+
e.required_message = "%1$s: you need to select between %3$s and %4$s items"
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
assert !form.validate
|
|
319
|
+
assert_equal ["required"], form[:alpha].errors.collect(&:code)
|
|
320
|
+
assert_equal ["Alpha: you need to select between 2 and 4 items"], form[:alpha].errors.collect(&:msg)
|
|
321
|
+
form[:alpha].value = ['a']
|
|
322
|
+
assert !form.validate
|
|
323
|
+
form[:alpha].value = ['a', 'b']
|
|
324
|
+
assert form.validate
|
|
325
|
+
form[:alpha].value = ['a', 'b', 'c']
|
|
326
|
+
assert form.validate
|
|
327
|
+
form[:alpha].value = ['a', 'b', 'c', 'd']
|
|
328
|
+
assert form.validate
|
|
329
|
+
form[:alpha].value = ['a', 'b', 'c', 'd', 'e']
|
|
330
|
+
assert !form.validate
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
def test_valid_option
|
|
334
|
+
elem = ActiveForm::Element::Select.new :elem, :multiple => true do |e|
|
|
335
|
+
e.option_group 'People', ['Barney', 'Fred', 'Wilma']
|
|
336
|
+
e.option_group 'Animals', ['Dino', 'Pluto']
|
|
337
|
+
end
|
|
338
|
+
assert elem.valid_option?('Barney')
|
|
339
|
+
assert elem.valid_option?('Dino')
|
|
340
|
+
assert !elem.valid_option?('Pebbles')
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
def test_enumerable_methods
|
|
344
|
+
form = ActiveForm::compose :myform do |f|
|
|
345
|
+
f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
|
|
346
|
+
end
|
|
347
|
+
assert_equal ["Barney", "Fred", "Wilma"], form[:people].option_labels
|
|
348
|
+
assert_equal ["Barney", "Fred", "Wilma"], form[:people].collect(&:label)
|
|
349
|
+
assert_equal [1, 2, 3], form[:people].option_values
|
|
350
|
+
assert_equal [1, 2, 3], form[:people].collect(&:value)
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
def test_enumerable_methods_group
|
|
354
|
+
elem = ActiveForm::Element::Select.new :elem, :multiple => true do |e|
|
|
355
|
+
e.option_group 'People', ['Barney', 'Fred', 'Wilma']
|
|
356
|
+
e.option_group 'Animals', ['Dino', 'Pluto']
|
|
357
|
+
end
|
|
358
|
+
assert_equal ["Barney", "Fred", "Wilma", "Dino", "Pluto"], elem.option_labels
|
|
359
|
+
assert_equal ["Barney", "Fred", "Wilma", "Dino", "Pluto"], elem.option_values
|
|
360
|
+
assert_equal ["People", "Animals"], elem.collect(&:label)
|
|
361
|
+
assert_equal ["Barney", "Fred", "Wilma", "Dino", "Pluto"], elem.collect(&:options).flatten.collect(&:label)
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestSubmitElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_element_to_html
|
|
6
|
+
elem = ActiveForm::Element::Submit.new :elem, :label => 'Send'
|
|
7
|
+
assert !elem.labelled?
|
|
8
|
+
expected = %|<input class="elem_submit" id="elem" name="elem" type="submit" value="Send"/>\n|
|
|
9
|
+
assert_equal expected, elem.to_html
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestTextElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_set_attributes
|
|
6
|
+
[:title, :lang, :type, :value, :maxlength, :size].each do |attribute|
|
|
7
|
+
assert ActiveForm::Element::Text.element_attribute_names.include?(attribute)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
elem = ActiveForm::Element::Text.new :elem, :value => 'string', :maxlength => 20, :size => 20
|
|
11
|
+
expected = {"type" => "text", "name"=>"elem", "class"=>"elem_text", "id"=>"elem", "value"=>"string", "maxlength"=>20, "size"=>20}
|
|
12
|
+
assert_equal expected, elem.element_attributes
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_option_flag_to_html_flag
|
|
16
|
+
form = ActiveForm::compose :form do |f|
|
|
17
|
+
f.text_element :firstname, :readonly => true
|
|
18
|
+
f.text_element :lastname, :disabled => true
|
|
19
|
+
end
|
|
20
|
+
expected = {"name"=>"form[firstname]", "readonly"=>"readonly", "class"=>"elem_text readonly", "type"=>"text", "id"=>"form_firstname", "value"=>"", "size"=>30}
|
|
21
|
+
assert_equal expected, form[:firstname].element_attributes
|
|
22
|
+
expected = {"name"=>"form[lastname]", "class"=>"elem_text disabled", "type"=>"text", "id"=>"form_lastname", "disabled"=>"disabled", "value"=>"", "size"=>30}
|
|
23
|
+
assert_equal expected, form[:lastname].element_attributes
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_frozen_value
|
|
27
|
+
elem = ActiveForm::Element::Text.new :elem, :frozen => true, :value => "Freeze me!"
|
|
28
|
+
assert elem.frozen?
|
|
29
|
+
assert_equal "Freeze me!", elem.formatted_value
|
|
30
|
+
elem.frozen_value = "I'm frozen now!"
|
|
31
|
+
assert_equal "I'm frozen now!", elem.formatted_value
|
|
32
|
+
assert_equal "I'm frozen now!", elem.to_html
|
|
33
|
+
|
|
34
|
+
elem.frozen = false
|
|
35
|
+
assert !elem.frozen?
|
|
36
|
+
expected = %|<input class="elem_text" id="elem" name="elem" size="30" type="text" value="Freeze me!"/>\n|
|
|
37
|
+
assert_equal expected, elem.to_html
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_freeze_filter
|
|
41
|
+
elem = ActiveForm::Element::Text.new :elem, :frozen => true, :value => "Freeze me!"
|
|
42
|
+
elem.freeze_filter = lambda { |value| value.to_s.upcase }
|
|
43
|
+
assert elem.frozen?
|
|
44
|
+
assert_equal "FREEZE ME!", elem.formatted_value
|
|
45
|
+
elem.frozen_value = "I'm frozen now!"
|
|
46
|
+
assert_equal "I'm frozen now!", elem.formatted_value
|
|
47
|
+
elem.frozen = false
|
|
48
|
+
assert_equal "Freeze me!", elem.formatted_value
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_element_to_html
|
|
52
|
+
elem = ActiveForm::Element::Text.new :elem
|
|
53
|
+
expected = %|<input class="elem_text" id="elem" name="elem" size="30" type="text"/>\n|
|
|
54
|
+
assert_equal expected, elem.to_html
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_element_with_attributes_to_html
|
|
58
|
+
elem = ActiveForm::Element::Text.new :elem, :size => 20, :value => 'hello world'
|
|
59
|
+
assert_equal 'hello world', elem.element_value
|
|
60
|
+
elem.element_value = 'new value'
|
|
61
|
+
assert_equal 'new value', elem.element_value
|
|
62
|
+
expected = %|<input class="elem_text" id="elem" name="elem" size="20" type="text" value="new value"/>\n|
|
|
63
|
+
assert_equal expected, elem.to_html
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_element_with_casting_and_formatting_filters
|
|
67
|
+
elem = ActiveForm::Element::Text.new :elem, :value => ['one', 'two', 'three'] # this is regarded as element_value
|
|
68
|
+
elem.define_formatting_filter { |value| value.join(', ') }
|
|
69
|
+
elem.define_casting_filter { |value| value.split(/,\s+/) }
|
|
70
|
+
assert_equal ['one', 'two', 'three'], elem.element_value
|
|
71
|
+
assert_equal 'one, two, three', elem.formatted_value
|
|
72
|
+
expected = %|<input class="elem_text" id="elem" name="elem" size="30" type="text" value="one, two, three"/>\n|
|
|
73
|
+
assert_equal expected, elem.to_html
|
|
74
|
+
elem.value = 'a, b, c, d, e'
|
|
75
|
+
assert_equal ['a', 'b', 'c', 'd', 'e'], elem.element_value
|
|
76
|
+
expected = %|<input class="elem_text" id="elem" name="elem" size="30" type="text" value="a, b, c, d, e"/>\n|
|
|
77
|
+
assert_equal expected, elem.to_html
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_export_value_for_grouped_elements
|
|
81
|
+
form = ActiveForm::compose :form do |f|
|
|
82
|
+
f.text_element :elem_a, :group => :grp
|
|
83
|
+
f.text_element :elem_b, :group => :grp
|
|
84
|
+
f.text_element :elem_c
|
|
85
|
+
end
|
|
86
|
+
form.update_values(:elem_a => 'One', :elem_b => 'Two')
|
|
87
|
+
expected = { "elem_c" => nil, "grp" => ["One", "Two"] }
|
|
88
|
+
assert_equal expected, form.export_values
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|