slim 2.1.0 → 3.0.0.beta.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +10 -24
- data/CHANGES +8 -0
- data/Gemfile +5 -7
- data/README.jp.md +29 -31
- data/README.md +34 -34
- data/Rakefile +9 -7
- data/benchmarks/context.rb +3 -3
- data/benchmarks/run-benchmarks.rb +9 -9
- data/benchmarks/view.slim +1 -1
- data/doc/jp/logic_less.md +7 -7
- data/doc/logic_less.md +7 -7
- data/lib/slim/command.rb +6 -16
- data/lib/slim/embedded.rb +10 -13
- data/lib/slim/engine.rb +21 -23
- data/lib/slim/erb_converter.rb +2 -1
- data/lib/slim/include.rb +2 -2
- data/lib/slim/logic_less.rb +1 -2
- data/lib/slim/logic_less/filter.rb +3 -3
- data/lib/slim/parser.rb +43 -19
- data/lib/slim/smart.rb +3 -3
- data/lib/slim/smart/escaper.rb +1 -1
- data/lib/slim/smart/filter.rb +3 -3
- data/lib/slim/smart/parser.rb +6 -4
- data/lib/slim/splat/builder.rb +9 -4
- data/lib/slim/splat/filter.rb +3 -4
- data/lib/slim/template.rb +5 -5
- data/lib/slim/translator.rb +12 -13
- data/lib/slim/version.rb +1 -1
- data/slim.gemspec +3 -1
- data/test/core/helper.rb +3 -3
- data/test/core/test_code_escaping.rb +14 -14
- data/test/core/test_code_evaluation.rb +1 -1
- data/test/core/test_code_output.rb +1 -1
- data/test/core/test_embedded_engines.rb +16 -16
- data/test/core/test_encoding.rb +4 -4
- data/test/core/test_html_attributes.rb +9 -9
- data/test/core/test_html_structure.rb +20 -20
- data/test/core/test_parser_errors.rb +1 -1
- data/test/core/test_pretty.rb +4 -4
- data/test/core/test_ruby_errors.rb +5 -5
- data/test/core/test_slim_template.rb +2 -2
- data/test/core/test_tabs.rb +5 -5
- data/test/core/test_thread_options.rb +4 -4
- data/test/core/test_unicode.rb +11 -13
- data/test/include/test_include.rb +2 -2
- data/test/literate/TESTS.md +37 -8
- data/test/literate/helper.rb +2 -2
- data/test/logic_less/test_logic_less.rb +37 -37
- data/test/rails/app/controllers/slim_controller.rb +3 -3
- data/test/rails/config/initializers/session_store.rb +1 -1
- data/test/rails/config/routes.rb +4 -4
- data/test/rails/test/test_slim.rb +9 -15
- data/test/smart/test_smart_text.rb +5 -9
- data/test/translator/test_translator.rb +14 -14
- metadata +7 -7
data/test/literate/TESTS.md
CHANGED
@@ -259,7 +259,7 @@ Hello, World!
|
|
259
259
|
You can also write loops like this
|
260
260
|
|
261
261
|
~~~ slim
|
262
|
-
- items = [{:
|
262
|
+
- items = [{name: 'table', price: 10}, {name: 'chair', price: 5}]
|
263
263
|
table#items
|
264
264
|
- for item in items do
|
265
265
|
tr
|
@@ -293,7 +293,7 @@ which renders as
|
|
293
293
|
The `do` keyword can be omitted.
|
294
294
|
|
295
295
|
~~~ slim
|
296
|
-
- items = [{:
|
296
|
+
- items = [{name: 'table', price: 10}, {name: 'chair', price: 5}]
|
297
297
|
table#items
|
298
298
|
- for item in items
|
299
299
|
tr
|
@@ -1099,7 +1099,7 @@ with the :tag key.
|
|
1099
1099
|
~~~ slim
|
1100
1100
|
ruby:
|
1101
1101
|
def a_unless_current
|
1102
|
-
@page_current ? {:
|
1102
|
+
@page_current ? {tag: 'span'} : {tag: 'a', href: 'http://slim-lang.com/'}
|
1103
1103
|
end
|
1104
1104
|
- @page_current = true
|
1105
1105
|
*a_unless_current Link
|
@@ -1120,7 +1120,7 @@ renders as
|
|
1120
1120
|
We add tag shortcuts by setting the option `:shortcut`.
|
1121
1121
|
|
1122
1122
|
~~~ options
|
1123
|
-
:shortcut => {'c' => {:
|
1123
|
+
:shortcut => {'c' => {tag: 'container'}, 'sec' => {tag:'section'}, '#' => {attr: 'id'}, '.' => {attr: 'class'} }
|
1124
1124
|
~~~
|
1125
1125
|
|
1126
1126
|
~~~ slim
|
@@ -1140,7 +1140,7 @@ renders to
|
|
1140
1140
|
We add `&` to create a shortcut for the input elements with type attribute by setting the option `:shortcut`.
|
1141
1141
|
|
1142
1142
|
~~~ options
|
1143
|
-
:shortcut => {'&' => {:
|
1143
|
+
:shortcut => {'&' => {tag: 'input', attr: 'type'}, '#' => {attr: 'id'}, '.' => {attr: 'class'} }
|
1144
1144
|
~~~
|
1145
1145
|
|
1146
1146
|
~~~ slim
|
@@ -1158,7 +1158,7 @@ renders to
|
|
1158
1158
|
This is stupid, but you can also use multiple character shortcuts.
|
1159
1159
|
|
1160
1160
|
~~~ options
|
1161
|
-
:shortcut => {'&' => {:
|
1161
|
+
:shortcut => {'&' => {tag: 'input', attr: 'type'}, '#<' => {attr: 'id'}, '#>' => {attr: 'class'} }
|
1162
1162
|
~~~
|
1163
1163
|
|
1164
1164
|
~~~ slim
|
@@ -1176,7 +1176,7 @@ renders to
|
|
1176
1176
|
You can also set multiple attributes per shortcut.
|
1177
1177
|
|
1178
1178
|
~~~ options
|
1179
|
-
:shortcut => {'.' => {:
|
1179
|
+
:shortcut => {'.' => {attr: %w(id class)} }
|
1180
1180
|
~~~
|
1181
1181
|
|
1182
1182
|
~~~ slim
|
@@ -1192,7 +1192,7 @@ renders to
|
|
1192
1192
|
Shortcuts can also have multiple characters.
|
1193
1193
|
|
1194
1194
|
~~~ options
|
1195
|
-
:shortcut => {'.' => {:
|
1195
|
+
:shortcut => {'.' => {attr: 'class'}, '#' => {attr: 'id'}, '.#' => {attr: %w(class id)} }
|
1196
1196
|
~~~
|
1197
1197
|
|
1198
1198
|
~~~ slim
|
@@ -1254,6 +1254,35 @@ renders as
|
|
1254
1254
|
</h1>
|
1255
1255
|
~~~
|
1256
1256
|
|
1257
|
+
## Pretty printing of XML
|
1258
|
+
|
1259
|
+
We can enable XML mode with
|
1260
|
+
|
1261
|
+
~~~ options
|
1262
|
+
:format => :xml
|
1263
|
+
~~~
|
1264
|
+
|
1265
|
+
~~~ slim
|
1266
|
+
doctype xml
|
1267
|
+
document
|
1268
|
+
closed-element/
|
1269
|
+
element(boolean-attribute)
|
1270
|
+
child attribute="value"
|
1271
|
+
| content
|
1272
|
+
~~~
|
1273
|
+
|
1274
|
+
~~~ html
|
1275
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
1276
|
+
<document>
|
1277
|
+
<closed-element />
|
1278
|
+
<element boolean-attribute="">
|
1279
|
+
<child attribute="value">
|
1280
|
+
content
|
1281
|
+
</child>
|
1282
|
+
</element>
|
1283
|
+
</document>
|
1284
|
+
~~~
|
1285
|
+
|
1257
1286
|
## Embedded engines
|
1258
1287
|
|
1259
1288
|
## Configuring Slim
|
data/test/literate/helper.rb
CHANGED
@@ -4,9 +4,9 @@ require 'slim/translator'
|
|
4
4
|
require 'slim/grammar'
|
5
5
|
require 'minitest/autorun'
|
6
6
|
|
7
|
-
Slim::Engine.after Slim::Parser, Temple::Filters::Validator, :
|
7
|
+
Slim::Engine.after Slim::Parser, Temple::Filters::Validator, grammar: Slim::Grammar
|
8
8
|
Slim::Engine.before :Pretty, Temple::Filters::Validator
|
9
|
-
Slim::Engine.
|
9
|
+
Slim::Engine.set_options tr: false, logic_less: false
|
10
10
|
|
11
11
|
class MiniTest::Spec
|
12
12
|
def render(source, options = {}, &block)
|
@@ -5,9 +5,9 @@ class TestSlimLogicLess < TestSlim
|
|
5
5
|
class Scope
|
6
6
|
def initialize
|
7
7
|
@hash = {
|
8
|
-
:
|
9
|
-
{ :
|
10
|
-
{ :
|
8
|
+
person: [
|
9
|
+
{ name: 'Joe', age: 1, selected: true },
|
10
|
+
{ name: 'Jack', age: 2 }
|
11
11
|
]
|
12
12
|
}
|
13
13
|
end
|
@@ -25,22 +25,22 @@ p
|
|
25
25
|
}
|
26
26
|
|
27
27
|
hash = {
|
28
|
-
:
|
29
|
-
:
|
28
|
+
hello: 'Hello!',
|
29
|
+
person: lambda do |&block|
|
30
30
|
%w(Joe Jack).map do |name|
|
31
|
-
"<b>#{block.call(:
|
31
|
+
"<b>#{block.call(name: name)}</b>"
|
32
32
|
end.join
|
33
33
|
end,
|
34
|
-
:
|
34
|
+
simple: lambda do |&block|
|
35
35
|
"<div class=\"simple\">#{block.call}</div>"
|
36
36
|
end,
|
37
|
-
:
|
38
|
-
list = [{:
|
37
|
+
list: lambda do |&block|
|
38
|
+
list = [{key: 'First'}, {key: 'Second'}]
|
39
39
|
"<ul>#{block.call(*list)}</ul>"
|
40
40
|
end
|
41
41
|
}
|
42
42
|
|
43
|
-
assert_html '<p><b><div class="name">Joe</div></b><b><div class="name">Jack</div></b><div class="simple"><div class="hello">Hello!</div></div><ul><li>First</li><li>Second</li></ul></p>', source, :
|
43
|
+
assert_html '<p><b><div class="name">Joe</div></b><b><div class="name">Jack</div></b><div class="simple"><div class="hello">Hello!</div></div><ul><li>First</li><li>Second</li></ul></p>', source, scope: hash
|
44
44
|
end
|
45
45
|
|
46
46
|
def test_symbol_hash
|
@@ -51,13 +51,13 @@ p
|
|
51
51
|
}
|
52
52
|
|
53
53
|
hash = {
|
54
|
-
:
|
55
|
-
{ :
|
56
|
-
{ :
|
54
|
+
person: [
|
55
|
+
{ name: 'Joe', },
|
56
|
+
{ name: 'Jack', }
|
57
57
|
]
|
58
58
|
}
|
59
59
|
|
60
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :
|
60
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: hash
|
61
61
|
end
|
62
62
|
|
63
63
|
def test_string_access
|
@@ -74,7 +74,7 @@ p
|
|
74
74
|
]
|
75
75
|
}
|
76
76
|
|
77
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :
|
77
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: hash, dictionary_access: :string
|
78
78
|
end
|
79
79
|
|
80
80
|
def test_symbol_access
|
@@ -85,13 +85,13 @@ p
|
|
85
85
|
}
|
86
86
|
|
87
87
|
hash = {
|
88
|
-
:
|
89
|
-
{ :
|
90
|
-
{ :
|
88
|
+
person: [
|
89
|
+
{ name: 'Joe', },
|
90
|
+
{ name: 'Jack', }
|
91
91
|
]
|
92
92
|
}
|
93
93
|
|
94
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :
|
94
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: hash, dictionary_access: :symbol
|
95
95
|
end
|
96
96
|
|
97
97
|
def test_method_access
|
@@ -113,7 +113,7 @@ p
|
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
116
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :
|
116
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: object, dictionary_access: :method
|
117
117
|
end
|
118
118
|
|
119
119
|
def test_instance_variable_access
|
@@ -130,7 +130,7 @@ p
|
|
130
130
|
person
|
131
131
|
end)
|
132
132
|
|
133
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :
|
133
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: object, dictionary_access: :instance_variable
|
134
134
|
end
|
135
135
|
|
136
136
|
def test_to_s_access
|
@@ -141,13 +141,13 @@ p
|
|
141
141
|
}
|
142
142
|
|
143
143
|
hash = {
|
144
|
-
:
|
144
|
+
people: [
|
145
145
|
'Joe',
|
146
146
|
'Jack'
|
147
147
|
]
|
148
148
|
}
|
149
149
|
|
150
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :
|
150
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: hash, dictionary_access: :symbol
|
151
151
|
end
|
152
152
|
|
153
153
|
def test_string_hash
|
@@ -164,7 +164,7 @@ p
|
|
164
164
|
]
|
165
165
|
}
|
166
166
|
|
167
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :
|
167
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: hash
|
168
168
|
end
|
169
169
|
|
170
170
|
def test_dictionary_option
|
@@ -174,7 +174,7 @@ p
|
|
174
174
|
.name = name
|
175
175
|
}
|
176
176
|
|
177
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :
|
177
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: Scope.new, dictionary: '@hash'
|
178
178
|
end
|
179
179
|
|
180
180
|
def test_flag_section
|
@@ -188,14 +188,14 @@ p
|
|
188
188
|
}
|
189
189
|
|
190
190
|
hash = {
|
191
|
-
:
|
192
|
-
:
|
193
|
-
{ :
|
194
|
-
{ :
|
191
|
+
show_person: true,
|
192
|
+
person: [
|
193
|
+
{ name: 'Joe', },
|
194
|
+
{ name: 'Jack', }
|
195
195
|
]
|
196
196
|
}
|
197
197
|
|
198
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div>shown</p>', source, :
|
198
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div>shown</p>', source, scope: hash
|
199
199
|
end
|
200
200
|
|
201
201
|
def test_inverted_section
|
@@ -211,7 +211,7 @@ p
|
|
211
211
|
|
212
212
|
hash = {}
|
213
213
|
|
214
|
-
assert_html '<p>No person No person 2</p>', source, :
|
214
|
+
assert_html '<p>No person No person 2</p>', source, scope: hash
|
215
215
|
end
|
216
216
|
|
217
217
|
def test_escaped_interpolation
|
@@ -232,7 +232,7 @@ p
|
|
232
232
|
Person
|
233
233
|
}
|
234
234
|
|
235
|
-
assert_html '<p><b name="Joe">Person</b><a id="Joe">1</a><span class="Joe"><Person></Person></span><b name="Jack">Person</b><a id="Jack">2</a><span class="Jack"><Person></Person></span></p>', source, :
|
235
|
+
assert_html '<p><b name="Joe">Person</b><a id="Joe">1</a><span class="Joe"><Person></Person></span><b name="Jack">Person</b><a id="Jack">2</a><span class="Jack"><Person></Person></span></p>', source, scope: Scope.new, dictionary: '@hash'
|
236
236
|
end
|
237
237
|
|
238
238
|
def test_boolean_attributes
|
@@ -242,7 +242,7 @@ p
|
|
242
242
|
input checked=selected = name
|
243
243
|
}
|
244
244
|
|
245
|
-
assert_html '<p><input checked="">Joe</input><input>Jack</input></p>', source, :
|
245
|
+
assert_html '<p><input checked="">Joe</input><input>Jack</input></p>', source, scope: Scope.new, dictionary: '@hash'
|
246
246
|
end
|
247
247
|
|
248
248
|
def test_sections
|
@@ -251,7 +251,7 @@ p
|
|
251
251
|
- person
|
252
252
|
.name = name
|
253
253
|
}
|
254
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :
|
254
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, dictionary: 'ViewEnv.new'
|
255
255
|
end
|
256
256
|
|
257
257
|
def test_with_array
|
@@ -261,14 +261,14 @@ ul
|
|
261
261
|
li = name
|
262
262
|
li = city
|
263
263
|
}
|
264
|
-
assert_html '<ul><li>Andy</li><li>Atlanta</li><li>Fred</li><li>Melbourne</li><li>Daniel</li><li>Karlsruhe</li></ul>', source, :
|
264
|
+
assert_html '<ul><li>Andy</li><li>Atlanta</li><li>Fred</li><li>Melbourne</li><li>Daniel</li><li>Karlsruhe</li></ul>', source, dictionary: 'ViewEnv.new'
|
265
265
|
end
|
266
266
|
|
267
267
|
def test_method
|
268
268
|
source = %q{
|
269
269
|
a href=output_number Link
|
270
270
|
}
|
271
|
-
assert_html '<a href="1337">Link</a>', source, :
|
271
|
+
assert_html '<a href="1337">Link</a>', source, dictionary: 'ViewEnv.new'
|
272
272
|
end
|
273
273
|
|
274
274
|
def test_conditional_parent
|
@@ -279,7 +279,7 @@ a href=output_number Link
|
|
279
279
|
- next_page
|
280
280
|
li.next
|
281
281
|
a href=next_page Newer}
|
282
|
-
assert_html'<li class="previous"><a href="prev">Older</a></li><li class="next"><a href="next">Newer</a></li>', source, :
|
282
|
+
assert_html'<li class="previous"><a href="prev">Older</a></li><li class="next"><a href="next">Newer</a></li>', source, scope: {prev_page: 'prev', next_page: 'next'}
|
283
283
|
end
|
284
284
|
|
285
285
|
def test_render_with_yield
|
@@ -6,7 +6,7 @@ class SlimController < ApplicationController
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def no_layout
|
9
|
-
render :
|
9
|
+
render layout: false
|
10
10
|
end
|
11
11
|
|
12
12
|
def variables
|
@@ -18,7 +18,7 @@ class SlimController < ApplicationController
|
|
18
18
|
|
19
19
|
def streaming
|
20
20
|
@hello = "Hello Streaming!"
|
21
|
-
render :content_for, :
|
21
|
+
render :content_for, stream: true
|
22
22
|
end
|
23
23
|
|
24
24
|
def integers
|
@@ -26,7 +26,7 @@ class SlimController < ApplicationController
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def thread_options
|
29
|
-
Slim::Engine.with_options(:
|
29
|
+
Slim::Engine.with_options(shortcut: {'@' => { attr: params[:attr] }}) do
|
30
30
|
render
|
31
31
|
end
|
32
32
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# Be sure to restart your server when you modify this file.
|
2
2
|
|
3
|
-
Dummy::Application.config.session_store :cookie_store, :
|
3
|
+
Dummy::Application.config.session_store :cookie_store, key: '_dummy_session'
|
4
4
|
|
5
5
|
# Use the database for sessions instead of the cookie-based default,
|
6
6
|
# which shouldn't be used to store highly confidential information
|
data/test/rails/config/routes.rb
CHANGED
@@ -9,8 +9,8 @@ Dummy::Application.routes.draw do
|
|
9
9
|
# Keep in mind you can assign values other than :controller and :action
|
10
10
|
|
11
11
|
# Sample of named route:
|
12
|
-
# match 'products/:id/purchase' => 'catalog#purchase', :
|
13
|
-
# This route can be invoked with purchase_url(:
|
12
|
+
# match 'products/:id/purchase' => 'catalog#purchase', as: :purchase
|
13
|
+
# This route can be invoked with purchase_url(id: product.id)
|
14
14
|
|
15
15
|
# Sample resource route (maps HTTP verbs to controller actions automatically):
|
16
16
|
# resources :products
|
@@ -37,7 +37,7 @@ Dummy::Application.routes.draw do
|
|
37
37
|
# resources :products do
|
38
38
|
# resources :comments
|
39
39
|
# resources :sales do
|
40
|
-
# get 'recent', :
|
40
|
+
# get 'recent', on: :collection
|
41
41
|
# end
|
42
42
|
# end
|
43
43
|
|
@@ -50,7 +50,7 @@ Dummy::Application.routes.draw do
|
|
50
50
|
|
51
51
|
# You can have the root of your site routed with "root"
|
52
52
|
# just remember to delete public/index.html.
|
53
|
-
# root :
|
53
|
+
# root to: "welcome#index"
|
54
54
|
|
55
55
|
# See how all your routes lay out with "rake routes"
|
56
56
|
|
@@ -33,7 +33,7 @@ class TestSlim < ActionDispatch::IntegrationTest
|
|
33
33
|
test "view without a layout" do
|
34
34
|
get "slim/no_layout"
|
35
35
|
assert_template "slim/no_layout"
|
36
|
-
assert_html "<h1>Hello Slim without a layout!</h1>", :
|
36
|
+
assert_html "<h1>Hello Slim without a layout!</h1>", skip_layout: true
|
37
37
|
end
|
38
38
|
|
39
39
|
test "view with variables" do
|
@@ -46,17 +46,11 @@ class TestSlim < ActionDispatch::IntegrationTest
|
|
46
46
|
assert_html "<h1>Hello Slim!</h1><p>With a partial!</p>"
|
47
47
|
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
get "slim/streaming"
|
55
|
-
output = "2f\r\n<!DOCTYPE html><html><head><title>Dummy</title>\r\nd\r\n</head><body>\r\n17\r\nHeading set from a view\r\n15\r\n<div class=\"content\">\r\n53\r\n<p>Page content</p><h1><p>Hello Streaming!</p></h1><h2><p>Hello Streaming!</p></h2>\r\n14\r\n</div></body></html>\r\n0\r\n\r\n"
|
56
|
-
assert_equal output, @response.body
|
57
|
-
end
|
58
|
-
else
|
59
|
-
puts 'Streaming test disabled'
|
49
|
+
puts 'Streaming test enabled'
|
50
|
+
test "streaming" do
|
51
|
+
get "slim/streaming"
|
52
|
+
output = "2f\r\n<!DOCTYPE html><html><head><title>Dummy</title>\r\nd\r\n</head><body>\r\n17\r\nHeading set from a view\r\n15\r\n<div class=\"content\">\r\n53\r\n<p>Page content</p><h1><p>Hello Streaming!</p></h1><h2><p>Hello Streaming!</p></h2>\r\n14\r\n</div></body></html>\r\n0\r\n\r\n"
|
53
|
+
assert_equal output, @response.body
|
60
54
|
end
|
61
55
|
|
62
56
|
test "render integers" do
|
@@ -65,15 +59,15 @@ class TestSlim < ActionDispatch::IntegrationTest
|
|
65
59
|
end
|
66
60
|
|
67
61
|
test "render thread_options" do
|
68
|
-
get "slim/thread_options", :
|
62
|
+
get "slim/thread_options", attr: 'role'
|
69
63
|
assert_html '<p role="empty">Test</p>'
|
70
|
-
get "slim/thread_options", :
|
64
|
+
get "slim/thread_options", attr: 'id' # Overwriting doesn't work because of caching
|
71
65
|
assert_html '<p role="empty">Test</p>'
|
72
66
|
end
|
73
67
|
|
74
68
|
test "content_for" do
|
75
69
|
get "slim/content_for"
|
76
|
-
assert_html "<p>Page content</p><h1><p>Hello Slim!</p></h1><h2><p>Hello Slim!</p></h2>", :
|
70
|
+
assert_html "<p>Page content</p><h1><p>Hello Slim!</p></h1><h2><p>Hello Slim!</p></h2>", heading: 'Heading set from a view'
|
77
71
|
end
|
78
72
|
|
79
73
|
test "form_for" do
|
@@ -112,7 +112,7 @@ Escaped &#xx; &#1f; &;.</p>}
|
|
112
112
|
end
|
113
113
|
|
114
114
|
def test_smart_text_disabled_escaping
|
115
|
-
Slim::Engine.with_options( :
|
115
|
+
Slim::Engine.with_options( smart_text_escaping: false ) do
|
116
116
|
source = %q{
|
117
117
|
p Not escaped <&>.
|
118
118
|
| Not escaped <&>.
|
@@ -250,7 +250,7 @@ which stops
|
|
250
250
|
|
251
251
|
assert_html result, source
|
252
252
|
end
|
253
|
-
|
253
|
+
|
254
254
|
# Without unicode support, we can't distinguish uppercase and lowercase
|
255
255
|
# unicode characters reliably. So we only test the basic text, not tag names.
|
256
256
|
def test_basic_unicode_smart_text
|
@@ -272,11 +272,8 @@ p
|
|
272
272
|
assert_html result, source
|
273
273
|
end
|
274
274
|
|
275
|
-
|
276
|
-
|
277
|
-
def test_unicode_smart_text
|
278
|
-
|
279
|
-
source = %q{
|
275
|
+
def test_unicode_smart_text
|
276
|
+
source = %q{
|
280
277
|
p
|
281
278
|
是
|
282
279
|
čip
|
@@ -294,7 +291,6 @@ p
|
|
294
291
|
šíp
|
295
292
|
<div class="řek">.</div></p>}
|
296
293
|
|
297
|
-
|
298
|
-
end
|
294
|
+
assert_html result, source
|
299
295
|
end
|
300
296
|
end
|