tilt 1.4.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|