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
|
require_relative 'test_helper'
describe 'tilt/pipeline' do
before do
@mapping = Tilt.default_mapping.dup
@pipeline_class = @mapping.register_pipeline('str.erb')
end
it "returns a template class" do
assert_equal Tilt::Pipeline, @pipeline_class.superclass
end
it "registers itself for the given extension" do
assert_equal @pipeline_class, @mapping['test.str.erb']
end
it "renders templates starting with final extension to inner extensions" do
template = @pipeline_class.new { |t| '#<%= \'{a = 1}\' %><%= \'#{a}\' %>' }
assert_equal "11", template.render
end
it "can be rendered more than once" do
template = @pipeline_class.new { |t| '<%= \'#{1}\' %>' }
3.times { assert_equal "1", template.render }
end
it "passing locals" do
template = @pipeline_class.new { |t| '<%= \'#{a}\' * a %>' }
assert_equal "333", template.render(Object.new, :a => 3)
end
it "evaluating in an object scope" do
template = @pipeline_class.new { |t| '<%= \'#{a}\' * a %>' }
o = Object.new
def o.a; 3 end
assert_equal "333", template.render(o)
end
it "passing a block for yield" do
template = @pipeline_class.new { |t| '<%= \'#{yield}\' * yield %>' }
assert_equal "333", template.render { 3 }
assert_equal "22", template.render { 2 }
end
end
describe 'tilt/pipeline (options)' do
before do
@mapping = Tilt.default_mapping.dup
end
it "supports :templates option for specifying templates to use in order" do
pipeline = @mapping.register_pipeline('setrrb', :templates=>['erb', 'str'])
template = pipeline.new { |t| '#<%= \'{a = 1}\' %><%= \'#{a}\' %>' }
assert_equal "11", template.render
end
it "supports :extra_exts option for specifying additional extensions to register" do
@mapping.register_pipeline('str.erb', :extra_exts=>['setrrb', 'asdfoa'])
['str.erb', 'setrrb', 'asdfoa'].each do |ext|
template = @mapping[ext].new { |t| '#<%= \'{a = 1}\' %><%= \'#{a}\' %>' }
assert_equal "11", template.render
end
end
it "supports per template class options" do
pipeline = @mapping.register_pipeline('str.erb', 'erb'=>{:outvar=>'@foo'})
template = pipeline.new { |t| '#<% @foo << \'{a = 1}\' %><%= \'#{a}\' %>' }
assert_equal "11", template.render
end
end
describe 'Tilt.register_pipeline' do
before do
@pipeline_class = Tilt.register_pipeline('str.erb')
end
after do
Tilt.default_mapping.unregister('str.erb')
end
it "registers itself for the given extension" do
assert_equal @pipeline_class, Tilt['test.str.erb']
end
end
|