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.
Files changed (53) hide show
  1. data/CHANGELOG.md +40 -0
  2. data/COPYING +1 -1
  3. data/Gemfile +31 -1
  4. data/HACKING +16 -0
  5. data/README.md +26 -2
  6. data/Rakefile +25 -1
  7. data/TEMPLATES.md +13 -13
  8. data/bin/tilt +8 -6
  9. data/lib/tilt/asciidoc.rb +34 -0
  10. data/lib/tilt/coffee.rb +4 -0
  11. data/lib/tilt/css.rb +10 -2
  12. data/lib/tilt/csv.rb +71 -0
  13. data/lib/tilt/erb.rb +2 -2
  14. data/lib/tilt/etanni.rb +27 -0
  15. data/lib/tilt/liquid.rb +4 -0
  16. data/lib/tilt/markdown.rb +35 -11
  17. data/lib/tilt/nokogiri.rb +4 -4
  18. data/lib/tilt/plain.rb +20 -0
  19. data/lib/tilt/radius.rb +4 -0
  20. data/lib/tilt/rdoc.rb +20 -5
  21. data/lib/tilt/template.rb +96 -92
  22. data/lib/tilt/textile.rb +5 -0
  23. data/lib/tilt/wiki.rb +8 -0
  24. data/lib/tilt.rb +15 -1
  25. data/test/tilt_asciidoctor_test.rb +44 -0
  26. data/test/tilt_blueclothtemplate_test.rb +1 -1
  27. data/test/tilt_coffeescripttemplate_test.rb +64 -11
  28. data/test/tilt_creoletemplate_test.rb +1 -1
  29. data/test/tilt_csv_test.rb +69 -0
  30. data/test/tilt_erbtemplate_test.rb +5 -0
  31. data/test/tilt_erubistemplate_test.rb +1 -1
  32. data/test/tilt_etannitemplate_test.rb +173 -0
  33. data/test/tilt_fallback_test.rb +6 -6
  34. data/test/tilt_hamltemplate_test.rb +1 -1
  35. data/test/tilt_kramdown_test.rb +1 -1
  36. data/test/tilt_lesstemplate_test.less +1 -0
  37. data/test/tilt_lesstemplate_test.rb +19 -3
  38. data/test/tilt_liquidtemplate_test.rb +1 -1
  39. data/test/tilt_markaby_test.rb +1 -1
  40. data/test/tilt_markdown_test.rb +16 -5
  41. data/test/tilt_marukutemplate_test.rb +1 -1
  42. data/test/tilt_radiustemplate_test.rb +1 -1
  43. data/test/tilt_rdiscounttemplate_test.rb +1 -1
  44. data/test/tilt_rdoctemplate_test.rb +10 -3
  45. data/test/tilt_redcarpettemplate_test.rb +15 -3
  46. data/test/tilt_redclothtemplate_test.rb +13 -1
  47. data/test/tilt_sasstemplate_test.rb +1 -1
  48. data/test/tilt_stringtemplate_test.rb +1 -1
  49. data/test/tilt_template_test.rb +122 -0
  50. data/test/tilt_wikiclothtemplate_test.rb +1 -1
  51. data/test/tilt_yajltemplate_test.rb +13 -4
  52. data/tilt.gemspec +28 -17
  53. 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
@@ -137,7 +137,7 @@ begin
137
137
  end
138
138
  end
139
139
  rescue LoadError => boom
140
- warn "Tilt::ErubisTemplate (disabled)\n"
140
+ warn "Tilt::ErubisTemplate (disabled)"
141
141
  end
142
142
 
143
143
  __END__
@@ -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>
@@ -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)
@@ -131,7 +131,7 @@ begin
131
131
  end
132
132
  end
133
133
  rescue LoadError => boom
134
- warn "Tilt::HamlTemplate (disabled)\n"
134
+ warn "Tilt::HamlTemplate (disabled)"
135
135
  end
136
136
 
137
137
  __END__
@@ -38,5 +38,5 @@ begin
38
38
  end
39
39
  end
40
40
  rescue LoadError => boom
41
- warn "Tilt::KramdownTemplate (disabled)\n"
41
+ warn "Tilt::KramdownTemplate (disabled)"
42
42
  end
@@ -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
- assert_equal ".bg {\n background-color: #0000ff;\n}\n#main {\n background-color: #0000ff;\n}\n", template.render
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 { assert_equal ".bg {\n background-color: #0000ff;\n}\n#main {\n background-color: #0000ff;\n}\n", template.render }
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)\n"
41
+ warn "Tilt::LessTemplate (disabled)"
26
42
  end
@@ -74,5 +74,5 @@ begin
74
74
  end
75
75
 
76
76
  rescue LoadError => boom
77
- warn "Tilt::LiquidTemplate (disabled)\n"
77
+ warn "Tilt::LiquidTemplate (disabled)"
78
78
  end
@@ -84,5 +84,5 @@ begin
84
84
  end
85
85
 
86
86
  rescue LoadError => boom
87
- warn "Tilt::MarkabyTemplate (disabled)\n"
87
+ warn "Tilt::MarkabyTemplate (disabled)"
88
88
  end
@@ -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 – This is — a test …</p>", html
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\n"
169
+ warn "Markdown tests need Nokogiri"
159
170
  end
160
171
 
161
172
 
@@ -44,5 +44,5 @@ begin
44
44
  end
45
45
  end
46
46
  rescue LoadError => boom
47
- warn "Tilt::MarukuTemplate (disabled)\n"
47
+ warn "Tilt::MarukuTemplate (disabled)"
48
48
  end
@@ -70,6 +70,6 @@ begin
70
70
  end
71
71
 
72
72
  rescue LoadError => boom
73
- warn "Tilt::RadiusTemplate (disabled)\n"
73
+ warn "Tilt::RadiusTemplate (disabled)"
74
74
  end
75
75
 
@@ -51,5 +51,5 @@ begin
51
51
  end
52
52
  end
53
53
  rescue LoadError => boom
54
- warn "Tilt::RDiscountTemplate (disabled)\n"
54
+ warn "Tilt::RDiscountTemplate (disabled)"
55
55
  end
@@ -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
- assert_equal "<h1>Hello World!</h1>", template.render.strip
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 { assert_equal "<h1>Hello World!</h1>", template.render.strip }
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)\n"
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(:smart => true) { |t|
56
+ template = Tilt::RedcarpetTemplate.new(:smartypants => true) { |t|
57
+ "OKAY -- 'Smarty Pants'" }
58
+ assert_match /<p>OKAY &ndash; &#39;Smarty Pants&#39;<\/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 &[nm]dash; &lsquo;Smarty Pants&rsquo;<\/p>/,
65
+ assert_match /<p>OKAY &ndash; &#39;Smarty Pants&#39;<\/p>/,
54
66
  template.render
55
67
  end
56
68
  end
57
69
  rescue LoadError => boom
58
- warn "Tilt::RedcarpetTemplate (disabled)\n"
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)\n"
35
+ warn "Tilt::RedClothTemplate (disabled)"
24
36
  end
@@ -37,5 +37,5 @@ begin
37
37
  end
38
38
 
39
39
  rescue LoadError => boom
40
- warn "Tilt::SassTemplate (disabled)\n"
40
+ warn "Tilt::SassTemplate (disabled)"
41
41
  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