-
Notifications
You must be signed in to change notification settings - Fork 226
/
tilt_template_test.rb
136 lines (112 loc) · 3.74 KB
/
tilt_template_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
require 'contest'
require 'tilt'
class TiltTemplateTest < Test::Unit::TestCase
test "needs a file or block" do
assert_raise(ArgumentError) { Tilt::Template.new }
end
test "initializing with a file" do
inst = Tilt::Template.new('foo.erb')
assert_equal 'foo.erb', inst.file
end
test "initializing with a file and line" do
inst = Tilt::Template.new('foo.erb', 55)
assert_equal 'foo.erb', inst.file
assert_equal 55, inst.line
end
test "uses correct eval_file" do
inst = Tilt::Template.new('foo.erb', 55)
assert_equal 'foo.erb', inst.eval_file
end
test "uses a default filename for #eval_file when no file provided" do
inst = Tilt::Template.new { 'Hi' }
assert_not_nil inst.eval_file
assert !inst.eval_file.include?("\n")
end
test "calculating template's #basename" do
inst = Tilt::Template.new('/tmp/templates/foo.html.erb')
assert_equal 'foo.html.erb', inst.basename
end
test "calculating the template's #name" do
inst = Tilt::Template.new('/tmp/templates/foo.html.erb')
assert_equal 'foo', inst.name
end
test "initializing with a data loading block" do
Tilt::Template.new { |template| "Hello World!" }
end
class InitializingMockTemplate < Tilt::Template
@@initialized_count = 0
def self.initialized_count
@@initialized_count
end
def initialize_engine
@@initialized_count += 1
end
def compile!
end
end
test "one-time template engine initialization" do
assert_nil InitializingMockTemplate.engine_initialized
assert_equal 0, InitializingMockTemplate.initialized_count
InitializingMockTemplate.new { "Hello World!" }
assert InitializingMockTemplate.engine_initialized
assert_equal 1, InitializingMockTemplate.initialized_count
InitializingMockTemplate.new { "Hello World!" }
assert_equal 1, InitializingMockTemplate.initialized_count
end
class CompilingMockTemplate < Tilt::Template
include Test::Unit::Assertions
def compile!
assert !data.nil?
@compiled = true
end
def compiled? ; @compiled ; end
end
test "raises NotImplementedError when #compile! not defined" do
inst = Tilt::Template.new { |template| "Hello World!" }
assert_raise(NotImplementedError) { inst.render }
end
test "raises NotImplementedError when #evaluate or #template_source not defined" do
inst = CompilingMockTemplate.new { |t| "Hello World!" }
assert_raise(NotImplementedError) { inst.render }
assert inst.compiled?
end
class SimpleMockTemplate < CompilingMockTemplate
include Test::Unit::Assertions
def evaluate(scope, locals, &block)
assert compiled?
assert !scope.nil?
assert !locals.nil?
"<em>#{@data}</em>"
end
end
test "compiles and evaluates the template on #render" do
inst = SimpleMockTemplate.new { |t| "Hello World!" }
assert_equal "<em>Hello World!</em>", inst.render
assert inst.compiled?
end
class SourceGeneratingMockTemplate < CompilingMockTemplate
def template_source
"foo = [] ; foo << %Q{#{data}} ; foo.join"
end
end
test "template_source with locals" do
inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{name}!' }
assert_equal "Hey Joe!", inst.render(Object.new, :name => 'Joe')
assert inst.compiled?
end
class Person
attr_accessor :name
def initialize(name)
@name = name
end
end
test "template_source with an object scope" do
inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{@name}!' }
scope = Person.new('Joe')
assert_equal "Hey Joe!", inst.render(scope)
end
test "template_source with a block for yield" do
inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{yield}!' }
assert_equal "Hey Joe!", inst.render(Object.new){ 'Joe' }
end
end