slim 0.6.1 → 0.7.0.beta.2
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/.gitignore +8 -0
- data/Gemfile +1 -6
- data/Gemfile.lock +20 -16
- data/README.md +137 -90
- data/Rakefile +9 -37
- data/benchmarks/run.rb +63 -0
- data/benchmarks/src/complex.erb +23 -0
- data/benchmarks/src/complex.haml +18 -0
- data/benchmarks/src/complex.slim +18 -0
- data/benchmarks/src/complex_view.rb +17 -0
- data/lib/slim.rb +15 -11
- data/lib/slim/compiler.rb +71 -137
- data/lib/slim/embedded_engine.rb +108 -0
- data/lib/slim/end_inserter.rb +57 -0
- data/lib/slim/engine.rb +16 -14
- data/lib/slim/filter.rb +44 -0
- data/lib/slim/helpers.rb +37 -0
- data/lib/slim/parser.rb +355 -0
- data/lib/slim/rails.rb +2 -2
- data/lib/slim/template.rb +18 -0
- data/lib/slim/version.rb +3 -0
- data/slim.gemspec +26 -66
- data/test/helper.rb +32 -4
- data/test/slim/test_code_blocks.rb +33 -0
- data/test/slim/test_code_escaping.rb +69 -0
- data/test/slim/test_code_evaluation.rb +199 -0
- data/test/slim/test_code_helpers.rb +12 -0
- data/test/slim/test_code_output.rb +116 -0
- data/test/slim/test_code_structure.rb +84 -0
- data/test/slim/test_embedded_engines.rb +55 -0
- data/test/slim/test_html_escaping.rb +32 -0
- data/test/slim/test_html_structure.rb +181 -0
- data/test/slim/test_parser_errors.rb +98 -0
- data/test/slim/test_slim_template.rb +128 -0
- data/vim/slim.vim +33 -0
- data/vim/test.slim +27 -0
- metadata +127 -34
- data/lib/slim/optimizer.rb +0 -70
- data/readme.html +0 -159
- data/test/slim/test_compiler.rb +0 -389
- data/test/slim/test_engine.rb +0 -458
- data/test/test_slim.rb +0 -4
data/test/slim/test_engine.rb
DELETED
@@ -1,458 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class TestSlimEngine < MiniTest::Unit::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
@env = Env.new
|
7
|
-
end
|
8
|
-
|
9
|
-
def test_simple_render
|
10
|
-
string = <<HTML
|
11
|
-
html
|
12
|
-
head
|
13
|
-
title Simple Test Title
|
14
|
-
body
|
15
|
-
p Hello World, meet Slim.
|
16
|
-
HTML
|
17
|
-
|
18
|
-
expected = "<html><head><title>Simple Test Title</title></head><body><p>Hello World, meet Slim.</p></body></html>"
|
19
|
-
|
20
|
-
assert_equal expected, Slim::Engine.new(string).render
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_render_with_conditional
|
24
|
-
string = <<HTML
|
25
|
-
div
|
26
|
-
- if show_first?
|
27
|
-
p The first paragraph
|
28
|
-
- else
|
29
|
-
p The second paragraph
|
30
|
-
HTML
|
31
|
-
|
32
|
-
expected = "<div><p>The second paragraph</p></div>"
|
33
|
-
|
34
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_render_with_consecutive_conditionals
|
38
|
-
string = <<HTML
|
39
|
-
div
|
40
|
-
- if show_first? true
|
41
|
-
p The first paragraph
|
42
|
-
- if show_first? true
|
43
|
-
p The second paragraph
|
44
|
-
HTML
|
45
|
-
|
46
|
-
expected = "<div><p>The first paragraph</p><p>The second paragraph</p></div>"
|
47
|
-
|
48
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_render_with_parameterized_conditional
|
52
|
-
string = <<HTML
|
53
|
-
div
|
54
|
-
- if show_first? false
|
55
|
-
p The first paragraph
|
56
|
-
- else
|
57
|
-
p The second paragraph
|
58
|
-
HTML
|
59
|
-
|
60
|
-
expected = "<div><p>The second paragraph</p></div>"
|
61
|
-
|
62
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_render_with_call
|
66
|
-
string = <<HTML
|
67
|
-
p
|
68
|
-
= hello_world
|
69
|
-
HTML
|
70
|
-
|
71
|
-
expected = "<p>Hello World from @env</p>"
|
72
|
-
|
73
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_render_with_conditional_call
|
77
|
-
string = <<HTML
|
78
|
-
p
|
79
|
-
= hello_world if true
|
80
|
-
HTML
|
81
|
-
|
82
|
-
expected = "<p>Hello World from @env</p>"
|
83
|
-
|
84
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_render_with_parameterized_call
|
88
|
-
string = <<HTML
|
89
|
-
p
|
90
|
-
= hello_world("Hello Ruby!")
|
91
|
-
HTML
|
92
|
-
|
93
|
-
expected = "<p>Hello Ruby!</p>"
|
94
|
-
|
95
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_render_with_spaced_parameterized_call
|
99
|
-
string = <<HTML
|
100
|
-
p
|
101
|
-
= hello_world "Hello Ruby!"
|
102
|
-
HTML
|
103
|
-
|
104
|
-
expected = "<p>Hello Ruby!</p>"
|
105
|
-
|
106
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_render_with_spaced_parameterized_call_2
|
110
|
-
string = <<HTML
|
111
|
-
p
|
112
|
-
= hello_world "Hello Ruby!", :dummy => "value"
|
113
|
-
HTML
|
114
|
-
|
115
|
-
expected = "<p>Hello Ruby!dummy value</p>"
|
116
|
-
|
117
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_render_with_call_and_inline_text
|
121
|
-
string = <<HTML
|
122
|
-
h1 This is my title
|
123
|
-
p
|
124
|
-
= hello_world
|
125
|
-
HTML
|
126
|
-
|
127
|
-
expected = "<h1>This is my title</h1><p>Hello World from @env</p>"
|
128
|
-
|
129
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
130
|
-
end
|
131
|
-
|
132
|
-
def test_render_with_call_to_set_attributes
|
133
|
-
string = <<HTML
|
134
|
-
p id="#\{id_helper}" class="hello world" = hello_world
|
135
|
-
HTML
|
136
|
-
|
137
|
-
expected = "<p id=\"notice\" class=\"hello world\">Hello World from @env</p>"
|
138
|
-
|
139
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_render_with_call_to_set_custom_attributes
|
143
|
-
string = <<HTML
|
144
|
-
p data-id="#\{id_helper}" data-class="hello world"
|
145
|
-
= hello_world
|
146
|
-
HTML
|
147
|
-
|
148
|
-
expected = "<p data-id=\"notice\" data-class=\"hello world\">Hello World from @env</p>"
|
149
|
-
|
150
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
151
|
-
end
|
152
|
-
|
153
|
-
def test_render_with_shortcut_attributes
|
154
|
-
string = <<HTML
|
155
|
-
h1#title This is my title
|
156
|
-
#notice.hello.world
|
157
|
-
= hello_world
|
158
|
-
HTML
|
159
|
-
|
160
|
-
expected = "<h1 id=\"title\">This is my title</h1><div id=\"notice\" class=\"hello world\">Hello World from @env</div>"
|
161
|
-
|
162
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_render_with_call_to_set_attributes_and_call_to_set_content
|
166
|
-
string = <<HTML
|
167
|
-
p id="#\{id_helper}" class="hello world" = hello_world
|
168
|
-
HTML
|
169
|
-
|
170
|
-
expected = "<p id=\"notice\" class=\"hello world\">Hello World from @env</p>"
|
171
|
-
|
172
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
173
|
-
end
|
174
|
-
|
175
|
-
def test_render_with_parameterized_call_to_set_attributes_and_call_to_set_content
|
176
|
-
string = <<HTML
|
177
|
-
p id="#\{id_helper}" class="hello world" = hello_world("Hello Ruby!")
|
178
|
-
HTML
|
179
|
-
|
180
|
-
expected = "<p id=\"notice\" class=\"hello world\">Hello Ruby!</p>"
|
181
|
-
|
182
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
183
|
-
end
|
184
|
-
|
185
|
-
def test_render_with_spaced_parameterized_call_to_set_attributes_and_call_to_set_content
|
186
|
-
string = <<HTML
|
187
|
-
p id="#\{id_helper}" class="hello world" = hello_world "Hello Ruby!"
|
188
|
-
HTML
|
189
|
-
|
190
|
-
expected = "<p id=\"notice\" class=\"hello world\">Hello Ruby!</p>"
|
191
|
-
|
192
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
193
|
-
end
|
194
|
-
|
195
|
-
def test_render_with_spaced_parameterized_call_to_set_attributes_and_call_to_set_content_2
|
196
|
-
string = <<HTML
|
197
|
-
p id="#\{id_helper}" class="hello world" = hello_world "Hello Ruby!", :dummy => "value"
|
198
|
-
HTML
|
199
|
-
|
200
|
-
expected = "<p id=\"notice\" class=\"hello world\">Hello Ruby!dummy value</p>"
|
201
|
-
|
202
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
203
|
-
end
|
204
|
-
|
205
|
-
def test_render_with_text_block
|
206
|
-
string = <<HTML
|
207
|
-
p
|
208
|
-
`
|
209
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
210
|
-
HTML
|
211
|
-
|
212
|
-
expected = "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>"
|
213
|
-
|
214
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
215
|
-
end
|
216
|
-
|
217
|
-
def test_render_with_text_block_with_subsequent_markup
|
218
|
-
string = <<HTML
|
219
|
-
p
|
220
|
-
`
|
221
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
222
|
-
p Some more markup
|
223
|
-
HTML
|
224
|
-
|
225
|
-
expected = "<p> Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p><p>Some more markup</p>"
|
226
|
-
|
227
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
228
|
-
end
|
229
|
-
|
230
|
-
def test_render_with_output_code_block
|
231
|
-
string = <<HTML
|
232
|
-
p
|
233
|
-
= hello_world "Hello Ruby!" do
|
234
|
-
| Hello from within a block!
|
235
|
-
HTML
|
236
|
-
|
237
|
-
expected = "<p>Hello from within a block!Hello Ruby!</p>"
|
238
|
-
|
239
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
240
|
-
end
|
241
|
-
|
242
|
-
def test_render_with_output_code_within_block
|
243
|
-
string = <<HTML
|
244
|
-
p
|
245
|
-
= hello_world "Hello Ruby!" do
|
246
|
-
= hello_world "Hello from within a block! "
|
247
|
-
HTML
|
248
|
-
|
249
|
-
expected = "<p>Hello from within a block! Hello Ruby!</p>"
|
250
|
-
|
251
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
252
|
-
end
|
253
|
-
|
254
|
-
def test_render_with_control_code_loop
|
255
|
-
string = <<HTML
|
256
|
-
p
|
257
|
-
- 3.times do
|
258
|
-
| Hey!
|
259
|
-
HTML
|
260
|
-
|
261
|
-
expected = "<p>Hey!Hey!Hey!</p>"
|
262
|
-
|
263
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
264
|
-
end
|
265
|
-
|
266
|
-
def test_render_with_inline_condition
|
267
|
-
string = <<HTML
|
268
|
-
p = hello_world if true
|
269
|
-
HTML
|
270
|
-
|
271
|
-
expected = "<p>Hello World from @env</p>"
|
272
|
-
|
273
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
274
|
-
end
|
275
|
-
|
276
|
-
def test_render_with_attribute_starts_with_keyword
|
277
|
-
string = <<HTML
|
278
|
-
p = hello_world in_keyword
|
279
|
-
HTML
|
280
|
-
|
281
|
-
expected = "<p>starts with keyword</p>"
|
282
|
-
|
283
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
284
|
-
end
|
285
|
-
|
286
|
-
def test_hash_call
|
287
|
-
string = <<HTML
|
288
|
-
p = hash[:a]
|
289
|
-
HTML
|
290
|
-
|
291
|
-
expected = "<p>The letter a</p>"
|
292
|
-
|
293
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
294
|
-
end
|
295
|
-
|
296
|
-
def test_hash_call_in_attribute
|
297
|
-
string = <<HTML
|
298
|
-
p id="#\{hash[:a]}" Test it
|
299
|
-
HTML
|
300
|
-
|
301
|
-
expected = "<p id=\"The letter a\">Test it</p>"
|
302
|
-
|
303
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
304
|
-
end
|
305
|
-
|
306
|
-
|
307
|
-
def test_escaping_evil_method
|
308
|
-
string = <<HTML
|
309
|
-
p = evil_method
|
310
|
-
HTML
|
311
|
-
|
312
|
-
expected = "<p><script>do_something_evil();</script></p>"
|
313
|
-
|
314
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
315
|
-
end
|
316
|
-
|
317
|
-
|
318
|
-
def test_nested_text
|
319
|
-
string = <<HTML
|
320
|
-
p
|
321
|
-
|
|
322
|
-
This is line one.
|
323
|
-
This is line two.
|
324
|
-
This is line three.
|
325
|
-
This is line four.
|
326
|
-
p This is a new paragraph.
|
327
|
-
HTML
|
328
|
-
|
329
|
-
expected = "<p>This is line one. This is line two. This is line three. This is line four.</p><p>This is a new paragraph.</p>"
|
330
|
-
|
331
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
332
|
-
end
|
333
|
-
|
334
|
-
def test_nested_text_with_nested_html
|
335
|
-
string = <<HTML
|
336
|
-
p
|
337
|
-
|
|
338
|
-
This is line one.
|
339
|
-
This is line two.
|
340
|
-
This is line three.
|
341
|
-
This is line four.
|
342
|
-
span.bold This is a bold line in the paragraph.
|
343
|
-
| This is more content.
|
344
|
-
HTML
|
345
|
-
|
346
|
-
expected = "<p>This is line one. This is line two. This is line three. This is line four.<span class=\"bold\">This is a bold line in the paragraph.</span> This is more content.</p>"
|
347
|
-
|
348
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
349
|
-
|
350
|
-
end
|
351
|
-
|
352
|
-
|
353
|
-
def test_simple_paragraph_with_padding
|
354
|
-
string = <<HTML
|
355
|
-
p There will be 3 spaces in front of this line.
|
356
|
-
HTML
|
357
|
-
|
358
|
-
expected = "<p> There will be 3 spaces in front of this line.</p>"
|
359
|
-
|
360
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
361
|
-
end
|
362
|
-
|
363
|
-
def test_output_code_with_leading_spaces
|
364
|
-
string = <<HTML
|
365
|
-
p= hello_world
|
366
|
-
p = hello_world
|
367
|
-
p = hello_world
|
368
|
-
HTML
|
369
|
-
|
370
|
-
expected = "<p>Hello World from @env</p><p>Hello World from @env</p><p>Hello World from @env</p>"
|
371
|
-
|
372
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
373
|
-
end
|
374
|
-
|
375
|
-
def test_interpolation_in_text
|
376
|
-
string = <<HTML
|
377
|
-
p
|
378
|
-
| \#{hello_world}
|
379
|
-
p
|
380
|
-
|
|
381
|
-
A message from the compiler: \#{hello_world}
|
382
|
-
HTML
|
383
|
-
|
384
|
-
expected = "<p>Hello World from @env</p><p>A message from the compiler: Hello World from @env</p>"
|
385
|
-
|
386
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
387
|
-
end
|
388
|
-
|
389
|
-
def test_interpolation_in_tag
|
390
|
-
string = <<HTML
|
391
|
-
p \#{hello_world}
|
392
|
-
HTML
|
393
|
-
|
394
|
-
expected = "<p>Hello World from @env</p>"
|
395
|
-
|
396
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
397
|
-
end
|
398
|
-
|
399
|
-
def test_escape_interpolation
|
400
|
-
string = <<HTML
|
401
|
-
p \\\#{hello_world}
|
402
|
-
HTML
|
403
|
-
|
404
|
-
expected = "<p>\#{hello_world}</p>"
|
405
|
-
|
406
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
407
|
-
end
|
408
|
-
|
409
|
-
def test_number_type_interpolation
|
410
|
-
string = <<HTML
|
411
|
-
p = output_number
|
412
|
-
HTML
|
413
|
-
|
414
|
-
expected = "<p>1337</p>"
|
415
|
-
|
416
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
417
|
-
end
|
418
|
-
|
419
|
-
def test_dashed_attributes
|
420
|
-
string = <<HTML
|
421
|
-
p data-info="Illudium Q-36" = output_number
|
422
|
-
HTML
|
423
|
-
|
424
|
-
expected = %(<p data-info="Illudium Q-36">1337</p>)
|
425
|
-
|
426
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
427
|
-
end
|
428
|
-
|
429
|
-
def test_dashed_attributes_with_shortcuts
|
430
|
-
string = <<HTML
|
431
|
-
p#marvin.martian data-info="Illudium Q-36" = output_number
|
432
|
-
HTML
|
433
|
-
|
434
|
-
expected = %(<p id="marvin" class="martian" data-info="Illudium Q-36">1337</p>)
|
435
|
-
|
436
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
437
|
-
end
|
438
|
-
|
439
|
-
def test_parens_around_attributes
|
440
|
-
string = <<HTML
|
441
|
-
p(id="marvin" class="martian" data-info="Illudium Q-36") = output_number
|
442
|
-
HTML
|
443
|
-
|
444
|
-
expected = %(<p id="marvin" class="martian" data-info="Illudium Q-36">1337</p>)
|
445
|
-
|
446
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
447
|
-
end
|
448
|
-
|
449
|
-
def test_parens_around_attributes_with_equal_sign_snug_to_right_paren
|
450
|
-
string = <<HTML
|
451
|
-
p(id="marvin" class="martian" data-info="Illudium Q-36")= output_number
|
452
|
-
HTML
|
453
|
-
|
454
|
-
expected = %(<p id="marvin" class="martian" data-info="Illudium Q-36">1337</p>)
|
455
|
-
|
456
|
-
assert_equal expected, Slim::Engine.new(string).render(@env)
|
457
|
-
end
|
458
|
-
end
|