tilt 0.7 → 1.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.
data/test/contest.rb ADDED
@@ -0,0 +1,68 @@
1
+ require "test/unit"
2
+
3
+ # Test::Unit loads a default test if the suite is empty, whose purpose is to
4
+ # fail. Since having empty contexts is a common practice, we decided to
5
+ # overwrite TestSuite#empty? in order to allow them. Having a failure when no
6
+ # tests have been defined seems counter-intuitive.
7
+ class Test::Unit::TestSuite
8
+ def empty?
9
+ false
10
+ end
11
+ end
12
+
13
+ # Contest adds +teardown+, +test+ and +context+ as class methods, and the
14
+ # instance methods +setup+ and +teardown+ now iterate on the corresponding
15
+ # blocks. Note that all setup and teardown blocks must be defined with the
16
+ # block syntax. Adding setup or teardown instance methods defeats the purpose
17
+ # of this library.
18
+ class Test::Unit::TestCase
19
+ def self.setup(&block)
20
+ define_method :setup do
21
+ super(&block)
22
+ instance_eval(&block)
23
+ end
24
+ end
25
+
26
+ def self.teardown(&block)
27
+ define_method :teardown do
28
+ instance_eval(&block)
29
+ super(&block)
30
+ end
31
+ end
32
+
33
+ def self.context(name, &block)
34
+ subclass = Class.new(self)
35
+ remove_tests(subclass)
36
+ subclass.class_eval(&block) if block_given?
37
+ const_set(context_name(name), subclass)
38
+ end
39
+
40
+ def self.test(name, &block)
41
+ define_method(test_name(name), &block)
42
+ end
43
+
44
+ class << self
45
+ alias_method :should, :test
46
+ alias_method :describe, :context
47
+ end
48
+
49
+ private
50
+
51
+ def self.context_name(name)
52
+ "Test#{sanitize_name(name).gsub(/(^| )(\w)/) { $2.upcase }}".to_sym
53
+ end
54
+
55
+ def self.test_name(name)
56
+ "test_#{sanitize_name(name).gsub(/\s+/,'_')}".to_sym
57
+ end
58
+
59
+ def self.sanitize_name(name)
60
+ name.gsub(/\W+/, ' ').strip
61
+ end
62
+
63
+ def self.remove_tests(subclass)
64
+ subclass.public_instance_methods.grep(/^test_/).each do |meth|
65
+ subclass.send(:undef_method, meth.to_sym)
66
+ end
67
+ end
68
+ end
@@ -1,5 +1,6 @@
1
1
  require 'contest'
2
2
  require 'tilt'
3
+ require 'thread'
3
4
 
4
5
  class CompileSiteTest < Test::Unit::TestCase
5
6
  def setup
@@ -10,7 +11,7 @@ class CompileSiteTest < Test::Unit::TestCase
10
11
  def prepare
11
12
  end
12
13
 
13
- def template_source
14
+ def precompiled_template(locals)
14
15
  @data.inspect
15
16
  end
16
17
  end
@@ -22,7 +23,7 @@ class CompileSiteTest < Test::Unit::TestCase
22
23
  test "compiling template source to a method" do
23
24
  template = CompilingTemplate.new { |t| "Hello World!" }
24
25
  template.render(Scope.new)
25
- method_name = template.send(:compiled_method_name, [].hash)
26
+ method_name = template.send(:compiled_method_name, [])
26
27
  method_name = method_name.to_sym if Symbol === Kernel.methods.first
27
28
  assert Tilt::CompileSite.instance_methods.include?(method_name),
28
29
  "CompileSite.instance_methods.include?(#{method_name.inspect})"
@@ -32,7 +33,7 @@ class CompileSiteTest < Test::Unit::TestCase
32
33
 
33
34
  test 'garbage collecting compiled methods' do
34
35
  template = CompilingTemplate.new { '' }
35
- method_name = template.send(:compiled_method_name, [].hash)
36
+ method_name = template.send(:compiled_method_name, [])
36
37
  template.render(Scope.new)
37
38
  assert Scope.new.respond_to?(method_name)
38
39
  Tilt::Template.send(
@@ -46,7 +47,7 @@ class CompileSiteTest < Test::Unit::TestCase
46
47
  def self.create_and_destroy_template
47
48
  template = CompilingTemplate.new { 'Hello World' }
48
49
  template.render(Scope.new)
49
- method_name = template.send(:compiled_method_name, [].hash)
50
+ method_name = template.send(:compiled_method_name, [])
50
51
  method_name = method_name.to_sym if Symbol === Kernel.methods.first
51
52
  [template.object_id, method_name]
52
53
  end
@@ -59,4 +60,27 @@ class CompileSiteTest < Test::Unit::TestCase
59
60
  assert !Scope.new.respond_to?(finalized_method_name),
60
61
  "Scope.new.respond_to?(#{finalized_method_name.inspect})"
61
62
  end
63
+
64
+ # This test attempts to surface issues with compiling templates from
65
+ # multiple threads.
66
+ test "using compiled templates from multiple threads" do
67
+ template = CompilingTemplate.new { 'template' }
68
+ main_thread = Thread.current
69
+ 10.times do |i|
70
+ threads =
71
+ (1..50).map do |j|
72
+ Thread.new {
73
+ begin
74
+ locals = { "local#{i}" => 'value' }
75
+ res = template.render(self, locals)
76
+ thread_id = Thread.current.object_id
77
+ res = template.render(self, "local#{thread_id.to_s}" => 'value')
78
+ rescue => boom
79
+ main_thread.raise(boom)
80
+ end
81
+ }
82
+ end
83
+ threads.each { |t| t.join }
84
+ end
85
+ end
62
86
  end
@@ -29,6 +29,23 @@ class ERBTemplateTest < Test::Unit::TestCase
29
29
  assert_equal "Hey Joe!", template.render(scope)
30
30
  end
31
31
 
32
+ class MockOutputVariableScope
33
+ attr_accessor :exposed_buffer
34
+ end
35
+
36
+ test "exposing the buffer to the template by default" do
37
+ begin
38
+ Tilt::ERBTemplate.default_output_variable = '@_out_buf'
39
+ template = Tilt::ERBTemplate.new { '<% self.exposed_buffer = @_out_buf %>hey' }
40
+ scope = MockOutputVariableScope.new
41
+ template.render(scope)
42
+ assert_not_nil scope.exposed_buffer
43
+ assert_equal scope.exposed_buffer, 'hey'
44
+ ensure
45
+ Tilt::ERBTemplate.default_output_variable = '_erbout'
46
+ end
47
+ end
48
+
32
49
  test "passing a block for yield" do
33
50
  template = Tilt::ERBTemplate.new { 'Hey <%= yield %>!' }
34
51
  assert_equal "Hey Joe!", template.render { 'Joe' }
@@ -102,7 +119,7 @@ class CompiledERBTemplateTest < Test::Unit::TestCase
102
119
  test "compiling template source to a method" do
103
120
  template = Tilt::ERBTemplate.new { |t| "Hello World!" }
104
121
  template.render(Scope.new)
105
- method_name = template.send(:compiled_method_name, [].hash)
122
+ method_name = template.send(:compiled_method_name, [])
106
123
  method_name = method_name.to_sym if Symbol === Kernel.methods.first
107
124
  assert Tilt::CompileSite.instance_methods.include?(method_name),
108
125
  "CompileSite.instance_methods.include?(#{method_name.inspect})"
@@ -26,6 +26,23 @@ begin
26
26
  assert_equal "Hey Joe!", template.render(scope)
27
27
  end
28
28
 
29
+ class MockOutputVariableScope
30
+ attr_accessor :exposed_buffer
31
+ end
32
+
33
+ test "exposing the buffer to the template by default" do
34
+ begin
35
+ Tilt::ErubisTemplate.default_output_variable = '@_out_buf'
36
+ template = Tilt::ErubisTemplate.new { '<% self.exposed_buffer = @_out_buf %>hey' }
37
+ scope = MockOutputVariableScope.new
38
+ template.render(scope)
39
+ assert_not_nil scope.exposed_buffer
40
+ assert_equal scope.exposed_buffer, 'hey'
41
+ ensure
42
+ Tilt::ErubisTemplate.default_output_variable = '_erbout'
43
+ end
44
+ end
45
+
29
46
  test "passing a block for yield" do
30
47
  template = Tilt::ErubisTemplate.new { 'Hey <%= yield %>!' }
31
48
  assert_equal "Hey Joe!", template.render { 'Joe' }
@@ -77,6 +94,32 @@ begin
77
94
  assert_equal '2', template.render(scope)
78
95
  assert_equal 'original value', scope.instance_variable_get(:@buf)
79
96
  end
97
+
98
+ test "using Erubis::EscapedEruby subclass via :engine_class option" do
99
+ template = Tilt::ErubisTemplate.new(nil, :engine_class => ::Erubis::EscapedEruby) { |t| %(<%= "<p>Hello World!</p>" %>) }
100
+ assert_equal "&lt;p&gt;Hello World!&lt;/p&gt;", template.render
101
+ end
102
+
103
+ test "using :escape_html => true option" do
104
+ template = Tilt::ErubisTemplate.new(nil, :escape_html => true) { |t| %(<%= "<p>Hello World!</p>" %>) }
105
+ assert_equal "&lt;p&gt;Hello World!&lt;/p&gt;", template.render
106
+ end
107
+
108
+ test "using :escape_html => false option" do
109
+ template = Tilt::ErubisTemplate.new(nil, :escape_html => false) { |t| %(<%= "<p>Hello World!</p>" %>) }
110
+ assert_equal "<p>Hello World!</p>", template.render
111
+ end
112
+
113
+ test "erubis default does not escape html" do
114
+ template = Tilt::ErubisTemplate.new { |t| %(<%= "<p>Hello World!</p>" %>) }
115
+ assert_equal "<p>Hello World!</p>", template.render
116
+ end
117
+
118
+ test "does not modify options argument" do
119
+ options_hash = {:escape_html => true}
120
+ template = Tilt::ErubisTemplate.new(nil, options_hash) { |t| "Hello World!" }
121
+ assert_equal({:escape_html => true}, options_hash)
122
+ end
80
123
  end
81
124
  rescue LoadError => boom
82
125
  warn "Tilt::ErubisTemplate (disabled)\n"
@@ -71,6 +71,17 @@ begin
71
71
  include Tilt::CompileSite
72
72
  end
73
73
 
74
+ test "compiling template source to a method" do
75
+ template = Tilt::HamlTemplate.new { |t| "Hello World!" }
76
+ template.render(Scope.new)
77
+ method_name = template.send(:compiled_method_name, [])
78
+ method_name = method_name.to_sym if Symbol === Kernel.methods.first
79
+ assert Tilt::CompileSite.instance_methods.include?(method_name),
80
+ "CompileSite.instance_methods.include?(#{method_name.inspect})"
81
+ assert Scope.new.respond_to?(method_name),
82
+ "scope.respond_to?(#{method_name.inspect})"
83
+ end
84
+
74
85
  test "passing locals" do
75
86
  template = Tilt::HamlTemplate.new { "%p= 'Hey ' + name + '!'" }
76
87
  assert_equal "<p>Hey Joe!</p>\n", template.render(Scope.new, :name => 'Joe')
@@ -0,0 +1,66 @@
1
+ require 'contest'
2
+ require 'tilt'
3
+
4
+ begin
5
+ require 'radius'
6
+
7
+ class RadiusTemplateTest < Test::Unit::TestCase
8
+ test "registered for '.radius' files" do
9
+ assert_equal Tilt::RadiusTemplate, Tilt['test.radius']
10
+ end
11
+
12
+ test "preparing and evaluating templates on #render" do
13
+ template = Tilt::RadiusTemplate.new { |t| "Hello World!" }
14
+ assert_equal "Hello World!", template.render
15
+ end
16
+
17
+ test "passing locals" do
18
+ template = Tilt::RadiusTemplate.new { "Hey <r:name />!" }
19
+ assert_equal "Hey Joe!", template.render(nil, :name => 'Joe')
20
+ end
21
+
22
+ class ExampleRadiusScope
23
+ def beer; 'wet'; end
24
+ def whisky; 'wetter'; end
25
+ end
26
+
27
+ test "combining scope and locals when scope responds" do
28
+ template = Tilt::RadiusTemplate.new {
29
+ 'Beer is <r:beer /> but Whisky is <r:whisky />.'
30
+ }
31
+ scope = ExampleRadiusScope.new
32
+ assert_equal "Beer is wet but Whisky is wetter.", template.render(scope)
33
+ end
34
+
35
+ test "precedence when locals and scope define same variables" do
36
+ template = Tilt::RadiusTemplate.new {
37
+ 'Beer is <r:beer /> but Whisky is <r:whisky />.'
38
+ }
39
+ scope = ExampleRadiusScope.new
40
+ assert_equal "Beer is great but Whisky is greater.",
41
+ template.render(scope, :beer => 'great', :whisky => 'greater')
42
+ end
43
+
44
+ #test "handles local scope" do
45
+ # beer = 'wet'
46
+ # whisky = 'wetter'
47
+ #
48
+ # template = Tilt::RadiusTemplate.new {
49
+ # 'Beer is <r:beer /> but Whisky is <r:whisky />.'
50
+ # }
51
+ # assert_equal "Beer is wet but Whisky is wetter.", template.render(self)
52
+ #end
53
+
54
+ test "passing a block for yield" do
55
+ template = Tilt::RadiusTemplate.new {
56
+ 'Beer is <r:yield /> but Whisky is <r:yield />ter.'
57
+ }
58
+ assert_equal "Beer is wet but Whisky is wetter.",
59
+ template.render({}) { 'wet' }
60
+ end
61
+ end
62
+
63
+ rescue LoadError => boom
64
+ warn "Tilt::RadiusTemplate (disabled)\n"
65
+ end
66
+
@@ -11,8 +11,8 @@ begin
11
11
  end
12
12
 
13
13
  test "compiles and evaluates the template on #render" do
14
- template = Tilt::SassTemplate.new { |t| "#main\n :background-color #0000ff" }
15
- assert_equal "#main {\n background-color: #0000ff; }\n", template.render
14
+ template = Tilt::SassTemplate.new { |t| "#main\n :background-color #0000f1" }
15
+ assert_equal "#main {\n background-color: #0000f1; }\n", template.render
16
16
  end
17
17
  end
18
18
 
@@ -80,7 +80,7 @@ class CompiledStringTemplateTest < Test::Unit::TestCase
80
80
  test "compiling template source to a method" do
81
81
  template = Tilt::StringTemplate.new { |t| "Hello World!" }
82
82
  template.render(Scope.new)
83
- method_name = template.send(:compiled_method_name, [].hash)
83
+ method_name = template.send(:compiled_method_name, [])
84
84
  method_name = method_name.to_sym if Symbol === Kernel.methods.first
85
85
  assert Tilt::CompileSite.instance_methods.include?(method_name),
86
86
  "CompileSite.instance_methods.include?(#{method_name.inspect})"
@@ -110,7 +110,7 @@ class TiltTemplateTest < Test::Unit::TestCase
110
110
  end
111
111
 
112
112
  class SourceGeneratingMockTemplate < PreparingMockTemplate
113
- def template_source
113
+ def precompiled_template(locals)
114
114
  "foo = [] ; foo << %Q{#{data}} ; foo.join"
115
115
  end
116
116
  end
@@ -122,6 +122,8 @@ class TiltTemplateTest < Test::Unit::TestCase
122
122
  end
123
123
 
124
124
  class Person
125
+ CONSTANT = "Bob"
126
+
125
127
  attr_accessor :name
126
128
  def initialize(name)
127
129
  @name = name
@@ -138,4 +140,20 @@ class TiltTemplateTest < Test::Unit::TestCase
138
140
  inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{yield}!' }
139
141
  assert_equal "Hey Joe!", inst.render(Object.new){ 'Joe' }
140
142
  end
143
+
144
+ test "template which accesses a constant" do
145
+ inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{CONSTANT}!' }
146
+ assert_equal "Hey Bob!", inst.render(Person.new("Joe"))
147
+ end
148
+
149
+ class FastPerson < Person
150
+ include Tilt::CompileSite
151
+ end
152
+
153
+ # FAILING CONSTANT TEST. DISABLED FOR 1.0.
154
+
155
+ # test "template which accesses a constant with Tilt::CompileSite" do
156
+ # inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{CONSTANT}!' }
157
+ # assert_equal "Hey Bob!", inst.render(FastPerson.new("Joe"))
158
+ # end
141
159
  end
data/test/tilt_test.rb CHANGED
@@ -14,15 +14,23 @@ class TiltTest < Test::Unit::TestCase
14
14
  Tilt.register('mock', MockTemplate)
15
15
  end
16
16
 
17
+ test "an extension is registered if explicit handle is found" do
18
+ Tilt.register('mock', MockTemplate)
19
+ assert Tilt.registered?('mock')
20
+ end
21
+
17
22
  test "registering template classes by symbol file extension" do
18
23
  Tilt.register(:mock, MockTemplate)
19
24
  end
20
25
 
21
- test "looking up template classes by file extension" do
26
+ test "looking up template classes by exact file extension" do
22
27
  Tilt.register('mock', MockTemplate)
23
28
  impl = Tilt['mock']
24
29
  assert_equal MockTemplate, impl
30
+ end
25
31
 
32
+ test "looking up template classes by implicit file extension" do
33
+ Tilt.register('mock', MockTemplate)
26
34
  impl = Tilt['.mock']
27
35
  assert_equal MockTemplate, impl
28
36
  end
data/tilt.gemspec CHANGED
@@ -3,8 +3,8 @@ Gem::Specification.new do |s|
3
3
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
4
4
 
5
5
  s.name = 'tilt'
6
- s.version = '0.7'
7
- s.date = '2010-03-04'
6
+ s.version = '1.0'
7
+ s.date = '2010-06-15'
8
8
 
9
9
  s.description = "Generic interface to multiple Ruby template engines"
10
10
  s.summary = s.description
@@ -20,17 +20,16 @@ Gem::Specification.new do |s|
20
20
  TEMPLATES.md
21
21
  bin/tilt
22
22
  lib/tilt.rb
23
+ test/contest.rb
23
24
  test/tilt_buildertemplate_test.rb
24
25
  test/tilt_cache_test.rb
25
- test/tilt_coffeetemplate_test.rb
26
26
  test/tilt_compilesite_test.rb
27
27
  test/tilt_erbtemplate_test.rb
28
28
  test/tilt_erubistemplate_test.rb
29
29
  test/tilt_hamltemplate_test.rb
30
30
  test/tilt_lesstemplate_test.rb
31
31
  test/tilt_liquidtemplate_test.rb
32
- test/tilt_mustache_views/external.rb
33
- test/tilt_mustachetemplate_test.rb
32
+ test/tilt_radiustemplate_test.rb
34
33
  test/tilt_rdiscounttemplate_test.rb
35
34
  test/tilt_rdoctemplate_test.rb
36
35
  test/tilt_redclothtemplate_test.rb
@@ -42,16 +41,20 @@ Gem::Specification.new do |s|
42
41
  ]
43
42
  # = MANIFEST =
44
43
 
45
- s.test_files = s.files.select {|path| path =~ /^test\/spec_.*.rb/}
44
+ s.default_executable = 'tilt'
45
+ s.executables = ['tilt']
46
+
47
+ s.test_files = s.files.select {|path| path =~ /^test\/.*_test.rb/}
46
48
  s.add_development_dependency 'contest'
47
49
  s.add_development_dependency 'builder'
48
50
  s.add_development_dependency 'erubis'
49
- s.add_development_dependency 'haml'
51
+ s.add_development_dependency 'haml', '>= 2.2.11'
50
52
  s.add_development_dependency 'mustache'
51
53
  s.add_development_dependency 'rdiscount'
52
54
  s.add_development_dependency 'liquid'
53
55
  s.add_development_dependency 'less'
54
56
  s.add_development_dependency 'coffee-script'
57
+ s.add_development_dependency 'radius'
55
58
 
56
59
  s.extra_rdoc_files = %w[COPYING]
57
60
 
metadata CHANGED
@@ -3,9 +3,9 @@ name: tilt
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
+ - 1
6
7
  - 0
7
- - 7
8
- version: "0.7"
8
+ version: "1.0"
9
9
  platform: ruby
10
10
  authors:
11
11
  - Ryan Tomayko
@@ -13,8 +13,8 @@ autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
15
 
16
- date: 2010-03-04 00:00:00 -08:00
17
- default_executable:
16
+ date: 2010-06-15 00:00:00 -07:00
17
+ default_executable: tilt
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: contest
@@ -60,8 +60,10 @@ dependencies:
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
62
  segments:
63
- - 0
64
- version: "0"
63
+ - 2
64
+ - 2
65
+ - 11
66
+ version: 2.2.11
65
67
  type: :development
66
68
  version_requirements: *id004
67
69
  - !ruby/object:Gem::Dependency
@@ -124,10 +126,22 @@ dependencies:
124
126
  version: "0"
125
127
  type: :development
126
128
  version_requirements: *id009
129
+ - !ruby/object:Gem::Dependency
130
+ name: radius
131
+ prerelease: false
132
+ requirement: &id010 !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ segments:
137
+ - 0
138
+ version: "0"
139
+ type: :development
140
+ version_requirements: *id010
127
141
  description: Generic interface to multiple Ruby template engines
128
142
  email: r@tomayko.com
129
- executables: []
130
-
143
+ executables:
144
+ - tilt
131
145
  extensions: []
132
146
 
133
147
  extra_rdoc_files:
@@ -139,17 +153,16 @@ files:
139
153
  - TEMPLATES.md
140
154
  - bin/tilt
141
155
  - lib/tilt.rb
156
+ - test/contest.rb
142
157
  - test/tilt_buildertemplate_test.rb
143
158
  - test/tilt_cache_test.rb
144
- - test/tilt_coffeetemplate_test.rb
145
159
  - test/tilt_compilesite_test.rb
146
160
  - test/tilt_erbtemplate_test.rb
147
161
  - test/tilt_erubistemplate_test.rb
148
162
  - test/tilt_hamltemplate_test.rb
149
163
  - test/tilt_lesstemplate_test.rb
150
164
  - test/tilt_liquidtemplate_test.rb
151
- - test/tilt_mustache_views/external.rb
152
- - test/tilt_mustachetemplate_test.rb
165
+ - test/tilt_radiustemplate_test.rb
153
166
  - test/tilt_rdiscounttemplate_test.rb
154
167
  - test/tilt_rdoctemplate_test.rb
155
168
  - test/tilt_redclothtemplate_test.rb
@@ -193,5 +206,20 @@ rubygems_version: 1.3.6
193
206
  signing_key:
194
207
  specification_version: 2
195
208
  summary: Generic interface to multiple Ruby template engines
196
- test_files: []
197
-
209
+ test_files:
210
+ - test/tilt_buildertemplate_test.rb
211
+ - test/tilt_cache_test.rb
212
+ - test/tilt_compilesite_test.rb
213
+ - test/tilt_erbtemplate_test.rb
214
+ - test/tilt_erubistemplate_test.rb
215
+ - test/tilt_hamltemplate_test.rb
216
+ - test/tilt_lesstemplate_test.rb
217
+ - test/tilt_liquidtemplate_test.rb
218
+ - test/tilt_radiustemplate_test.rb
219
+ - test/tilt_rdiscounttemplate_test.rb
220
+ - test/tilt_rdoctemplate_test.rb
221
+ - test/tilt_redclothtemplate_test.rb
222
+ - test/tilt_sasstemplate_test.rb
223
+ - test/tilt_stringtemplate_test.rb
224
+ - test/tilt_template_test.rb
225
+ - test/tilt_test.rb
@@ -1,20 +0,0 @@
1
- require 'contest'
2
- require 'tilt'
3
-
4
- begin
5
- require 'coffee-script'
6
-
7
- class CoffeeTemplateTest < Test::Unit::TestCase
8
- test "is registered for '.coffee' files" do
9
- assert_equal Tilt::CoffeeTemplate, Tilt['test.coffee']
10
- end
11
-
12
- test "compiles and evaluates the template on #render" do
13
- template = Tilt::CoffeeTemplate.new { |t| "greeting: \"Hello CoffeeScript\"" }
14
- assert_equal "(function(){\n var greeting;\n greeting = \"Hello CoffeeScript\";\n})();", template.render
15
- end
16
- end
17
-
18
- rescue LoadError => boom
19
- warn "Tilt::CoffeeTemplate (disabled)\n"
20
- end
@@ -1,9 +0,0 @@
1
- require 'mustache'
2
-
3
- module Views
4
- class External < Mustache
5
- def hello
6
- "Stached"
7
- end
8
- end
9
- end
@@ -1,70 +0,0 @@
1
- require 'contest'
2
- require 'tilt'
3
-
4
- begin
5
- require 'mustache'
6
- raise LoadError, "mustache version must be > 0.2.2" if !Mustache.respond_to?(:compiled?)
7
-
8
- module Views
9
- class Foo < Mustache
10
- attr_reader :foo
11
- end
12
- end
13
-
14
- class MustacheTemplateTest < Test::Unit::TestCase
15
- test "registered for '.mustache' files" do
16
- assert_equal Tilt::MustacheTemplate, Tilt['test.mustache']
17
- end
18
-
19
- test "preparing and evaluating templates on #render" do
20
- template = Tilt::MustacheTemplate.new { |t| "Hello World!" }
21
- assert_equal "Hello World!", template.render
22
- end
23
-
24
- test "passing locals" do
25
- template = Tilt::MustacheTemplate.new { "<p>Hey {{name}}!</p>" }
26
- assert_equal "<p>Hey Joe!</p>", template.render(nil, :name => 'Joe')
27
- end
28
-
29
- test "passing a block for yield" do
30
- template = Tilt::MustacheTemplate.new { "<p>Hey {{yield}}!</p>" }
31
- assert_equal "<p>Hey Joe!</p>", template.render { 'Joe' }
32
- end
33
-
34
- test "locating views defined at the top-level" do
35
- template = Tilt::MustacheTemplate.new('foo.mustache') { "<p>Hey {{foo}}!</p>" }
36
- assert_equal Views::Foo, template.engine
37
- end
38
-
39
- module Bar
40
- module Views
41
- class Bizzle < Mustache
42
- end
43
- end
44
- end
45
-
46
- test "locating views defined in a custom namespace" do
47
- template = Tilt::MustacheTemplate.new('bizzle.mustache', :namespace => Bar) { "<p>Hello World!</p>" }
48
- assert_equal Bar::Views::Bizzle, template.engine
49
- assert_equal "<p>Hello World!</p>", template.render
50
- end
51
-
52
- test "locating views in files" do
53
- view_path = File.expand_path('../tilt_mustache_views', __FILE__)
54
- template = Tilt::MustacheTemplate.new('external.mustache', :view_path => view_path) { "<p>{{hello}}!</p>" }
55
- assert defined?(Views::External), "external.rb should have been required"
56
- assert_equal Views::External, template.engine
57
- assert_equal "<p>Stached!</p>", template.render
58
- end
59
-
60
- test "copying instance variables from scope object" do
61
- template = Tilt::MustacheTemplate.new('foo.mustache') { "<p>Hey {{foo}}!</p>" }
62
- scope = Object.new
63
- scope.instance_variable_set(:@foo, 'Jane!')
64
- assert_equal "<p>Hey Jane!!</p>", template.render(scope)
65
- end
66
- end
67
-
68
- rescue LoadError => boom
69
- warn "Tilt::MustacheTemplate (disabled)\n"
70
- end