padrino-helpers 0.12.8.1 → 0.12.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +13 -5
  2. data/Rakefile +1 -5
  3. data/lib/padrino-helpers.rb +2 -1
  4. data/lib/padrino-helpers/asset_tag_helpers.rb +16 -4
  5. data/lib/padrino-helpers/form_builder/abstract_form_builder.rb +39 -1
  6. data/lib/padrino-helpers/form_builder/standard_form_builder.rb +1 -1
  7. data/lib/padrino-helpers/form_helpers.rb +220 -1
  8. data/lib/padrino-helpers/form_helpers/options.rb +7 -5
  9. data/lib/padrino-helpers/output_helpers.rb +1 -1
  10. data/lib/padrino-helpers/output_helpers/abstract_handler.rb +1 -1
  11. data/lib/padrino-helpers/output_helpers/erb_handler.rb +2 -1
  12. data/lib/padrino-helpers/render_helpers.rb +23 -2
  13. data/lib/padrino-helpers/tag_helpers.rb +13 -0
  14. data/lib/padrino/rendering.rb +2 -1
  15. data/lib/padrino/rendering/erb_template.rb +12 -0
  16. data/lib/padrino/rendering/erubis_template.rb +1 -1
  17. data/padrino-helpers.gemspec +1 -1
  18. data/test/fixtures/markup_app/views/form_for.erb +28 -0
  19. data/test/fixtures/markup_app/views/form_for.haml +22 -0
  20. data/test/fixtures/markup_app/views/form_for.slim +21 -0
  21. data/test/fixtures/markup_app/views/form_tag.erb +21 -0
  22. data/test/fixtures/markup_app/views/form_tag.haml +14 -0
  23. data/test/fixtures/markup_app/views/form_tag.slim +14 -0
  24. data/test/helper.rb +14 -68
  25. data/test/test_asset_tag_helpers.rb +106 -93
  26. data/test/test_form_builder.rb +691 -450
  27. data/test/test_form_helpers.rb +770 -457
  28. data/test/test_format_helpers.rb +17 -37
  29. data/test/test_helpers.rb +8 -0
  30. data/test/test_output_helpers.rb +72 -72
  31. data/test/test_render_helpers.rb +142 -100
  32. data/test/test_rendering.rb +30 -6
  33. data/test/test_tag_helpers.rb +41 -39
  34. metadata +37 -23
@@ -57,25 +57,6 @@ describe "FormatHelpers" do
57
57
  end
58
58
  end
59
59
 
60
- describe 'for #pluralize method' do
61
- it 'should return singular count for 1 item collections' do
62
- actual_text = pluralize(1, 'person')
63
- assert_equal '1 person', actual_text
64
- end
65
- it 'should return plural count for empty collections' do
66
- actual_text = pluralize(0, 'person')
67
- assert_equal '0 people', actual_text
68
- end
69
- it 'should return plural count for many collections' do
70
- actual_text = pluralize(2, 'person')
71
- assert_equal '2 people', actual_text
72
- end
73
- it 'should return pluralized word specified as argument' do
74
- actual_text = pluralize(3, 'person', 'users')
75
- assert_equal '3 users', actual_text
76
- end
77
- end
78
-
79
60
  describe 'for #word_wrap method' do
80
61
  it 'should return proper formatting for 8 max width' do
81
62
  actual_text = word_wrap('Once upon a time', :line_width => 8)
@@ -158,6 +139,8 @@ describe "FormatHelpers" do
158
139
  end
159
140
 
160
141
  describe 'for #time_ago_in_words method' do
142
+ _DAY = 24*60*60
143
+
161
144
  it 'should less than 5 seconds' do
162
145
  assert_equal 'less than 5 seconds', time_ago_in_words(Time.now, true)
163
146
  end
@@ -177,52 +160,49 @@ describe "FormatHelpers" do
177
160
  assert_equal 'less than a minute', time_ago_in_words(Time.now)
178
161
  end
179
162
  it 'should display yesterday' do
180
- assert_equal '1 day', time_ago_in_words(1.day.ago)
163
+ assert_equal '1 day', time_ago_in_words(Time.now - _DAY)
181
164
  end
182
165
  it 'should display tomorrow' do
183
- assert_equal '1 day', time_ago_in_words(1.day.from_now)
166
+ assert_equal '1 day', time_ago_in_words(Time.now + _DAY)
184
167
  end
185
168
  it 'should return future number of days' do
186
- assert_equal '4 days', time_ago_in_words(4.days.from_now)
169
+ assert_equal '4 days', time_ago_in_words(Time.now + 4*_DAY)
187
170
  end
188
171
  it 'should return past days ago' do
189
- assert_equal '4 days', time_ago_in_words(4.days.ago)
172
+ assert_equal '4 days', time_ago_in_words(Time.now - 4*_DAY)
190
173
  end
191
174
  it 'should return formatted archived date' do
192
- assert_equal '3 months', time_ago_in_words(100.days.ago)
175
+ assert_equal '3 months', time_ago_in_words(Time.now - 100*_DAY)
193
176
  end
194
177
  it 'should return formatted archived year date' do
195
- assert_equal 'over 1 year', time_ago_in_words(500.days.ago)
178
+ assert_equal 'over 1 year', time_ago_in_words(Time.now - 500*_DAY)
196
179
  end
197
180
  it 'should display now as a minute ago' do
198
- assert_equal '1 minute', time_ago_in_words(1.minute.ago)
181
+ assert_equal '1 minute', time_ago_in_words(Time.now - 60)
199
182
  end
200
183
  it 'should display a few minutes ago' do
201
- assert_equal '4 minutes', time_ago_in_words(4.minute.ago)
184
+ assert_equal '4 minutes', time_ago_in_words(Time.now - 4*60)
202
185
  end
203
186
  it 'should display an hour ago' do
204
- assert_equal 'about 1 hour', time_ago_in_words(1.hour.ago + 5.minutes.ago.sec)
187
+ assert_equal 'about 1 hour', time_ago_in_words(Time.now - 60*60 + 5)
205
188
  end
206
189
  it 'should display a few hours ago' do
207
- assert_equal 'about 3 hours', time_ago_in_words(3.hour.ago + 5.minutes.ago.sec)
208
- end
209
- it 'should display a day ago' do
210
- assert_equal '1 day', time_ago_in_words(1.day.ago)
190
+ assert_equal 'about 3 hours', time_ago_in_words(Time.now - 3*60*60 + 5*60)
211
191
  end
212
192
  it 'should display a few days ago' do
213
- assert_equal '5 days', time_ago_in_words(5.days.ago - 5.minutes.ago.sec)
193
+ assert_equal '5 days', time_ago_in_words(Time.now - 5*_DAY - 5*60)
214
194
  end
215
195
  it 'should display a month ago' do
216
- assert_equal 'about 1 month', time_ago_in_words(32.days.ago + 5.minutes.ago.sec)
196
+ assert_equal 'about 1 month', time_ago_in_words(Time.now - 32*_DAY + 5*60)
217
197
  end
218
198
  it 'should display a few months ago' do
219
- assert_equal '6 months', time_ago_in_words(180.days.ago - 5.minutes.ago.sec)
199
+ assert_equal '6 months', time_ago_in_words(Time.now - 180*_DAY - 5*60)
220
200
  end
221
201
  it 'should display a year ago' do
222
- assert_equal 'about 1 year', time_ago_in_words(365.days.ago - 5.minutes.ago.sec)
202
+ assert_equal 'about 1 year', time_ago_in_words(Time.now - 365*_DAY - 5*60)
223
203
  end
224
204
  it 'should display a few years ago' do
225
- assert_equal 'over 7 years', time_ago_in_words(2800.days.ago - 5.minutes.ago.sec)
205
+ assert_equal 'over 7 years', time_ago_in_words(Time.now - 2800*_DAY - 5*60)
226
206
  end
227
207
  end
228
208
 
data/test/test_helpers.rb CHANGED
@@ -7,4 +7,12 @@ describe "Padrino::Helpers" do
7
7
  end
8
8
  assert_equal '<div>bar</div>', Foo.new.content_tag(:div, 'bar')
9
9
  end
10
+
11
+ it 'should not overwrite default_builder setting' do
12
+ mock_app do
13
+ set :default_builder, 'FancyBuilder'
14
+ register Padrino::Helpers
15
+ end
16
+ assert_equal 'FancyBuilder', @app.default_builder
17
+ end
10
18
  end
@@ -8,150 +8,150 @@ describe "OutputHelpers" do
8
8
 
9
9
  describe 'for #content_for method' do
10
10
  it 'should work for erb templates' do
11
- visit '/erb/content_for'
12
- assert_have_selector '.demo h1', :content => "This is content yielded from a content_for", :count => 1
13
- assert_have_selector '.demo2 h1', :content => "This is content yielded with name Johnny Smith", :count => 1
14
- assert_have_no_selector '.demo3 p', :content => "One", :class => "duplication"
15
- assert_have_selector '.demo3 p', :content => "Two", :class => "duplication"
11
+ get "/erb/content_for"
12
+ assert_response_has_tag '.demo h1', :content => "This is content yielded from a content_for", :count => 1
13
+ assert_response_has_tag '.demo2 h1', :content => "This is content yielded with name Johnny Smith", :count => 1
14
+ assert_response_has_no_tag '.demo3 p', :content => "One", :class => "duplication"
15
+ assert_response_has_tag '.demo3 p', :content => "Two", :class => "duplication"
16
16
  end
17
17
 
18
18
  it 'should work for haml templates' do
19
- visit '/haml/content_for'
20
- assert_have_selector '.demo h1', :content => "This is content yielded from a content_for", :count => 1
21
- assert_have_selector '.demo2 h1', :content => "This is content yielded with name Johnny Smith", :count => 1
22
- assert_have_no_selector '.demo3 p', :content => "One", :class => "duplication"
23
- assert_have_selector '.demo3 p', :content => "Two", :class => "duplication"
19
+ get "/haml/content_for"
20
+ assert_response_has_tag '.demo h1', :content => "This is content yielded from a content_for", :count => 1
21
+ assert_response_has_tag '.demo2 h1', :content => "This is content yielded with name Johnny Smith", :count => 1
22
+ assert_response_has_no_tag '.demo3 p', :content => "One", :class => "duplication"
23
+ assert_response_has_tag '.demo3 p', :content => "Two", :class => "duplication"
24
24
  end
25
25
 
26
26
  it 'should work for slim templates' do
27
- visit '/slim/content_for'
28
- assert_have_selector '.demo h1', :content => "This is content yielded from a content_for", :count => 1
29
- assert_have_selector '.demo2 h1', :content => "This is content yielded with name Johnny Smith", :count => 1
30
- assert_have_no_selector '.demo3 p', :content => "One", :class => "duplication"
31
- assert_have_selector '.demo3 p', :content => "Two", :class => "duplication"
27
+ get "/slim/content_for"
28
+ assert_response_has_tag '.demo h1', :content => "This is content yielded from a content_for", :count => 1
29
+ assert_response_has_tag '.demo2 h1', :content => "This is content yielded with name Johnny Smith", :count => 1
30
+ assert_response_has_no_tag '.demo3 p', :content => "One", :class => "duplication"
31
+ assert_response_has_tag '.demo3 p', :content => "Two", :class => "duplication"
32
32
  end
33
33
  end # content_for
34
34
 
35
35
  describe "for #content_for? method" do
36
36
  it 'should work for erb templates' do
37
- visit '/erb/content_for'
38
- assert_have_selector '.demo_has_content', :content => "true"
39
- assert_have_selector '.fake_has_content', :content => "false"
37
+ get "/erb/content_for"
38
+ assert_response_has_tag '.demo_has_content', :content => "true"
39
+ assert_response_has_tag '.fake_has_content', :content => "false"
40
40
  end
41
41
 
42
42
  it 'should work for haml templates' do
43
- visit '/haml/content_for'
44
- assert_have_selector '.demo_has_content', :content => "true"
45
- assert_have_selector '.fake_has_content', :content => "false"
43
+ get "/haml/content_for"
44
+ assert_response_has_tag '.demo_has_content', :content => "true"
45
+ assert_response_has_tag '.fake_has_content', :content => "false"
46
46
  end
47
47
 
48
48
  it 'should work for slim templates' do
49
- visit '/slim/content_for'
50
- assert_have_selector '.demo_has_content', :content => "true"
51
- assert_have_selector '.fake_has_content', :content => "false"
49
+ get "/slim/content_for"
50
+ assert_response_has_tag '.demo_has_content', :content => "true"
51
+ assert_response_has_tag '.fake_has_content', :content => "false"
52
52
  end
53
53
  end # content_for?
54
54
 
55
55
  describe 'for #capture_html method' do
56
56
  it 'should work for erb templates' do
57
- visit '/erb/capture_concat'
58
- assert_have_selector 'p span', :content => "Captured Line 1", :count => 1
59
- assert_have_selector 'p span', :content => "Captured Line 2", :count => 1
57
+ get "/erb/capture_concat"
58
+ assert_response_has_tag 'p span', :content => "Captured Line 1", :count => 1
59
+ assert_response_has_tag 'p span', :content => "Captured Line 2", :count => 1
60
60
  end
61
61
 
62
62
  it 'should work for haml templates' do
63
- visit '/haml/capture_concat'
64
- assert_have_selector 'p span', :content => "Captured Line 1", :count => 1
65
- assert_have_selector 'p span', :content => "Captured Line 2", :count => 1
63
+ get "/haml/capture_concat"
64
+ assert_response_has_tag 'p span', :content => "Captured Line 1", :count => 1
65
+ assert_response_has_tag 'p span', :content => "Captured Line 2", :count => 1
66
66
  end
67
67
 
68
68
  it 'should work for slim templates' do
69
- visit '/slim/capture_concat'
70
- assert_have_selector 'p span', :content => "Captured Line 1", :count => 1
71
- assert_have_selector 'p span', :content => "Captured Line 2", :count => 1
69
+ get "/slim/capture_concat"
70
+ assert_response_has_tag 'p span', :content => "Captured Line 1", :count => 1
71
+ assert_response_has_tag 'p span', :content => "Captured Line 2", :count => 1
72
72
  end
73
73
  end
74
74
 
75
75
  describe 'for #concat_content method' do
76
76
  it 'should work for erb templates' do
77
- visit '/erb/capture_concat'
78
- assert_have_selector 'p', :content => "Concat Line 3", :count => 1
77
+ get "/erb/capture_concat"
78
+ assert_response_has_tag 'p', :content => "Concat Line 3", :count => 1
79
79
  end
80
80
 
81
81
  it 'should work for haml templates' do
82
- visit '/haml/capture_concat'
83
- assert_have_selector 'p', :content => "Concat Line 3", :count => 1
82
+ get "/haml/capture_concat"
83
+ assert_response_has_tag 'p', :content => "Concat Line 3", :count => 1
84
84
  end
85
85
 
86
86
  it 'should work for slim templates' do
87
- visit '/slim/capture_concat'
88
- assert_have_selector 'p', :content => "Concat Line 3", :count => 1
87
+ get "/slim/capture_concat"
88
+ assert_response_has_tag 'p', :content => "Concat Line 3", :count => 1
89
89
  end
90
90
  end
91
91
 
92
92
  describe 'for #block_is_template?' do
93
93
  it 'should work for erb templates' do
94
- visit '/erb/capture_concat'
95
- assert_have_selector 'p', :content => "The erb block passed in is a template", :class => 'is_template', :count => 1
96
- assert_have_no_selector 'p', :content => "The ruby block passed in is a template", :class => 'is_template', :count => 1
94
+ get "/erb/capture_concat"
95
+ assert_response_has_tag 'p', :content => "The erb block passed in is a template", :class => 'is_template', :count => 1
96
+ assert_response_has_no_tag 'p', :content => "The ruby block passed in is a template", :class => 'is_template', :count => 1
97
97
  end
98
98
 
99
99
  it 'should work for haml templates' do
100
- visit '/haml/capture_concat'
101
- assert_have_selector 'p', :content => "The haml block passed in is a template", :class => 'is_template', :count => 1
102
- assert_have_no_selector 'p', :content => "The ruby block passed in is a template", :class => 'is_template', :count => 1
100
+ get "/haml/capture_concat"
101
+ assert_response_has_tag 'p', :content => "The haml block passed in is a template", :class => 'is_template', :count => 1
102
+ assert_response_has_no_tag 'p', :content => "The ruby block passed in is a template", :class => 'is_template', :count => 1
103
103
  end
104
104
 
105
105
  it 'should work for slim templates' do
106
- visit '/slim/capture_concat'
107
- assert_have_selector 'p', :content => "The slim block passed in is a template", :class => 'is_template', :count => 1
108
- assert_have_no_selector 'p', :content => "The ruby block passed in is a template", :class => 'is_template', :count => 1
106
+ get "/slim/capture_concat"
107
+ assert_response_has_tag 'p', :content => "The slim block passed in is a template", :class => 'is_template', :count => 1
108
+ assert_response_has_no_tag 'p', :content => "The ruby block passed in is a template", :class => 'is_template', :count => 1
109
109
  end
110
110
  end
111
111
 
112
112
  describe 'for #current_engine method' do
113
113
  it 'should detect correctly current engine for erb' do
114
- visit '/erb/current_engine'
115
- assert_have_selector 'p.start', :content => "erb"
116
- assert_have_selector 'p.haml', :content => "haml"
117
- assert_have_selector 'p.erb', :content => "erb"
118
- assert_have_selector 'p.slim', :content => "slim"
119
- assert_have_selector 'p.end', :content => "erb"
114
+ get "/erb/current_engine"
115
+ assert_response_has_tag 'p.start', :content => "erb"
116
+ assert_response_has_tag 'p.haml', :content => "haml"
117
+ assert_response_has_tag 'p.erb', :content => "erb"
118
+ assert_response_has_tag 'p.slim', :content => "slim"
119
+ assert_response_has_tag 'p.end', :content => "erb"
120
120
  end
121
121
 
122
122
  it 'should detect correctly current engine for haml' do
123
- visit '/haml/current_engine'
124
- assert_have_selector 'p.start', :content => "haml"
125
- assert_have_selector 'p.haml', :content => "haml"
126
- assert_have_selector 'p.erb', :content => "erb"
127
- assert_have_selector 'p.slim', :content => "slim"
128
- assert_have_selector 'p.end', :content => "haml"
123
+ get "/haml/current_engine"
124
+ assert_response_has_tag 'p.start', :content => "haml"
125
+ assert_response_has_tag 'p.haml', :content => "haml"
126
+ assert_response_has_tag 'p.erb', :content => "erb"
127
+ assert_response_has_tag 'p.slim', :content => "slim"
128
+ assert_response_has_tag 'p.end', :content => "haml"
129
129
  end
130
130
 
131
131
  it 'should detect correctly current engine for slim' do
132
- visit '/slim/current_engine'
133
- assert_have_selector 'p.start', :content => "slim"
134
- assert_have_selector 'p.haml', :content => "haml"
135
- assert_have_selector 'p.erb', :content => "erb"
136
- assert_have_selector 'p.slim', :content => "slim"
137
- assert_have_selector 'p.end', :content => "slim"
132
+ get "/slim/current_engine"
133
+ assert_response_has_tag 'p.start', :content => "slim"
134
+ assert_response_has_tag 'p.haml', :content => "haml"
135
+ assert_response_has_tag 'p.erb', :content => "erb"
136
+ assert_response_has_tag 'p.slim', :content => "slim"
137
+ assert_response_has_tag 'p.end', :content => "slim"
138
138
  end
139
139
  end
140
140
 
141
141
  describe 'for #partial method in simple sinatra application' do
142
142
  it 'should properly output in erb' do
143
- visit '/erb/simple_partial'
144
- assert_have_selector 'p.erb', :content => "erb"
143
+ get "/erb/simple_partial"
144
+ assert_response_has_tag 'p.erb', :content => "erb"
145
145
  end
146
146
 
147
147
  it 'should properly output in haml' do
148
- visit '/haml/simple_partial'
149
- assert_have_selector 'p.haml', :content => "haml"
148
+ get "/haml/simple_partial"
149
+ assert_response_has_tag 'p.haml', :content => "haml"
150
150
  end
151
151
 
152
152
  it 'should properly output in slim' do
153
- visit '/slim/simple_partial'
154
- assert_have_selector 'p.slim', :content => "slim"
153
+ get "/slim/simple_partial"
154
+ assert_response_has_tag 'p.slim', :content => "slim"
155
155
  end
156
156
  end
157
157
  end
@@ -7,219 +7,261 @@ describe "RenderHelpers" do
7
7
  end
8
8
 
9
9
  describe 'for #partial method and object' do
10
- before { visit '/partial/object' }
10
+ before { get "/partial/object" }
11
11
  it 'should render partial html with object' do
12
- assert_have_selector "h1", :content => "User name is John"
12
+ assert_response_has_tag "h1", :content => "User name is John"
13
13
  end
14
14
  it 'should have no counter index for single item' do
15
- assert_have_no_selector "p", :content => "My counter is 1", :count => 1
15
+ assert_response_has_no_tag "p", :content => "My counter is 1", :count => 1
16
16
  end
17
17
  it 'should include extra locals information' do
18
- assert_have_selector 'p', :content => "Extra is bar"
18
+ assert_response_has_tag 'p', :content => "Extra is bar"
19
19
  end
20
20
  end
21
21
 
22
22
  describe 'for #partial method and collection' do
23
- before { visit '/partial/collection' }
23
+ before { get "/partial/collection" }
24
24
  it 'should render partial html with collection' do
25
- assert_have_selector "h1", :content => "User name is John"
26
- assert_have_selector "h1", :content => "User name is Billy"
25
+ assert_response_has_tag "h1", :content => "User name is John"
26
+ assert_response_has_tag "h1", :content => "User name is Billy"
27
27
  end
28
28
  it 'should include counter which contains item index' do
29
- assert_have_selector "p", :content => "My counter is 1"
30
- assert_have_selector "p", :content => "My counter is 2"
29
+ assert_response_has_tag "p", :content => "My counter is 1"
30
+ assert_response_has_tag "p", :content => "My counter is 2"
31
31
  end
32
32
  it 'should include extra locals information' do
33
- assert_have_selector 'p', :content => "Extra is bar"
33
+ assert_response_has_tag 'p', :content => "Extra is bar"
34
34
  end
35
35
  end
36
36
 
37
37
  describe 'for #partial with ext and collection' do
38
- before { visit '/partial/collection.ext' }
38
+ before { get "/partial/collection.ext" }
39
39
  it 'should not fail horribly with `invalid locals key` RuntimeError' do
40
- assert_have_selector "h1", :content => "User name is John"
40
+ assert_response_has_tag "h1", :content => "User name is John"
41
41
  end
42
42
  end
43
43
 
44
44
  describe 'for #partial method and locals' do
45
- before { visit '/partial/locals' }
45
+ before { get "/partial/locals" }
46
46
  it 'should render partial html with locals' do
47
- assert_have_selector "h1", :content => "User name is John"
47
+ assert_response_has_tag "h1", :content => "User name is John"
48
48
  end
49
49
  it 'should have no counter index for single item' do
50
- assert_have_no_selector "p", :content => "My counter is 1", :count => 1
50
+ assert_response_has_no_tag "p", :content => "My counter is 1", :count => 1
51
51
  end
52
52
  it 'should include extra locals information' do
53
- assert_have_selector 'p', :content => "Extra is bar"
53
+ assert_response_has_tag 'p', :content => "Extra is bar"
54
54
  end
55
55
  end
56
56
 
57
57
  describe 'for #partial method taking a path starting with forward slash' do
58
- before { visit '/partial/foward_slash' }
58
+ before { get "/partial/foward_slash" }
59
59
  it 'should render partial without throwing an error' do
60
- assert_have_selector "h1", :content => "User name is John"
60
+ assert_response_has_tag "h1", :content => "User name is John"
61
61
  end
62
62
  end
63
63
 
64
64
  describe 'for #partial method with unsafe engine' do
65
65
  it 'should render partial without escaping it' do
66
- visit '/partial/unsafe'
67
- assert_have_selector "h1", :content => "User name is John"
66
+ get "/partial/unsafe"
67
+ assert_response_has_tag "h1", :content => "User name is John"
68
68
  end
69
69
  it 'should render partial object without escaping it' do
70
- visit '/partial/unsafe_one'
71
- assert_have_selector "h1", :content => "User name is Mary"
70
+ get "/partial/unsafe_one"
71
+ assert_response_has_tag "h1", :content => "User name is Mary"
72
72
  end
73
73
  it 'should render partial collection without escaping it' do
74
- visit '/partial/unsafe_many'
75
- assert_have_selector "h1", :content => "User name is John"
76
- assert_have_selector "h1", :content => "User name is Mary"
74
+ get "/partial/unsafe_many"
75
+ assert_response_has_tag "h1", :content => "User name is John"
76
+ assert_response_has_tag "h1", :content => "User name is Mary"
77
77
  end
78
78
  it 'should render unsafe partial without escaping it' do
79
- visit '/partial/unsafe?block=%3Cevil%3E'
80
- assert_have_selector "h1", :content => "User name is John"
81
- assert_have_selector "evil"
79
+ get "/partial/unsafe?block=%3Cevil%3E"
80
+ assert_response_has_tag "h1", :content => "User name is John"
81
+ assert_response_has_tag "evil"
82
82
  end
83
83
  it 'should render unsafe partial object without escaping it' do
84
- visit '/partial/unsafe_one?block=%3Cevil%3E'
85
- assert_have_selector "h1", :content => "User name is Mary"
86
- assert_have_selector "evil"
84
+ get "/partial/unsafe_one?block=%3Cevil%3E"
85
+ assert_response_has_tag "h1", :content => "User name is Mary"
86
+ assert_response_has_tag "evil"
87
87
  end
88
88
  it 'should render unsafe partial collection without escaping it' do
89
- visit '/partial/unsafe_many?block=%3Cevil%3E'
90
- assert_have_selector "h1", :content => "User name is John"
91
- assert_have_selector "h1", :content => "User name is Mary"
92
- assert_have_selector "evil"
89
+ get "/partial/unsafe_many?block=%3Cevil%3E"
90
+ assert_response_has_tag "h1", :content => "User name is John"
91
+ assert_response_has_tag "h1", :content => "User name is Mary"
92
+ assert_response_has_tag "evil"
93
93
  end
94
94
  end
95
95
 
96
96
  describe 'render with block' do
97
97
  it 'should render slim with block' do
98
- visit '/render_block_slim'
99
- assert_have_selector 'h1', :content => 'prefix'
100
- assert_have_selector 'h3', :content => 'postfix'
101
- assert_have_selector '.slim-block'
102
- assert_have_selector 'div', :content => 'go block!'
98
+ get "/render_block_slim"
99
+ assert_response_has_tag 'h1', :content => 'prefix'
100
+ assert_response_has_tag 'h3', :content => 'postfix'
101
+ assert_response_has_tag '.slim-block'
102
+ assert_response_has_tag 'div', :content => 'go block!'
103
103
  end
104
104
  it 'should render erb with block' do
105
- visit '/render_block_erb'
106
- assert_have_selector 'h1', :content => 'prefix'
107
- assert_have_selector 'h3', :content => 'postfix'
108
- assert_have_selector '.erb-block'
109
- assert_have_selector 'div', :content => 'go block!'
105
+ get "/render_block_erb"
106
+ assert_response_has_tag 'h1', :content => 'prefix'
107
+ assert_response_has_tag 'h3', :content => 'postfix'
108
+ assert_response_has_tag '.erb-block'
109
+ assert_response_has_tag 'div', :content => 'go block!'
110
110
  end
111
111
  it 'should render haml with block' do
112
- visit '/render_block_haml'
113
- assert_have_selector 'h1', :content => 'prefix'
114
- assert_have_selector 'h3', :content => 'postfix'
115
- assert_have_selector '.haml-block'
116
- assert_have_selector 'div', :content => 'go block!'
112
+ get "/render_block_haml"
113
+ assert_response_has_tag 'h1', :content => 'prefix'
114
+ assert_response_has_tag 'h3', :content => 'postfix'
115
+ assert_response_has_tag '.haml-block'
116
+ assert_response_has_tag 'div', :content => 'go block!'
117
117
  end
118
118
  end
119
119
 
120
120
  describe 'partial with block' do
121
121
  it 'should show partial slim with block' do
122
- visit '/partial_block_slim'
123
- assert_have_selector 'h1', :content => 'prefix'
124
- assert_have_selector 'h3', :content => 'postfix'
125
- assert_have_selector '.slim-block'
126
- assert_have_selector 'div', :content => 'go block!'
127
- assert_have_selector 'div.deep', :content => 'Done'
122
+ get "/partial_block_slim"
123
+ assert_response_has_tag 'h1', :content => 'prefix'
124
+ assert_response_has_tag 'h3', :content => 'postfix'
125
+ assert_response_has_tag '.slim-block'
126
+ assert_response_has_tag 'div', :content => 'go block!'
127
+ assert_response_has_tag 'div.deep', :content => 'Done'
128
128
  end
129
129
  it 'should show partial erb with block' do
130
- visit '/partial_block_erb'
131
- assert_have_selector 'h1', :content => 'prefix'
132
- assert_have_selector 'h3', :content => 'postfix'
133
- assert_have_selector '.erb-block'
134
- assert_have_selector 'div', :content => 'go block!'
135
- assert_have_selector 'div.deep', :content => 'Done'
130
+ get "/partial_block_erb"
131
+ assert_response_has_tag 'h1', :content => 'prefix'
132
+ assert_response_has_tag 'h3', :content => 'postfix'
133
+ assert_response_has_tag '.erb-block'
134
+ assert_response_has_tag 'div', :content => 'go block!'
135
+ assert_response_has_tag 'div.deep', :content => 'Done'
136
136
  end
137
137
  it 'should show partial haml with block' do
138
- visit '/partial_block_haml'
139
- assert_have_selector 'h1', :content => 'prefix'
140
- assert_have_selector 'h3', :content => 'postfix'
141
- assert_have_selector '.haml-block'
142
- assert_have_selector 'div', :content => 'go block!'
143
- assert_have_selector 'div.deep', :content => 'Done'
138
+ get "/partial_block_haml"
139
+ assert_response_has_tag 'h1', :content => 'prefix'
140
+ assert_response_has_tag 'h3', :content => 'postfix'
141
+ assert_response_has_tag '.haml-block'
142
+ assert_response_has_tag 'div', :content => 'go block!'
143
+ assert_response_has_tag 'div.deep', :content => 'Done'
144
144
  end
145
145
  end
146
146
 
147
147
  describe 'for #current_engine method' do
148
148
  it 'should detect correctly current engine for a padrino application' do
149
- visit '/current_engine'
150
- assert_have_selector 'p.start', :content => "haml"
151
- assert_have_selector 'p.haml span', :content => "haml"
152
- assert_have_selector 'p.erb span', :content => "erb"
153
- assert_have_selector 'p.slim span', :content => "slim"
154
- assert_have_selector 'p.end', :content => "haml"
149
+ get "/current_engine"
150
+ assert_response_has_tag 'p.start', :content => "haml"
151
+ assert_response_has_tag 'p.haml span', :content => "haml"
152
+ assert_response_has_tag 'p.erb span', :content => "erb"
153
+ assert_response_has_tag 'p.slim span', :content => "slim"
154
+ assert_response_has_tag 'p.end', :content => "haml"
155
155
  end
156
156
 
157
157
  it 'should detect correctly current engine for explicit engine on partials' do
158
- visit '/explicit_engine'
159
- assert_have_selector 'p.start', :content => "haml"
160
- assert_have_selector 'p.haml span', :content => "haml"
161
- assert_have_selector 'p.erb span', :content => "erb"
162
- assert_have_selector 'p.slim span', :content => "slim"
163
- assert_have_selector 'p.end', :content => "haml"
158
+ get "/explicit_engine"
159
+ assert_response_has_tag 'p.start', :content => "haml"
160
+ assert_response_has_tag 'p.haml span', :content => "haml"
161
+ assert_response_has_tag 'p.erb span', :content => "erb"
162
+ assert_response_has_tag 'p.slim span', :content => "slim"
163
+ assert_response_has_tag 'p.end', :content => "haml"
164
164
  end
165
165
 
166
166
  it 'should capture slim template once and only once' do
167
167
  $number_of_captures = 0
168
- visit '/double_capture_slim'
168
+ get "/double_capture_slim"
169
169
  assert_equal 1,$number_of_captures
170
170
  end
171
171
 
172
172
  it 'should capture haml template once and only once' do
173
173
  $number_of_captures = 0
174
- visit '/double_capture_haml'
174
+ get "/double_capture_haml"
175
175
  assert_equal 1,$number_of_captures
176
176
  end
177
177
 
178
178
  it 'should capture erb template once and only once' do
179
179
  $number_of_captures = 0
180
- visit '/double_capture_erb'
180
+ get "/double_capture_erb"
181
181
  assert_equal 1,$number_of_captures
182
182
  end
183
183
 
184
184
  it 'should fail on wrong erb usage' do
185
185
  assert_raises(SyntaxError) do
186
- visit '/wrong_capture_erb'
186
+ get "/wrong_capture_erb"
187
187
  end
188
188
  end
189
189
 
190
190
  it 'should ignore wrong haml usage' do
191
- visit '/wrong_capture_haml'
192
- assert_have_no_selector 'p', :content => 'this is wrong'
191
+ get "/wrong_capture_haml"
192
+ assert_response_has_no_tag 'p', :content => 'this is wrong'
193
193
  end
194
194
 
195
195
  it 'should ignore wrong slim usage' do
196
- visit '/wrong_capture_slim'
197
- assert_have_no_selector 'p', :content => 'this is wrong'
196
+ get "/wrong_capture_slim"
197
+ assert_response_has_no_tag 'p', :content => 'this is wrong'
198
198
  end
199
199
 
200
200
  it 'should support weird ruby blocks in erb' do
201
- visit '/ruby_block_capture_erb'
202
- assert_have_selector 'b', :content => 'c'
201
+ get "/ruby_block_capture_erb"
202
+ assert_response_has_tag 'b', :content => 'c'
203
203
  end
204
204
 
205
205
  it 'should support weird ruby blocks in haml' do
206
- visit '/ruby_block_capture_haml'
207
- assert_have_selector 'b', :content => 'c'
206
+ get "/ruby_block_capture_haml"
207
+ assert_response_has_tag 'b', :content => 'c'
208
208
  end
209
209
 
210
210
  it 'should support weird ruby blocks in slim' do
211
- visit '/ruby_block_capture_slim'
212
- assert_have_selector 'b', :content => 'c'
211
+ get "/ruby_block_capture_slim"
212
+ assert_response_has_tag 'b', :content => 'c'
213
213
  end
214
214
  end
215
215
 
216
- describe 'rendering with helpers that use render' do
217
- %W{erb haml slim}.each do |engine|
218
- it "should work with #{engine}" do
219
- skip
220
- visit "/double_dive_#{engine}"
221
- assert_have_selector '.outer .wrapper form .inner .core'
216
+ describe 'standalone partial rendering' do
217
+ it 'should properly render without Sinatra::Base or Padrino::Application' do
218
+ class Standalone
219
+ include Padrino::Helpers::RenderHelpers
222
220
  end
221
+ locals = { :user => OpenStruct.new(:name => 'Joe') }
222
+ result = Standalone.new.partial(File.join(File.dirname(__FILE__), 'fixtures/render_app/views/template/user'), :engine => :haml, :locals => locals)
223
+ assert_equal '<h1>User name is Joe</h1>', result.chomp
224
+ end
225
+
226
+ it 'should pass class context to renderer' do
227
+ class Standalone1
228
+ include Padrino::Helpers::RenderHelpers
229
+ def user
230
+ OpenStruct.new(:name => 'Jane')
231
+ end
232
+ end
233
+
234
+ result = Standalone1.new.partial(File.join(File.dirname(__FILE__), 'fixtures/render_app/views/template/user.haml'))
235
+ assert_equal '<h1>User name is Jane</h1>', result.chomp
236
+ end
237
+
238
+ it 'should fail on missing template' do
239
+ class Standalone2
240
+ include Padrino::Helpers::RenderHelpers
241
+ end
242
+ assert_raises RuntimeError do
243
+ result = Standalone2.new.partial('none')
244
+ end
245
+ end
246
+
247
+ it 'should not override existing render methods' do
248
+ class Standalone3
249
+ def render(*)
250
+ 'existing'
251
+ end
252
+ include Padrino::Helpers::RenderHelpers
253
+ end
254
+ assert_equal 'existing', Standalone3.new.partial('none')
255
+ end
256
+
257
+ it 'should not add "./" to partial template name' do
258
+ class Standalone4
259
+ def render(_, file, *)
260
+ file.to_s
261
+ end
262
+ include Padrino::Helpers::RenderHelpers
263
+ end
264
+ assert_equal '_none', Standalone4.new.partial('none')
223
265
  end
224
266
  end
225
267
  end