tilt 1.4.1 → 2.0.0
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/CHANGELOG.md +17 -0
- data/Gemfile +33 -26
- data/README.md +23 -49
- data/Rakefile +21 -30
- data/{TEMPLATES.md → docs/TEMPLATES.md} +11 -4
- data/docs/common.css +14 -0
- data/lib/tilt/asciidoc.rb +1 -8
- data/lib/tilt/bluecloth.rb +24 -0
- data/lib/tilt/builder.rb +1 -8
- data/lib/tilt/coffee.rb +1 -8
- data/lib/tilt/creole.rb +25 -0
- data/lib/tilt/csv.rb +7 -13
- data/lib/tilt/erb.rb +2 -55
- data/lib/tilt/erubis.rb +43 -0
- data/lib/tilt/haml.rb +1 -8
- data/lib/tilt/kramdown.rb +33 -0
- data/lib/tilt/less.rb +38 -0
- data/lib/tilt/liquid.rb +1 -8
- data/lib/tilt/mapping.rb +265 -0
- data/lib/tilt/markaby.rb +1 -8
- data/lib/tilt/maruku.rb +22 -0
- data/lib/tilt/nokogiri.rb +1 -8
- data/lib/tilt/radius.rb +1 -8
- data/lib/tilt/rdiscount.rb +39 -0
- data/lib/tilt/rdoc.rb +3 -10
- data/lib/tilt/redcarpet.rb +104 -0
- data/lib/tilt/{textile.rb → redcloth.rb} +1 -8
- data/lib/tilt/sass.rb +41 -0
- data/lib/tilt/template.rb +88 -93
- data/lib/tilt/wikicloth.rb +22 -0
- data/lib/tilt/yajl.rb +1 -8
- data/lib/tilt.rb +87 -154
- data/test/{contest.rb → test_helper.rb} +7 -11
- data/test/tilt_asciidoctor_test.rb +6 -6
- data/test/tilt_blueclothtemplate_test.rb +3 -15
- data/test/tilt_buildertemplate_test.rb +3 -3
- data/test/tilt_cache_test.rb +2 -2
- data/test/tilt_coffeescripttemplate_test.rb +8 -18
- data/test/tilt_compilesite_test.rb +2 -2
- data/test/tilt_creoletemplate_test.rb +3 -7
- data/test/tilt_csv_test.rb +5 -9
- data/test/tilt_erbtemplate_test.rb +7 -7
- data/test/tilt_erubistemplate_test.rb +7 -7
- data/test/tilt_etannitemplate_test.rb +4 -3
- data/test/tilt_hamltemplate_test.rb +4 -4
- data/test/tilt_kramdown_test.rb +5 -27
- data/test/tilt_lesstemplate_test.rb +3 -3
- data/test/tilt_liquidtemplate_test.rb +3 -3
- data/test/tilt_mapping_test.rb +229 -0
- data/test/tilt_markaby_test.rb +4 -4
- data/test/tilt_markdown_test.rb +23 -21
- data/test/tilt_marukutemplate_test.rb +9 -21
- data/test/tilt_metadata_test.rb +42 -0
- data/test/tilt_nokogiritemplate_test.rb +3 -3
- data/test/tilt_radiustemplate_test.rb +3 -3
- data/test/tilt_rdiscounttemplate_test.rb +7 -19
- data/test/tilt_rdoctemplate_test.rb +3 -5
- data/test/tilt_redcarpettemplate_test.rb +11 -23
- data/test/tilt_redclothtemplate_test.rb +3 -3
- data/test/tilt_sasstemplate_test.rb +4 -4
- data/test/tilt_stringtemplate_test.rb +4 -3
- data/test/tilt_template_test.rb +42 -49
- data/test/tilt_test.rb +10 -15
- data/test/tilt_wikiclothtemplate_test.rb +3 -3
- data/test/tilt_yajltemplate_test.rb +3 -3
- data/tilt.gemspec +19 -32
- metadata +26 -385
- data/lib/tilt/css.rb +0 -80
- data/lib/tilt/markdown.rb +0 -214
- data/lib/tilt/wiki.rb +0 -58
- data/test/tilt_fallback_test.rb +0 -122
data/test/tilt_markdown_test.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# coding: UTF-8
|
2
2
|
require 'tilt'
|
3
|
+
require 'test_helper'
|
3
4
|
|
4
5
|
begin
|
5
6
|
require 'nokogiri'
|
@@ -38,9 +39,6 @@ module MarkdownTests
|
|
38
39
|
end
|
39
40
|
|
40
41
|
def test_escape_html_true
|
41
|
-
if self.class.template == Tilt::RedcarpetTemplate
|
42
|
-
flunk "redcarpet doesn't support :escape_html yet"
|
43
|
-
end
|
44
42
|
html = nrender "Hello <b>World</b>", :escape_html => true
|
45
43
|
assert_equal "<p>Hello <b>World</b></p>", html
|
46
44
|
end
|
@@ -69,36 +67,37 @@ module MarkdownTests
|
|
69
67
|
html = nrender "Hello ``World'' -- This is --- a test ...", :smartypants => false
|
70
68
|
assert_equal "<p>Hello ``World'' -- This is --- a test ...</p>", html
|
71
69
|
end
|
72
|
-
|
73
|
-
def test_smarty_pants_true
|
74
|
-
html = nrender "Hello ``World'' -- This is --- a test ...", :smartypants => true
|
75
|
-
assert_equal "<p>Hello “World” — This is —– a test …</p>", html
|
76
|
-
end
|
77
70
|
end
|
78
71
|
|
79
72
|
begin
|
80
|
-
require 'rdiscount'
|
73
|
+
require 'tilt/rdiscount'
|
81
74
|
|
82
|
-
class MarkdownRDiscountTest < Test
|
75
|
+
class MarkdownRDiscountTest < Minitest::Test
|
83
76
|
include MarkdownTests
|
84
77
|
template Tilt::RDiscountTemplate
|
78
|
+
|
79
|
+
def test_smarty_pants_true
|
80
|
+
html = nrender "Hello ``World'' -- This is --- a test ...", :smartypants => true
|
81
|
+
assert_equal "<p>Hello “World” – This is — a test …</p>", html
|
82
|
+
end
|
85
83
|
end
|
86
84
|
rescue LoadError => boom
|
87
85
|
# It should already be warned in the main tests
|
88
86
|
end
|
89
87
|
|
90
88
|
begin
|
91
|
-
require 'redcarpet'
|
89
|
+
require 'tilt/redcarpet'
|
92
90
|
|
93
|
-
class MarkdownRedcarpetTest < Test
|
91
|
+
class MarkdownRedcarpetTest < Minitest::Test
|
94
92
|
include MarkdownTests
|
95
93
|
template Tilt::RedcarpetTemplate
|
96
94
|
# Doesn't support escaping
|
97
95
|
undef test_escape_html_true
|
98
96
|
|
99
97
|
def test_smarty_pants_true
|
98
|
+
# Various versions of Redcarpet support various versions of Smart pants.
|
100
99
|
html = nrender "Hello ``World'' -- This is --- a test ...", :smartypants => true
|
101
|
-
|
100
|
+
assert_match /<p>Hello “World(''|”) – This is — a test …<\/p>/, html
|
102
101
|
end
|
103
102
|
|
104
103
|
def test_fenced_code_blocks_with_lang
|
@@ -117,20 +116,25 @@ rescue LoadError => boom
|
|
117
116
|
end
|
118
117
|
|
119
118
|
begin
|
120
|
-
require 'bluecloth'
|
119
|
+
require 'tilt/bluecloth'
|
121
120
|
|
122
|
-
class MarkdownBlueClothTest < Test
|
121
|
+
class MarkdownBlueClothTest < Minitest::Test
|
123
122
|
include MarkdownTests
|
124
123
|
template Tilt::BlueClothTemplate
|
124
|
+
|
125
|
+
def test_smarty_pants_true
|
126
|
+
html = nrender "Hello ``World'' -- This is --- a test ...", :smartypants => true
|
127
|
+
assert_equal "<p>Hello “World” — This is —– a test …</p>", html
|
128
|
+
end
|
125
129
|
end
|
126
130
|
rescue LoadError => boom
|
127
131
|
# It should already be warned in the main tests
|
128
132
|
end
|
129
133
|
|
130
134
|
begin
|
131
|
-
require 'kramdown'
|
135
|
+
require 'tilt/kramdown'
|
132
136
|
|
133
|
-
class MarkdownKramdownTest < Test
|
137
|
+
class MarkdownKramdownTest < Minitest::Test
|
134
138
|
include MarkdownTests
|
135
139
|
template Tilt::KramdownTemplate
|
136
140
|
# Doesn't support escaping
|
@@ -138,7 +142,6 @@ begin
|
|
138
142
|
# Smarty Pants is *always* on, but doesn't support it fully
|
139
143
|
undef test_smarty_pants
|
140
144
|
undef test_smarty_pants_false
|
141
|
-
undef test_smarty_pants_true
|
142
145
|
end
|
143
146
|
rescue LoadError => boom
|
144
147
|
# It should already be warned in the main tests
|
@@ -146,9 +149,9 @@ end
|
|
146
149
|
|
147
150
|
|
148
151
|
begin
|
149
|
-
require 'maruku'
|
152
|
+
require 'tilt/maruku'
|
150
153
|
|
151
|
-
class MarkdownMarukuTest < Test
|
154
|
+
class MarkdownMarukuTest < Minitest::Test
|
152
155
|
include MarkdownTests
|
153
156
|
template Tilt::MarukuTemplate
|
154
157
|
# Doesn't support escaping
|
@@ -156,7 +159,6 @@ begin
|
|
156
159
|
# Doesn't support Smarty Pants, and even fails on ``Foobar''
|
157
160
|
undef test_smarty_pants
|
158
161
|
undef test_smarty_pants_false
|
159
|
-
undef test_smarty_pants_true
|
160
162
|
# Smart Quotes is always on
|
161
163
|
undef test_smart_quotes
|
162
164
|
undef test_smart_quotes_false
|
@@ -1,27 +1,15 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
require 'tilt'
|
3
3
|
|
4
4
|
begin
|
5
|
-
require 'maruku'
|
6
|
-
|
7
|
-
class MarukuTemplateTest < Test::Unit::TestCase
|
8
|
-
test "registered for '.md' files" do
|
9
|
-
assert Tilt.mappings['md'].include?(Tilt::MarukuTemplate)
|
10
|
-
end
|
11
|
-
|
12
|
-
test "registered for '.mkd' files" do
|
13
|
-
assert Tilt.mappings['mkd'].include?(Tilt::MarukuTemplate)
|
14
|
-
end
|
15
|
-
|
16
|
-
test "registered for '.markdown' files" do
|
17
|
-
assert Tilt.mappings['markdown'].include?(Tilt::MarukuTemplate)
|
18
|
-
end
|
5
|
+
require 'tilt/maruku'
|
19
6
|
|
7
|
+
class MarukuTemplateTest < Minitest::Test
|
20
8
|
test "registered below Kramdown" do
|
21
9
|
%w[md mkd markdown].each do |ext|
|
22
|
-
|
23
|
-
kram_idx =
|
24
|
-
maru_idx =
|
10
|
+
lazy = Tilt.lazy_map[ext]
|
11
|
+
kram_idx = lazy.index { |klass, file| klass == 'Tilt::KramdownTemplate' }
|
12
|
+
maru_idx = lazy.index { |klass, file| klass == 'Tilt::MarukuTemplate' }
|
25
13
|
assert maru_idx > kram_idx,
|
26
14
|
"#{maru_idx} should be higher than #{kram_idx}"
|
27
15
|
end
|
@@ -29,18 +17,18 @@ begin
|
|
29
17
|
|
30
18
|
test "preparing and evaluating templates on #render" do
|
31
19
|
template = Tilt::MarukuTemplate.new { |t| "# Hello World!" }
|
32
|
-
assert_equal "<h1 id
|
20
|
+
assert_equal "<h1 id=\"hello_world\">Hello World!</h1>", template.render.strip
|
33
21
|
end
|
34
22
|
|
35
23
|
test "can be rendered more than once" do
|
36
24
|
template = Tilt::MarukuTemplate.new { |t| "# Hello World!" }
|
37
|
-
3.times { assert_equal "<h1 id
|
25
|
+
3.times { assert_equal "<h1 id=\"hello_world\">Hello World!</h1>", template.render.strip }
|
38
26
|
end
|
39
27
|
|
40
28
|
test "removes HTML when :filter_html is set" do
|
41
29
|
template = Tilt::MarukuTemplate.new(:filter_html => true) { |t|
|
42
30
|
"HELLO <blink>WORLD</blink>" }
|
43
|
-
assert_equal "<p>HELLO </p>", template.render
|
31
|
+
assert_equal "<p>HELLO </p>", template.render.strip
|
44
32
|
end
|
45
33
|
end
|
46
34
|
rescue LoadError => boom
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'tilt/template'
|
3
|
+
|
4
|
+
module Tilt
|
5
|
+
class TemplateMetadataTest < Minitest::Test
|
6
|
+
class MyTemplate < Template
|
7
|
+
metadata[:global] = 1
|
8
|
+
self.default_mime_type = 'text/html'
|
9
|
+
|
10
|
+
def prepare
|
11
|
+
end
|
12
|
+
|
13
|
+
def allows_script?
|
14
|
+
true
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
test "global metadata" do
|
19
|
+
assert MyTemplate.metadata
|
20
|
+
assert_equal 1, MyTemplate.metadata[:global]
|
21
|
+
end
|
22
|
+
|
23
|
+
test "instance metadata" do
|
24
|
+
tmpl = MyTemplate.new { '' }
|
25
|
+
assert_equal 1, tmpl.metadata[:global]
|
26
|
+
end
|
27
|
+
|
28
|
+
test "gracefully handles default_mime_type" do
|
29
|
+
assert_equal 'text/html', MyTemplate.metadata[:mime_type]
|
30
|
+
end
|
31
|
+
|
32
|
+
test "still allows .default_mime_type" do
|
33
|
+
assert_equal 'text/html', MyTemplate.default_mime_type
|
34
|
+
end
|
35
|
+
|
36
|
+
test "gracefully handles allows_script?" do
|
37
|
+
tmpl = MyTemplate.new { '' }
|
38
|
+
assert_equal true, tmpl.metadata[:allows_script]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
require 'tilt'
|
3
3
|
|
4
4
|
begin
|
5
|
-
require 'nokogiri'
|
6
|
-
class NokogiriTemplateTest < Test
|
5
|
+
require 'tilt/nokogiri'
|
6
|
+
class NokogiriTemplateTest < Minitest::Test
|
7
7
|
test "registered for '.nokogiri' files" do
|
8
8
|
assert_equal Tilt::NokogiriTemplate, Tilt['test.nokogiri']
|
9
9
|
assert_equal Tilt::NokogiriTemplate, Tilt['test.xml.nokogiri']
|
@@ -1,14 +1,14 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
require 'tilt'
|
3
3
|
|
4
4
|
begin
|
5
|
-
require 'radius'
|
5
|
+
require 'tilt/radius'
|
6
6
|
|
7
7
|
# Disable radius tests under Ruby versions >= 1.9.1 since it's still buggy.
|
8
8
|
# Remove when fixed upstream.
|
9
9
|
raise LoadError if RUBY_VERSION >= "1.9.1" and Radius.version < "0.7"
|
10
10
|
|
11
|
-
class RadiusTemplateTest < Test
|
11
|
+
class RadiusTemplateTest < Minitest::Test
|
12
12
|
test "registered for '.radius' files" do
|
13
13
|
assert_equal Tilt::RadiusTemplate, Tilt['test.radius']
|
14
14
|
end
|
@@ -1,27 +1,15 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
require 'tilt'
|
3
3
|
|
4
4
|
begin
|
5
|
-
require 'rdiscount'
|
6
|
-
|
7
|
-
class RDiscountTemplateTest < Test::Unit::TestCase
|
8
|
-
test "registered for '.md' files" do
|
9
|
-
assert Tilt.mappings['md'].include?(Tilt::RDiscountTemplate)
|
10
|
-
end
|
11
|
-
|
12
|
-
test "registered for '.mkd' files" do
|
13
|
-
assert Tilt.mappings['mkd'].include?(Tilt::RDiscountTemplate)
|
14
|
-
end
|
15
|
-
|
16
|
-
test "registered for '.markdown' files" do
|
17
|
-
assert Tilt.mappings['markdown'].include?(Tilt::RDiscountTemplate)
|
18
|
-
end
|
5
|
+
require 'tilt/rdiscount'
|
19
6
|
|
7
|
+
class RDiscountTemplateTest < Minitest::Test
|
20
8
|
test "registered above BlueCloth" do
|
21
9
|
%w[md mkd markdown].each do |ext|
|
22
|
-
|
23
|
-
|
24
|
-
|
10
|
+
lazy = Tilt.lazy_map[ext]
|
11
|
+
rdis_idx = lazy.index { |klass, file| klass == 'Tilt::RDiscountTemplate' }
|
12
|
+
blue_idx = lazy.index { |klass, file| klass == 'Tilt::BlueClothTemplate' }
|
25
13
|
assert rdis_idx < blue_idx,
|
26
14
|
"#{rdis_idx} should be lower than #{blue_idx}"
|
27
15
|
end
|
@@ -40,7 +28,7 @@ begin
|
|
40
28
|
test "smartypants when :smart is set" do
|
41
29
|
template = Tilt::RDiscountTemplate.new(:smart => true) { |t|
|
42
30
|
"OKAY -- 'Smarty Pants'" }
|
43
|
-
assert_equal "<p>OKAY &
|
31
|
+
assert_equal "<p>OKAY – ‘Smarty Pants’</p>\n",
|
44
32
|
template.render
|
45
33
|
end
|
46
34
|
|
@@ -1,11 +1,9 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
require 'tilt'
|
3
3
|
|
4
4
|
begin
|
5
|
-
require 'rdoc'
|
6
|
-
|
7
|
-
require 'rdoc/markup/to_html'
|
8
|
-
class RDocTemplateTest < Test::Unit::TestCase
|
5
|
+
require 'tilt/rdoc'
|
6
|
+
class RDocTemplateTest < Minitest::Test
|
9
7
|
test "is registered for '.rdoc' files" do
|
10
8
|
assert_equal Tilt::RDocTemplate, Tilt['test.rdoc']
|
11
9
|
end
|
@@ -1,27 +1,15 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
require 'tilt'
|
3
3
|
|
4
4
|
begin
|
5
|
-
require 'redcarpet'
|
6
|
-
|
7
|
-
class RedcarpetTemplateTest < Test::Unit::TestCase
|
8
|
-
test "registered for '.md' files" do
|
9
|
-
assert Tilt.mappings['md'].include?(Tilt::RedcarpetTemplate)
|
10
|
-
end
|
11
|
-
|
12
|
-
test "registered for '.mkd' files" do
|
13
|
-
assert Tilt.mappings['mkd'].include?(Tilt::RedcarpetTemplate)
|
14
|
-
end
|
15
|
-
|
16
|
-
test "registered for '.markdown' files" do
|
17
|
-
assert Tilt.mappings['markdown'].include?(Tilt::RedcarpetTemplate)
|
18
|
-
end
|
5
|
+
require 'tilt/redcarpet'
|
19
6
|
|
7
|
+
class RedcarpetTemplateTest < Minitest::Test
|
20
8
|
test "registered above BlueCloth" do
|
21
9
|
%w[md mkd markdown].each do |ext|
|
22
|
-
|
23
|
-
blue_idx =
|
24
|
-
redc_idx =
|
10
|
+
lazy = Tilt.lazy_map[ext]
|
11
|
+
blue_idx = lazy.index { |klass, file| klass == 'Tilt::BlueClothTemplate' }
|
12
|
+
redc_idx = lazy.index { |klass, file| klass == 'Tilt::RedcarpetTemplate' }
|
25
13
|
assert redc_idx < blue_idx,
|
26
14
|
"#{redc_idx} should be lower than #{blue_idx}"
|
27
15
|
end
|
@@ -29,9 +17,9 @@ begin
|
|
29
17
|
|
30
18
|
test "registered above RDiscount" do
|
31
19
|
%w[md mkd markdown].each do |ext|
|
32
|
-
|
33
|
-
rdis_idx =
|
34
|
-
redc_idx =
|
20
|
+
lazy = Tilt.lazy_map[ext]
|
21
|
+
rdis_idx = lazy.index { |klass, file| klass == 'Tilt::RDiscountTemplate' }
|
22
|
+
redc_idx = lazy.index { |klass, file| klass == 'Tilt::RedcarpetTemplate' }
|
35
23
|
assert redc_idx < rdis_idx,
|
36
24
|
"#{redc_idx} should be lower than #{rdis_idx}"
|
37
25
|
end
|
@@ -55,14 +43,14 @@ begin
|
|
55
43
|
test "smartypants when :smart is set" do
|
56
44
|
template = Tilt::RedcarpetTemplate.new(:smartypants => true) { |t|
|
57
45
|
"OKAY -- 'Smarty Pants'" }
|
58
|
-
assert_match /<p>OKAY – 'Smarty Pants'
|
46
|
+
assert_match /<p>OKAY – ('|‘)Smarty Pants('|’)<\/p>/,
|
59
47
|
template.render
|
60
48
|
end
|
61
49
|
|
62
50
|
test "smartypants with a rendererer instance" do
|
63
51
|
template = Tilt::RedcarpetTemplate.new(:renderer => Redcarpet::Render::HTML.new(:hard_wrap => true), :smartypants => true) { |t|
|
64
52
|
"OKAY -- 'Smarty Pants'" }
|
65
|
-
assert_match /<p>OKAY – 'Smarty Pants'
|
53
|
+
assert_match /<p>OKAY – ('|‘)Smarty Pants('|’)<\/p>/,
|
66
54
|
template.render
|
67
55
|
end
|
68
56
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
require 'tilt'
|
3
3
|
|
4
4
|
begin
|
5
|
-
require 'redcloth'
|
5
|
+
require 'tilt/redcloth'
|
6
6
|
|
7
|
-
class RedClothTemplateTest < Test
|
7
|
+
class RedClothTemplateTest < Minitest::Test
|
8
8
|
test "is registered for '.textile' files" do
|
9
9
|
assert_equal Tilt::RedClothTemplate, Tilt['test.textile']
|
10
10
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
require 'tilt'
|
3
3
|
|
4
4
|
begin
|
5
|
-
require 'sass'
|
5
|
+
require 'tilt/sass'
|
6
6
|
|
7
|
-
class SassTemplateTest < Test
|
7
|
+
class SassTemplateTest < Minitest::Test
|
8
8
|
test "is registered for '.sass' files" do
|
9
9
|
assert_equal Tilt::SassTemplate, Tilt['test.sass']
|
10
10
|
end
|
@@ -20,7 +20,7 @@ begin
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
class ScssTemplateTest < Test
|
23
|
+
class ScssTemplateTest < Minitest::Test
|
24
24
|
test "is registered for '.scss' files" do
|
25
25
|
assert_equal Tilt::ScssTemplate, Tilt['test.scss']
|
26
26
|
end
|
@@ -1,7 +1,8 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
require 'tilt'
|
3
|
+
require 'tilt/string'
|
3
4
|
|
4
|
-
class StringTemplateTest < Test
|
5
|
+
class StringTemplateTest < Minitest::Test
|
5
6
|
test "registered for '.str' files" do
|
6
7
|
assert_equal Tilt::StringTemplate, Tilt['test.str']
|
7
8
|
end
|
@@ -73,7 +74,7 @@ class StringTemplateTest < Test::Unit::TestCase
|
|
73
74
|
end
|
74
75
|
|
75
76
|
|
76
|
-
class CompiledStringTemplateTest < Test
|
77
|
+
class CompiledStringTemplateTest < Minitest::Test
|
77
78
|
def teardown
|
78
79
|
GC.start
|
79
80
|
end
|
data/test/tilt_template_test.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
require '
|
2
|
+
require 'test_helper'
|
3
3
|
require 'tilt'
|
4
|
+
require 'tilt/template'
|
4
5
|
require 'tempfile'
|
5
6
|
|
6
|
-
class TiltTemplateTest < Test
|
7
|
+
class TiltTemplateTest < Minitest::Test
|
7
8
|
|
8
9
|
class MockTemplate < Tilt::Template
|
9
10
|
def prepare
|
@@ -11,7 +12,7 @@ class TiltTemplateTest < Test::Unit::TestCase
|
|
11
12
|
end
|
12
13
|
|
13
14
|
test "needs a file or block" do
|
14
|
-
|
15
|
+
assert_raises(ArgumentError) { Tilt::Template.new }
|
15
16
|
end
|
16
17
|
|
17
18
|
test "initializing with a file" do
|
@@ -31,6 +32,13 @@ class TiltTemplateTest < Test::Unit::TestCase
|
|
31
32
|
assert_equal File.basename(tempfile.path), inst.basename
|
32
33
|
end
|
33
34
|
|
35
|
+
test "initializing with a pathname" do
|
36
|
+
tempfile = Tempfile.new('tilt_template_test')
|
37
|
+
pathname = Pathname.new(tempfile.path)
|
38
|
+
inst = MockTemplate.new(pathname)
|
39
|
+
assert_equal File.basename(tempfile.path), inst.basename
|
40
|
+
end
|
41
|
+
|
34
42
|
class SillyHash < Hash
|
35
43
|
def path(arg)
|
36
44
|
end
|
@@ -49,7 +57,7 @@ class TiltTemplateTest < Test::Unit::TestCase
|
|
49
57
|
|
50
58
|
test "uses a default filename for #eval_file when no file provided" do
|
51
59
|
inst = MockTemplate.new { 'Hi' }
|
52
|
-
|
60
|
+
refute_nil inst.eval_file
|
53
61
|
assert !inst.eval_file.include?("\n")
|
54
62
|
end
|
55
63
|
|
@@ -81,43 +89,29 @@ class TiltTemplateTest < Test::Unit::TestCase
|
|
81
89
|
end
|
82
90
|
end
|
83
91
|
|
84
|
-
test "one-time template engine initialization" do
|
85
|
-
assert_nil InitializingMockTemplate.engine_initialized
|
86
|
-
assert_equal 0, InitializingMockTemplate.initialized_count
|
87
|
-
|
88
|
-
InitializingMockTemplate.new { "Hello World!" }
|
89
|
-
assert InitializingMockTemplate.engine_initialized
|
90
|
-
assert_equal 1, InitializingMockTemplate.initialized_count
|
91
|
-
|
92
|
-
InitializingMockTemplate.new { "Hello World!" }
|
93
|
-
assert_equal 1, InitializingMockTemplate.initialized_count
|
94
|
-
end
|
95
|
-
|
96
92
|
class PreparingMockTemplate < Tilt::Template
|
97
|
-
include Test::Unit::Assertions
|
98
93
|
def prepare
|
99
|
-
|
94
|
+
raise "data must be set" if data.nil?
|
100
95
|
@prepared = true
|
101
96
|
end
|
102
97
|
def prepared? ; @prepared ; end
|
103
98
|
end
|
104
99
|
|
105
100
|
test "raises NotImplementedError when #prepare not defined" do
|
106
|
-
|
101
|
+
assert_raises(NotImplementedError) { Tilt::Template.new { |template| "Hello World!" } }
|
107
102
|
end
|
108
103
|
|
109
104
|
test "raises NotImplementedError when #evaluate or #template_source not defined" do
|
110
105
|
inst = PreparingMockTemplate.new { |t| "Hello World!" }
|
111
|
-
|
106
|
+
assert_raises(NotImplementedError) { inst.render }
|
112
107
|
assert inst.prepared?
|
113
108
|
end
|
114
109
|
|
115
110
|
class SimpleMockTemplate < PreparingMockTemplate
|
116
|
-
include Test::Unit::Assertions
|
117
111
|
def evaluate(scope, locals, &block)
|
118
|
-
|
119
|
-
|
120
|
-
|
112
|
+
raise "should be prepared" unless prepared?
|
113
|
+
raise "scope should be present" if scope.nil?
|
114
|
+
raise "locals should be present" if locals.nil?
|
121
115
|
"<em>#{@data}</em>"
|
122
116
|
end
|
123
117
|
end
|
@@ -148,11 +142,17 @@ class TiltTemplateTest < Test::Unit::TestCase
|
|
148
142
|
|
149
143
|
test "template_source with locals having non-variable keys raises error" do
|
150
144
|
inst = SourceGeneratingMockTemplate.new { |t| '1 + 2 = #{_answer}' }
|
151
|
-
err =
|
145
|
+
err = assert_raises(RuntimeError) { inst.render(Object.new, 'ANSWER' => 3) }
|
152
146
|
assert_equal "invalid locals key: \"ANSWER\" (keys must be variable names)", err.message
|
153
147
|
assert_equal "1 + 2 = 3", inst.render(Object.new, '_answer' => 3)
|
154
148
|
end
|
155
149
|
|
150
|
+
test "template_source with nil locals" do
|
151
|
+
inst = SourceGeneratingMockTemplate.new { |t| 'Hey' }
|
152
|
+
assert_equal 'Hey', inst.render(Object.new, nil)
|
153
|
+
assert inst.prepared?
|
154
|
+
end
|
155
|
+
|
156
156
|
class CustomGeneratingMockTemplate < PreparingMockTemplate
|
157
157
|
def precompiled_template(locals)
|
158
158
|
data
|
@@ -176,30 +176,6 @@ class TiltTemplateTest < Test::Unit::TestCase
|
|
176
176
|
assert_equal "1", inst.render
|
177
177
|
end
|
178
178
|
|
179
|
-
# Special-case for Haml
|
180
|
-
# https://github.com/rtomayko/tilt/issues/193
|
181
|
-
test "supports Array pre/postambles" do
|
182
|
-
inst = CustomGeneratingMockTemplate.new(
|
183
|
-
:preamble => ['buf = ', '[]'],
|
184
|
-
:postamble => ['buf.', 'join']
|
185
|
-
) { 'buf << 1' }
|
186
|
-
|
187
|
-
# TODO: Use assert_output when we swicth to MiniTest
|
188
|
-
warns = <<-EOF
|
189
|
-
precompiled_preamble should return String (not Array)
|
190
|
-
precompiled_postamble should return String (not Array)
|
191
|
-
EOF
|
192
|
-
|
193
|
-
begin
|
194
|
-
require 'stringio'
|
195
|
-
$stderr = StringIO.new
|
196
|
-
assert_equal "1", inst.render
|
197
|
-
assert_equal warns, $stderr.string
|
198
|
-
ensure
|
199
|
-
$stderr = STDERR
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
179
|
class Person
|
204
180
|
CONSTANT = "Bob"
|
205
181
|
|
@@ -225,6 +201,23 @@ EOF
|
|
225
201
|
assert_equal "Hey Bob!", inst.render(Person.new("Joe"))
|
226
202
|
end
|
227
203
|
|
204
|
+
test "populates Tilt.current_template during rendering" do
|
205
|
+
inst = SourceGeneratingMockTemplate.new { '#{$inst = Tilt.current_template}' }
|
206
|
+
inst.render
|
207
|
+
assert_equal inst, $inst
|
208
|
+
assert_nil Tilt.current_template
|
209
|
+
end
|
210
|
+
|
211
|
+
test "populates Tilt.current_template in nested rendering" do
|
212
|
+
inst1 = SourceGeneratingMockTemplate.new { '#{$inst.render; $inst1 = Tilt.current_template}' }
|
213
|
+
inst2 = SourceGeneratingMockTemplate.new { '#{$inst2 = Tilt.current_template}' }
|
214
|
+
$inst = inst2
|
215
|
+
inst1.render
|
216
|
+
assert_equal inst1, $inst1
|
217
|
+
assert_equal inst2, $inst2
|
218
|
+
assert_nil Tilt.current_template
|
219
|
+
end
|
220
|
+
|
228
221
|
##
|
229
222
|
# Encodings
|
230
223
|
|
data/test/tilt_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
require 'tilt'
|
3
3
|
|
4
|
-
class TiltTest < Test
|
4
|
+
class TiltTest < Minitest::Test
|
5
5
|
class MockTemplate
|
6
6
|
attr_reader :args, :block
|
7
7
|
def initialize(*args, &block)
|
@@ -11,38 +11,38 @@ class TiltTest < Test::Unit::TestCase
|
|
11
11
|
end
|
12
12
|
|
13
13
|
test "registering template implementation classes by file extension" do
|
14
|
-
Tilt.register('mock'
|
14
|
+
Tilt.register(MockTemplate, 'mock')
|
15
15
|
end
|
16
16
|
|
17
17
|
test "an extension is registered if explicit handle is found" do
|
18
|
-
Tilt.register('mock'
|
18
|
+
Tilt.register(MockTemplate, 'mock')
|
19
19
|
assert Tilt.registered?('mock')
|
20
20
|
end
|
21
21
|
|
22
22
|
test "registering template classes by symbol file extension" do
|
23
|
-
Tilt.register(:mock
|
23
|
+
Tilt.register(MockTemplate, :mock)
|
24
24
|
end
|
25
25
|
|
26
26
|
test "looking up template classes by exact file extension" do
|
27
|
-
Tilt.register('mock'
|
27
|
+
Tilt.register(MockTemplate, 'mock')
|
28
28
|
impl = Tilt['mock']
|
29
29
|
assert_equal MockTemplate, impl
|
30
30
|
end
|
31
31
|
|
32
32
|
test "looking up template classes by implicit file extension" do
|
33
|
-
Tilt.register('mock'
|
33
|
+
Tilt.register(MockTemplate, 'mock')
|
34
34
|
impl = Tilt['.mock']
|
35
35
|
assert_equal MockTemplate, impl
|
36
36
|
end
|
37
37
|
|
38
38
|
test "looking up template classes with multiple file extensions" do
|
39
|
-
Tilt.register('mock'
|
39
|
+
Tilt.register(MockTemplate, 'mock')
|
40
40
|
impl = Tilt['index.html.mock']
|
41
41
|
assert_equal MockTemplate, impl
|
42
42
|
end
|
43
43
|
|
44
44
|
test "looking up template classes by file name" do
|
45
|
-
Tilt.register('mock'
|
45
|
+
Tilt.register(MockTemplate, 'mock')
|
46
46
|
impl = Tilt['templates/test.mock']
|
47
47
|
assert_equal MockTemplate, impl
|
48
48
|
end
|
@@ -51,13 +51,8 @@ class TiltTest < Test::Unit::TestCase
|
|
51
51
|
assert_nil Tilt['none']
|
52
52
|
end
|
53
53
|
|
54
|
-
test "accessing template class mappings at Tilt::mappings" do
|
55
|
-
assert Tilt.respond_to?(:mappings)
|
56
|
-
assert Tilt.mappings.respond_to?(:[])
|
57
|
-
end
|
58
|
-
|
59
54
|
test "creating new template instance with a filename" do
|
60
|
-
Tilt.register('mock'
|
55
|
+
Tilt.register(MockTemplate, 'mock')
|
61
56
|
template = Tilt.new('foo.mock', 1, :key => 'val') { 'Hello World!' }
|
62
57
|
assert_equal ['foo.mock', 1, {:key => 'val'}], template.args
|
63
58
|
assert_equal 'Hello World!', template.block.call
|