tilt 1.3.3 → 1.4.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.
- data/CHANGELOG.md +40 -0
- data/COPYING +1 -1
- data/Gemfile +31 -1
- data/HACKING +16 -0
- data/README.md +26 -2
- data/Rakefile +25 -1
- data/TEMPLATES.md +13 -13
- data/bin/tilt +8 -6
- data/lib/tilt/asciidoc.rb +34 -0
- data/lib/tilt/coffee.rb +4 -0
- data/lib/tilt/css.rb +10 -2
- data/lib/tilt/csv.rb +71 -0
- data/lib/tilt/erb.rb +2 -2
- data/lib/tilt/etanni.rb +27 -0
- data/lib/tilt/liquid.rb +4 -0
- data/lib/tilt/markdown.rb +35 -11
- data/lib/tilt/nokogiri.rb +4 -4
- data/lib/tilt/plain.rb +20 -0
- data/lib/tilt/radius.rb +4 -0
- data/lib/tilt/rdoc.rb +20 -5
- data/lib/tilt/template.rb +96 -92
- data/lib/tilt/textile.rb +5 -0
- data/lib/tilt/wiki.rb +8 -0
- data/lib/tilt.rb +15 -1
- data/test/tilt_asciidoctor_test.rb +44 -0
- data/test/tilt_blueclothtemplate_test.rb +1 -1
- data/test/tilt_coffeescripttemplate_test.rb +64 -11
- data/test/tilt_creoletemplate_test.rb +1 -1
- data/test/tilt_csv_test.rb +69 -0
- data/test/tilt_erbtemplate_test.rb +5 -0
- data/test/tilt_erubistemplate_test.rb +1 -1
- data/test/tilt_etannitemplate_test.rb +173 -0
- data/test/tilt_fallback_test.rb +6 -6
- data/test/tilt_hamltemplate_test.rb +1 -1
- data/test/tilt_kramdown_test.rb +1 -1
- data/test/tilt_lesstemplate_test.less +1 -0
- data/test/tilt_lesstemplate_test.rb +19 -3
- data/test/tilt_liquidtemplate_test.rb +1 -1
- data/test/tilt_markaby_test.rb +1 -1
- data/test/tilt_markdown_test.rb +16 -5
- data/test/tilt_marukutemplate_test.rb +1 -1
- data/test/tilt_radiustemplate_test.rb +1 -1
- data/test/tilt_rdiscounttemplate_test.rb +1 -1
- data/test/tilt_rdoctemplate_test.rb +10 -3
- data/test/tilt_redcarpettemplate_test.rb +15 -3
- data/test/tilt_redclothtemplate_test.rb +13 -1
- data/test/tilt_sasstemplate_test.rb +1 -1
- data/test/tilt_stringtemplate_test.rb +1 -1
- data/test/tilt_template_test.rb +122 -0
- data/test/tilt_wikiclothtemplate_test.rb +1 -1
- data/test/tilt_yajltemplate_test.rb +13 -4
- data/tilt.gemspec +28 -17
- metadata +204 -75
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
require 'contest'
|
|
2
|
+
require 'tilt'
|
|
3
|
+
|
|
4
|
+
begin
|
|
5
|
+
if RUBY_VERSION >= '1.9.0'
|
|
6
|
+
require 'csv'
|
|
7
|
+
else
|
|
8
|
+
require 'fastercsv'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class CSVTemplateTest < Test::Unit::TestCase
|
|
12
|
+
|
|
13
|
+
test "registered for '.rcsv' files" do
|
|
14
|
+
assert Tilt.mappings['rcsv'].include?(Tilt::CSVTemplate)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
test "compiles and evaluates the template on #render" do
|
|
18
|
+
template = Tilt::CSVTemplate.new { "csv << ['hello', 'world']" }
|
|
19
|
+
assert_equal "hello,world\n", template.render
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
test "can be rendered more than once" do
|
|
23
|
+
template = Tilt::CSVTemplate.new { "csv << [1,2,3]" }
|
|
24
|
+
3.times { assert_equal "1,2,3\n", template.render }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
test "can pass locals" do
|
|
28
|
+
template = Tilt::CSVTemplate.new { 'csv << [1, name]' }
|
|
29
|
+
assert_equal "1,Joe\n", template.render(Object.new, :name => 'Joe')
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
test "evaluating in an object scope" do
|
|
33
|
+
template = Tilt::CSVTemplate.new { 'csv << [1, @name]' }
|
|
34
|
+
scope = Object.new
|
|
35
|
+
scope.instance_variable_set :@name, 'Joe'
|
|
36
|
+
assert_equal "1,Joe\n", template.render(scope)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
test "backtrace file and line reporting" do
|
|
40
|
+
data = File.read(__FILE__).split("\n__END__\n").last
|
|
41
|
+
template = Tilt::CSVTemplate.new('test.csv') { data }
|
|
42
|
+
begin
|
|
43
|
+
template.render
|
|
44
|
+
fail 'should have raised an exception'
|
|
45
|
+
rescue => boom
|
|
46
|
+
assert_kind_of NameError, boom
|
|
47
|
+
line = boom.backtrace.grep(/^test\.csv:/).first
|
|
48
|
+
assert line, "Backtrace didn't contain test.csv"
|
|
49
|
+
file, line, meth = line.split(":")
|
|
50
|
+
assert_equal '4', line
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
rescue LoadError => boom
|
|
57
|
+
warn "Tilt::CSVTemplate (disabled) please install 'fastercsv' if using ruby 1.8.x"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
__END__
|
|
62
|
+
# header
|
|
63
|
+
csv << ['Type', 'Age']
|
|
64
|
+
|
|
65
|
+
raise NameError
|
|
66
|
+
|
|
67
|
+
# rows
|
|
68
|
+
csv << ['Frog', 2]
|
|
69
|
+
csv << ['Cat', 5]
|
|
@@ -89,6 +89,11 @@ class ERBTemplateTest < Test::Unit::TestCase
|
|
|
89
89
|
end
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
+
test "explicit disabling of trim mode" do
|
|
93
|
+
template = Tilt::ERBTemplate.new('test.erb', 1, :trim => false) { "\n<%= 1 + 1 %>\n" }
|
|
94
|
+
assert_equal "\n2\n", template.render
|
|
95
|
+
end
|
|
96
|
+
|
|
92
97
|
test "default stripping trim mode" do
|
|
93
98
|
template = Tilt::ERBTemplate.new('test.erb', 1) { "\n<%= 1 + 1 %>\n" }
|
|
94
99
|
assert_equal "\n2", template.render
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
require 'contest'
|
|
2
|
+
require 'tilt'
|
|
3
|
+
|
|
4
|
+
class EtanniTemplateTest < Test::Unit::TestCase
|
|
5
|
+
test "registered for '.etn' files" do
|
|
6
|
+
assert_equal Tilt::EtanniTemplate, Tilt['test.etn']
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
test "registered for '.etanni' files" do
|
|
10
|
+
assert_equal Tilt::EtanniTemplate, Tilt['test.etanni']
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
test "loading and evaluating templates on #render" do
|
|
14
|
+
template = Tilt::EtanniTemplate.new { |t| "Hello World!" }
|
|
15
|
+
assert_equal "Hello World!", template.render
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
test "can be rendered more than once" do
|
|
19
|
+
template = Tilt::EtanniTemplate.new { |t| "Hello World!" }
|
|
20
|
+
3.times { assert_equal "Hello World!", template.render }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
test "passing locals" do
|
|
24
|
+
template = Tilt::EtanniTemplate.new { 'Hey #{name}!' }
|
|
25
|
+
assert_equal "Hey Joe!", template.render(Object.new, :name => 'Joe')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
test "evaluating in an object scope" do
|
|
29
|
+
template = Tilt::EtanniTemplate.new { 'Hey #{@name}!' }
|
|
30
|
+
scope = Object.new
|
|
31
|
+
scope.instance_variable_set :@name, 'Joe'
|
|
32
|
+
assert_equal "Hey Joe!", template.render(scope)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
test "passing a block for yield" do
|
|
36
|
+
template = Tilt::EtanniTemplate.new { 'Hey #{yield}!' }
|
|
37
|
+
assert_equal "Hey Joe!", template.render { 'Joe' }
|
|
38
|
+
assert_equal "Hey Moe!", template.render { 'Moe' }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test "multiline templates" do
|
|
42
|
+
template = Tilt::EtanniTemplate.new { "Hello\nWorld!\n" }
|
|
43
|
+
assert_equal "Hello\nWorld!", template.render
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
test "backtrace file and line reporting without locals" do
|
|
47
|
+
data = File.read(__FILE__).split("\n__END__\n").last
|
|
48
|
+
fail unless data[0] == ?<
|
|
49
|
+
template = Tilt::EtanniTemplate.new('test.etn', 11) { data }
|
|
50
|
+
begin
|
|
51
|
+
template.render
|
|
52
|
+
fail 'should have raised an exception'
|
|
53
|
+
rescue => boom
|
|
54
|
+
assert_kind_of NameError, boom
|
|
55
|
+
line = boom.backtrace.grep(/^test\.etn:/).first
|
|
56
|
+
assert line, "Backtrace didn't contain test.etn"
|
|
57
|
+
file, line, meth = line.split(":")
|
|
58
|
+
assert_equal '13', line
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
test "backtrace file and line reporting with locals" do
|
|
63
|
+
data = File.read(__FILE__).split("\n__END__\n").last
|
|
64
|
+
fail unless data[0] == ?<
|
|
65
|
+
template = Tilt::EtanniTemplate.new('test.etn', 1) { data }
|
|
66
|
+
begin
|
|
67
|
+
template.render(nil, :name => 'Joe', :foo => 'bar')
|
|
68
|
+
fail 'should have raised an exception'
|
|
69
|
+
rescue => boom
|
|
70
|
+
assert_kind_of RuntimeError, boom
|
|
71
|
+
line = boom.backtrace.first
|
|
72
|
+
file, line, meth = line.split(":")
|
|
73
|
+
assert_equal 'test.etn', file
|
|
74
|
+
assert_equal '6', line
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class CompiledEtanniTemplateTest < Test::Unit::TestCase
|
|
81
|
+
def teardown
|
|
82
|
+
GC.start
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
class Scope
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
test "compiling template source to a method" do
|
|
89
|
+
template = Tilt::EtanniTemplate.new { |t| "Hello World!" }
|
|
90
|
+
template.render(Scope.new)
|
|
91
|
+
method = template.send(:compiled_method, [])
|
|
92
|
+
assert_kind_of UnboundMethod, method
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
test "loading and evaluating templates on #render" do
|
|
96
|
+
template = Tilt::EtanniTemplate.new { |t| "Hello World!" }
|
|
97
|
+
assert_equal "Hello World!", template.render(Scope.new)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
test "passing locals" do
|
|
101
|
+
template = Tilt::EtanniTemplate.new { 'Hey #{name}!' }
|
|
102
|
+
assert_equal "Hey Joe!", template.render(Scope.new, :name => 'Joe')
|
|
103
|
+
assert_equal "Hey Moe!", template.render(Scope.new, :name => 'Moe')
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
test "evaluating in an object scope" do
|
|
107
|
+
template = Tilt::EtanniTemplate.new { 'Hey #{@name}!' }
|
|
108
|
+
scope = Scope.new
|
|
109
|
+
scope.instance_variable_set :@name, 'Joe'
|
|
110
|
+
assert_equal "Hey Joe!", template.render(scope)
|
|
111
|
+
scope.instance_variable_set :@name, 'Moe'
|
|
112
|
+
assert_equal "Hey Moe!", template.render(scope)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
test "passing a block for yield" do
|
|
116
|
+
template = Tilt::EtanniTemplate.new { 'Hey #{yield}!' }
|
|
117
|
+
assert_equal "Hey Joe!", template.render(Scope.new) { 'Joe' }
|
|
118
|
+
assert_equal "Hey Moe!", template.render(Scope.new) { 'Moe' }
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
test "multiline templates" do
|
|
122
|
+
template = Tilt::EtanniTemplate.new { "Hello\nWorld!\n" }
|
|
123
|
+
assert_equal "Hello\nWorld!", template.render(Scope.new)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
test "template with '}'" do
|
|
127
|
+
template = Tilt::EtanniTemplate.new { "Hello }" }
|
|
128
|
+
assert_equal "Hello }", template.render
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
test "backtrace file and line reporting without locals" do
|
|
132
|
+
data = File.read(__FILE__).split("\n__END__\n").last
|
|
133
|
+
fail unless data[0] == ?<
|
|
134
|
+
template = Tilt::EtanniTemplate.new('test.etn', 11) { data }
|
|
135
|
+
begin
|
|
136
|
+
template.render(Scope.new)
|
|
137
|
+
fail 'should have raised an exception'
|
|
138
|
+
rescue => boom
|
|
139
|
+
assert_kind_of NameError, boom
|
|
140
|
+
line = boom.backtrace.first
|
|
141
|
+
line = boom.backtrace.grep(/^test\.etn:/).first
|
|
142
|
+
assert line, "Backtrace didn't contain test.etn"
|
|
143
|
+
file, line, meth = line.split(":")
|
|
144
|
+
assert_equal '13', line
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
test "backtrace file and line reporting with locals" do
|
|
149
|
+
data = File.read(__FILE__).split("\n__END__\n").last
|
|
150
|
+
fail unless data[0] == ?<
|
|
151
|
+
template = Tilt::EtanniTemplate.new('test.etn') { data }
|
|
152
|
+
begin
|
|
153
|
+
template.render(Scope.new, :name => 'Joe', :foo => 'bar')
|
|
154
|
+
fail 'should have raised an exception'
|
|
155
|
+
rescue => boom
|
|
156
|
+
assert_kind_of RuntimeError, boom
|
|
157
|
+
line = boom.backtrace.first
|
|
158
|
+
file, line, meth = line.split(":")
|
|
159
|
+
assert_equal 'test.etn', file
|
|
160
|
+
assert_equal '6', line
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
__END__
|
|
166
|
+
<html>
|
|
167
|
+
<body>
|
|
168
|
+
<h1>Hey #{name}!</h1>
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
<p>#{fail}</p>
|
|
172
|
+
</body>
|
|
173
|
+
</html>
|
data/test/tilt_fallback_test.rb
CHANGED
|
@@ -5,7 +5,7 @@ class TiltFallbackTest < Test::Unit::TestCase
|
|
|
5
5
|
class FailTemplate < Tilt::Template
|
|
6
6
|
def self.engine_initialized?; false end
|
|
7
7
|
def prepare; end
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
def initialize_engine
|
|
10
10
|
raise LoadError, "can't load #{self.class}"
|
|
11
11
|
end
|
|
@@ -22,7 +22,7 @@ class TiltFallbackTest < Test::Unit::TestCase
|
|
|
22
22
|
def set_ivar(obj, name, value)
|
|
23
23
|
obj.instance_variable_set("@#{name}", value)
|
|
24
24
|
end
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
def clear_ivar(obj, name)
|
|
27
27
|
ivar = "@#{name}"
|
|
28
28
|
value = obj.instance_variable_get(ivar)
|
|
@@ -49,7 +49,7 @@ class TiltFallbackTest < Test::Unit::TestCase
|
|
|
49
49
|
test "returns the last registered template" do
|
|
50
50
|
Tilt.register("md", WinTemplate)
|
|
51
51
|
Tilt.register("md", WinTemplate2)
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
template = Tilt["md"]
|
|
54
54
|
assert_equal WinTemplate2, template
|
|
55
55
|
end
|
|
@@ -87,7 +87,7 @@ class TiltFallbackTest < Test::Unit::TestCase
|
|
|
87
87
|
test ".prefer accepts multiple extensions" do
|
|
88
88
|
extensions = %w[md mkd markdown]
|
|
89
89
|
Tilt.prefer(FailTemplate, *extensions)
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
extensions.each do |ext|
|
|
92
92
|
template = Tilt[ext]
|
|
93
93
|
assert_equal FailTemplate, template
|
|
@@ -96,7 +96,7 @@ class TiltFallbackTest < Test::Unit::TestCase
|
|
|
96
96
|
|
|
97
97
|
test ".prefer with no extension should use already registered extensions" do
|
|
98
98
|
extensions = %w[md mkd markdown]
|
|
99
|
-
|
|
99
|
+
|
|
100
100
|
extensions.each do |ext|
|
|
101
101
|
Tilt.register(ext, FailTemplate)
|
|
102
102
|
Tilt.register(ext, WinTemplate)
|
|
@@ -109,7 +109,7 @@ class TiltFallbackTest < Test::Unit::TestCase
|
|
|
109
109
|
assert_equal FailTemplate, template
|
|
110
110
|
end
|
|
111
111
|
end
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
test ".prefer should only override extensions the preferred library is registered for" do
|
|
114
114
|
Tilt.register("md", WinTemplate)
|
|
115
115
|
Tilt.register("mkd", FailTemplate)
|
data/test/tilt_kramdown_test.rb
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@text-color: #ffc0cb;
|
|
@@ -6,21 +6,37 @@ begin
|
|
|
6
6
|
require 'less'
|
|
7
7
|
|
|
8
8
|
class LessTemplateTest < Test::Unit::TestCase
|
|
9
|
+
def assert_similar(a, b)
|
|
10
|
+
assert_equal a.gsub(/\s+/m, ' '), b.gsub(/\s+/m, ' ')
|
|
11
|
+
end
|
|
12
|
+
|
|
9
13
|
test "is registered for '.less' files" do
|
|
10
14
|
assert_equal Tilt::LessTemplate, Tilt['test.less']
|
|
11
15
|
end
|
|
12
16
|
|
|
13
17
|
test "compiles and evaluates the template on #render" do
|
|
14
18
|
template = Tilt::LessTemplate.new { |t| ".bg { background-color: #0000ff; } \n#main\n { .bg; }\n" }
|
|
15
|
-
|
|
19
|
+
assert_similar ".bg {\n background-color: #0000ff;\n}\n#main {\n background-color: #0000ff;\n}\n", template.render
|
|
16
20
|
end
|
|
17
21
|
|
|
18
22
|
test "can be rendered more than once" do
|
|
19
23
|
template = Tilt::LessTemplate.new { |t| ".bg { background-color: #0000ff; } \n#main\n { .bg; }\n" }
|
|
20
|
-
3.times {
|
|
24
|
+
3.times { assert_similar ".bg {\n background-color: #0000ff;\n}\n#main {\n background-color: #0000ff;\n}\n", template.render }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
test "can be passed a load path" do
|
|
28
|
+
template = Tilt::LessTemplate.new({
|
|
29
|
+
:paths => [Pathname(__FILE__).dirname]
|
|
30
|
+
}) {
|
|
31
|
+
<<-EOLESS
|
|
32
|
+
@import 'tilt_lesstemplate_test.less';
|
|
33
|
+
.bg {background-color: @text-color;}
|
|
34
|
+
EOLESS
|
|
35
|
+
}
|
|
36
|
+
assert_similar ".bg {\n background-color: #ffc0cb;\n}\n", template.render
|
|
21
37
|
end
|
|
22
38
|
end
|
|
23
39
|
|
|
24
40
|
rescue LoadError => boom
|
|
25
|
-
warn "Tilt::LessTemplate (disabled)
|
|
41
|
+
warn "Tilt::LessTemplate (disabled)"
|
|
26
42
|
end
|
data/test/tilt_markaby_test.rb
CHANGED
data/test/tilt_markdown_test.rb
CHANGED
|
@@ -18,7 +18,7 @@ module MarkdownTests
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def normalize(html)
|
|
21
|
-
Nokogiri::HTML.fragment(html).to_s
|
|
21
|
+
Nokogiri::HTML.fragment(html).to_s.strip
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def nrender(text, options = {})
|
|
@@ -26,7 +26,7 @@ module MarkdownTests
|
|
|
26
26
|
html.encode!("UTF-8") if html.respond_to?(:encode)
|
|
27
27
|
normalize(html)
|
|
28
28
|
end
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
def test_escape_html
|
|
31
31
|
html = nrender "Hello <b>World</b>"
|
|
32
32
|
assert_equal "<p>Hello <b>World</b></p>", html
|
|
@@ -98,7 +98,18 @@ begin
|
|
|
98
98
|
|
|
99
99
|
def test_smarty_pants_true
|
|
100
100
|
html = nrender "Hello ``World'' -- This is --- a test ...", :smartypants => true
|
|
101
|
-
assert_equal "<p>Hello “World
|
|
101
|
+
assert_equal "<p>Hello “World'' – This is — a test …</p>", html
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def test_fenced_code_blocks_with_lang
|
|
105
|
+
code = <<-COD.gsub(/^\s+/,"")
|
|
106
|
+
```ruby
|
|
107
|
+
puts "hello world"
|
|
108
|
+
```
|
|
109
|
+
COD
|
|
110
|
+
|
|
111
|
+
html = nrender code, :fenced_code_blocks => true
|
|
112
|
+
assert_equal %Q{<pre><code class="ruby">puts "hello world"\n</code></pre>}, html
|
|
102
113
|
end
|
|
103
114
|
end
|
|
104
115
|
rescue LoadError => boom
|
|
@@ -133,7 +144,7 @@ rescue LoadError => boom
|
|
|
133
144
|
# It should already be warned in the main tests
|
|
134
145
|
end
|
|
135
146
|
|
|
136
|
-
|
|
147
|
+
|
|
137
148
|
begin
|
|
138
149
|
require 'maruku'
|
|
139
150
|
|
|
@@ -155,7 +166,7 @@ rescue LoadError => boom
|
|
|
155
166
|
end
|
|
156
167
|
|
|
157
168
|
rescue LoadError
|
|
158
|
-
warn "Markdown tests need Nokogiri
|
|
169
|
+
warn "Markdown tests need Nokogiri"
|
|
159
170
|
end
|
|
160
171
|
|
|
161
172
|
|
|
@@ -2,6 +2,7 @@ require 'contest'
|
|
|
2
2
|
require 'tilt'
|
|
3
3
|
|
|
4
4
|
begin
|
|
5
|
+
require 'rdoc'
|
|
5
6
|
require 'rdoc/markup'
|
|
6
7
|
require 'rdoc/markup/to_html'
|
|
7
8
|
class RDocTemplateTest < Test::Unit::TestCase
|
|
@@ -11,14 +12,20 @@ begin
|
|
|
11
12
|
|
|
12
13
|
test "preparing and evaluating the template with #render" do
|
|
13
14
|
template = Tilt::RDocTemplate.new { |t| "= Hello World!" }
|
|
14
|
-
|
|
15
|
+
result = template.render.strip
|
|
16
|
+
assert_match /<h1/, result
|
|
17
|
+
assert_match />Hello World!</, result
|
|
15
18
|
end
|
|
16
19
|
|
|
17
20
|
test "can be rendered more than once" do
|
|
18
21
|
template = Tilt::RDocTemplate.new { |t| "= Hello World!" }
|
|
19
|
-
3.times
|
|
22
|
+
3.times do
|
|
23
|
+
result = template.render.strip
|
|
24
|
+
assert_match /<h1/, result
|
|
25
|
+
assert_match />Hello World!</, result
|
|
26
|
+
end
|
|
20
27
|
end
|
|
21
28
|
end
|
|
22
29
|
rescue LoadError => boom
|
|
23
|
-
warn "Tilt::RDocTemplate (disabled)
|
|
30
|
+
warn "Tilt::RDocTemplate (disabled) [#{boom}]"
|
|
24
31
|
end
|
|
@@ -37,6 +37,11 @@ begin
|
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
+
test "redcarpet2 is our default choice" do
|
|
41
|
+
template = Tilt::RedcarpetTemplate.new {}
|
|
42
|
+
assert_equal Tilt::RedcarpetTemplate::Redcarpet2, template.prepare.class
|
|
43
|
+
end
|
|
44
|
+
|
|
40
45
|
test "preparing and evaluating templates on #render" do
|
|
41
46
|
template = Tilt::RedcarpetTemplate.new { |t| "# Hello World!" }
|
|
42
47
|
assert_equal "<h1>Hello World!</h1>\n", template.render
|
|
@@ -48,12 +53,19 @@ begin
|
|
|
48
53
|
end
|
|
49
54
|
|
|
50
55
|
test "smartypants when :smart is set" do
|
|
51
|
-
template = Tilt::RedcarpetTemplate.new(:
|
|
56
|
+
template = Tilt::RedcarpetTemplate.new(:smartypants => true) { |t|
|
|
57
|
+
"OKAY -- 'Smarty Pants'" }
|
|
58
|
+
assert_match /<p>OKAY – 'Smarty Pants'<\/p>/,
|
|
59
|
+
template.render
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
test "smartypants with a rendererer instance" do
|
|
63
|
+
template = Tilt::RedcarpetTemplate.new(:renderer => Redcarpet::Render::HTML.new(:hard_wrap => true), :smartypants => true) { |t|
|
|
52
64
|
"OKAY -- 'Smarty Pants'" }
|
|
53
|
-
assert_match /<p>OKAY &
|
|
65
|
+
assert_match /<p>OKAY – 'Smarty Pants'<\/p>/,
|
|
54
66
|
template.render
|
|
55
67
|
end
|
|
56
68
|
end
|
|
57
69
|
rescue LoadError => boom
|
|
58
|
-
warn "Tilt::RedcarpetTemplate (disabled)
|
|
70
|
+
warn "Tilt::RedcarpetTemplate (disabled)"
|
|
59
71
|
end
|
|
@@ -18,7 +18,19 @@ begin
|
|
|
18
18
|
template = Tilt::RedClothTemplate.new { |t| "h1. Hello World!" }
|
|
19
19
|
3.times { assert_equal "<h1>Hello World!</h1>", template.render }
|
|
20
20
|
end
|
|
21
|
+
|
|
22
|
+
test "ignores unknown options" do
|
|
23
|
+
template = Tilt::RedClothTemplate.new(:foo => "bar") { |t| "h1. Hello World!" }
|
|
24
|
+
3.times { assert_equal "<h1>Hello World!</h1>", template.render }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
test "passes in RedCloth options" do
|
|
28
|
+
template = Tilt::RedClothTemplate.new { |t| "Hard breaks are\ninserted by default." }
|
|
29
|
+
assert_equal "<p>Hard breaks are<br />\ninserted by default.</p>", template.render
|
|
30
|
+
template = Tilt::RedClothTemplate.new(:hard_breaks => false) { |t| "But they can be\nturned off." }
|
|
31
|
+
assert_equal "<p>But they can be\nturned off.</p>", template.render
|
|
32
|
+
end
|
|
21
33
|
end
|
|
22
34
|
rescue LoadError => boom
|
|
23
|
-
warn "Tilt::RedClothTemplate (disabled)
|
|
35
|
+
warn "Tilt::RedClothTemplate (disabled)"
|
|
24
36
|
end
|
|
@@ -119,7 +119,7 @@ class CompiledStringTemplateTest < Test::Unit::TestCase
|
|
|
119
119
|
assert_equal "Hello\nWorld!\n", template.render(Scope.new)
|
|
120
120
|
end
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
|
|
123
123
|
test "template with '}'" do
|
|
124
124
|
template = Tilt::StringTemplate.new { "Hello }" }
|
|
125
125
|
assert_equal "Hello }", template.render
|