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,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