/vendor/bundle/ruby/1.9.1/gems/tilt-1.3.3/test/tilt_stringtemplate_test.rb
Ruby | 170 lines | 156 code | 14 blank | 0 comment | 5 complexity | 9cc27b3354f2bdb3749ff532cf95f725 MD5 | raw file
Possible License(s): GPL-2.0
- require 'contest'
- require 'tilt'
- class StringTemplateTest < Test::Unit::TestCase
- test "registered for '.str' files" do
- assert_equal Tilt::StringTemplate, Tilt['test.str']
- end
- test "loading and evaluating templates on #render" do
- template = Tilt::StringTemplate.new { |t| "Hello World!" }
- assert_equal "Hello World!", template.render
- end
- test "can be rendered more than once" do
- template = Tilt::StringTemplate.new { |t| "Hello World!" }
- 3.times { assert_equal "Hello World!", template.render }
- end
- test "passing locals" do
- template = Tilt::StringTemplate.new { 'Hey #{name}!' }
- assert_equal "Hey Joe!", template.render(Object.new, :name => 'Joe')
- end
- test "evaluating in an object scope" do
- template = Tilt::StringTemplate.new { 'Hey #{@name}!' }
- scope = Object.new
- scope.instance_variable_set :@name, 'Joe'
- assert_equal "Hey Joe!", template.render(scope)
- end
- test "passing a block for yield" do
- template = Tilt::StringTemplate.new { 'Hey #{yield}!' }
- assert_equal "Hey Joe!", template.render { 'Joe' }
- assert_equal "Hey Moe!", template.render { 'Moe' }
- end
- test "multiline templates" do
- template = Tilt::StringTemplate.new { "Hello\nWorld!\n" }
- assert_equal "Hello\nWorld!\n", template.render
- 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::StringTemplate.new('test.str', 11) { data }
- begin
- template.render
- fail 'should have raised an exception'
- rescue => boom
- assert_kind_of NameError, boom
- line = boom.backtrace.grep(/^test\.str:/).first
- assert line, "Backtrace didn't contain test.str"
- file, line, meth = line.split(":")
- 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::StringTemplate.new('test.str', 1) { data }
- begin
- template.render(nil, :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.str', file
- assert_equal '6', line
- end
- end
- end
- class CompiledStringTemplateTest < Test::Unit::TestCase
- def teardown
- GC.start
- end
- class Scope
- end
- test "compiling template source to a method" do
- template = Tilt::StringTemplate.new { |t| "Hello World!" }
- template.render(Scope.new)
- method = template.send(:compiled_method, [])
- assert_kind_of UnboundMethod, method
- end
- test "loading and evaluating templates on #render" do
- template = Tilt::StringTemplate.new { |t| "Hello World!" }
- assert_equal "Hello World!", template.render(Scope.new)
- end
- test "passing locals" do
- template = Tilt::StringTemplate.new { 'Hey #{name}!' }
- assert_equal "Hey Joe!", template.render(Scope.new, :name => 'Joe')
- assert_equal "Hey Moe!", template.render(Scope.new, :name => 'Moe')
- end
- test "evaluating in an object scope" do
- template = Tilt::StringTemplate.new { 'Hey #{@name}!' }
- scope = Scope.new
- scope.instance_variable_set :@name, 'Joe'
- assert_equal "Hey Joe!", template.render(scope)
- scope.instance_variable_set :@name, 'Moe'
- assert_equal "Hey Moe!", template.render(scope)
- end
- test "passing a block for yield" do
- template = Tilt::StringTemplate.new { 'Hey #{yield}!' }
- assert_equal "Hey Joe!", template.render(Scope.new) { 'Joe' }
- assert_equal "Hey Moe!", template.render(Scope.new) { 'Moe' }
- end
- test "multiline templates" do
- template = Tilt::StringTemplate.new { "Hello\nWorld!\n" }
- assert_equal "Hello\nWorld!\n", template.render(Scope.new)
- end
-
- test "template with '}'" do
- template = Tilt::StringTemplate.new { "Hello }" }
- assert_equal "Hello }", template.render
- 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::StringTemplate.new('test.str', 11) { data }
- begin
- template.render(Scope.new)
- fail 'should have raised an exception'
- rescue => boom
- assert_kind_of NameError, boom
- line = boom.backtrace.first
- line = boom.backtrace.grep(/^test\.str:/).first
- assert line, "Backtrace didn't contain test.str"
- file, line, meth = line.split(":")
- 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::StringTemplate.new('test.str') { 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.str', file
- assert_equal '6', line
- end
- end
- end
- __END__
- <html>
- <body>
- <h1>Hey #{name}!</h1>
- <p>#{fail}</p>
- </body>
- </html>