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,10 +1,10 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'asciidoctor'
5
+ require 'tilt/asciidoc'
6
6
 
7
- class AsciidoctorTemplateTest < Test::Unit::TestCase
7
+ class AsciidoctorTemplateTest < Minitest::Test
8
8
  HTML5_OUTPUT = "<div class=\"sect1\"><h2 id=\"_hello_world\">Hello World!</h2><div class=\"sectionbody\"></div></div>"
9
9
  DOCBOOK_OUTPUT = "<section id=\"_hello_world\"><title>Hello World!</title></section>"
10
10
 
@@ -13,15 +13,15 @@ begin
13
13
  end
14
14
 
15
15
  test "registered for '.ad' files" do
16
- assert Tilt.mappings['ad'].include?(Tilt::AsciidoctorTemplate)
16
+ assert_equal Tilt::AsciidoctorTemplate, Tilt['ad']
17
17
  end
18
18
 
19
19
  test "registered for '.adoc' files" do
20
- assert Tilt.mappings['adoc'].include?(Tilt::AsciidoctorTemplate)
20
+ assert_equal Tilt::AsciidoctorTemplate, Tilt['adoc']
21
21
  end
22
22
 
23
23
  test "registered for '.asciidoc' files" do
24
- assert Tilt.mappings['asciidoc'].include?(Tilt::AsciidoctorTemplate)
24
+ assert_equal Tilt::AsciidoctorTemplate, Tilt['asciidoc']
25
25
  end
26
26
 
27
27
  test "preparing and evaluating html5 templates on #render" do
@@ -1,22 +1,10 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'bluecloth'
6
-
7
- class BlueClothTemplateTest < Test::Unit::TestCase
8
- test "registered for '.md' files" do
9
- assert Tilt.mappings['md'].include?(Tilt::BlueClothTemplate)
10
- end
11
-
12
- test "registered for '.mkd' files" do
13
- assert Tilt.mappings['mkd'].include?(Tilt::BlueClothTemplate)
14
- end
15
-
16
- test "registered for '.markdown' files" do
17
- assert Tilt.mappings['markdown'].include?(Tilt::BlueClothTemplate)
18
- end
5
+ require 'tilt/bluecloth'
19
6
 
7
+ class BlueClothTemplateTest < Minitest::Test
20
8
  test "preparing and evaluating templates on #render" do
21
9
  template = Tilt::BlueClothTemplate.new { |t| "# Hello World!" }
22
10
  assert_equal "<h1>Hello World!</h1>", template.render
@@ -1,9 +1,9 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'builder'
6
- class BuilderTemplateTest < Test::Unit::TestCase
5
+ require 'tilt/builder'
6
+ class BuilderTemplateTest < Minitest::Test
7
7
  test "registered for '.builder' files" do
8
8
  assert_equal Tilt::BuilderTemplate, Tilt['test.builder']
9
9
  assert_equal Tilt::BuilderTemplate, Tilt['test.xml.builder']
@@ -1,7 +1,7 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
- class TiltCacheTest < Test::Unit::TestCase
4
+ class TiltCacheTest < Minitest::Test
5
5
  setup { @cache = Tilt::Cache.new }
6
6
 
7
7
  test "caching with single simple argument to #fetch" do
@@ -1,20 +1,10 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'coffee_script'
5
+ require 'tilt/coffee'
6
6
 
7
- class CoffeeScriptTemplateTest < Test::Unit::TestCase
8
-
9
- unless method_defined?(:assert_not_match)
10
- # assert_not_match is missing on 1.8.7, which uses assert_no_match
11
- def assert_not_match(a, b)
12
- unless a.kind_of?(Regexp)
13
- a = Regexp.new(Regexp.escape(a))
14
- end
15
- assert_no_match(a,b)
16
- end
17
- end
7
+ class CoffeeScriptTemplateTest < Minitest::Test
18
8
 
19
9
  test "is registered for '.coffee' files" do
20
10
  assert_equal Tilt::CoffeeScriptTemplate, Tilt['test.coffee']
@@ -42,11 +32,11 @@ begin
42
32
  assert_match "puts(\"Hello \" + name);\n", template.render
43
33
 
44
34
  template = Tilt::CoffeeScriptTemplate.new(:bare => true) { str }
45
- assert_not_match "(function() {", template.render
35
+ refute_match "(function() {", template.render
46
36
  assert_equal "var name;\n\nname = \"Josh\";\n\nputs(\"Hello \" + name);\n", template.render
47
37
 
48
38
  template2 = Tilt::CoffeeScriptTemplate.new(:no_wrap => true) { str}
49
- assert_not_match "(function() {", template.render
39
+ refute_match "(function() {", template.render
50
40
  assert_equal "var name;\n\nname = \"Josh\";\n\nputs(\"Hello \" + name);\n", template.render
51
41
  end
52
42
 
@@ -69,13 +59,13 @@ begin
69
59
  test "overridden by :bare" do
70
60
  template = Tilt::CoffeeScriptTemplate.new(:bare => true) { |t| 'name = "Josh"; puts "Hello, #{name}"' }
71
61
  assert_match "puts(\"Hello, \" + name);", template.render
72
- assert_not_match "(function() {", template.render
62
+ refute_match "(function() {", template.render
73
63
  end
74
64
 
75
65
  test "overridden by :no_wrap" do
76
66
  template = Tilt::CoffeeScriptTemplate.new(:no_wrap => true) { |t| 'name = "Josh"; puts "Hello, #{name}"' }
77
67
  assert_match "puts(\"Hello, \" + name);", template.render
78
- assert_not_match "(function() {", template.render
68
+ refute_match "(function() {", template.render
79
69
  end
80
70
  end
81
71
 
@@ -92,7 +82,7 @@ begin
92
82
  test "no options" do
93
83
  template = Tilt::CoffeeScriptTemplate.new { |t| 'name = "Josh"; puts "Hello, #{name}"' }
94
84
  assert_match "puts(\"Hello, \" + name);", template.render
95
- assert_not_match "(function() {", template.render
85
+ refute_match "(function() {", template.render
96
86
  end
97
87
 
98
88
  test "overridden by :bare" do
@@ -1,8 +1,8 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
  require 'thread'
4
4
 
5
- class CompileSiteTest < Test::Unit::TestCase
5
+ class CompileSiteTest < Minitest::Test
6
6
  def setup
7
7
  GC.start
8
8
  end
@@ -1,18 +1,14 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'creole'
5
+ require 'tilt/creole'
6
6
 
7
- class CreoleTemplateTest < Test::Unit::TestCase
7
+ class CreoleTemplateTest < Minitest::Test
8
8
  test "is registered for '.creole' files" do
9
9
  assert_equal Tilt::CreoleTemplate, Tilt['test.creole']
10
10
  end
11
11
 
12
- test "registered for '.wiki' files" do
13
- assert Tilt.mappings['wiki'].include?(Tilt::CreoleTemplate)
14
- end
15
-
16
12
  test "compiles and evaluates the template on #render" do
17
13
  template = Tilt::CreoleTemplate.new { |t| "= Hello World!" }
18
14
  assert_equal "<h1>Hello World!</h1>", template.render
@@ -1,17 +1,13 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- if RUBY_VERSION >= '1.9.0'
6
- require 'csv'
7
- else
8
- require 'fastercsv'
9
- end
5
+ require 'tilt/csv'
10
6
 
11
- class CSVTemplateTest < Test::Unit::TestCase
7
+ class CSVTemplateTest < Minitest::Test
12
8
 
13
9
  test "registered for '.rcsv' files" do
14
- assert Tilt.mappings['rcsv'].include?(Tilt::CSVTemplate)
10
+ assert_equal Tilt::CSVTemplate, Tilt['rcsv']
15
11
  end
16
12
 
17
13
  test "compiles and evaluates the template on #render" do
@@ -66,4 +62,4 @@ raise NameError
66
62
 
67
63
  # rows
68
64
  csv << ['Frog', 2]
69
- csv << ['Cat', 5]
65
+ csv << ['Cat', 5]
@@ -1,16 +1,16 @@
1
1
  # coding: utf-8
2
- require 'contest'
2
+ require 'test_helper'
3
3
  require 'tilt'
4
- require 'erb'
4
+ require 'tilt/erb'
5
5
  require 'tempfile'
6
6
 
7
- class ERBTemplateTest < Test::Unit::TestCase
7
+ class ERBTemplateTest < Minitest::Test
8
8
  test "registered for '.erb' files" do
9
- assert Tilt.mappings['erb'].include?(Tilt::ERBTemplate)
9
+ assert_includes Tilt.lazy_map['erb'], ['Tilt::ERBTemplate', 'tilt/erb']
10
10
  end
11
11
 
12
12
  test "registered for '.rhtml' files" do
13
- assert Tilt.mappings['rhtml'].include?(Tilt::ERBTemplate)
13
+ assert_includes Tilt.lazy_map['rhtml'], ['Tilt::ERBTemplate', 'tilt/erb']
14
14
  end
15
15
 
16
16
  test "loading and evaluating templates on #render" do
@@ -45,7 +45,7 @@ class ERBTemplateTest < Test::Unit::TestCase
45
45
  template = Tilt::ERBTemplate.new { '<% self.exposed_buffer = @_out_buf %>hey' }
46
46
  scope = MockOutputVariableScope.new
47
47
  template.render(scope)
48
- assert_not_nil scope.exposed_buffer
48
+ refute_nil scope.exposed_buffer
49
49
  assert_equal scope.exposed_buffer, 'hey'
50
50
  ensure
51
51
  Tilt::ERBTemplate.default_output_variable = '_erbout'
@@ -118,7 +118,7 @@ class ERBTemplateTest < Test::Unit::TestCase
118
118
  end
119
119
  end
120
120
 
121
- class CompiledERBTemplateTest < Test::Unit::TestCase
121
+ class CompiledERBTemplateTest < Minitest::Test
122
122
  def teardown
123
123
  GC.start
124
124
  end
@@ -1,9 +1,9 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'erubis'
6
- class ErubisTemplateTest < Test::Unit::TestCase
5
+ require 'tilt/erubis'
6
+ class ErubisTemplateTest < Minitest::Test
7
7
  test "registered for '.erubis' files" do
8
8
  assert_equal Tilt::ErubisTemplate, Tilt['test.erubis']
9
9
  assert_equal Tilt::ErubisTemplate, Tilt['test.html.erubis']
@@ -11,9 +11,9 @@ begin
11
11
 
12
12
  test "registered above ERB" do
13
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)
14
+ lazy = Tilt.lazy_map[ext]
15
+ erubis_idx = lazy.index { |klass, file| klass == 'Tilt::ErubisTemplate' }
16
+ erb_idx = lazy.index { |klass, file| klass == 'Tilt::ERBTemplate' }
17
17
  assert erubis_idx < erb_idx,
18
18
  "#{erubis_idx} should be lower than #{erb_idx}"
19
19
  end
@@ -51,7 +51,7 @@ begin
51
51
  template = Tilt::ErubisTemplate.new { '<% self.exposed_buffer = @_out_buf %>hey' }
52
52
  scope = MockOutputVariableScope.new
53
53
  template.render(scope)
54
- assert_not_nil scope.exposed_buffer
54
+ refute_nil scope.exposed_buffer
55
55
  assert_equal scope.exposed_buffer, 'hey'
56
56
  ensure
57
57
  Tilt::ErubisTemplate.default_output_variable = '_erbout'
@@ -1,7 +1,8 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
+ require 'tilt/etanni'
3
4
 
4
- class EtanniTemplateTest < Test::Unit::TestCase
5
+ class EtanniTemplateTest < Minitest::Test
5
6
  test "registered for '.etn' files" do
6
7
  assert_equal Tilt::EtanniTemplate, Tilt['test.etn']
7
8
  end
@@ -77,7 +78,7 @@ class EtanniTemplateTest < Test::Unit::TestCase
77
78
  end
78
79
 
79
80
 
80
- class CompiledEtanniTemplateTest < Test::Unit::TestCase
81
+ class CompiledEtanniTemplateTest < Minitest::Test
81
82
  def teardown
82
83
  GC.start
83
84
  end
@@ -1,13 +1,13 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
5
  class ::MockError < NameError
6
6
  end
7
7
 
8
- require 'haml'
8
+ require 'tilt/haml'
9
9
 
10
- class HamlTemplateTest < Test::Unit::TestCase
10
+ class HamlTemplateTest < Minitest::Test
11
11
  test "registered for '.haml' files" do
12
12
  assert_equal Tilt::HamlTemplate, Tilt['test.haml']
13
13
  end
@@ -71,7 +71,7 @@ begin
71
71
  end
72
72
  end
73
73
 
74
- class CompiledHamlTemplateTest < Test::Unit::TestCase
74
+ class CompiledHamlTemplateTest < Minitest::Test
75
75
  class Scope
76
76
  end
77
77
 
@@ -1,40 +1,18 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
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
5
+ require 'tilt/kramdown'
29
6
 
7
+ class KramdownTemplateTest < Minitest::Test
30
8
  test "preparing and evaluating templates on #render" do
31
9
  template = Tilt::KramdownTemplate.new { |t| "# Hello World!" }
32
- assert_equal "<h1 id='hello_world'>Hello World!</h1>", template.render
10
+ assert_equal '<h1 id="hello-world">Hello World!</h1>', template.render.strip
33
11
  end
34
12
 
35
13
  test "can be rendered more than once" do
36
14
  template = Tilt::KramdownTemplate.new { |t| "# Hello World!" }
37
- 3.times { assert_equal "<h1 id='hello_world'>Hello World!</h1>", template.render }
15
+ 3.times { assert_equal '<h1 id="hello-world">Hello World!</h1>', template.render.strip }
38
16
  end
39
17
  end
40
18
  rescue LoadError => boom
@@ -1,11 +1,11 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
5
  require 'pathname'
6
- require 'less'
6
+ require 'tilt/less'
7
7
 
8
- class LessTemplateTest < Test::Unit::TestCase
8
+ class LessTemplateTest < Minitest::Test
9
9
  def assert_similar(a, b)
10
10
  assert_equal a.gsub(/\s+/m, ' '), b.gsub(/\s+/m, ' ')
11
11
  end
@@ -1,10 +1,10 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'liquid'
5
+ require 'tilt/liquid'
6
6
 
7
- class LiquidTemplateTest < Test::Unit::TestCase
7
+ class LiquidTemplateTest < Minitest::Test
8
8
  test "registered for '.liquid' files" do
9
9
  assert_equal Tilt::LiquidTemplate, Tilt['test.liquid']
10
10
  end
@@ -0,0 +1,229 @@
1
+ require 'test_helper'
2
+ require 'tilt'
3
+ require 'tilt/mapping'
4
+
5
+ module Tilt
6
+
7
+ class MappingTest < Minitest::Test
8
+ class Stub
9
+ end
10
+
11
+ class Stub2
12
+ end
13
+
14
+ setup do
15
+ @mapping = Mapping.new
16
+ end
17
+
18
+ test "registered?" do
19
+ @mapping.register(Stub, 'foo', 'bar')
20
+ assert @mapping.registered?('foo')
21
+ assert @mapping.registered?('bar')
22
+ refute @mapping.registered?('baz')
23
+ end
24
+
25
+ test "lookups on registered" do
26
+ @mapping.register(Stub, 'foo', 'bar')
27
+ assert_equal Stub, @mapping['foo']
28
+ assert_equal Stub, @mapping['bar']
29
+ assert_equal Stub, @mapping['hello.foo']
30
+ assert_nil @mapping['foo.baz']
31
+ end
32
+
33
+ test "can be dup'd" do
34
+ @mapping.register(Stub, 'foo')
35
+ other = @mapping.dup
36
+ assert other.registered?('foo')
37
+
38
+ # @mapping doesn't leak to other
39
+ @mapping.register(Stub, 'bar')
40
+ refute other.registered?('bar')
41
+
42
+ # other doesn't leak to @mapping
43
+ other.register(Stub, 'baz')
44
+ refute @mapping.registered?('baz')
45
+ end
46
+
47
+ test "#extensions_for" do
48
+ @mapping.register(Stub, 'foo', 'bar')
49
+ assert_equal ['foo', 'bar'].sort, @mapping.extensions_for(Stub).sort
50
+ end
51
+
52
+ test "supports old-style #register" do
53
+ @mapping.register('foo', Stub)
54
+ assert_equal Stub, @mapping['foo']
55
+ end
56
+
57
+ context "lazy with one template class" do
58
+ setup do
59
+ @mapping.register_lazy('MyTemplate', 'my_template', 'mt')
60
+ end
61
+
62
+ teardown do
63
+ Object.send :remove_const, :MyTemplate if defined? ::MyTemplate
64
+ end
65
+
66
+ test "registered?" do
67
+ assert @mapping.registered?('mt')
68
+ end
69
+
70
+ test "#extensions_for" do
71
+ assert_equal ['mt'], @mapping.extensions_for('MyTemplate')
72
+ end
73
+
74
+ test "basic lookup" do
75
+ req = proc do |file|
76
+ assert_equal 'my_template', file
77
+ class ::MyTemplate; end
78
+ true
79
+ end
80
+
81
+ @mapping.stub :require, req do
82
+ klass = @mapping['hello.mt']
83
+ assert_equal ::MyTemplate, klass
84
+ end
85
+ end
86
+
87
+ test "doesn't require when template class is present" do
88
+ class ::MyTemplate; end
89
+
90
+ req = proc do |file|
91
+ flunk "#require shouldn't be called"
92
+ end
93
+
94
+ @mapping.stub :require, req do
95
+ klass = @mapping['hello.mt']
96
+ assert_equal ::MyTemplate, klass
97
+ end
98
+ end
99
+
100
+ test "raises NameError when the class name is defined" do
101
+ req = proc do |file|
102
+ # do nothing
103
+ end
104
+
105
+ @mapping.stub :require, req do
106
+ assert_raises(NameError) do
107
+ @mapping['hello.mt']
108
+ end
109
+ end
110
+ end
111
+
112
+ test "warns when there's multiple threads" do
113
+ Thread.new do
114
+ req = proc do |file|
115
+ class ::MyTemplate; end
116
+ end
117
+
118
+ @mapping.stub :require, req do
119
+ assert_output '', /autoloading 'my_template'/ do
120
+ @mapping['hello.mt']
121
+ end
122
+ end
123
+ end.join
124
+ end
125
+ end
126
+
127
+ context "lazy with two template classes" do
128
+ setup do
129
+ @mapping.register_lazy('MyTemplate1', 'my_template1', 'mt')
130
+ @mapping.register_lazy('MyTemplate2', 'my_template2', 'mt')
131
+ end
132
+
133
+ teardown do
134
+ Object.send :remove_const, :MyTemplate1 if defined? ::MyTemplate1
135
+ Object.send :remove_const, :MyTemplate2 if defined? ::MyTemplate2
136
+ end
137
+
138
+ test "registered?" do
139
+ assert @mapping.registered?('mt')
140
+ end
141
+
142
+ test "only attempt to load the last template" do
143
+ req = proc do |file|
144
+ assert_equal 'my_template2', file
145
+ class ::MyTemplate2; end
146
+ true
147
+ end
148
+
149
+ @mapping.stub :require, req do
150
+ klass = @mapping['hello.mt']
151
+ assert_equal ::MyTemplate2, klass
152
+ end
153
+ end
154
+
155
+ test "uses the first template if it's present" do
156
+ class ::MyTemplate1; end
157
+
158
+ req = proc do |file|
159
+ flunk
160
+ end
161
+
162
+ @mapping.stub :require, req do
163
+ klass = @mapping['hello.mt']
164
+ assert_equal ::MyTemplate1, klass
165
+ end
166
+ end
167
+
168
+ test "falls back when LoadError is thrown" do
169
+ req = proc do |file|
170
+ raise LoadError unless file == 'my_template1'
171
+ class ::MyTemplate1; end
172
+ true
173
+ end
174
+
175
+ @mapping.stub :require, req do
176
+ klass = @mapping['hello.mt']
177
+ assert_equal ::MyTemplate1, klass
178
+ end
179
+ end
180
+
181
+ test "raises the first LoadError when everything fails" do
182
+ req = proc do |file|
183
+ raise LoadError, file
184
+ end
185
+
186
+ @mapping.stub :require, req do
187
+ err = assert_raises(LoadError) do
188
+ klass = @mapping['hello.mt']
189
+ end
190
+
191
+ assert_equal 'my_template2', err.message
192
+ end
193
+ end
194
+
195
+ test "handles autoloaded constants" do
196
+ Object.autoload :MyTemplate2, 'my_template2'
197
+ class ::MyTemplate1; end
198
+
199
+ assert_equal MyTemplate1, @mapping['hello.mt']
200
+ end
201
+ end
202
+
203
+ test "raises NameError on invalid class name" do
204
+ @mapping.register_lazy '#foo', 'my_template', 'mt'
205
+
206
+ req = proc do |file|
207
+ # do nothing
208
+ end
209
+
210
+ @mapping.stub :require, req do
211
+ assert_raises(NameError) do
212
+ @mapping['hello.mt']
213
+ end
214
+ end
215
+ end
216
+
217
+ context "#templates_for" do
218
+ setup do
219
+ @mapping.register Stub, 'a'
220
+ @mapping.register Stub2, 'b'
221
+ end
222
+
223
+ test "handles multiple engines" do
224
+ assert_equal [Stub2, Stub], @mapping.templates_for('hello/world.a.b')
225
+ end
226
+ end
227
+ end
228
+ end
229
+
@@ -1,10 +1,10 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'markaby'
5
+ require 'tilt/markaby'
6
6
 
7
- class MarkabyTiltTest < Test::Unit::TestCase
7
+ class MarkabyTiltTest < Minitest::Test
8
8
  def setup
9
9
  @block = lambda do |t|
10
10
  File.read(File.dirname(__FILE__) + "/#{t.file}")
@@ -85,4 +85,4 @@ begin
85
85
 
86
86
  rescue LoadError => boom
87
87
  warn "Tilt::MarkabyTemplate (disabled)"
88
- end
88
+ end