tilt 1.4.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +17 -0
  3. data/Gemfile +33 -26
  4. data/README.md +23 -49
  5. data/Rakefile +21 -30
  6. data/{TEMPLATES.md → docs/TEMPLATES.md} +11 -4
  7. data/docs/common.css +14 -0
  8. data/lib/tilt/asciidoc.rb +1 -8
  9. data/lib/tilt/bluecloth.rb +24 -0
  10. data/lib/tilt/builder.rb +1 -8
  11. data/lib/tilt/coffee.rb +1 -8
  12. data/lib/tilt/creole.rb +25 -0
  13. data/lib/tilt/csv.rb +7 -13
  14. data/lib/tilt/erb.rb +2 -55
  15. data/lib/tilt/erubis.rb +43 -0
  16. data/lib/tilt/haml.rb +1 -8
  17. data/lib/tilt/kramdown.rb +33 -0
  18. data/lib/tilt/less.rb +38 -0
  19. data/lib/tilt/liquid.rb +1 -8
  20. data/lib/tilt/mapping.rb +265 -0
  21. data/lib/tilt/markaby.rb +1 -8
  22. data/lib/tilt/maruku.rb +22 -0
  23. data/lib/tilt/nokogiri.rb +1 -8
  24. data/lib/tilt/radius.rb +1 -8
  25. data/lib/tilt/rdiscount.rb +39 -0
  26. data/lib/tilt/rdoc.rb +3 -10
  27. data/lib/tilt/redcarpet.rb +104 -0
  28. data/lib/tilt/{textile.rb → redcloth.rb} +1 -8
  29. data/lib/tilt/sass.rb +41 -0
  30. data/lib/tilt/template.rb +88 -93
  31. data/lib/tilt/wikicloth.rb +22 -0
  32. data/lib/tilt/yajl.rb +1 -8
  33. data/lib/tilt.rb +87 -154
  34. data/test/{contest.rb → test_helper.rb} +7 -11
  35. data/test/tilt_asciidoctor_test.rb +6 -6
  36. data/test/tilt_blueclothtemplate_test.rb +3 -15
  37. data/test/tilt_buildertemplate_test.rb +3 -3
  38. data/test/tilt_cache_test.rb +2 -2
  39. data/test/tilt_coffeescripttemplate_test.rb +8 -18
  40. data/test/tilt_compilesite_test.rb +2 -2
  41. data/test/tilt_creoletemplate_test.rb +3 -7
  42. data/test/tilt_csv_test.rb +5 -9
  43. data/test/tilt_erbtemplate_test.rb +7 -7
  44. data/test/tilt_erubistemplate_test.rb +7 -7
  45. data/test/tilt_etannitemplate_test.rb +4 -3
  46. data/test/tilt_hamltemplate_test.rb +4 -4
  47. data/test/tilt_kramdown_test.rb +5 -27
  48. data/test/tilt_lesstemplate_test.rb +3 -3
  49. data/test/tilt_liquidtemplate_test.rb +3 -3
  50. data/test/tilt_mapping_test.rb +229 -0
  51. data/test/tilt_markaby_test.rb +4 -4
  52. data/test/tilt_markdown_test.rb +23 -21
  53. data/test/tilt_marukutemplate_test.rb +9 -21
  54. data/test/tilt_metadata_test.rb +42 -0
  55. data/test/tilt_nokogiritemplate_test.rb +3 -3
  56. data/test/tilt_radiustemplate_test.rb +3 -3
  57. data/test/tilt_rdiscounttemplate_test.rb +7 -19
  58. data/test/tilt_rdoctemplate_test.rb +3 -5
  59. data/test/tilt_redcarpettemplate_test.rb +11 -23
  60. data/test/tilt_redclothtemplate_test.rb +3 -3
  61. data/test/tilt_sasstemplate_test.rb +4 -4
  62. data/test/tilt_stringtemplate_test.rb +4 -3
  63. data/test/tilt_template_test.rb +42 -49
  64. data/test/tilt_test.rb +10 -15
  65. data/test/tilt_wikiclothtemplate_test.rb +3 -3
  66. data/test/tilt_yajltemplate_test.rb +3 -3
  67. data/tilt.gemspec +19 -32
  68. metadata +26 -385
  69. data/lib/tilt/css.rb +0 -80
  70. data/lib/tilt/markdown.rb +0 -214
  71. data/lib/tilt/wiki.rb +0 -58
  72. data/test/tilt_fallback_test.rb +0 -122
@@ -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 &lt;b&gt;World&lt;/b&gt;</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::Unit::TestCase
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::Unit::TestCase
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
- assert_equal "<p>Hello “World'' – This is — a test …</p>", html
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::Unit::TestCase
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::Unit::TestCase
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::Unit::TestCase
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 'contest'
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
- mappings = Tilt.mappings[ext]
23
- kram_idx = mappings.index(Tilt::KramdownTemplate)
24
- maru_idx = mappings.index(Tilt::MarukuTemplate)
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='hello_world'>Hello World!</h1>", template.render
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='hello_world'>Hello World!</h1>", template.render }
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 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'nokogiri'
6
- class NokogiriTemplateTest < Test::Unit::TestCase
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 'contest'
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::Unit::TestCase
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 'contest'
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
- mappings = Tilt.mappings[ext]
23
- blue_idx = mappings.index(Tilt::BlueClothTemplate)
24
- rdis_idx = mappings.index(Tilt::RDiscountTemplate)
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 &mdash; &lsquo;Smarty Pants&rsquo;</p>\n",
31
+ assert_equal "<p>OKAY &ndash; &lsquo;Smarty Pants&rsquo;</p>\n",
44
32
  template.render
45
33
  end
46
34
 
@@ -1,11 +1,9 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'rdoc'
6
- require 'rdoc/markup'
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 'contest'
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
- mappings = Tilt.mappings[ext]
23
- blue_idx = mappings.index(Tilt::BlueClothTemplate)
24
- redc_idx = mappings.index(Tilt::RedcarpetTemplate)
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
- mappings = Tilt.mappings[ext]
33
- rdis_idx = mappings.index(Tilt::RDiscountTemplate)
34
- redc_idx = mappings.index(Tilt::RedcarpetTemplate)
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 &ndash; &#39;Smarty Pants&#39;<\/p>/,
46
+ assert_match /<p>OKAY &ndash; (&#39;|&lsquo;)Smarty Pants(&#39;|&rsquo;)<\/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 &ndash; &#39;Smarty Pants&#39;<\/p>/,
53
+ assert_match /<p>OKAY &ndash; (&#39;|&lsquo;)Smarty Pants(&#39;|&rsquo;)<\/p>/,
66
54
  template.render
67
55
  end
68
56
  end
@@ -1,10 +1,10 @@
1
- require 'contest'
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::Unit::TestCase
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 'contest'
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::Unit::TestCase
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::Unit::TestCase
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 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
+ require 'tilt/string'
3
4
 
4
- class StringTemplateTest < Test::Unit::TestCase
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::Unit::TestCase
77
+ class CompiledStringTemplateTest < Minitest::Test
77
78
  def teardown
78
79
  GC.start
79
80
  end
@@ -1,9 +1,10 @@
1
1
  # coding: utf-8
2
- require 'contest'
2
+ require 'test_helper'
3
3
  require 'tilt'
4
+ require 'tilt/template'
4
5
  require 'tempfile'
5
6
 
6
- class TiltTemplateTest < Test::Unit::TestCase
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
- assert_raise(ArgumentError) { Tilt::Template.new }
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
- assert_not_nil inst.eval_file
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
- assert !data.nil?
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
- assert_raise(NotImplementedError) { Tilt::Template.new { |template| "Hello World!" } }
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
- assert_raise(NotImplementedError) { inst.render }
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
- assert prepared?
119
- assert !scope.nil?
120
- assert !locals.nil?
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 = assert_raise(RuntimeError) { inst.render(Object.new, 'ANSWER' => 3) }
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 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
- class TiltTest < Test::Unit::TestCase
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', MockTemplate)
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', MockTemplate)
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, MockTemplate)
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', MockTemplate)
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', MockTemplate)
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', MockTemplate)
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', MockTemplate)
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', MockTemplate)
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