tilt 1.2.2 → 1.3.3

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.
Files changed (43) hide show
  1. data/Gemfile +2 -0
  2. data/README.md +59 -24
  3. data/TEMPLATES.md +252 -175
  4. data/lib/tilt/builder.rb +40 -0
  5. data/lib/tilt/coffee.rb +50 -0
  6. data/lib/tilt/css.rb +72 -0
  7. data/lib/tilt/erb.rb +110 -0
  8. data/lib/tilt/haml.rb +64 -0
  9. data/lib/tilt/liquid.rb +41 -0
  10. data/lib/tilt/markaby.rb +52 -0
  11. data/lib/tilt/markdown.rb +190 -0
  12. data/lib/tilt/nokogiri.rb +43 -0
  13. data/lib/tilt/radius.rb +51 -0
  14. data/lib/tilt/rdoc.rb +32 -0
  15. data/lib/tilt/string.rb +21 -0
  16. data/lib/tilt/template.rb +285 -0
  17. data/lib/tilt/textile.rb +25 -0
  18. data/lib/tilt/wiki.rb +50 -0
  19. data/lib/tilt/yajl.rb +94 -0
  20. data/lib/tilt.rb +105 -816
  21. data/test/tilt_blueclothtemplate_test.rb +6 -25
  22. data/test/tilt_coffeescripttemplate_test.rb +32 -1
  23. data/test/tilt_compilesite_test.rb +1 -1
  24. data/test/tilt_creoletemplate_test.rb +28 -0
  25. data/test/tilt_erbtemplate_test.rb +18 -19
  26. data/test/tilt_erubistemplate_test.rb +12 -2
  27. data/test/tilt_fallback_test.rb +122 -0
  28. data/test/tilt_hamltemplate_test.rb +4 -4
  29. data/test/tilt_kramdown_test.rb +42 -0
  30. data/test/tilt_lesstemplate_test.rb +3 -2
  31. data/test/tilt_markdown_test.rb +161 -0
  32. data/test/tilt_marukutemplate_test.rb +48 -0
  33. data/test/tilt_nokogiritemplate_test.rb +11 -0
  34. data/test/tilt_radiustemplate_test.rb +3 -3
  35. data/test/tilt_rdiscounttemplate_test.rb +16 -6
  36. data/test/tilt_redcarpettemplate_test.rb +59 -0
  37. data/test/tilt_sasstemplate_test.rb +0 -1
  38. data/test/tilt_stringtemplate_test.rb +10 -3
  39. data/test/tilt_template_test.rb +6 -0
  40. data/test/tilt_wikiclothtemplate_test.rb +32 -0
  41. data/test/tilt_yajltemplate_test.rb +92 -0
  42. data/tilt.gemspec +39 -8
  43. metadata +276 -150
@@ -5,35 +5,16 @@ begin
5
5
  require 'bluecloth'
6
6
 
7
7
  class BlueClothTemplateTest < Test::Unit::TestCase
8
- setup do
9
- Tilt.register('markdown', Tilt::BlueClothTemplate)
10
- Tilt.register('md', Tilt::BlueClothTemplate)
11
- Tilt.register('mkd', Tilt::BlueClothTemplate)
8
+ test "registered for '.md' files" do
9
+ assert Tilt.mappings['md'].include?(Tilt::BlueClothTemplate)
12
10
  end
13
11
 
14
- teardown do
15
- # Need to revert to RDiscount, otherwise the RDiscount test will fail
16
- Tilt.register('markdown', Tilt::RDiscountTemplate)
17
- Tilt.register('md', Tilt::RDiscountTemplate)
18
- Tilt.register('mkd', Tilt::RDiscountTemplate)
12
+ test "registered for '.mkd' files" do
13
+ assert Tilt.mappings['mkd'].include?(Tilt::BlueClothTemplate)
19
14
  end
20
15
 
21
- test "registered for '.markdown' files unless RDiscount is loaded" do
22
- unless defined?(RDiscount)
23
- assert_equal Tilt::BlueClothTemplate, Tilt['test.markdown']
24
- end
25
- end
26
-
27
- test "registered for '.md' files unless RDiscount is loaded" do
28
- unless defined?(RDiscount)
29
- assert_equal Tilt::BlueClothTemplate, Tilt['test.md']
30
- end
31
- end
32
-
33
- test "registered for '.mkd' files unless RDiscount is loaded" do
34
- unless defined?(RDiscount)
35
- assert_equal Tilt::BlueClothTemplate, Tilt['test.mkd']
36
- end
16
+ test "registered for '.markdown' files" do
17
+ assert Tilt.mappings['markdown'].include?(Tilt::BlueClothTemplate)
37
18
  end
38
19
 
39
20
  test "preparing and evaluating templates on #render" do
@@ -20,9 +20,40 @@ begin
20
20
  end
21
21
 
22
22
  test "disabling coffee-script wrapper" do
23
- template = Tilt::CoffeeScriptTemplate.new(:no_wrap => true) { |t| "puts 'Hello, World!'\n" }
23
+ str = "puts 'Hello, World!'\n"
24
+
25
+ template = Tilt::CoffeeScriptTemplate.new(:bare => true) { str }
26
+ assert_equal "puts('Hello, World!');", template.render
27
+
28
+ template2 = Tilt::CoffeeScriptTemplate.new(:no_wrap => true) { str}
24
29
  assert_equal "puts('Hello, World!');", template.render
25
30
  end
31
+
32
+ context "disabling coffee-script wrapper globally" do
33
+ setup do
34
+ @bare = Tilt::CoffeeScriptTemplate.default_bare
35
+ end
36
+
37
+ teardown do
38
+ Tilt::CoffeeScriptTemplate.default_bare = @bare
39
+ end
40
+
41
+ test "no options" do
42
+ template = Tilt::CoffeeScriptTemplate.new { |t| "puts 'Hello, World!'\n" }
43
+ assert_match "puts('Hello, World!');", template.render
44
+ assert_match "(function() {", template.render
45
+ end
46
+
47
+ test "overridden by :bare" do
48
+ template = Tilt::CoffeeScriptTemplate.new(:bare => false) { "puts 'Hello, World!'\n" }
49
+ assert_not_equal "puts('Hello, World!');", template.render
50
+ end
51
+
52
+ test "overridden by :no_wrap" do
53
+ template = Tilt::CoffeeScriptTemplate.new(:no_wrap => false) { "puts 'Hello, World!'\n" }
54
+ assert_not_equal "puts('Hello, World!');", template.render
55
+ end
56
+ end
26
57
  end
27
58
 
28
59
  rescue LoadError => boom
@@ -39,7 +39,7 @@ class CompileSiteTest < Test::Unit::TestCase
39
39
  locals = { "local#{i}" => 'value' }
40
40
  res = template.render(self, locals)
41
41
  thread_id = Thread.current.object_id
42
- res = template.render(self, "local#{thread_id.to_s}" => 'value')
42
+ res = template.render(self, "local#{thread_id.abs.to_s}" => 'value')
43
43
  rescue => boom
44
44
  main_thread.raise(boom)
45
45
  end
@@ -0,0 +1,28 @@
1
+ require 'contest'
2
+ require 'tilt'
3
+
4
+ begin
5
+ require 'creole'
6
+
7
+ class CreoleTemplateTest < Test::Unit::TestCase
8
+ test "is registered for '.creole' files" do
9
+ assert_equal Tilt::CreoleTemplate, Tilt['test.creole']
10
+ end
11
+
12
+ test "registered for '.wiki' files" do
13
+ assert Tilt.mappings['wiki'].include?(Tilt::CreoleTemplate)
14
+ end
15
+
16
+ test "compiles and evaluates the template on #render" do
17
+ template = Tilt::CreoleTemplate.new { |t| "= Hello World!" }
18
+ assert_equal "<h1>Hello World!</h1>", template.render
19
+ end
20
+
21
+ test "can be rendered more than once" do
22
+ template = Tilt::CreoleTemplate.new { |t| "= Hello World!" }
23
+ 3.times { assert_equal "<h1>Hello World!</h1>", template.render }
24
+ end
25
+ end
26
+ rescue LoadError => boom
27
+ warn "Tilt::CreoleTemplate (disabled)\n"
28
+ end
@@ -6,12 +6,11 @@ require 'tempfile'
6
6
 
7
7
  class ERBTemplateTest < Test::Unit::TestCase
8
8
  test "registered for '.erb' files" do
9
- assert_equal Tilt::ERBTemplate, Tilt['test.erb']
10
- assert_equal Tilt::ERBTemplate, Tilt['test.html.erb']
9
+ assert Tilt.mappings['erb'].include?(Tilt::ERBTemplate)
11
10
  end
12
11
 
13
12
  test "registered for '.rhtml' files" do
14
- assert_equal Tilt::ERBTemplate, Tilt['test.rhtml']
13
+ assert Tilt.mappings['rhtml'].include?(Tilt::ERBTemplate)
15
14
  end
16
15
 
17
16
  test "loading and evaluating templates on #render" do
@@ -67,9 +66,9 @@ class ERBTemplateTest < Test::Unit::TestCase
67
66
  fail 'should have raised an exception'
68
67
  rescue => boom
69
68
  assert_kind_of NameError, boom
70
- line = boom.backtrace.first
69
+ line = boom.backtrace.grep(/^test\.erb:/).first
70
+ assert line, "Backtrace didn't contain test.erb"
71
71
  file, line, meth = line.split(":")
72
- assert_equal 'test.erb', file
73
72
  assert_equal '13', line
74
73
  end
75
74
  end
@@ -90,18 +89,18 @@ class ERBTemplateTest < Test::Unit::TestCase
90
89
  end
91
90
  end
92
91
 
93
- test "default non-stripping trim mode" do
94
- template = Tilt.new('test.erb', 1) { "\n<%= 1 + 1 %>\n" }
95
- assert_equal "\n2\n", template.render
92
+ test "default stripping trim mode" do
93
+ template = Tilt::ERBTemplate.new('test.erb', 1) { "\n<%= 1 + 1 %>\n" }
94
+ assert_equal "\n2", template.render
96
95
  end
97
96
 
98
97
  test "stripping trim mode" do
99
- template = Tilt.new('test.erb', 1, :trim => '-') { "\n<%= 1 + 1 -%>\n" }
98
+ template = Tilt::ERBTemplate.new('test.erb', 1, :trim => '-') { "\n<%= 1 + 1 -%>\n" }
100
99
  assert_equal "\n2", template.render
101
100
  end
102
101
 
103
102
  test "shorthand whole line syntax trim mode" do
104
- template = Tilt.new('test.erb', :trim => '%') { "\n% if true\nhello\n%end\n" }
103
+ template = Tilt::ERBTemplate.new('test.erb', :trim => '%') { "\n% if true\nhello\n%end\n" }
105
104
  assert_equal "\nhello\n", template.render
106
105
  end
107
106
 
@@ -164,9 +163,9 @@ class CompiledERBTemplateTest < Test::Unit::TestCase
164
163
  fail 'should have raised an exception'
165
164
  rescue => boom
166
165
  assert_kind_of NameError, boom
167
- line = boom.backtrace.first
166
+ line = boom.backtrace.grep(/^test\.erb:/).first
167
+ assert line, "Backtrace didn't contain test.erb"
168
168
  file, line, meth = line.split(":")
169
- assert_equal 'test.erb', file
170
169
  assert_equal '13', line
171
170
  end
172
171
  end
@@ -187,18 +186,18 @@ class CompiledERBTemplateTest < Test::Unit::TestCase
187
186
  end
188
187
  end
189
188
 
190
- test "default non-stripping trim mode" do
191
- template = Tilt.new('test.erb') { "\n<%= 1 + 1 %>\n" }
192
- assert_equal "\n2\n", template.render(Scope.new)
189
+ test "default stripping trim mode" do
190
+ template = Tilt::ERBTemplate.new('test.erb') { "\n<%= 1 + 1 %>\n" }
191
+ assert_equal "\n2", template.render(Scope.new)
193
192
  end
194
193
 
195
194
  test "stripping trim mode" do
196
- template = Tilt.new('test.erb', :trim => '-') { "\n<%= 1 + 1 -%>\n" }
195
+ template = Tilt::ERBTemplate.new('test.erb', :trim => '-') { "\n<%= 1 + 1 -%>\n" }
197
196
  assert_equal "\n2", template.render(Scope.new)
198
197
  end
199
198
 
200
199
  test "shorthand whole line syntax trim mode" do
201
- template = Tilt.new('test.erb', :trim => '%') { "\n% if true\nhello\n%end\n" }
200
+ template = Tilt::ERBTemplate.new('test.erb', :trim => '%') { "\n% if true\nhello\n%end\n" }
202
201
  assert_equal "\nhello\n", template.render(Scope.new)
203
202
  end
204
203
 
@@ -208,7 +207,7 @@ class CompiledERBTemplateTest < Test::Unit::TestCase
208
207
  f.puts('ふが <%= @hoge %>')
209
208
  f.close()
210
209
  @hoge = "ほげ"
211
- erb = Tilt['erb'].new(f.path)
210
+ erb = Tilt::ERBTemplate.new(f.path)
212
211
  3.times { erb.render(self) }
213
212
  f.delete
214
213
  end
@@ -218,7 +217,7 @@ class CompiledERBTemplateTest < Test::Unit::TestCase
218
217
  f.puts('ふが <%= @hoge %>')
219
218
  f.close()
220
219
  @hoge = "ほげ"
221
- erb = Tilt['erb'].new(f.path, :default_encoding => 'UTF-8')
220
+ erb = Tilt::ERBTemplate.new(f.path, :default_encoding => 'UTF-8')
222
221
  3.times { erb.render(self) }
223
222
  f.delete
224
223
  end
@@ -9,6 +9,16 @@ begin
9
9
  assert_equal Tilt::ErubisTemplate, Tilt['test.html.erubis']
10
10
  end
11
11
 
12
+ test "registered above ERB" do
13
+ %w[erb rhtml].each do |ext|
14
+ mappings = Tilt.mappings[ext]
15
+ erubis_idx = mappings.index(Tilt::ErubisTemplate)
16
+ erb_idx = mappings.index(Tilt::ERBTemplate)
17
+ assert erubis_idx < erb_idx,
18
+ "#{erubis_idx} should be lower than #{erb_idx}"
19
+ end
20
+ end
21
+
12
22
  test "preparing and evaluating templates on #render" do
13
23
  template = Tilt::ErubisTemplate.new { |t| "Hello World!" }
14
24
  assert_equal "Hello World!", template.render
@@ -62,9 +72,9 @@ begin
62
72
  fail 'should have raised an exception'
63
73
  rescue => boom
64
74
  assert_kind_of NameError, boom
65
- line = boom.backtrace.first
75
+ line = boom.backtrace.grep(/^test\.erubis:/).first
76
+ assert line, "Backtrace didn't contain test.erubis"
66
77
  file, line, meth = line.split(":")
67
- assert_equal 'test.erubis', file
68
78
  assert_equal '13', line
69
79
  end
70
80
  end
@@ -0,0 +1,122 @@
1
+ require 'contest'
2
+ require 'tilt'
3
+
4
+ class TiltFallbackTest < Test::Unit::TestCase
5
+ class FailTemplate < Tilt::Template
6
+ def self.engine_initialized?; false end
7
+ def prepare; end
8
+
9
+ def initialize_engine
10
+ raise LoadError, "can't load #{self.class}"
11
+ end
12
+ end
13
+
14
+ class WinTemplate < Tilt::Template
15
+ def self.engine_initialized?; true end
16
+ def prepare; end
17
+ end
18
+
19
+ FailTemplate2 = Class.new(FailTemplate)
20
+ WinTemplate2 = Class.new(WinTemplate)
21
+
22
+ def set_ivar(obj, name, value)
23
+ obj.instance_variable_set("@#{name}", value)
24
+ end
25
+
26
+ def clear_ivar(obj, name)
27
+ ivar = "@#{name}"
28
+ value = obj.instance_variable_get(ivar)
29
+ ensure
30
+ obj.instance_variable_set(ivar, value.dup.clear)
31
+ end
32
+
33
+ setup do
34
+ # Make sure every test have no mappings.
35
+ @p = clear_ivar(Tilt, :preferred_mappings)
36
+ @t = clear_ivar(Tilt, :template_mappings)
37
+ end
38
+
39
+ teardown do
40
+ set_ivar(Tilt, :preferred_mappings, @p)
41
+ set_ivar(Tilt, :template_mappings, @t)
42
+ end
43
+
44
+ test "returns nil on unregistered extensions" do
45
+ template = Tilt["md"]
46
+ assert_equal nil, template
47
+ end
48
+
49
+ test "returns the last registered template" do
50
+ Tilt.register("md", WinTemplate)
51
+ Tilt.register("md", WinTemplate2)
52
+
53
+ template = Tilt["md"]
54
+ assert_equal WinTemplate2, template
55
+ end
56
+
57
+ test "returns the last registered working template" do
58
+ Tilt.register("md", WinTemplate)
59
+ Tilt.register("md", FailTemplate)
60
+
61
+ template = Tilt["md"]
62
+ assert_equal WinTemplate, template
63
+ end
64
+
65
+ test "if every template fails, raise the exception from the first template" do
66
+ Tilt.register("md", FailTemplate)
67
+ Tilt.register("md", FailTemplate2)
68
+
69
+ exc = assert_raise(LoadError) { Tilt["md"] }
70
+ assert_match /FailTemplate2/, exc.message
71
+ end
72
+
73
+ test ".prefer should also register the template" do
74
+ Tilt.prefer(WinTemplate, "md")
75
+ assert Tilt.registered?("md")
76
+ end
77
+
78
+ test ".prefer always win" do
79
+ Tilt.register("md", FailTemplate)
80
+ Tilt.register("md", WinTemplate)
81
+ Tilt.prefer(FailTemplate, "md")
82
+
83
+ template = Tilt["md"]
84
+ assert_equal FailTemplate, template
85
+ end
86
+
87
+ test ".prefer accepts multiple extensions" do
88
+ extensions = %w[md mkd markdown]
89
+ Tilt.prefer(FailTemplate, *extensions)
90
+
91
+ extensions.each do |ext|
92
+ template = Tilt[ext]
93
+ assert_equal FailTemplate, template
94
+ end
95
+ end
96
+
97
+ test ".prefer with no extension should use already registered extensions" do
98
+ extensions = %w[md mkd markdown]
99
+
100
+ extensions.each do |ext|
101
+ Tilt.register(ext, FailTemplate)
102
+ Tilt.register(ext, WinTemplate)
103
+ end
104
+
105
+ Tilt.prefer(FailTemplate)
106
+
107
+ extensions.each do |ext|
108
+ template = Tilt[ext]
109
+ assert_equal FailTemplate, template
110
+ end
111
+ end
112
+
113
+ test ".prefer should only override extensions the preferred library is registered for" do
114
+ Tilt.register("md", WinTemplate)
115
+ Tilt.register("mkd", FailTemplate)
116
+ Tilt.register("mkd", WinTemplate)
117
+ Tilt.prefer(FailTemplate)
118
+ assert_equal FailTemplate, Tilt["mkd"]
119
+ assert_equal WinTemplate, Tilt["md"]
120
+ end
121
+ end
122
+
@@ -48,9 +48,9 @@ begin
48
48
  fail 'should have raised an exception'
49
49
  rescue => boom
50
50
  assert_kind_of NameError, boom
51
- line = boom.backtrace.first
51
+ line = boom.backtrace.grep(/^test\.haml:/).first
52
+ assert line, "Backtrace didn't contain test.haml"
52
53
  file, line, meth = line.split(":")
53
- assert_equal 'test.haml', file
54
54
  assert_equal '12', line
55
55
  end
56
56
  end
@@ -108,9 +108,9 @@ begin
108
108
  fail 'should have raised an exception'
109
109
  rescue => boom
110
110
  assert_kind_of NameError, boom
111
- line = boom.backtrace.first
111
+ line = boom.backtrace.grep(/^test\.haml:/).first
112
+ assert line, "Backtrace didn't contain test.haml"
112
113
  file, line, meth = line.split(":")
113
- assert_equal 'test.haml', file
114
114
  assert_equal '12', line
115
115
  end
116
116
  end
@@ -0,0 +1,42 @@
1
+ require 'contest'
2
+ require 'tilt'
3
+
4
+ begin
5
+ require 'kramdown'
6
+
7
+ class MarukuTemplateTest < Test::Unit::TestCase
8
+ test "registered for '.md' files" do
9
+ assert Tilt.mappings['md'].include?(Tilt::KramdownTemplate)
10
+ end
11
+
12
+ test "registered for '.mkd' files" do
13
+ assert Tilt.mappings['mkd'].include?(Tilt::KramdownTemplate)
14
+ end
15
+
16
+ test "registered for '.markdown' files" do
17
+ assert Tilt.mappings['markdown'].include?(Tilt::KramdownTemplate)
18
+ end
19
+
20
+ test "registered above MarukuTemplate" do
21
+ %w[md mkd markdown].each do |ext|
22
+ mappings = Tilt.mappings[ext]
23
+ kram_idx = mappings.index(Tilt::KramdownTemplate)
24
+ maru_idx = mappings.index(Tilt::MarukuTemplate)
25
+ assert kram_idx < maru_idx,
26
+ "#{kram_idx} should be lower than #{maru_idx}"
27
+ end
28
+ end
29
+
30
+ test "preparing and evaluating templates on #render" do
31
+ template = Tilt::KramdownTemplate.new { |t| "# Hello World!" }
32
+ assert_equal "<h1 id='hello_world'>Hello World!</h1>", template.render
33
+ end
34
+
35
+ test "can be rendered more than once" do
36
+ template = Tilt::KramdownTemplate.new { |t| "# Hello World!" }
37
+ 3.times { assert_equal "<h1 id='hello_world'>Hello World!</h1>", template.render }
38
+ end
39
+ end
40
+ rescue LoadError => boom
41
+ warn "Tilt::KramdownTemplate (disabled)\n"
42
+ end
@@ -2,6 +2,7 @@ require 'contest'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
+ require 'pathname'
5
6
  require 'less'
6
7
 
7
8
  class LessTemplateTest < Test::Unit::TestCase
@@ -11,12 +12,12 @@ begin
11
12
 
12
13
  test "compiles and evaluates the template on #render" do
13
14
  template = Tilt::LessTemplate.new { |t| ".bg { background-color: #0000ff; } \n#main\n { .bg; }\n" }
14
- assert_equal ".bg, #main { background-color: #0000ff; }\n", template.render
15
+ assert_equal ".bg {\n background-color: #0000ff;\n}\n#main {\n background-color: #0000ff;\n}\n", template.render
15
16
  end
16
17
 
17
18
  test "can be rendered more than once" do
18
19
  template = Tilt::LessTemplate.new { |t| ".bg { background-color: #0000ff; } \n#main\n { .bg; }\n" }
19
- 3.times { assert_equal ".bg, #main { background-color: #0000ff; }\n", template.render }
20
+ 3.times { assert_equal ".bg {\n background-color: #0000ff;\n}\n#main {\n background-color: #0000ff;\n}\n", template.render }
20
21
  end
21
22
  end
22
23
 
@@ -0,0 +1,161 @@
1
+ # coding: UTF-8
2
+ require 'tilt'
3
+
4
+ begin
5
+ require 'nokogiri'
6
+
7
+ module MarkdownTests
8
+ def self.included(mod)
9
+ class << mod
10
+ def template(t = nil)
11
+ t.nil? ? @template : @template = t
12
+ end
13
+ end
14
+ end
15
+
16
+ def render(text, options = {})
17
+ self.class.template.new(options) { text }.render
18
+ end
19
+
20
+ def normalize(html)
21
+ Nokogiri::HTML.fragment(html).to_s
22
+ end
23
+
24
+ def nrender(text, options = {})
25
+ html = render(text, options)
26
+ html.encode!("UTF-8") if html.respond_to?(:encode)
27
+ normalize(html)
28
+ end
29
+
30
+ def test_escape_html
31
+ html = nrender "Hello <b>World</b>"
32
+ assert_equal "<p>Hello <b>World</b></p>", html
33
+ end
34
+
35
+ def test_escape_html_false
36
+ html = nrender "Hello <b>World</b>", :escape_html => false
37
+ assert_equal "<p>Hello <b>World</b></p>", html
38
+ end
39
+
40
+ def test_escape_html_true
41
+ if self.class.template == Tilt::RedcarpetTemplate
42
+ flunk "redcarpet doesn't support :escape_html yet"
43
+ end
44
+ html = nrender "Hello <b>World</b>", :escape_html => true
45
+ assert_equal "<p>Hello &lt;b&gt;World&lt;/b&gt;</p>", html
46
+ end
47
+
48
+ def test_smart_quotes
49
+ html = nrender 'Hello "World"'
50
+ assert_equal '<p>Hello "World"</p>', html
51
+ end
52
+
53
+ def test_smart_quotes_false
54
+ html = nrender 'Hello "World"', :smartypants => false
55
+ assert_equal '<p>Hello "World"</p>', html
56
+ end
57
+
58
+ def test_smart_quotes_true
59
+ html = nrender 'Hello "World"', :smartypants => true
60
+ assert_equal '<p>Hello “World”</p>', html
61
+ end
62
+
63
+ def test_smarty_pants
64
+ html = nrender "Hello ``World'' -- This is --- a test ..."
65
+ assert_equal "<p>Hello ``World'' -- This is --- a test ...</p>", html
66
+ end
67
+
68
+ def test_smarty_pants_false
69
+ html = nrender "Hello ``World'' -- This is --- a test ...", :smartypants => false
70
+ assert_equal "<p>Hello ``World'' -- This is --- a test ...</p>", html
71
+ 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
+ end
78
+
79
+ begin
80
+ require 'rdiscount'
81
+
82
+ class MarkdownRDiscountTest < Test::Unit::TestCase
83
+ include MarkdownTests
84
+ template Tilt::RDiscountTemplate
85
+ end
86
+ rescue LoadError => boom
87
+ # It should already be warned in the main tests
88
+ end
89
+
90
+ begin
91
+ require 'redcarpet'
92
+
93
+ class MarkdownRedcarpetTest < Test::Unit::TestCase
94
+ include MarkdownTests
95
+ template Tilt::RedcarpetTemplate
96
+ # Doesn't support escaping
97
+ undef test_escape_html_true
98
+
99
+ def test_smarty_pants_true
100
+ html = nrender "Hello ``World'' -- This is --- a test ...", :smartypants => true
101
+ assert_equal "<p>Hello “World” – This is — a test …</p>", html
102
+ end
103
+ end
104
+ rescue LoadError => boom
105
+ # It should already be warned in the main tests
106
+ end
107
+
108
+ begin
109
+ require 'bluecloth'
110
+
111
+ class MarkdownBlueClothTest < Test::Unit::TestCase
112
+ include MarkdownTests
113
+ template Tilt::BlueClothTemplate
114
+ end
115
+ rescue LoadError => boom
116
+ # It should already be warned in the main tests
117
+ end
118
+
119
+ begin
120
+ require 'kramdown'
121
+
122
+ class MarkdownKramdownTest < Test::Unit::TestCase
123
+ include MarkdownTests
124
+ template Tilt::KramdownTemplate
125
+ # Doesn't support escaping
126
+ undef test_escape_html_true
127
+ # Smarty Pants is *always* on, but doesn't support it fully
128
+ undef test_smarty_pants
129
+ undef test_smarty_pants_false
130
+ undef test_smarty_pants_true
131
+ end
132
+ rescue LoadError => boom
133
+ # It should already be warned in the main tests
134
+ end
135
+
136
+
137
+ begin
138
+ require 'maruku'
139
+
140
+ class MarkdownMarukuTest < Test::Unit::TestCase
141
+ include MarkdownTests
142
+ template Tilt::MarukuTemplate
143
+ # Doesn't support escaping
144
+ undef test_escape_html_true
145
+ # Doesn't support Smarty Pants, and even fails on ``Foobar''
146
+ undef test_smarty_pants
147
+ undef test_smarty_pants_false
148
+ undef test_smarty_pants_true
149
+ # Smart Quotes is always on
150
+ undef test_smart_quotes
151
+ undef test_smart_quotes_false
152
+ end
153
+ rescue LoadError => boom
154
+ # It should already be warned in the main tests
155
+ end
156
+
157
+ rescue LoadError
158
+ warn "Markdown tests need Nokogiri\n"
159
+ end
160
+
161
+
@@ -0,0 +1,48 @@
1
+ require 'contest'
2
+ require 'tilt'
3
+
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
19
+
20
+ test "registered below Kramdown" do
21
+ %w[md mkd markdown].each do |ext|
22
+ mappings = Tilt.mappings[ext]
23
+ kram_idx = mappings.index(Tilt::KramdownTemplate)
24
+ maru_idx = mappings.index(Tilt::MarukuTemplate)
25
+ assert maru_idx > kram_idx,
26
+ "#{maru_idx} should be higher than #{kram_idx}"
27
+ end
28
+ end
29
+
30
+ test "preparing and evaluating templates on #render" do
31
+ template = Tilt::MarukuTemplate.new { |t| "# Hello World!" }
32
+ assert_equal "<h1 id='hello_world'>Hello World!</h1>", template.render
33
+ end
34
+
35
+ test "can be rendered more than once" do
36
+ template = Tilt::MarukuTemplate.new { |t| "# Hello World!" }
37
+ 3.times { assert_equal "<h1 id='hello_world'>Hello World!</h1>", template.render }
38
+ end
39
+
40
+ test "removes HTML when :filter_html is set" do
41
+ template = Tilt::MarukuTemplate.new(:filter_html => true) { |t|
42
+ "HELLO <blink>WORLD</blink>" }
43
+ assert_equal "<p>HELLO </p>", template.render
44
+ end
45
+ end
46
+ rescue LoadError => boom
47
+ warn "Tilt::MarukuTemplate (disabled)\n"
48
+ end