Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
190 lines (159 sloc) 5.31 KB
# -*- coding: utf-8 -*-
require 'helper'
class Callable1
def call(exp)
exp
end
end
class Callable2
def call(exp)
exp
end
end
class MySpecialFilter
def initialize(opts = {})
end
def call(exp)
exp
end
end
class TestEngine < Temple::Engine
use(:Parser) do |input|
[:static, input]
end
use :MyFilter1, proc {|exp| exp }
use :MyFilter2, proc {|exp| exp }
use Temple::HTML::Pretty, pretty: true
filter :MultiFlattener
generator :ArrayBuffer
use(:BeforeBeforeLast) { MySpecialFilter }
use :BeforeLast, Callable1.new
use(:Last) { Callable2.new }
end
describe Temple::Engine do
it 'should build chain' do
TestEngine.chain.size.should.equal 9
TestEngine.chain[0].first.should.equal :Parser
TestEngine.chain[0].size.should.equal 2
TestEngine.chain[0].last.should.be.instance_of Proc
TestEngine.chain[1].first.should.equal :MyFilter1
TestEngine.chain[1].size.should.equal 2
TestEngine.chain[1].last.should.be.instance_of Proc
TestEngine.chain[2].first.should.equal :MyFilter2
TestEngine.chain[2].size.should.equal 2
TestEngine.chain[2].last.should.be.instance_of Proc
TestEngine.chain[3].first.should.equal :'Temple::HTML::Pretty'
TestEngine.chain[3].size.should.equal 2
TestEngine.chain[3].last.should.be.instance_of Proc
TestEngine.chain[4].first.should.equal :MultiFlattener
TestEngine.chain[4].size.should.equal 2
TestEngine.chain[4].last.should.be.instance_of Proc
TestEngine.chain[5].first.should.equal :ArrayBuffer
TestEngine.chain[5].size.should.equal 2
TestEngine.chain[5].last.should.be.instance_of Proc
TestEngine.chain[6].first.should.equal :BeforeBeforeLast
TestEngine.chain[6].size.should.equal 2
TestEngine.chain[6].last.should.be.instance_of Proc
TestEngine.chain[7].first.should.equal :BeforeLast
TestEngine.chain[7].size.should.equal 2
TestEngine.chain[7].last.should.be.instance_of Proc
TestEngine.chain[8].first.should.equal :Last
TestEngine.chain[8].size.should.equal 2
TestEngine.chain[8].last.should.be.instance_of Proc
end
it 'should instantiate chain' do
call_chain = TestEngine.new.send(:call_chain)
call_chain[0].should.be.instance_of Method
call_chain[1].should.be.instance_of Method
call_chain[2].should.be.instance_of Method
call_chain[3].should.be.instance_of Temple::HTML::Pretty
call_chain[4].should.be.instance_of Temple::Filters::MultiFlattener
call_chain[5].should.be.instance_of Temple::Generators::ArrayBuffer
call_chain[6].should.be.instance_of MySpecialFilter
call_chain[7].should.be.instance_of Callable1
call_chain[8].should.be.instance_of Callable2
end
it 'should have #append' do
engine = TestEngine.new
call_chain = engine.send(:call_chain)
call_chain.size.should.equal 9
engine.append :MyFilter3 do |exp|
exp
end
TestEngine.chain.size.should.equal 9
engine.chain.size.should.equal 10
engine.chain[9].first.should.equal :MyFilter3
engine.chain[9].size.should.equal 2
engine.chain[9].last.should.be.instance_of Proc
call_chain = engine.send(:call_chain)
call_chain.size.should.equal 10
call_chain[9].should.be.instance_of Method
end
it 'should have #prepend' do
engine = TestEngine.new
call_chain = engine.send(:call_chain)
call_chain.size.should.equal 9
engine.prepend :MyFilter0 do |exp|
exp
end
TestEngine.chain.size.should.equal 9
engine.chain.size.should.equal 10
engine.chain[0].first.should.equal :MyFilter0
engine.chain[0].size.should.equal 2
engine.chain[0].last.should.be.instance_of Proc
engine.chain[1].first.should.equal :Parser
call_chain = engine.send(:call_chain)
call_chain.size.should.equal 10
call_chain[0].should.be.instance_of Method
end
it 'should have #after' do
engine = TestEngine.new
engine.after :Parser, :MyFilter0 do |exp|
exp
end
TestEngine.chain.size.should.equal 9
engine.chain.size.should.equal 10
engine.chain[0].first.should.equal :Parser
engine.chain[1].first.should.equal :MyFilter0
engine.chain[2].first.should.equal :MyFilter1
end
it 'should have #before' do
engine = TestEngine.new
engine.before :MyFilter1, :MyFilter0 do |exp|
exp
end
TestEngine.chain.size.should.equal 9
engine.chain.size.should.equal 10
engine.chain[0].first.should.equal :Parser
engine.chain[1].first.should.equal :MyFilter0
engine.chain[2].first.should.equal :MyFilter1
end
it 'should have #remove' do
engine = TestEngine.new
engine.remove :MyFilter1
TestEngine.chain.size.should.equal 9
engine.chain.size.should.equal 8
engine.chain[0].first.should.equal :Parser
engine.chain[1].first.should.equal :MyFilter2
engine = TestEngine.new
engine.remove /Last/
engine.chain.size.should.equal 6
end
it 'should have #replace' do
engine = TestEngine.new
engine.replace :Parser, :MyParser do |exp|
exp
end
engine.chain.size.should.equal 9
engine.chain[0].first.should.equal :MyParser
end
it 'should work with inheritance' do
inherited_engine = Class.new(TestEngine)
inherited_engine.chain.size.should.equal 9
inherited_engine.append :MyFilter3 do |exp|
exp
end
inherited_engine.chain.size.should.equal 10
TestEngine.chain.size.should.equal 9
end
end
Jump to Line
Something went wrong with that request. Please try again.