test/tilt_erbtemplate_test.rb in tilt-0.6 vs test/tilt_erbtemplate_test.rb in tilt-0.7
- old
+ new
@@ -10,11 +10,11 @@
test "registered for '.rhtml' files" do
assert_equal Tilt::ERBTemplate, Tilt['test.rhtml']
end
- test "compiling and evaluating templates on #render" do
+ test "loading and evaluating templates on #render" do
template = Tilt::ERBTemplate.new { |t| "Hello World!" }
assert_equal "Hello World!", template.render
end
test "passing locals" do
@@ -75,11 +75,113 @@
template = Tilt.new('test.erb', 1, :trim => '-') { "\n<%= 1 + 1 -%>\n" }
assert_equal "\n2", template.render
end
test "shorthand whole line syntax trim mode" do
- template = Tilt.new('test.erb', 1, :trim => '%') { "\n% if true\nhello\n%end\n" }
+ template = Tilt.new('test.erb', :trim => '%') { "\n% if true\nhello\n%end\n" }
assert_equal "\nhello\n", template.render
+ end
+
+ test "using an instance variable as the outvar" do
+ template = Tilt::ERBTemplate.new(nil, :outvar => '@buf') { "<%= 1 + 1 %>" }
+ scope = Object.new
+ scope.instance_variable_set(:@buf, 'original value')
+ assert_equal '2', template.render(scope)
+ assert_equal 'original value', scope.instance_variable_get(:@buf)
+ end
+end
+
+class CompiledERBTemplateTest < Test::Unit::TestCase
+ def teardown
+ GC.start
+ end
+
+ class Scope
+ include Tilt::CompileSite
+ end
+
+ test "compiling template source to a method" do
+ template = Tilt::ERBTemplate.new { |t| "Hello World!" }
+ template.render(Scope.new)
+ method_name = template.send(:compiled_method_name, [].hash)
+ method_name = method_name.to_sym if Symbol === Kernel.methods.first
+ assert Tilt::CompileSite.instance_methods.include?(method_name),
+ "CompileSite.instance_methods.include?(#{method_name.inspect})"
+ assert Scope.new.respond_to?(method_name),
+ "scope.respond_to?(#{method_name.inspect})"
+ end
+
+ test "loading and evaluating templates on #render" do
+ template = Tilt::ERBTemplate.new { |t| "Hello World!" }
+ assert_equal "Hello World!", template.render(Scope.new)
+ assert_equal "Hello World!", template.render(Scope.new)
+ end
+
+ test "passing locals" do
+ template = Tilt::ERBTemplate.new { 'Hey <%= name %>!' }
+ assert_equal "Hey Joe!", template.render(Scope.new, :name => 'Joe')
+ end
+
+ test "evaluating in an object scope" do
+ template = Tilt::ERBTemplate.new { 'Hey <%= @name %>!' }
+ scope = Scope.new
+ scope.instance_variable_set :@name, 'Joe'
+ assert_equal "Hey Joe!", template.render(scope)
+ scope.instance_variable_set :@name, 'Jane'
+ assert_equal "Hey Jane!", template.render(scope)
+ end
+
+ test "passing a block for yield" do
+ template = Tilt::ERBTemplate.new { 'Hey <%= yield %>!' }
+ assert_equal "Hey Joe!", template.render(Scope.new) { 'Joe' }
+ assert_equal "Hey Jane!", template.render(Scope.new) { 'Jane' }
+ end
+
+ test "backtrace file and line reporting without locals" do
+ data = File.read(__FILE__).split("\n__END__\n").last
+ fail unless data[0] == ?<
+ template = Tilt::ERBTemplate.new('test.erb', 11) { data }
+ begin
+ template.render(Scope.new)
+ fail 'should have raised an exception'
+ rescue => boom
+ assert_kind_of NameError, boom
+ line = boom.backtrace.first
+ file, line, meth = line.split(":")
+ assert_equal 'test.erb', file
+ assert_equal '13', line
+ end
+ end
+
+ test "backtrace file and line reporting with locals" do
+ data = File.read(__FILE__).split("\n__END__\n").last
+ fail unless data[0] == ?<
+ template = Tilt::ERBTemplate.new('test.erb') { data }
+ begin
+ template.render(Scope.new, :name => 'Joe', :foo => 'bar')
+ fail 'should have raised an exception'
+ rescue => boom
+ assert_kind_of RuntimeError, boom
+ line = boom.backtrace.first
+ file, line, meth = line.split(":")
+ assert_equal 'test.erb', file
+ assert_equal '6', line
+ end
+ end
+
+ test "default non-stripping trim mode" do
+ template = Tilt.new('test.erb') { "\n<%= 1 + 1 %>\n" }
+ assert_equal "\n2\n", template.render(Scope.new)
+ end
+
+ test "stripping trim mode" do
+ template = Tilt.new('test.erb', :trim => '-') { "\n<%= 1 + 1 -%>\n" }
+ assert_equal "\n2", template.render(Scope.new)
+ end
+
+ test "shorthand whole line syntax trim mode" do
+ template = Tilt.new('test.erb', :trim => '%') { "\n% if true\nhello\n%end\n" }
+ assert_equal "\nhello\n", template.render(Scope.new)
end
end
__END__
<html>