tilt 1.4.1 → 2.0.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 (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