manatee 0.0.1.pre1
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.
- checksums.yaml +7 -0
- data/Gemfile +23 -0
- data/LICENSE.txt +22 -0
- data/README.mdown +55 -0
- data/Rakefile +7 -0
- data/app/assets/javascripts/manatee.js +1 -0
- data/app/assets/javascripts/manatee/helpers.js +4 -0
- data/app/assets/javascripts/manatee/helpers/asset_tag.jsh.coffee +138 -0
- data/app/assets/javascripts/manatee/helpers/asset_url.jsh.coffee +90 -0
- data/app/assets/javascripts/manatee/helpers/csrf.jsh.coffee +5 -0
- data/app/assets/javascripts/manatee/helpers/date.jsh.coffee +54 -0
- data/app/assets/javascripts/manatee/helpers/debug.jsh.coffee +2 -0
- data/app/assets/javascripts/manatee/helpers/form.jsh.coffee +25 -0
- data/app/assets/javascripts/manatee/helpers/form_builder.jsh.coffee +24 -0
- data/app/assets/javascripts/manatee/helpers/form_options.jsh.coffee +267 -0
- data/app/assets/javascripts/manatee/helpers/form_tag.jsh.coffee +204 -0
- data/app/assets/javascripts/manatee/helpers/javascript.jsh.coffee +15 -0
- data/app/assets/javascripts/manatee/helpers/number.jsh.coffee +58 -0
- data/app/assets/javascripts/manatee/helpers/sanitize.jsh.coffee +5 -0
- data/app/assets/javascripts/manatee/helpers/tag.jsh.coffee +58 -0
- data/app/assets/javascripts/manatee/helpers/text.jsh.coffee +12 -0
- data/app/assets/javascripts/manatee/helpers/translation.jsh.coffee +7 -0
- data/app/assets/javascripts/manatee/helpers/url.jsh.coffee +36 -0
- data/app/assets/javascripts/manatee/helpers/util.jsh.coffee +41 -0
- data/app/assets/javascripts/manatee/rails_helpers.js +2 -0
- data/app/assets/javascripts/manatee/rails_helpers/routes.js.erb +195 -0
- data/app/assets/javascripts/manatee/rails_routes.js +1 -0
- data/app/assets/javascripts/manatee/renderer.js.erb +53 -0
- data/app/assets/javascripts/manatee_railsless.js +1 -0
- data/lib/manatee.rb +87 -0
- data/lib/manatee/config.rb +51 -0
- data/lib/manatee/handler.rb +45 -0
- data/lib/manatee/rails.rb +6 -0
- data/lib/manatee/rails/extensions.rb +23 -0
- data/lib/manatee/rails/handler.rb +16 -0
- data/lib/manatee/rails/hash_visitor.rb +35 -0
- data/lib/manatee/rails/helper.rb +9 -0
- data/lib/manatee/rails/resolver.rb +70 -0
- data/lib/manatee/rails/routes_compiler.rb +34 -0
- data/lib/manatee/sprockets.rb +8 -0
- data/lib/manatee/sprockets/jsh_processor_2x.rb +32 -0
- data/lib/manatee/sprockets/jsh_processor_3x.rb +31 -0
- data/lib/manatee/version.rb +3 -0
- data/manatee.gemspec +32 -0
- data/test/example/renderer.js.erb +8 -0
- data/test/example/translations.en.yml +410 -0
- data/test/example/views/index.jst.eco +12 -0
- data/test/helpers/asset_tag_test.rb +175 -0
- data/test/helpers/asset_url_test.rb +349 -0
- data/test/helpers/form_options_test.rb +718 -0
- data/test/helpers/form_tag_test.rb +387 -0
- data/test/helpers/javascript_test.rb +39 -0
- data/test/helpers/number_test.rb +111 -0
- data/test/helpers/tag_test.rb +71 -0
- data/test/support/dom_assertion.rb +49 -0
- data/test/support/view_test.rb +91 -0
- data/test/test_helper.rb +17 -0
- metadata +213 -0
@@ -0,0 +1,387 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class FormTagTest < Manatee::ViewTest
|
4
|
+
|
5
|
+
def setup
|
6
|
+
config_renderer do |config|
|
7
|
+
config.fonts_path = '/fonts'
|
8
|
+
config.audios_path = '/audios'
|
9
|
+
config.videos_path = '/videos'
|
10
|
+
config.images_path = '/images'
|
11
|
+
config.javascript_path = ''
|
12
|
+
config.stylesheet_path = ''
|
13
|
+
config.protect_from_forgery = true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
FieldTypes = {
|
18
|
+
color: :color,
|
19
|
+
date: :date,
|
20
|
+
datetime: :datetime,
|
21
|
+
email: :email,
|
22
|
+
file: :file,
|
23
|
+
hidden: :hidden,
|
24
|
+
month: :month,
|
25
|
+
number: :number,
|
26
|
+
password: :password,
|
27
|
+
range: :range,
|
28
|
+
search: :search,
|
29
|
+
text: :text,
|
30
|
+
time: :time,
|
31
|
+
url: :url,
|
32
|
+
week: :week,
|
33
|
+
datetimeLocal: :'datetime-local',
|
34
|
+
telephone: :tel,
|
35
|
+
phone: :tel
|
36
|
+
}
|
37
|
+
|
38
|
+
FieldTypes.each do |field, type|
|
39
|
+
define_method :"test_optionsless_#{field}" do
|
40
|
+
html_code = %(<input type="#{type}" id="field_name" name="field[name]" value="field_value"/>)
|
41
|
+
assert_dom_helper html_code, :"#{field}FieldTag", 'field[name]', 'field_value'
|
42
|
+
|
43
|
+
html_code = %(<input type="#{type}" id="field_name" name="field[name]"/>)
|
44
|
+
assert_dom_helper html_code, :"#{field}FieldTag", 'field[name]', nil
|
45
|
+
end
|
46
|
+
|
47
|
+
define_method :"test_#{field}_with_options" do
|
48
|
+
html_code = %(<input type="#{type}" id="field_name" name="field_name" class="#{field}_class" data-attribute="this is a #{type} field"/>)
|
49
|
+
assert_dom_helper html_code, :"#{field}FieldTag", 'field_name', nil, class: "#{field}_class", data: { attribute: "this is a #{type} field" }
|
50
|
+
|
51
|
+
html_code = %(<input type="#{type}" id="field_name" name="field_name" value="field_value" class="#{field}_class" data-attribute="this is a #{type} field"/>)
|
52
|
+
assert_dom_helper html_code, :"#{field}FieldTag", 'field_name', 'field_value', class: "#{field}_class", data: { attribute: "this is a #{type} field" }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_button_tag
|
57
|
+
assert_dom_helper %(<button name="button" type="submit">Button</button>), :buttonTag
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_button_tag_with_submit_type
|
61
|
+
assert_dom_helper %(<button name="button" type="submit">Save</button>), :buttonTag, 'Save', type: 'submit'
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_button_tag_with_button_type
|
65
|
+
assert_dom_helper %(<button name="button" type="button">Button</button>), :buttonTag, 'Button', type: 'button'
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_button_tag_with_reset_type
|
69
|
+
assert_dom_helper %(<button name="button" type="reset">Reset</button>), :buttonTag, 'Reset', type: 'reset'
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_button_tag_with_disabled_option
|
73
|
+
assert_dom_helper %(<button name="button" type="reset" disabled="disabled">Reset</button>), :buttonTag, 'Reset', type: 'reset', disabled: true
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_button_tag_escape_content
|
77
|
+
assert_dom_helper %(<button name="button" type="reset" disabled="disabled"><b>Reset</b></button>), :buttonTag, '<b>Reset</b>', type: 'reset', disabled: true
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_button_tag_with_block
|
81
|
+
assert_dom_helper('<button name="button" type="submit">Content</button>', :buttonTag){ 'Content' }
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_button_tag_with_block_and_options
|
85
|
+
html_code = '<button name="temptation" type="button"><strong>Do not press me</strong></button>'
|
86
|
+
assert_dom_helper(html_code, :buttonTag, name: 'temptation', type: 'button'){ helper_call :contentTag, :strong, 'Do not press me' }
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_button_tag_with_confirmation
|
90
|
+
html_code = %(<button name="button" type="submit" data-confirm="Are you sure?">Save</button>)
|
91
|
+
assert_dom_helper html_code, :buttonTag, 'Save', type: 'submit', data: { confirm: 'Are you sure?' }
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_checkbox_tag
|
95
|
+
html_code = %(<input type="checkbox" id="field_name" name="field[name]" value="field_value"/>)
|
96
|
+
assert_dom_helper html_code, :checkBoxTag, 'field[name]', 'field_value'
|
97
|
+
|
98
|
+
html_code = %(<input type="checkbox" id="field_name" name="field[name]" value="field_value" checked="checked"/>)
|
99
|
+
assert_dom_helper html_code, :checkboxTag, 'field[name]', 'field_value', checked: true
|
100
|
+
|
101
|
+
html_code = %(<input type="checkbox" id="field_name" name="field[name]" value="1"/>)
|
102
|
+
assert_dom_helper html_code, :checkBoxTag, 'field[name]'
|
103
|
+
|
104
|
+
html_code = %(<input type="checkbox" id="field_name" value="1" name="field_name" class="checkbox_class" data-attribute="this is a checkbox field"/>)
|
105
|
+
assert_dom_helper html_code, :checkboxTag, 'field_name', nil, false, class: "checkbox_class", data: { attribute: "this is a checkbox field" }
|
106
|
+
|
107
|
+
html_code = %(<input type="checkbox" id="field_name" name="field_name" value="field_value" class="checkbox_class" data-attribute="this is a checkbox field"/>)
|
108
|
+
assert_dom_helper html_code, :checkBoxTag, 'field_name', 'field_value', false, class: "checkbox_class", data: { attribute: "this is a checkbox field" }
|
109
|
+
|
110
|
+
html_code = %(<input type="checkbox" id="field_name" name="field_name" checked="checked" value="field_value" class="checkbox_class" data-attribute="this is a checkbox field"/>)
|
111
|
+
assert_dom_helper html_code, :checkBoxTag, 'field_name', 'field_value', true, class: "checkbox_class", data: { attribute: "this is a checkbox field" }
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_fieldset_tag
|
115
|
+
html_code = %(<fieldset><legend>Your details</legend>Hello world!</fieldset>)
|
116
|
+
assert_dom_helper( html_code, :fieldsetTag, 'Your details' ){ 'Hello world!' }
|
117
|
+
|
118
|
+
html_code = %(<fieldset>Hello world!</fieldset>)
|
119
|
+
assert_dom_helper( html_code, :fieldSetTag ){ 'Hello world!' }
|
120
|
+
|
121
|
+
html_code = %(<fieldset>Hello world!</fieldset>)
|
122
|
+
assert_dom_helper( html_code, :fieldsetTag, '' ){ 'Hello world!' }
|
123
|
+
|
124
|
+
html_code = %(<fieldset class="format">Hello world!</fieldset>)
|
125
|
+
assert_dom_helper( html_code, :fieldSetTag, '', class: 'format' ){ 'Hello world!' }
|
126
|
+
|
127
|
+
html_code = %(<fieldset></fieldset>)
|
128
|
+
assert_dom_helper html_code, :fieldSetTag
|
129
|
+
|
130
|
+
html_code = %(<fieldset><legend>You legend!</legend></fieldset>)
|
131
|
+
assert_dom_helper html_code, :fieldsetTag, 'You legend!'
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_form_tag
|
135
|
+
assert_dom_helper whole_form, :formTag
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_form_tag_multipart
|
139
|
+
expected = whole_form 'http://www.example.com', enctype: true
|
140
|
+
assert_dom_helper expected, :formTag, 'http://www.example.com', multipart: true
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_form_tag_with_method_patch
|
144
|
+
expected = whole_form 'http://www.example.com', method: :patch
|
145
|
+
assert_dom_helper expected, :formTag, 'http://www.example.com', method: :patch
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_form_tag_with_method_put
|
149
|
+
expected = whole_form'http://www.example.com', method: :put
|
150
|
+
assert_dom_helper expected, :formTag, 'http://www.example.com', method: :put
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_form_tag_with_method_delete
|
154
|
+
expected = whole_form 'http://www.example.com', method: :delete
|
155
|
+
assert_dom_helper expected, :formTag, 'http://www.example.com', method: :delete
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_form_tag_with_remote
|
159
|
+
expected = whole_form 'http://www.example.com', remote: true
|
160
|
+
assert_dom_helper expected, :formTag, 'http://www.example.com', remote: true
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_form_tag_with_remote_false
|
164
|
+
expected = whole_form '/', remote: false
|
165
|
+
assert_dom_helper expected, :formTag, nil, remote: false
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_form_tag_enforce_utf8_true
|
169
|
+
expected = whole_form 'http://www.example.com', enforce_utf8: true
|
170
|
+
assert_dom_helper expected, :formTag, 'http://www.example.com', enforce_utf8: true
|
171
|
+
end
|
172
|
+
|
173
|
+
def test_form_tag_enforce_utf8_false
|
174
|
+
expected = whole_form 'http://www.example.com', enforce_utf8: false
|
175
|
+
assert_dom_helper expected, :formTag, 'http://www.example.com', enforce_utf8: false
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_form_tag_with_block
|
179
|
+
expected = whole_form{ 'Hello world!' }
|
180
|
+
assert_dom_helper(expected, :formTag){ 'Hello world!' }
|
181
|
+
assert_dom_js_helper expected, :formTag, %( function(){ return 'Hello world!';} )
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_form_tag_with_block_and_method
|
185
|
+
expected = whole_form('http://www.example.com', method: :put){ 'Hello world!' }
|
186
|
+
assert_dom_helper(expected, :formTag, 'http://www.example.com', method: :put){ 'Hello world!' }
|
187
|
+
assert_dom_js_helper expected, :formTag, %( 'http://www.example.com', { method: 'put' }, function(){ return 'Hello world!';} )
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_image_submit_tag
|
191
|
+
html_code = %(<input alt="Save" type="image" src="/images/save.gif"/>)
|
192
|
+
assert_dom_helper html_code, :imageSubmitTag, 'save.gif'
|
193
|
+
|
194
|
+
html_code = %(<input alt="Save" type="image" src="/images/save.gif" data-confirm="Are you sure?" />)
|
195
|
+
assert_dom_helper html_code, :imageSubmitTag, 'save.gif', data: { confirm: 'Are you sure?' }
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_label_tag_without_text
|
199
|
+
expected = %(<label for="title">Title</label>)
|
200
|
+
assert_dom_helper expected, :labelTag, 'title'
|
201
|
+
|
202
|
+
expected = %(<label for="title">Title</label>)
|
203
|
+
assert_dom_helper expected, :labelTag, :title
|
204
|
+
end
|
205
|
+
|
206
|
+
def test_label_tag_with_text
|
207
|
+
expected = %(<label for="title">My Title</label>)
|
208
|
+
assert_dom_helper expected, :labelTag, 'title', 'My Title'
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_label_tag_class_string
|
212
|
+
expected = %(<label for="title" class="small_label">My Title</label>)
|
213
|
+
assert_dom_helper expected, :labelTag, 'title', 'My Title', class: 'small_label'
|
214
|
+
end
|
215
|
+
|
216
|
+
def test_label_tag_id_sanitized
|
217
|
+
expected = %(<label for="item_title">Item title</label>)
|
218
|
+
assert_dom_helper expected, :labelTag, 'item[title]'
|
219
|
+
end
|
220
|
+
|
221
|
+
def test_label_tag_with_block
|
222
|
+
assert_dom_helper('<label>Blocked</label>', :labelTag){ 'Blocked' }
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_label_tag_with_block_and_argument
|
226
|
+
assert_dom_helper('<label for="clock">Grandfather</label>', :labelTag, 'clock'){ 'Grandfather' }
|
227
|
+
end
|
228
|
+
|
229
|
+
def test_label_tag_with_block_and_argument_and_options
|
230
|
+
assert_dom_helper('<label for="clock" id="label_clock">Grandfather</label>', :labelTag, 'clock', id: 'label_clock'){ 'Grandfather' }
|
231
|
+
end
|
232
|
+
|
233
|
+
def test_radio_button_tag
|
234
|
+
expected = %(<input id="people_david" name="people" type="radio" value="david" />)
|
235
|
+
assert_dom_helper expected, :radioButtonTag, 'people', 'david'
|
236
|
+
|
237
|
+
expected = %(<input id="num_people_5" name="num_people" type="radio" value="5" />)
|
238
|
+
assert_dom_helper expected, :radioButtonTag, 'num_people', 5
|
239
|
+
|
240
|
+
expected = %(<input id="gender_m" name="gender" type="radio" value="m" /><input id="gender_f" name="gender" type="radio" value="f" />)
|
241
|
+
assert_dom_template expected, %( this.radioButtonTag('gender', 'm') + this.radioButtonTag('gender', 'f') )
|
242
|
+
|
243
|
+
expected = %(<input id="opinion_-1" name="opinion" type="radio" value="-1" /><input id="opinion_1" name="opinion" type="radio" value="1" />)
|
244
|
+
assert_dom_template expected, %( this.radioButtonTag('opinion', '-1') + this.radioButtonTag('opinion', '1') )
|
245
|
+
|
246
|
+
expected = %(<input id="person_gender_m" name="person[gender]" type="radio" value="m" />)
|
247
|
+
assert_dom_helper expected, :radioButtonTag, 'person[gender]', 'm'
|
248
|
+
|
249
|
+
expected = %(<input id="ctrlname_apache2.2" name="ctrlname" type="radio" value="apache2.2" />)
|
250
|
+
assert_dom_helper expected, :radioButtonTag, 'ctrlname', 'apache2.2'
|
251
|
+
end
|
252
|
+
|
253
|
+
def test_select_tag
|
254
|
+
expected = %(<select id="people" name="people"><option>david</option></select>)
|
255
|
+
assert_dom_helper expected, :selectTag, 'people', '<option>david</option>'
|
256
|
+
end
|
257
|
+
|
258
|
+
def test_select_tag_with_multiple
|
259
|
+
expected = %(<select id="colors" multiple="multiple" name="colors"><option>Red</option><option>Blue</option><option>Green</option></select>)
|
260
|
+
assert_dom_helper expected, :selectTag, 'colors', '<option>Red</option><option>Blue</option><option>Green</option>', multiple: true
|
261
|
+
end
|
262
|
+
|
263
|
+
def test_select_tag_disabled
|
264
|
+
expected = %(<select id="places" disabled="disabled" name="places"><option>Home</option><option>Work</option><option>Pub</option></select>)
|
265
|
+
assert_dom_helper expected, :selectTag, 'places', '<option>Home</option><option>Work</option><option>Pub</option>', disabled: true
|
266
|
+
end
|
267
|
+
|
268
|
+
def test_select_tag_id_sanitized
|
269
|
+
expected = %(<select id="project_1people" name="project[1]people"><option>david</option></select>)
|
270
|
+
assert_dom_helper expected, :selectTag, 'project[1]people', '<option>david</option>'
|
271
|
+
end
|
272
|
+
|
273
|
+
def test_select_tag_with_include_blank
|
274
|
+
expected = %(<select id="places" name="places"><option value=""></option><option>Home</option><option>Work</option><option>Pub</option></select>)
|
275
|
+
assert_dom_helper expected, :selectTag, 'places', '<option>Home</option><option>Work</option><option>Pub</option>', include_blank: true
|
276
|
+
end
|
277
|
+
|
278
|
+
def test_select_tag_with_prompt
|
279
|
+
expected = %(<select id="places" name="places"><option value="">string</option><option>Home</option><option>Work</option><option>Pub</option></select>)
|
280
|
+
assert_dom_helper expected, :selectTag, 'places', '<option>Home</option><option>Work</option><option>Pub</option>', prompt: 'string'
|
281
|
+
end
|
282
|
+
|
283
|
+
def test_select_tag_escapes_prompt
|
284
|
+
expected = %(<select id="places" name="places"><option value=""><script>alert(1337)</script></option><option>Home</option><option>Work</option><option>Pub</option></select>)
|
285
|
+
assert_dom_helper expected, :selectTag, 'places', '<option>Home</option><option>Work</option><option>Pub</option>', prompt: '<script>alert(1337)</script>'
|
286
|
+
end
|
287
|
+
|
288
|
+
def test_select_tag_with_prompt_and_include_blank
|
289
|
+
expected = %(<select name="places" id="places"><option value="">string</option><option value=""></option><option>Home</option><option>Work</option><option>Pub</option></select>)
|
290
|
+
assert_dom_helper expected, :selectTag, 'places', '<option>Home</option><option>Work</option><option>Pub</option>', prompt: 'string', include_blank: true
|
291
|
+
end
|
292
|
+
|
293
|
+
def test_select_tag_with_nil_option_tags_and_include_blank
|
294
|
+
expected = %(<select id="places" name="places"><option value=""></option></select>)
|
295
|
+
assert_dom_helper expected, :selectTag, 'places', nil, include_blank: true
|
296
|
+
end
|
297
|
+
|
298
|
+
def test_select_tag_with_nil_option_tags_and_prompt
|
299
|
+
expected = %(<select id="places" name="places"><option value="">string</option></select>)
|
300
|
+
assert_dom_helper expected, :selectTag, 'places', nil, prompt: 'string'
|
301
|
+
end
|
302
|
+
|
303
|
+
def test_submit_tag
|
304
|
+
expected = %(<input name='commit' data-disable-with="Saving..." onclick="alert('hello!')" type="submit" value="Save" />)
|
305
|
+
assert_dom_helper expected, :submitTag, 'Save', onclick: "alert('hello!')", data: { disable_with: 'Saving...' }
|
306
|
+
end
|
307
|
+
|
308
|
+
def test_submit_tag_with_no_onclick_options
|
309
|
+
expected = %(<input name='commit' data-disable-with="Saving..." type="submit" value="Save" />)
|
310
|
+
assert_dom_helper expected, :submitTag, 'Save', data: { disable_with: 'Saving...' }
|
311
|
+
end
|
312
|
+
|
313
|
+
def test_submit_tag_with_confirmation
|
314
|
+
expected = %(<input name='commit' type='submit' value='Save' data-confirm="Are you sure?" />)
|
315
|
+
assert_dom_helper expected, :submitTag, 'Save', data: { confirm: 'Are you sure?' }
|
316
|
+
end
|
317
|
+
|
318
|
+
def test_text_area_tag_size
|
319
|
+
expected = %(<textarea cols="20" id="body" name="body" rows="40">\nhello world</textarea>)
|
320
|
+
assert_dom_helper expected, :textAreaTag, 'body', 'hello world', size: '20x40'
|
321
|
+
end
|
322
|
+
|
323
|
+
def test_text_area_tag_should_disregard_size_if_its_given_as_an_integer
|
324
|
+
expected = %(<textarea id="body" name="body">\nhello world</textarea>)
|
325
|
+
assert_dom_helper expected, :textareaTag, 'body', 'hello world', size: 20
|
326
|
+
end
|
327
|
+
|
328
|
+
def test_text_area_tag_id_sanitized
|
329
|
+
expected = %(<textarea id="item__description" name="item[][description]">\n</textarea>)
|
330
|
+
assert_dom_helper expected, :textAreaTag, 'item[][description]'
|
331
|
+
end
|
332
|
+
|
333
|
+
def test_text_area_tag_escape_content
|
334
|
+
expected = %(<textarea cols="20" id="body" name="body" rows="40">\n<b>hello\n world</b></textarea>)
|
335
|
+
assert_dom_helper expected, :textareaTag, 'body', "<b>hello\n world</b>", size: '20x40'
|
336
|
+
end
|
337
|
+
|
338
|
+
def test_text_area_tag_unescaped_content
|
339
|
+
expected = %(<textarea cols="20" id="body" name="body" rows="40">\n<b>hello world</b></textarea>)
|
340
|
+
assert_dom_helper expected, :textareaTag, 'body', '<b>hello world</b>', size: '20x40', escape: false
|
341
|
+
end
|
342
|
+
|
343
|
+
def test_text_area_tag_unescaped_nil_content
|
344
|
+
expected = %(<textarea id="body" name="body">\n</textarea>)
|
345
|
+
assert_dom_helper expected, :textareaTag, 'body', nil, escape: false
|
346
|
+
end
|
347
|
+
|
348
|
+
def test_utf8_enforcer_tag
|
349
|
+
expected = '<input name="utf8" type="hidden" value="✓" />'
|
350
|
+
assert_dom_helper expected, :utf8EnforcerTag
|
351
|
+
end
|
352
|
+
|
353
|
+
protected
|
354
|
+
def whole_form(action = '/', options = {})
|
355
|
+
output = form_text(action, options) + hidden_fields(options)
|
356
|
+
output << yield if block_given?
|
357
|
+
output << '</form>'
|
358
|
+
end
|
359
|
+
|
360
|
+
def form_text(action = '/', options = {})
|
361
|
+
remote, enctype, html_class, id, method = options.values_at(:remote, :enctype, :html_class, :id, :method)
|
362
|
+
|
363
|
+
txt = %{<form accept-charset="UTF-8" action="#{action}"}
|
364
|
+
|
365
|
+
txt << %{ enctype="multipart/form-data"} if enctype
|
366
|
+
txt << %{ data-remote="true"} if remote
|
367
|
+
txt << %{ class="#{html_class}"} if html_class
|
368
|
+
txt << %{ id="#{id}"} if id
|
369
|
+
|
370
|
+
txt << %{ method="#{method.to_s == "get" ? "get" : "post"}">}
|
371
|
+
end
|
372
|
+
|
373
|
+
def hidden_fields(options = {})
|
374
|
+
method = options[:method]
|
375
|
+
enforce_utf8 = options.fetch :enforce_utf8, true
|
376
|
+
csrf_protection = options.fetch :authenticity_token, true
|
377
|
+
|
378
|
+
txt = %{<div style="display:none">}
|
379
|
+
txt << %{<input name="utf8" type="hidden" value="✓" />} if enforce_utf8
|
380
|
+
if method && !%w(get post).include?(method.to_s)
|
381
|
+
txt << %{<input name="_method" type="hidden" value="#{method}" />}
|
382
|
+
end
|
383
|
+
txt << %(<input type="hidden" name="authenticity_token" value="#{CSRF_TOKEN}"/>) if csrf_protection
|
384
|
+
txt << %{</div>}
|
385
|
+
end
|
386
|
+
|
387
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class JavascriptTest < Manatee::ViewTest
|
4
|
+
|
5
|
+
def test_escape_javascript
|
6
|
+
assert_helper '', :escapeJavascript, nil
|
7
|
+
|
8
|
+
assert_helper %(This \\"thing\\" is really\\n netos\\'), :escapeJavascript, %(This "thing" is really\n netos')
|
9
|
+
assert_helper %(backslash\\\\test), :escapeJavascript, %(backslash\\test)
|
10
|
+
assert_helper %(dont <\\/close> tags), :escapeJavascript, %(dont </close> tags)
|
11
|
+
assert_helper %(unicode 
 newline), :escapeJavascript, %(unicode \342\200\250 newline).force_encoding(Encoding::UTF_8).encode!
|
12
|
+
assert_helper %(unicode 
 newline), :escapeJavascript, %(unicode \342\200\251 newline).force_encoding(Encoding::UTF_8).encode!
|
13
|
+
|
14
|
+
given = %('quoted' "double-quoted" new-line:\n </closed>)
|
15
|
+
expect = %(\\'quoted\\' \\"double-quoted\\" new-line:\\n <\\/closed>)
|
16
|
+
assert_helper expect, :escapeJavascript, given
|
17
|
+
|
18
|
+
assert_helper %(dont <\\/close> tags), :j, %(dont </close> tags)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_javascript_tag
|
22
|
+
assert_dom_helper "<script>\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", :javascriptTag, "alert('hello')"
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_javascript_tag_with_options
|
26
|
+
assert_dom_helper "<script id=\"the_js_tag\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", :javascriptTag, "alert('hello')", id: "the_js_tag"
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_javascript_tag_with_block
|
30
|
+
assert_dom_helper "<script>\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", :javascriptTag, lambda{ "alert('hello')" }
|
31
|
+
assert_dom_helper "<script id=\"js_script_tag\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", :javascriptTag, lambda{ "alert('hello')" }, { id: 'js_script_tag' }
|
32
|
+
assert_dom_helper "<script id=\"js_script_tag\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", :javascriptTag, { id: 'js_script_tag' }, lambda{ "alert('hello')" }
|
33
|
+
|
34
|
+
assert_dom_js_helper "<script>\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", :javascriptTag, %(function(){ return "alert('hello')"; })
|
35
|
+
assert_dom_js_helper "<script id=\"js_script_tag\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", :javascriptTag, %( {id: 'js_script_tag'}, function(){ return "alert('hello')"; } )
|
36
|
+
assert_dom_js_helper "<script id=\"js_script_tag\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", :javascriptTag, %( function(){ return "alert('hello')"; }, {id: 'js_script_tag'} )
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class NumberTest < Manatee::ViewTest
|
4
|
+
|
5
|
+
def test_number_to_currency
|
6
|
+
assert_helper nil, :numberToCurrency, nil
|
7
|
+
assert_helper '$1,234,567,890.50', :numberToCurrency, 1234567890.50
|
8
|
+
assert_helper '$1,234,567,892', :numberToCurrency, 1234567891.50, precision: 0
|
9
|
+
assert_helper '1,234,567,890.50 - Kč', :numberToCurrency, '-1234567890.50', unit: 'Kč', format: '%n %u', negative_format: '%n - %u', escape: false
|
10
|
+
assert_helper '&pound;1,234,567,890.50', :numberToCurrency, '1234567890.50', unit: '£'
|
11
|
+
assert_helper '<b>1,234,567,890.50</b> $', :numberToCurrency, '1234567890.50', format: '<b>%n</b> %u'
|
12
|
+
assert_helper '<b>1,234,567,890.50</b> $', :numberToCurrency, '-1234567890.50', negative_format: '<b>%n</b> %u'
|
13
|
+
assert_helper '<b>1,234,567,890.50</b> $', :numberToCurrency, '-1234567890.50', negative_format: '<b>%n</b> %u'
|
14
|
+
end
|
15
|
+
|
16
|
+
# def test_number_to_phone
|
17
|
+
# assert_helper nil, :numberToPhone, nil
|
18
|
+
# assert_helper '555-1234', :numberToPhone, 5551234
|
19
|
+
# assert_helper '(800) 555-1212 x 123', :numberToPhone, 8005551212, area_code: true, extension: 123
|
20
|
+
# assert_helper '+18005551212', :numberToPhone, 8005551212, delimiter: '', country_code: 1
|
21
|
+
# assert_helper '+<script></script>8005551212', :numberToPhone, 8005551212, delimiter: '', country_code: '<script></script>'
|
22
|
+
# assert_helper '8005551212 x <script></script>', :numberToPhone, 8005551212, delimiter: '', extension: '<script></script>'
|
23
|
+
# end
|
24
|
+
|
25
|
+
# def test_number_to_percentage
|
26
|
+
# assert_helper nil, :numberToPercentage, nil
|
27
|
+
# assert_helper '100.000%', :numberToPercentage, 100
|
28
|
+
# assert_helper '100.000 %', :numberToPercentage, 100, format: '%n %'
|
29
|
+
# assert_helper '<b>100.000</b> %', :numberToPercentage, 100, format: '<b>%n</b> %'
|
30
|
+
# assert_helper '<b>100.000</b> %', :numberToPercentage, 100, format: raw('<b>%n</b> %')
|
31
|
+
# assert_helper '100%', :numberToPercentage, 100, precision: 0
|
32
|
+
# assert_helper '123.4%', :numberToPercentage, 123.400, precision: 3, strip_insignificant_zeros: true
|
33
|
+
# assert_helper '1.000,000%', :numberToPercentage, 1000, delimiter: '.', separator: ','
|
34
|
+
# assert_helper '98a%', :numberToPercentage, '98a'
|
35
|
+
# assert_helper 'NaN%', :numberToPercentage, Float::NAN
|
36
|
+
# assert_helper 'Inf%', :numberToPercentage, Float::INFINITY
|
37
|
+
# end
|
38
|
+
|
39
|
+
# def test_number_with_delimiter
|
40
|
+
# assert_helper nil, :numberWithDelimiter, nil
|
41
|
+
# assert_helper '12,345,678', :numberWithDelimiter, 12345678
|
42
|
+
# assert_helper '0', :numberWithDelimiter, 0
|
43
|
+
# end
|
44
|
+
|
45
|
+
# def test_number_with_precision
|
46
|
+
# assert_helper nil, :numberWithPrecision, nil
|
47
|
+
# assert_helper '-111.235', :numberWithPrecision, -111.2346
|
48
|
+
# assert_helper '111.00', :numberWithPrecision, 111, precision: 2
|
49
|
+
# assert_helper '0.00100', :numberWithPrecision, 0.001, precision: 5
|
50
|
+
# assert_helper '3.33', :numberWithPrecision, Rational(10, 3), precision: 2
|
51
|
+
# end
|
52
|
+
|
53
|
+
# def test_number_to_human_size
|
54
|
+
# assert_helper nil, :numberToHumanSize, nil
|
55
|
+
# assert_helper '3 Bytes', :numberToHumanSize, 3.14159265
|
56
|
+
# assert_helper '1.2 MB', :numberToHumanSize, 1234567, precision: 2
|
57
|
+
# end
|
58
|
+
|
59
|
+
# def test_number_to_human
|
60
|
+
# assert_helper nil, :numberToHuman, nil
|
61
|
+
# assert_helper '0', :numberToHuman, 0
|
62
|
+
# assert_helper '1.23 Thousand', :numberToHuman, 1234
|
63
|
+
# assert_helper '489.0 Thousand', :numberToHuman, 489000, precision: 4, strip_insignificant_zeros: false
|
64
|
+
# end
|
65
|
+
|
66
|
+
# def test_number_to_human_escape_units
|
67
|
+
# volume = { unit: '<b>ml</b>', thousand: '<b>lt</b>', million: '<b>m3</b>', trillion: '<b>km3</b>', quadrillion: '<b>Pl</b>' }
|
68
|
+
# assert_helper '123 <b>lt</b>', :numberToHuman, 123456, units: volume
|
69
|
+
# assert_helper '12 <b>ml</b>', :numberToHuman, 12, units: volume
|
70
|
+
# assert_helper '1.23 <b>m3</b>', :numberToHuman, 1234567, units: volume
|
71
|
+
# assert_helper '1.23 <b>km3</b>', :numberToHuman, 1_234_567_000_000, units: volume
|
72
|
+
# assert_helper '1.23 <b>Pl</b>', :numberToHuman, 1_234_567_000_000_000, units: volume
|
73
|
+
#
|
74
|
+
# #Including fractionals
|
75
|
+
# distance = { mili: '<b>mm</b>', centi: '<b>cm</b>', deci: '<b>dm</b>', unit: '<b>m</b>',
|
76
|
+
# ten: '<b>dam</b>', hundred: '<b>hm</b>', thousand: '<b>km</b>',
|
77
|
+
# micro: '<b>um</b>', nano: '<b>nm</b>', pico: '<b>pm</b>', femto: '<b>fm</b>'}
|
78
|
+
# assert_helper '1.23 <b>mm</b>', :numberToHuman, 0.00123, units: distance
|
79
|
+
# assert_helper '1.23 <b>cm</b>', :numberToHuman, 0.0123, units: distance
|
80
|
+
# assert_helper '1.23 <b>dm</b>', :numberToHuman, 0.123, units: distance
|
81
|
+
# assert_helper '1.23 <b>m</b>', :numberToHuman, 1.23, units: distance
|
82
|
+
# assert_helper '1.23 <b>dam</b>', :numberToHuman, 12.3, units: distance
|
83
|
+
# assert_helper '1.23 <b>hm</b>', :numberToHuman, 123, units: distance
|
84
|
+
# assert_helper '1.23 <b>km</b>', :numberToHuman, 1230, units: distance
|
85
|
+
# assert_helper '1.23 <b>um</b>', :numberToHuman, 0.00000123, units: distance
|
86
|
+
# assert_helper '1.23 <b>nm</b>', :numberToHuman, 0.00000000123, units: distance
|
87
|
+
# assert_helper '1.23 <b>pm</b>', :numberToHuman, 0.00000000000123, units: distance
|
88
|
+
# assert_helper '1.23 <b>fm</b>', :numberToHuman, 0.00000000000000123, units: distance
|
89
|
+
# end
|
90
|
+
|
91
|
+
# def test_number_helpers_escape_delimiter_and_separator
|
92
|
+
# assert_helper '111<script></script>111<script></script>1111', :numberToPhone, 1111111111, delimiter: '<script></script>'
|
93
|
+
#
|
94
|
+
# assert_helper '$1<script></script>01', :numberToCurrency, 1.01, separator: '<script></script>'
|
95
|
+
# assert_helper '$1<script></script>000.00', :numberToCurrency, 1000, delimiter: '<script></script>'
|
96
|
+
#
|
97
|
+
# assert_helper '1<script></script>010%', :numberToPercentage, 1.01, separator: '<script></script>'
|
98
|
+
# assert_helper '1<script></script>000.000%', :numberToPercentage, 1000, delimiter: '<script></script>'
|
99
|
+
#
|
100
|
+
# assert_helper '1<script></script>01', :numberWithDelimiter, 1.01, separator: '<script></script>'
|
101
|
+
# assert_helper '1<script></script>000', :numberWithDelimiter, 1000, delimiter: '<script></script>'
|
102
|
+
#
|
103
|
+
# assert_helper '1<script></script>010', :numberWithDrecision, 1.01, separator: '<script></script>'
|
104
|
+
# assert_helper '1<script></script>000.000', :numberWithDrecision, 1000, delimiter: '<script></script>'
|
105
|
+
#
|
106
|
+
# assert_helper '9<script></script>86 KB', :numberToHuman_size, 10100, separator: '<script></script>'
|
107
|
+
#
|
108
|
+
# assert_helper '1<script></script>01', :numberToHuman, 1.01, separator: '<script></script>'
|
109
|
+
# assert_helper '100<script></script>000 Quadrillion', :numberToHuman, 10**20, delimiter: '<script></script>'
|
110
|
+
# end
|
111
|
+
end
|