-
Notifications
You must be signed in to change notification settings - Fork 226
/
tilt_buildertemplate_test.rb
122 lines (108 loc) · 4.16 KB
/
tilt_buildertemplate_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
# coding: utf-8
require 'contest'
require 'tilt'
begin
require 'builder'
class BuilderTemplateTest < Test::Unit::TestCase
test "registered for '.builder' files" do
assert_equal Tilt::BuilderTemplate, Tilt['test.builder']
assert_equal Tilt::BuilderTemplate, Tilt['test.xml.builder']
end
test "preparing and evaluating the template on #render" do
template = Tilt::BuilderTemplate.new { |t| "xml.em 'Hello World!'" }
assert_equal "<em>Hello World!</em>\n", template.render
end
test "can be rendered more than once" do
template = Tilt::BuilderTemplate.new { |t| "xml.em 'Hello World!'" }
3.times { assert_equal "<em>Hello World!</em>\n", template.render }
end
test "passing locals" do
template = Tilt::BuilderTemplate.new { "xml.em('Hey ' + name + '!')" }
assert_equal "<em>Hey Joe!</em>\n", template.render(Object.new, :name => 'Joe')
end
test "evaluating in an object scope" do
template = Tilt::BuilderTemplate.new { "xml.em('Hey ' + @name + '!')" }
scope = Object.new
scope.instance_variable_set :@name, 'Joe'
assert_equal "<em>Hey Joe!</em>\n", template.render(scope)
end
test "passing a block for yield" do
template = Tilt::BuilderTemplate.new { "xml.em('Hey ' + yield + '!')" }
3.times { assert_equal "<em>Hey Joe!</em>\n", template.render { 'Joe' }}
end
test "block style templates" do
template =
Tilt::BuilderTemplate.new do |t|
lambda { |xml| xml.em('Hey Joe!') }
end
assert_equal "<em>Hey Joe!</em>\n", template.render
end
test "allows nesting raw XML" do
subtemplate = Tilt::BuilderTemplate.new { "xml.em 'Hello World!'" }
template = Tilt::BuilderTemplate.new { "xml.strong { xml << yield }" }
3.times do
options = { :xml => Builder::XmlMarkup.new }
assert_equal "<strong>\n<em>Hello World!</em>\n</strong>\n",
template.render(options) { subtemplate.render(options) }
end
end
##
# Encodings
if defined?(Encoding) && Encoding.respond_to?(:default_internal)
original_encoding = Encoding.default_external
setup do
Encoding.default_external = 'utf-8'
Encoding.default_internal = nil
end
teardown do
Encoding.default_external = original_encoding
Encoding.default_internal = nil
end
def tempfile(name='template')
f = Tempfile.open(name)
f.sync = true
yield f
ensure
f.close rescue nil
f.delete
end
test "reading templates using default external encoding" do
Encoding.default_external = 'Shift_JIS'
tempfile do |f|
f.puts("xml.em 'ふが' + @hoge".encode('Shift_JIS'))
template = Tilt::BuilderTemplate.new(f.path)
assert_equal 'Shift_JIS', template.data.encoding.to_s
@hoge = "ほげ".encode('Shift_JIS')
assert_equal 'UTF-8', template.render(self).encoding.to_s
end
end
test "reading templates using :default_encoding option override" do
Encoding.default_external = 'Big5'
tempfile do |f|
f.puts("xml.em 'ふが' + @hoge".encode('Shift_JIS'))
template = Tilt::BuilderTemplate.new(f.path, :default_encoding => 'Shift_JIS')
assert_equal 'Shift_JIS', template.data.encoding.to_s
@hoge = "ほげ".encode('Shift_JIS')
assert_equal 'UTF-8', template.render(self).encoding.to_s
end
end
test "reading template with magic encoding comment" do
Encoding.default_external = 'Big5'
tempfile do |f|
f.puts("# coding: Shift_JIS".encode('Shift_JIS'))
f.puts("xml.em 'ふが' + @hoge".encode('Shift_JIS'))
# require 'ruby-debug'
# debugger
template = Tilt::BuilderTemplate.new(f.path)
assert_equal 'Shift_JIS', template.data.encoding.to_s
@hoge = "ほげ".encode('Shift_JIS')
output = template.render(self)
assert_equal 'UTF-8', output.encoding.to_s
assert_equal "<em>ふがほげ</em>\n", output
end
end
end
end
rescue LoadError
warn "Tilt::BuilderTemplate (disabled)"
end